Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven EJB模块可以';无法接触JPA实体_Maven_Jpa_Ejb_Wildfly_Ear - Fatal编程技术网

Maven EJB模块可以';无法接触JPA实体

Maven EJB模块可以';无法接触JPA实体,maven,jpa,ejb,wildfly,ear,Maven,Jpa,Ejb,Wildfly,Ear,我有一个包含4个模块的Maven项目:带有persistence.xml的JPA模块、EJB模块、Webapp模块和EAR模块 我使用EJB模块在数据库中持久化实体。现在,当我尝试使用JPA模块中的任何实体时,我在Wildfly 9中遇到以下错误: 22:42:59,298 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) MSC000001: Failed to start service jboss.deploym

我有一个包含4个模块的Maven项目:带有persistence.xml的JPA模块、EJB模块、Webapp模块和EAR模块

我使用EJB模块在数据库中持久化实体。现在,当我尝试使用JPA模块中的任何实体时,我在Wildfly 9中遇到以下错误:

    22:42:59,298 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) MSC000001: Failed to start service jboss.deployment.unit."MusicEJB.jar".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit."MusicEJB.jar".POST_MODULE: WFLYSRV0153: Failed to process phase POST_MODULE of deployment "MusicEJB.jar"
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:163)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: WFLYSRV0177: Error getting reflective information for class authentication.AuthEJB with ClassLoader ModuleClassLoader for Module "deployment.MusicEJB.jar:main" from Service Module Loader
    at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70)
    at org.jboss.as.ee.metadata.MethodAnnotationAggregator.runtimeAnnotationInformation(MethodAnnotationAggregator.java:57)
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.handleAnnotations(InterceptorAnnotationProcessor.java:107)
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:92)
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:77)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:156)
    ... 5 more
    Caused by: java.lang.NoClassDefFoundError: entity/User
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.getDeclaredMethods(Class.java:1975)
    at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:65)
    at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66)
    ... 10 more
Caused by: java.lang.ClassNotFoundException: entity.User from [Module "deployment.MusicEJB.jar:main" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130)
    ... 15 more
22:42:59298错误[org.jboss.msc.service.fail](msc服务线程1-6)MSC000001:无法启动服务jboss.deployment.unit.“MusicEJB.jar”.POST_模块:org.jboss.msc.service.StartException in service jboss.deployment.unit.“MusicEJB.jar”。POST_模块:WFLYSRV0153:无法处理部署“MusicEJB.jar”的阶段POST_模块
位于org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:163)
位于org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
位于org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
运行(Thread.java:745)
导致的原因:java.lang.RuntimeException:WFLYSRV0177:从服务模块加载器获取类身份验证的反射信息时出错。AuthEJB的类加载器ModuleClassLoader用于模块“deployment.MusicEJB.jar:main”
位于org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70)
位于org.jboss.as.ee.metadata.MethodAnnotationAggregator.runtimeAnnotationInformation(MethodAnnotationAggregator.java:57)
位于org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.handleAnnotations(InterceptorAnnotationProcessor.java:107)
位于org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:92)
位于org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:77)
位于org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:156)
... 还有5个
原因:java.lang.NoClassDefFoundError:实体/用户
位于java.lang.Class.getDeclaredMethods0(本机方法)
位于java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
位于java.lang.Class.getDeclaredMethods(Class.java:1975)
位于org.jboss.as.server.deployment.reflect.ClassReflectionIndex。(ClassReflectionIndex.java:65)
位于org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66)
... 10多
原因:java.lang.ClassNotFoundException:entity.User来自服务模块加载器的[Module“deployment.MusicEJB.jar:main]
位于org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205)
位于org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455)
位于org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404)
位于org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385)
位于org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130)
... 还有15个
这是我的persistence.xml:

    <?xml version="1.0" encoding="UTF-8"?>

<persistence version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

    <persistence-unit name="MusicProjectPersistence" transaction-type="JTA">    
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:jboss/datasources/postgresDS</jta-data-source>
        <class>entity.User</class>
        <class>entity.MusicFile</class>
        <class>entity.Playlist</class>

        <properties>
            <property name="hibernate.archive.autodetection" value="class" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/musicdb" />
            <property name="hibernate.connection.username" value="music" />
            <property name="hibernate.connection.password" value="music" />

            <property name="hibernate.flushMode" value="FLUSH_AUTO" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>

org.hibernate.ejb.HibernatePersistence
java:jboss/datasources/postgresd
实体用户
entity.MusicFile
实体播放列表
我的EJB pom.xml中有JPA模块


我做错了什么?

当使用WildFly时,通常不需要使用EAR包装,而是将所有内容都放入一场战争,导致没有不同的类装入器,这可能会为您解决问题


查看一个使用WAR打包的基于maven的项目-它不使用JPA模块,但我想你会明白的。

你的EJB找不到你的实体类,因为如果你在构建之后打开ear文件,你会发现你的JPA模块位于EJB模块旁边,而不是在lib文件夹中。解决办法很简单。只需在ear模块的POM中添加JPA模块作为依赖项。这样,您的JPA模块将成为ear的lib文件夹中的一个jar,然后您的EJB和Web模块可以在它们的类路径中找到JPA enitites。添加依赖项后,构建项目并在ear lib文件夹中进行检查,以确保JPA模块作为jar保存。

jar文件必须位于ear的
/lib
文件夹中。当您让maven生成一个EAR文件,然后检查其内容时,是否确认了这一点?例外情况表明情况并非如此。