OpenJPA
  1. OpenJPA
  2. OPENJPA-1410

Class linkage exception when creating an EMF with OpenJPA M3

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Critical Critical
    • Resolution: Fixed
    • Affects Version/s: 2.0.0-M3, 2.0.0-beta, 2.0.0-beta2
    • Fix Version/s: 2.0.0-beta3
    • Component/s: validation
    • Labels:
      None
    • Environment:
      Tomcat and Glassfish, OpenJPA M3

      Description

      Posted by Seth Jackson on the user forum[1].

      It appears something was modified in OpenJPA 2.0 M3 from M2 that causes a
      LinkageError.

      In my current environment, I've tested both Glassfish and Tomcat using M2
      and M3. M2 runs without problems, but M3 throws a linkage error as follows:

      Caused by: java.lang.LinkageError: loader constraint violation: loader
      (instance of sun/misc/Launcher$AppClassLoader) previously initiated loading
      for a different type with name
      "org/apache/openjpa/conf/OpenJPAConfiguration"
      at java.lang.ClassLoader.defineClass1(Native Method)
      at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
      at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
      at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
      at java.net.URLClassLoader.access$000(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:307)
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
      at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
      at
      org.apache.openjpa.persistence.validation.ValidationUtils.setupValidation(ValidationUtils.java:53)
      at
      org.apache.openjpa.persistence.PersistenceProviderImpl.loadValidator(PersistenceProviderImpl.java:290)
      at
      org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:97)
      at
      org.apache.openjpa.persistence.OpenJPAPersistence.createEntityManagerFactory(OpenJPAPersistence.java:128)
      at
      org.apache.openjpa.persistence.OpenJPAPersistence.createEntityManagerFactory(OpenJPAPersistence.java:111)
      at test_test.user.UserAction.execute(UserAction.java:39)

      I've already confirmed that the OpenJPA classes in question do NOT exist in
      any other JARs in the path.

      ValidationUtils.setupValidation(ValidationUtils.java:53) calls the
      OpenJPAConfiguration.getConfigurationLog(). The object being referenced is
      JDBCConfigurationImpl, which in other classes retrieves the log reference
      perfectly fine, before it gets to the offending line.

      Seth's follow up[2]:

      After further review, using Glassfish 2.1.1 I received this error message in
      the server log:

      Caused by: java.lang.LinkageError: loader constraint violation: when
      resolving method
      "org.apache.openjpa.persistence.validation.ValidationUtils.setupValidation(Lorg/apache/openjpa/conf/OpenJPAConfiguration;)Z"
      the class loader (instance of org/apache/catalina/loader/WebappClassLoader)
      of the current class,
      org/apache/openjpa/persistence/PersistenceProviderImpl, and the class loader
      (instance of sun/misc/Launcher$AppClassLoader) for resolved class,
      org/apache/openjpa/persistence/validation/ValidationUtils, have different
      Class objects for the type org/apache/openjpa/conf/OpenJPAConfiguration used
      in the signature

      So it appears to be the WebappClassLoader and the AppClassLoader are both
      loading the OpenJPAConfiguration from the same JAR file, causing the error
      when the class is trying to be resolved in this particular method.

      [1] http://n2.nabble.com/Struts-2x-OpenJPA-2-0-M3-Tomcat-or-Glassfish-tp4087312p4087312.html
      [2] http://n2.nabble.com/Struts-2x-OpenJPA-2-0-M3-Tomcat-or-Glassfish-tp4087312p4093228.html

        Issue Links

          Activity

          Jeremy Bauer created issue -
          Donald Woods made changes -
          Field Original Value New Value
          Assignee Donald Woods [ drwoods ]
          Priority Major [ 3 ] Critical [ 2 ]
          Donald Woods made changes -
          Status Open [ 1 ] In Progress [ 3 ]
          Donald Woods made changes -
          Fix Version/s 2.0.0 [ 12314019 ]
          Jeremy Bauer made changes -
          Assignee Donald Woods [ drwoods ] Jeremy Bauer [ techhusky ]
          Donald Woods made changes -
          Affects Version/s 2.0.0-beta2 [ 12314802 ]
          Affects Version/s 2.0.0-beta [ 12314149 ]
          Donald Woods made changes -
          Link This issue relates to OPENJPA-1590 [ OPENJPA-1590 ]
          Donald Woods made changes -
          Resolution Fixed [ 1 ]
          Status In Progress [ 3 ] Resolved [ 5 ]
          Donald Woods made changes -
          Fix Version/s 2.0.0-beta3 [ 12314857 ]
          Fix Version/s 2.0.0 [ 12314019 ]
          Donald Woods made changes -
          Status Resolved [ 5 ] Closed [ 6 ]
          Rick Curtis made changes -
          Link This issue relates to OPENJPA-640 [ OPENJPA-640 ]
          Milosz Tylenda made changes -
          Link This issue is related to OPENJPA-1976 [ OPENJPA-1976 ]

            People

            • Assignee:
              Jeremy Bauer
              Reporter:
              Jeremy Bauer
            • Votes:
              2 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development