Javadogs,

An issue has been raised [1] with regard to storage of instances of immutable system object classes, e.g. Integer, String, Locale. The specification calls for users of the API to not depend on whether these instances are stored as FCO or SCO.

The intent of the specification is that applications should not depend on whether the instances are stored by themselves as persistent instances or stored as embedded within the domain class instances. Furthermore, the application should not depend on FCO behavior: uniquing of instances in the same PersistenceManager for the same instance. Finally, the application should not depend on guaranteeing SCO behavior: copying the instance upon commit and guaranteeing a distinct instance in memory upon reinstantiation.

The rationale of this wording was specifically to allow an implementation of JDO to either store instances embedded in the "containing" domain class instance or as a nullable reference to a persistence-capable System class in the datastore, as is done by some object databases.

The intent was not to impose restrictions on the application's use of the identical instance as the value of multiple fields of domain classes. A literal interpretation of this part of the specification would require users to guarantee that the same instance of any of the classes was never contained in instances managed by multiple PersistenceManagers. The effect of this interpretation is to require cloning for each instance of Integer, String, Locale, etc. used in domain classes. 

I believe that this interpretation should be disallowed by the specification, as it imposes a great burden on users. I would like the Expert Group to discuss this issue and straw proposal.

<spec 6.4.3>
Immutable Object Class types 
JDO implementations must support fields that reference instances of immutable object 
classes, and may choose to support these instances as SCOs or FCOs: 
•package java.lang: Boolean, Character, Byte, Short, Integer, Long, 
Float, Double, and String; 
•package java.util: Locale, Currency. 
•package java.math: BigDecimal, BigInteger. 
Portable JDO applications must not depend on whether instances of these classes are treat- 
ed as SCOs or FCOs. 
</spec 6.4.3>

<proposed 6.4.3>
Immutable Object Class types 
JDO implementations must support fields that reference instances of immutable object 
classes, and may choose to support these instances as SCOs or FCOs: 
•package java.lang: Boolean, Character, Byte, Short, Integer, Long, 
Float, Double, and String; 
•package java.util: Locale, Currency. 
•package java.math: BigDecimal, BigInteger. 
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.
</proposed 6.4.3>


Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
P.S. A good JDO? O, Gasp!

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to