Issue Details (XML | Word | Printable)

Key: JDO-397
Type: Bug Bug
Status: Resolved Resolved
Resolution: Fixed
Priority: Major Major
Assignee: Craig Russell
Reporter: Ilan Kirsh
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
JDO

Locale instances are shared by different PMs (when in use as FCO)

Created: 19/Jul/06 09:40 AM   Updated: 12/Aug/07 02:43 AM
Return to search
Component/s: specification, tck2
Affects Version/s: JDO 2 final
Fix Version/s: JDO 2 maintenance release 1

Time Tracking:
Not Specified

Resolution Date: 12/Aug/07 02:43 AM


 Description  « Hide
Tests in org.apache.jdo.tck.models.fieldtypes are using fields of Locale that are defined as FCO. The definition is only a hint to the implementation but when a FCO is actually used, the same JVM static Locale instances are persisted using different PersistenceManagers and tests fail.

The solution:

In org.apache.jdo.tck.models.fieldtypes.TestUtil lines 142-148:
                  case(5):
                      vec.add(0, Locale.CHINA.clone());
                      vec.add(1, Locale.FRANCE.clone());
                      vec.add(2, Locale.GERMANY.clone());
                      vec.add(3, Locale.JAPAN.clone());
                      vec.add(4, Locale.ITALY.clone());
                      break;
similar to cloning strings few lines above:
                  case(3):
                      vec.add(0, new String("Hello"));
                      vec.add(1, new String("Welcome"));
                      vec.add(2, new String("To The"));
                      vec.add(3, new String("Beautiful"));
                      vec.add(4, new String("World"));
                      break;

And also in org.apache.jdo.tck.pc.fieldtypes.AllTypes:

    public static final Locale[] Locale_values = {
        (Locale)Locale.US.clone(),
        (Locale)Locale.UK.clone(),
        (Locale)Locale.FRANCE.clone(),
        (Locale)Locale.GERMANY.clone(),
        (Locale)Locale.CANADA.clone(),
        (Locale)Locale.JAPAN.clone(),
        (Locale)Locale.ITALY.clone(),
        (Locale)Locale.CHINA.clone(),
        (Locale)Locale.KOREA.clone(),
        (Locale)Locale.TAIWAN.clone()
    };

similar to cloning strings few lines above:

    public static final String[] String_values = {
        new String(""), new String("hello world"),
        new String("JDO has a very nice persistence API"), new String("JDO"),
        new String("Java"), new String("abcde"),
        new String("abcdef"), new String("JDO is a breeze to use"),
        new String("Java"), new String("Long-live JDO")
    };


 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Craig Russell added a comment - 29/Jul/06 08:02 PM
Need to resolve these issues for maintenance release 1.

Craig Russell added a comment - 11/Dec/06 03:22 AM
The specification needs to be updated to resolve this issue.

Craig Russell added a comment - 14/Mar/07 08:44 PM
There is a corresponding spec change that says regardless of the metadata, immutable types like Locale, Integer, String, etc. need to be sharable among FCOs.

Michelle Caisse added a comment - 17/May/07 10:22 PM
Fixed with revision: 539146

Michelle Caisse added a comment - 18/May/07 11:40 PM
Undid previous commit. The spec will be changed to resolve this issue.

Craig Russell added a comment - 12/Aug/07 02:43 AM
The 2.1 specification now states:

Portable JDO applications must not depend on SCO or FCO uniquing behavior, nor on the storage
mechanism in the datastore. Portable applications may use the same instance of these classes as field
values in any persistence-capable class instance.

This should resolve this issue.