|
|
|
Kevin Sutter
|
Hi,
I've been debugging this problem for the last couple of days and I'm not sure where to go with this one... Maybe someone with more Sun and Serp experience can help out... The scenario is that I have annotations doubly defined (ie. javax.persistence.OneToMany and alt.persistence.OneToMany). A single entity might utilize both of them, like this: @javax.persistence.OneToMany(cascade=javax.persistence.CascadeType.REMOVE) @alt.persistence.OneToMany(cascade=alt.persistence.CascadeType.REMOVE) Collection<Fill> buySideFills; This results in the following callstack snippet when running with the -javaagent version of enhancement and the Sun JDK (fixpack 15): java.lang.ArrayStoreException: sun.reflect.annotation.AnnotationTypeMismatchExceptionProxy at sun.reflect.annotation.AnnotationParser.parseEnumArray(AnnotationParser.java:673) at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:462) at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:286) at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:222) at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69) at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52) at java.lang.reflect.Field.declaredAnnotations(Field.java:1002) at java.lang.reflect.Field.getDeclaredAnnotations(Field.java:995) at java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:179) at org.apache.openjpa.lib.util.J2DoPriv5Helper$1.run(J2DoPriv5Helper.java:51) at java.security.AccessController.doPrivileged(Native Method) at org.apache.openjpa.persistence.PersistenceMetaDataDefaults.annotated(PersistenceMetaDataDefaults.java:293) at org.apache.openjpa.persistence.PersistenceMetaDataDefaults.getAccessType(PersistenceMetaDataDefaults.java:262) at org.apache.openjpa.persistence.PersistenceMetaDataDefaults.getAccessType(PersistenceMetaDataDefaults.java:250) at org.apache.openjpa.meta.AbstractMetaDataDefaults.populate(AbstractMetaDataDefaults.java:155) at org.apache.openjpa.persistence.PersistenceMetaDataDefaults.populate(PersistenceMetaDataDefaults.java:227) at org.apache.openjpa.meta.MetaDataRepository.addMetaData(MetaDataRepository.java:794) at org.apache.openjpa.meta.MetaDataRepository.addMetaData(MetaDataRepository.java:780) at org.apache.openjpa.persistence.AnnotationPersistenceMetaDataParser.getMetaData(AnnotationPersistenceMetaDataParser.java:657) at org.apache.openjpa.persistence.AnnotationPersistenceMetaDataParser.parseClassAnnotations(AnnotationPersistenceMetaDataParser.java:480) at org.apache.openjpa.persistence.AnnotationPersistenceMetaDataParser.parse(AnnotationPersistenceMetaDataParser.java:352) at org.apache.openjpa.persistence.PersistenceMetaDataFactory.load(PersistenceMetaDataFactory.java:229) at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:474) at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:294) at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:248) at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:219) at org.apache.openjpa.enhance.PCClassFileTransformer.transform0(PCClassFileTransformer.java:139) at org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:120) at sun.instrument.TransformerManager.transform(TransformerManager.java:122) at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:155) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:620) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$100(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:242) at org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1298) at org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1280) at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:138) at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:119) at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:189) at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142) at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192) at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145) at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:1) If I run with the static PCEnhancer, no problem. If I run with the IBM JDK, no problem. I've narrowed this down the "CascadeType[] cascade" of the OneToMany annotation. As a test, if I change this to not being an array (CascadeType), no problem. I've been experimenting with narrowing down the problem by writing a simple javaagent, but no luck yet. One unique aspect of our javaagent is that we actually manipulate the bytes with Serp. So, I started to bring Serp into the picture, but I keep getting linkage errors when attempting to get access to the Entity class. (I do not claim to be a Serp expert.) Any ideas? Thanks, Kevin |
|||||||||||||||||||
|
Kevin Sutter
|
Just to document that this discussion has moved to OPENJPA-646 (and
OPENJPA-672). On Tue, Jun 24, 2008 at 6:06 PM, Kevin Sutter <[hidden email]> wrote: > Hi, > I've been debugging this problem for the last couple of days and I'm not > sure where to go with this one... Maybe someone with more Sun and Serp > experience can help out... > > The scenario is that I have annotations doubly defined (ie. > javax.persistence.OneToMany and alt.persistence.OneToMany). A single entity > might utilize both of them, like this: > > > @javax.persistence.OneToMany(cascade=javax.persistence.CascadeType.REMOVE) > @alt.persistence.OneToMany(cascade=alt.persistence.CascadeType.REMOVE) > Collection<Fill> buySideFills; > > This results in the following callstack snippet when running with the > -javaagent version of enhancement and the Sun JDK (fixpack 15): > > java.lang.ArrayStoreException: > sun.reflect.annotation.AnnotationTypeMismatchExceptionProxy > at > sun.reflect.annotation.AnnotationParser.parseEnumArray(AnnotationParser.java:673) > at > sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:462) > at > sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:286) > at > sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:222) > at > sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69) > at > sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52) > at java.lang.reflect.Field.declaredAnnotations(Field.java:1002) > at java.lang.reflect.Field.getDeclaredAnnotations(Field.java:995) > at > java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:179) > at > org.apache.openjpa.lib.util.J2DoPriv5Helper$1.run(J2DoPriv5Helper.java:51) > at java.security.AccessController.doPrivileged(Native Method) > at > org.apache.openjpa.persistence.PersistenceMetaDataDefaults.annotated(PersistenceMetaDataDefaults.java:293) > at > org.apache.openjpa.persistence.PersistenceMetaDataDefaults.getAccessType(PersistenceMetaDataDefaults.java:262) > at > org.apache.openjpa.persistence.PersistenceMetaDataDefaults.getAccessType(PersistenceMetaDataDefaults.java:250) > at > org.apache.openjpa.meta.AbstractMetaDataDefaults.populate(AbstractMetaDataDefaults.java:155) > at > org.apache.openjpa.persistence.PersistenceMetaDataDefaults.populate(PersistenceMetaDataDefaults.java:227) > at > org.apache.openjpa.meta.MetaDataRepository.addMetaData(MetaDataRepository.java:794) > at > org.apache.openjpa.meta.MetaDataRepository.addMetaData(MetaDataRepository.java:780) > at > org.apache.openjpa.persistence.AnnotationPersistenceMetaDataParser.getMetaData(AnnotationPersistenceMetaDataParser.java:657) > at > org.apache.openjpa.persistence.AnnotationPersistenceMetaDataParser.parseClassAnnotations(AnnotationPersistenceMetaDataParser.java:480) > at > org.apache.openjpa.persistence.AnnotationPersistenceMetaDataParser.parse(AnnotationPersistenceMetaDataParser.java:352) > at > org.apache.openjpa.persistence.PersistenceMetaDataFactory.load(PersistenceMetaDataFactory.java:229) > at > org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:474) > at > org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:294) > at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:248) > at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:219) > at > org.apache.openjpa.enhance.PCClassFileTransformer.transform0(PCClassFileTransformer.java:139) > at > org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:120) > at > sun.instrument.TransformerManager.transform(TransformerManager.java:122) > at > sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:155) > at java.lang.ClassLoader.defineClass1(Native Method) > at java.lang.ClassLoader.defineClass(ClassLoader.java:620) > at > java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) > at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) > at java.net.URLClassLoader.access$100(URLClassLoader.java:56) > at java.net.URLClassLoader$1.run(URLClassLoader.java:195) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:188) > at java.lang.ClassLoader.loadClass(ClassLoader.java:306) > at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268) > at java.lang.ClassLoader.loadClass(ClassLoader.java:251) > at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) > at java.lang.Class.forName0(Native Method) > at java.lang.Class.forName(Class.java:242) > at > org.apache.openjpa.meta.MetaDataRepository.classForName(MetaDataRepository.java:1298) > at > org.apache.openjpa.meta.MetaDataRepository.loadPersistentTypes(MetaDataRepository.java:1280) > at > org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:138) > at > org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:119) > at > org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:189) > at > org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142) > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192) > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145) > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:1) > > If I run with the static PCEnhancer, no problem. > If I run with the IBM JDK, no problem. > > I've narrowed this down the "CascadeType[] cascade" of the OneToMany > annotation. As a test, if I change this to not being an array > (CascadeType), no problem. > > I've been experimenting with narrowing down the problem by writing a simple > javaagent, but no luck yet. One unique aspect of our javaagent is that we > actually manipulate the bytes with Serp. So, I started to bring Serp into > the picture, but I keep getting linkage errors when attempting to get access > to the Entity class. (I do not claim to be a Serp expert.) > > Any ideas? > > Thanks, > Kevin > |
|||||||||||||||||||
| Free Embeddable Forum Powered by Nabble | Help |