当前位置: 首页 > 知识库问答 >
问题:

EJB JAR META-INF中的tomee persistence.xml使我的应用程序部署崩溃

徐茂材
2023-03-14

我正在使用 TomEE 来部署一个 EAR 文件,其中包含一个 EJB JAR 和一个战争。

我想使用默认提供程序添加实体。我已经在tomee.xml创建了一个资源来使用MySQL DB。然后我想使用实体管理器,所以我尝试在EJB JAR META-INF目录中创建以下persistence.xml:

<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>

我的项目

一旦我添加此persistence.xml我在catalina.out得到以下异常,我的应用程序没有部署:

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

一旦我删除了persistence.xml,应用程序就成功部署了。请帮助我,因为我不知道如何进行

提前感谢。

共有1个答案

郦良才
2023-03-14

如果您可以指定您实际使用的版本,将会很有帮助。

更重要的是,您是否检查过您不会在EAR文件中提供TomEE或任何相关的依赖项(我的意思是lib/或WEB-INF/lib)?

供您参考,TomEE 1.5.1将很快发布,其中包含一些关于EAR部署的修复。

 类似资料:
  • 这就是它崩溃的地方 01-12 13:44:12.571 296 26-29688/ca.dti.grounded.app E/OtherService:AsynchChecker 287:73 java.lang.IllegalStateException:Parcel已完成!在android.os.binderproxy.transactNative(本机方法)在android.os.bind

  • 因此,我阅读了有关部署的内容,并多次尝试在Heroku上部署。不能让它工作。 错误日志: 2017-02-13T04:48:13.132359+00:00Heroku[Web.1]:状态从崩溃更改为启动 2017-02-13T04:48:17.100053+00:00Heroku[Web.1]:使用命令启动进程 2017-02-13T04:48:20.884225+00:00Heroku[Web.

  • 我的应用程序似乎总是在部署后崩溃。 2015-07-21T13:29:28.127452+00:00 Heroku[router]:at=error code=h10 desc=“应用程序崩溃”method=get path=“/api/v1/sessions”host=calm-hamlet-5165.herokuapp.com request_id=69711e3a-913e-45ed-b4b

  • 我有一个错误应用程序在我的本地电脑上工作,但当我把它发送给heroku时,它崩溃了。错误日志给出错误H10&表示: 编辑: 有没有人以前有过这种情况,并且知道是什么导致了这个问题?我找不到解决办法。 多谢了。

  • 注意:在我添加广告之前,我的应用程序运行良好,使用相同的方法 当我试图将adview添加到我的应用程序时,它会使我的应用程序崩溃,所以我删除了它,但仍然给我这个这是logcat 10-12 21:33:19.765 4993-4993/com。fm360。almorfis E/AndroidRuntime:致命异常:主进程:com。fm360。阿尔莫菲斯,PID:4993爪哇。lang.Runti

  • 更新到QRCodeReaderView最新版本后,我的应用程序崩溃仍然没有停止,不同的问题得到。致命异常:java.lang.RuntimeException:无法连接到java:580)在android.view.choreographer.doFrame(choreographer.java:550)在android.view.choreographer$FrameDisplayEventRe