[ 
https://issues.apache.org/jira/browse/OPENJPA-1912?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12986662#action_12986662
 ] 

Mark Struberg commented on OPENJPA-1912:
----------------------------------------

oki, starting with that stuff now.

current classes just generate a

readExternal() and writeExternal which first externalizes some OpenJPA specific 
fields like the pcStateManager, et al and then comes the single fields.

For providing something like super.readYourOwnStuff() we need to split the 
fields from the rest.

So I'll start with introducing 2 new methods readExternalFields() and 
writeExternalFields() which might then invoke the super.readExternalFields().

Any objections or tips?

> enhancer generates invalid code if fetch-groups is activated
> ------------------------------------------------------------
>
>                 Key: OPENJPA-1912
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1912
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: Enhance
>    Affects Versions: 2.0.0, 2.0.1, 2.1.0
>            Reporter: Mark Struberg
>            Priority: Critical
>         Attachments: OPENJPA-1912-test.patch
>
>
> If openjpa.DetachState =fetch-groups is used, the enhancer will add a 
> 'implements Externalizable' + writeExternal + readExternal.
> The problem is, that writeExternal and readExternal will also try to 
> externalize the private members of any given superclass. Thus we get a 
> runtime Exception that we are not allowed to access those fields.
> Example:
> @Entity
> public abstract class AbstractGroup {
>    ...
>     @Temporal(TemporalType.TIMESTAMP)
>     @TrackChanges
>     private Date applicationBegin;
>  ...
> }
> and 
> @Entity
> public class Group extends AbstractGroup {
> ...
> }
> will result in the following code (decompiled with jad):
>     public void writeExternal(ObjectOutput objectoutput)
>         throws IOException
>     {
>         pcWriteUnmanaged(objectoutput);
>         if(pcStateManager != null)
>         {
>             if(pcStateManager.writeDetached(objectoutput))
>                 return;
>         } else
>         {
>             objectoutput.writeObject(pcGetDetachedState());
>             objectoutput.writeObject(null);
>         }
>         objectoutput.writeObject(applicationBegin);
>         objectoutput.writeObject(applicationEnd);
>         objectoutput.writeObject(applicationLocked);
>         objectoutput.writeObject(approvalRequired);
>  ...

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

Reply via email to