Uploaded image for project: 'Aries'
  1. Aries
  2. ARIES-1019

JPA weaving hook must be called before proxy weaving hook.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • None
    • JPA, Proxy
    • None

    Description

      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.

      Attachments

        1. aries1019.patch
          2 kB
          John Ross

        Activity

          People

            jwross@us.ibm.com John Ross
            jwross@us.ibm.com John Ross
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: