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 <[EMAIL PROTECTED]> 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 >
