Hi folks!

I remember having talked with one of you in the past why the following 
properties are NOT enabled by default:

 <property name="openjpa.DetachState" value="loaded(DetachedStateField=true)"/>
 <property name="openjpa.Compatibility" 
value="IgnoreDetachedStateFieldForProxySerialization=true"/>

This basically tells OpenJPA to also serialise (externalise) the _dirty and 
_loaded fields along with each entity and restore this info in the 
DetachedStateManager on de-serialisation. What I remember is that someone said 
that this is against the spec. Do you recall which spec paragraph / TCK test 
this was?

The second option is a bit more tricky and deals with out internal handling of 
proxies when serialising. From looking at the source I think the name is a bit 
confusing. What it does is to always serialize the whole proxy in any case. 
Please also not that this behaviour was the default in OpenJPA-1.x and only 
gets changed if your persistence.xml version is "2.0".


I basically _always_ use those 2 magic flags nowadays, because it's the only 
way you can do serialisation without loosing data imo.

There is a little bit of discussions and the pitfalls I had with this options 
in https://issues.apache.org/jira/browse/OPENJPA-1933
It still doesn't explain why this behaviour was put there initially.
The best source I could find is 

https://issues.apache.org/jira/browse/OPENJPA-1097 and
https://issues.apache.org/jira/browse/OPENJPA-968

The best thing explaining this restriction I could find in the JPA spec is:

"Serializing entities and merging those entities back into a persistence 
context may not be interoperable across vendors when lazy properties or fields 
and/or relationships are used.
A vendor is required to support the serialization and subsequent 
deserialization and merging of detached entity instances (which may 
contain lazy properties or fields and/or relationships that have not 
been fetched) back into a separate JVM instance of that vendor’s 
runtime, where both runtime instances have access to the entity classes 
and any required vendor persistence implementation classes."

But  reading this again and again it seems to me that this is _not_ against 
applying the above properties by default.



Do we still have a bug in there (and we shall fix it), or is this area not 
clearly defined in the spec (and we should aim to get it fixed in JPA-2.1)?



LieGrue,
strub

Reply via email to