Hi,
I'm running Linux, Sun JDK 1.6.0_01-b06, and OpenJPA 1.0.1. When
attempting to persist a relatively large object graph (though size in
data isn't horribly large) via cascade, I'm running into this exception:
Exception in thread "main" java.lang.StackOverflowError
at java.security.AccessController.doPrivileged(Native Method)
at
org.apache.openjpa.enhance.Reflection.getDeclaredField(Reflection.java:166)
at
org.apache.openjpa.enhance.Reflection.findField(Reflection.java:145)
at
org.apache.openjpa.enhance.edu$cmu$albatross$dblp$Field$pcsubclass.pcProvideField(Unknown
Source)
at
org.apache.openjpa.kernel.StateManagerImpl.provideField(StateManagerImpl.java:2959)
at
org.apache.openjpa.kernel.StateManagerImpl.fetchObjectField(StateManagerImpl.java:2201)
at
org.apache.openjpa.kernel.StateManagerImpl.fetchField(StateManagerImpl.java:759)
at
org.apache.openjpa.kernel.StateManagerImpl.fetch(StateManagerImpl.java:721)
at
org.apache.openjpa.kernel.StateManagerImpl.dirtyCheck(StateManagerImpl.java:807)
at
org.apache.openjpa.kernel.BrokerImpl$ManagedCache.dirtyCheck(BrokerImpl.java:4620)
at
org.apache.openjpa.kernel.BrokerImpl$ManagedCache.access$000(BrokerImpl.java:4360)
at
org.apache.openjpa.kernel.BrokerImpl.hasTransactionalObjects(BrokerImpl.java:3739)
at
org.apache.openjpa.kernel.BrokerImpl.setDirty(BrokerImpl.java:3856)
at
org.apache.openjpa.kernel.StateManagerImpl.setPCState(StateManagerImpl.java:207)
at
org.apache.openjpa.kernel.StateManagerImpl.dirty(StateManagerImpl.java:1532)
at
org.apache.openjpa.kernel.StateManagerImpl.dirty(StateManagerImpl.java:1471)
at
org.apache.openjpa.kernel.StateManagerImpl.dirtyCheck(StateManagerImpl.java:808)
at
org.apache.openjpa.kernel.BrokerImpl$ManagedCache.dirtyCheck(BrokerImpl.java:4620)
at
org.apache.openjpa.kernel.BrokerImpl$ManagedCache.access$000(BrokerImpl.java:4360)
at
org.apache.openjpa.kernel.BrokerImpl.hasTransactionalObjects(BrokerImpl.java:3739)
...
Afterwards, the trace repeats these lines over and over:
at
org.apache.openjpa.kernel.BrokerImpl.setDirty(BrokerImpl.java:3856)
at
org.apache.openjpa.kernel.StateManagerImpl.setPCState(StateManagerImpl.java:207)
at
org.apache.openjpa.kernel.StateManagerImpl.dirty(StateManagerImpl.java:1532)
at
org.apache.openjpa.kernel.StateManagerImpl.dirty(StateManagerImpl.java:1471)
at
org.apache.openjpa.kernel.StateManagerImpl.dirtyCheck(StateManagerImpl.java:808)
at
org.apache.openjpa.kernel.BrokerImpl$ManagedCache.dirtyCheck(BrokerImpl.java:4620)
at
org.apache.openjpa.kernel.BrokerImpl$ManagedCache.access$000(BrokerImpl.java:4360)
at
org.apache.openjpa.kernel.BrokerImpl.hasTransactionalObjects(BrokerImpl.java:3739)
at
org.apache.openjpa.kernel.BrokerImpl.setDirty(BrokerImpl.java:3856)
Could anyone help explain what the cause might be, or how I might avoid
this type of error? I guess I'd need to somehow determine a reasonable
bound on number of objects to attempt to persist in a single transaction
and then divvy up my object graph to accommodate this.
Thanks,
Andy
|