0

I am using TomEE to deploy an EAR file, that contains one EJB JAR and one WAR.

I want to add entities using the default provider. I have created a resource in tomee.xml to use MySQL DB. Then I would like to use entity manager so I am trying to create the following persistence.xml in the EJB JAR META-INF directory:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">

        <persistence-unit name="MyProjectDataBase" transaction-type="JTA">
                <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
                <jta-data-source>MyProjectDS</jta-data-source>
                <non-jta-data-source>MyProjectDSUnmanaged</non-jta-data-source>
                <properties>
                        <property name="openjpa.jdbc.DBDictionary" value="mysql" />
                        <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
                </properties>
        </persistence-unit>

</persistence>

MyProject & MyProjectUnmanaged are the resources Ids I created in tomee.xml.

Once I add this persistence.xml I get the following exception in catalina.out and my app is not deployed:

SEVERE: Application could not be deployed:  /Users/avitale/Development/apache-tomee-jaxrs-1.5.0/apps/projecteam-ear
org.apache.openejb.OpenEJBException: Creating application failed: /Users/avitale/Development/apache-tomee-jaxrs-1.5.0/apps/projecteam-ear: loader (instance of  org/apache/catalina/loader/StandardClassLoader): attempted  duplicate class definition for name: "org/apache/openejb/cdi/CdiPlugin"
        at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:940)
        at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:532)
        at org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:433)
        at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:341)
        at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:144)
        at org.apache.openejb.OpenEJB.init(OpenEJB.java:290)
        at org.apache.tomee.catalina.TomcatLoader.initialize(TomcatLoader.java:231)
        at org.apache.tomee.catalina.TomcatLoader.init(TomcatLoader.java:131)
        at org.apache.tomee.catalina.ServerListener.lifecycleEvent(ServerListener.java:113)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
        at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:401)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:110)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:633)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:658)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)
Caused by: java.lang.LinkageError: loader (instance of  org/apache/catalina/loader/StandardClassLoader): attempted  duplicate class definition for name: "org/apache/openejb/cdi/CdiPlugin"
        at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at org.apache.openejb.cdi.OptimizedLoaderService.loadWebBeansPlugins(OptimizedLoaderService.java:70)
        at org.apache.openejb.cdi.OptimizedLoaderService.load(OptimizedLoaderService.java:53)
        at org.apache.openejb.cdi.OptimizedLoaderService.load(OptimizedLoaderService.java:47)
        at org.apache.webbeans.plugins.PluginLoader.startUp(PluginLoader.java:75)
        at org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:159)
        at org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:150)
        at org.apache.openejb.cdi.CdiBuilder.build(CdiBuilder.java:44)
        at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:794)
        ... 20 more

Once I remove the persistence.xml then the application is successfully deployed. Please help me as I don't understand how to proceed :(

Thanks in advance.

Eli Avital
  • 21
  • 1
  • 3

1 Answers1

2

Would be helpful if you could specify the version you are actually using.

More over, did you check you won't deliver TomEE or any related dependencies in your EAR file (I mean lib/ or WEB-INF/lib)?

For your information, TomEE 1.5.1 will be released shortly with some fixes around EAR deployments.

gnat
  • 6,213
  • 108
  • 53
  • 73
jlmonteiro
  • 111
  • 3