[
https://issues.apache.org/jira/browse/ARIES-1019?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13588761#comment-13588761
]
John Ross commented on ARIES-1019:
----------------------------------
I think the simplest and best thing to do would be to register the jpa weaving
hook with a service ranking of Integer.MAX_VALUE. It would be possible instead
to register the proxy weaving hook at Integer.MIN_VALUE (or something less than
0 which is the current ranking of the jpa hook); however, in its current form,
the jpa hook will run into this issue if any weaving hook was called before it
and added an additional interface. Integer.MAX_VALUE minimizes this
possibility. Objections?
> JPA weaving hook must be called before proxy weaving hook.
> ----------------------------------------------------------
>
> Key: ARIES-1019
> URL: https://issues.apache.org/jira/browse/ARIES-1019
> Project: Aries
> Issue Type: Bug
> Components: JPA, Proxy
> Reporter: John Ross
>
> 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 would be to ensure that the jpa weaving hook is always called
> before the proxy weaving hook using the service ranking property.
--
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