[ 
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

Reply via email to