Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] Re: EclipseLink 2.0.1 jars...?

Hi Magnus,

Spring is actually more similar to a JEE container than it is to a non JEE container - it provides much of the same functionality as a JEE container. (e.g. it ships and uses the javax.persistence classes, and initializes persistence units like a JEE container)

The issue we are trying to solve by providing a subset of the javax.persistence classes in the EclipseLink 2.0 jar is to allow it to be a JPA 1.0 provider and a JPA 2.0 provider.

In your first two attempts, the class that is causing issues is a JPA 2.0 class (referenced by a class within EclipseLink) The class is in the EclipseLink jar. My guess is that something is enforcing the fact that classes from the same package cannot exist in different jars. Does spring do that? Is the jar containing javax.persistence classes in Spring signed/sealed?

In your third attempt, you have solved that problem by removing the classes that are in a package that is split between jars. That is why it works.

You are correct that we need to work on better documenting how to configure EclipseLink 2.0 on containers that ship with JPA 1.0 support.

Here is the wiki page that has some initial documentation. We still have some work to do:


Magnus Heino wrote:

On Fri, Feb 26, 2010 at 3:20 PM, Tom Ware <tom.ware@xxxxxxxxxx <mailto:tom.ware@xxxxxxxxxx>> wrote:

    Hi Magnus,

     What problem is having the javax.persistence classes in
    eclipselink.jar causing?  Are you trying to use JPA 2.0 functionality?

Well, I think this text from is a bit missleading talking about the EclipseLink 2.0 "complete" jar:


        Full functionality - non OSGI

This is the recommended way of getting EclipseLink unless you are using OSGi, or you want to explicitly exclude certain parts of EclipseLink

    * eclipselink
    * javax.persistence (optional - only needed if you are using JPA
      outside of a Java EE containe


Since I am booting jpa from within Spring, not Jboss, I guess I am using it outside of a JEE container? Spring is managing everything for me. Anyway...

First try:

I replaced ejb-persistence.jar (jpa1 api) from jboss server/default/lib with javax-persistence-2.0.jar , added eclipselink-2.0.1.jar to by WEB-INF/lib, updated orx.xml/persistence.xml and deployed:

[exec] [INFO] [talledLocalContainer] Caused by: java.lang.NoClassDefFoundError: javax/persistence/Cache [exec] [INFO] [talledLocalContainer] at java.lang.Class.getDeclaredMethods0(Native Method) [exec] [INFO] [talledLocalContainer] at java.lang.Class.privateGetDeclaredMethods( [exec] [INFO] [talledLocalContainer] at java.lang.Class.privateGetPublicMethods( [exec] [INFO] [talledLocalContainer] at java.lang.Class.getMethods( [exec] [INFO] [talledLocalContainer] at sun.misc.ProxyGenerator.generateClassFile( [exec] [INFO] [talledLocalContainer] at sun.misc.ProxyGenerator.generateProxyClass( [exec] [INFO] [talledLocalContainer] at java.lang.reflect.Proxy.getProxyClass( [exec] [INFO] [talledLocalContainer] at java.lang.reflect.Proxy.newProxyInstance( [exec] [INFO] [talledLocalContainer] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.createEntityManagerFactoryProxy( [exec] [INFO] [talledLocalContainer] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet( [exec] [INFO] [talledLocalContainer] at [exec] [INFO] [talledLocalContainer] at
     [exec] [INFO] [talledLocalContainer] ... 164 more
[exec] [INFO] [talledLocalContainer] Caused by: java.lang.ClassNotFoundException: Unexpected error during load of: javax.persistence.Cache, msg=loader constraint violation: loader (instance of org/jboss/mx/loading/UnifiedClassLoader3) previously initiated loading for a different type with name "javax/persistence/Cache" [exec] [INFO] [talledLocalContainer] at [exec] [INFO] [talledLocalContainer] at [exec] [INFO] [talledLocalContainer] at java.lang.ClassLoader.loadClass(
     [exec] [INFO] [talledLocalContainer] ... 176 more
[exec] [INFO] [talledLocalContainer] Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/mx/loading/UnifiedClassLoader3) previously initiated loading for a different type with name "javax/persistence/Cache"

This is because eclipselink-jar contains a subset of whats in javax-peristence-2.0.jar
Second attempt, I removed javax-persistence-2.0.jar

[exec] [INFO] [talledLocalContainer] Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: javax.persistence.PersistenceContext [exec] [INFO] [talledLocalContainer] at [exec] [INFO] [talledLocalContainer] at [exec] [INFO] [talledLocalContainer] at [exec] [INFO] [talledLocalContainer] at java.lang.ClassLoader.loadClass( [exec] [INFO] [talledLocalContainer] ... 153 more Third try, added javax-persistence-2.0.jar and stripped eclipselink.jar... success :-)

     eclipselink.jar has some of the javax.persistence classes because
    although it is the JPA 2.0 reference implementation, it still
    supports JPA 1.0 and needs some of those classes to maintain that

Why isn't it possible to require persistence-api-1.0.jar on the classpath?
     The bundles have no-such issue and for servers that do not
    explicitly package eclipselink.jar likely provide a good way of
    avoiding this issue.  If you need help selecting the bundles to use,
    I can help with that.

I'm ok with it now, thanks. However, I do think that could be a bit more informative.



eclipselink-users mailing list

Back to the top