openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Pinaki Poddar (JIRA)" <j...@apache.org>
Subject [jira] Created: (OPENJPA-151) Added field in enhanced vesrion of a class is not serialized. Hence the change in detached+serialized instances is not registered under certain conditions.
Date Thu, 15 Feb 2007 19:27:05 GMT
Added field in enhanced vesrion of a class is not serialized. Hence the change in detached+serialized
instances is not registered under certain conditions.  
-------------------------------------------------------------------------------------------------------------------------------------------------------------

                 Key: OPENJPA-151
                 URL: https://issues.apache.org/jira/browse/OPENJPA-151
             Project: OpenJPA
          Issue Type: Improvement
          Components: kernel
            Reporter: Pinaki Poddar
         Assigned To: Pinaki Poddar


Enhancement adds a transient byte member field pcFlags to the class. This field is originally
used to optimize field access/mutation i.e. to short-circuit mediation via StateManager under
certain conditions (e.g. when the field is part of the default fetch group). The field is
transient, perhaps, to maintain serialization compatibility. However, later changes such as
DetachedStateManager and improved attach strategies have made the usage of these flag redundant.


This issue is a proposal to remove this field from the enhanced classes. The proposed change
is initiated by the following observation:
1. class A has one-to-one relation to class B
2. an instance a of A is related to b1 of B. b2 is another instance of B.
3. a, b1, b2 are detached, serialized, transported over the wire, desrialized in a remote
process as a*, b1* and b2*.
4. in the remote process a* is associated with b2*
5. a* is merged to the original process.

The change is not persisted when OpenJPA kernel is used with a JDO facade. It works with JPA
facade. 
The initial analysis shows that the reason can be attributed to pcFlags and the optimization
in enhanced classes based on to its value. Because pcFlags is not 
serialized, in a* instance pcFlags has a value of 0. Hence, the mutation of a*'s relation
to b2* from b1* is not mediated via the StateManager (yes, the detached version was carrying
its own StateManager). While merging the instance a* back, it was adjudged clean while actually
it was dirty. In JPA facade, the enhancement process did not add the extra optimization for
setter and so the cloned owner instance was righly marked dirty.  

Please note that if this proposal is accepted by the community, it will require reenhancement
of existing domain classes. The change will impact the internal StateManager and PersistenceCapable
API (essentally removal of certain methods than any other behavioural change). 



   


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message