[ https://issues.apache.org/jira/browse/OPENJPA-2342?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13615560#comment-13615560 ]
ASF subversion and git services commented on OPENJPA-2342: ---------------------------------------------------------- Commit 1461751 from kwsutter [ https://svn.apache.org/r1461751 ] OPENJPA-2342. Changed to use the getDeclaredInterfaceNames instead of getDeclaredInterfaceTypes. All testing is looking good and should alleviate the problem of the classloading. > Consider modifying PCEnhancer.run to use > serp.bytecode.BCClass.getDeclaredInterfaceNames instead of > getDeclaredInterfaceTypes. > ------------------------------------------------------------------------------------------------------------------------------ > > Key: OPENJPA-2342 > URL: https://issues.apache.org/jira/browse/OPENJPA-2342 > Project: OpenJPA > Issue Type: Improvement > Components: Enhance > Affects Versions: 2.2.2 > Reporter: John Ross > Attachments: openjpa-2342.patch > > > Caused by: <openjpa-2.2.2-SNAPSHOT-r422266:1446295 nonfatal general error> > org.apache.openjpa.util.GeneralException: An error occurred while enhancing > itemjpa.ItemJPA. Exception message: java.lang.ClassNotFoundException: > org.apache.aries.proxy.weaving.WovenProxy > at org.apache.openjpa.enhance.PCEnhancer.run(PCEnhancer.java:578) > at > org.apache.openjpa.enhance.PCClassFileTransformer.transform0(PCClassFileTransformer.java:153) > at > org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:126) > at > org.apache.openjpa.persistence.PersistenceProviderImpl$ClassTransformerImpl.transform(PersistenceProviderImpl.java:290) > at > org.apache.aries.jpa.container.weaving.impl.WrappingTransformer.transform(WrappingTransformer.java:80) > at > org.apache.aries.jpa.container.weaving.impl.JPAWeavingHook.weave(JPAWeavingHook.java:71) > ... 48 more > Caused by: java.lang.IllegalArgumentException: > java.lang.ClassNotFoundException: org.apache.aries.proxy.weaving.WovenProxy > at serp.util.Strings.toClass(Strings.java:164) > at serp.util.Strings.toClass(Strings.java:108) > at serp.bytecode.BCClass.getDeclaredInterfaceTypes(BCClass.java:740) > at org.apache.openjpa.enhance.PCEnhancer.run(PCEnhancer.java:537) > ... 53 more > This issue occurs when the Apache Aries Proxy weaving hook gets called before > the Apache Aries JPA weaving hook. Proxy weaves the class with the WovenProxy > interface and adds the necessary dynamic package imports. JPA then gets > called and uses PCEnhancer which, in turn, calls > BCClass.getDeclaredInterfaceTypes, which ultimately calls Class.forName using > the woven interface's name. The class loader is from the bundle whose class > is being woven. Per the OSGi spec, dynamic imports do not take effect until > after the entire weaving process is complete. Consequently, the bundle's > class loader does not yet have visibility to the class. > One solution to this, at least in the Aries case, is to order the weaving > hook calls using the osgi service ranking property. However, all weaving hook > services with potential conflicts may not be under the control of the same > entity. > Basically, PCEnhancer.run is using the information from BCClass to determine > whether or not the class has already been woven. It's only interested in > knowing if the PersistenceCapable interface is there. It seems that > BCClass.getDeclaredInterfaceNames avoids the Class.forName call and could be > used instead, particularly considering that only the class names are compared. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira