我创建了两个项目,一个是EJB,另一个是JPA。JPA项目定义实体类和persistent.xml。EBJ项目导入JPA项目,定义EJB会话bean通过实体管理器连接数据库。有关详细信息,请参阅下图。但是当在Jboss 7上运行时,出现了错误。
03:23:59,546 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC00001: Failed to start service jboss.deployment.subunit."TestApps.ear"."TestEJB.jar".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."TestApps.ear"."TestEJB.jar".POST_MODULE: Failed to p
rocess phase POST_MODULE of subdeployment "TestEJB.jar" of deployment "TestApps.ear"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) [rt.jar:1.6.0_22]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.6.0_22]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.6.0_22]
Caused by: java.lang.RuntimeException: Error getting reflective information for class com.ejb.services.LotUpdatManagerBean with ClassLoader ModuleClassLoader for Module "deployment.TestApps.ear.TestEJB.jar:main" from Service Module Loader
at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.ee.metadata.MethodAnnotationAggregator.runtimeAnnotationInformation(MethodAnnotationAggregator.java:58)
at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.handleAnnotations(InterceptorAnnotationProcessor.java:85)
at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:70)
at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:55)
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
... 5 more
Caused by: java.lang.NoClassDefFoundError: com/test/model/LotUpdates
at java.lang.Class.getDeclaredMethods0(Native Method) [rt.jar:1.6.0_22]
at java.lang.Class.privateGetDeclaredMethods(Unknown Source) [rt.jar:1.6.0_22]
at java.lang.Class.getDeclaredMethods(Unknown Source) [rt.jar:1.6.0_22]
at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:65) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
... 10 more
Caused by: java.lang.ClassNotFoundException: com.test.model.LotUpdates from [Module "deployment.TestApps.ear.TestEJB.jar:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
... 15 more
03:23:59,762 INFO [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS015870: Deploy of deployment "TestApps.ear" was rolled back with failure message {"JBAS014671: Failed services" => {"jboss.deployment.subunit.\"TestApps.ear\".\"TestEJB.jar\".POST_MODULE" => "org.jboss.msc.service.StartExce
ption in service jboss.deployment.subunit.\"TestApps.ear\".\"TestEJB.jar\".POST_MODULE: Failed to process phase POST_MODULE of subdeployment \"TestEJB.jar\" of deployment \"TestApps.ear\""}}
03:23:59,765 INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015877: Stopped deployment TestEJB.jar in 2ms
03:23:59,767 INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015877: Stopped deployment TestApps.ear in 4ms
03:23:59,768 INFO [org.jboss.as.controller] (DeploymentScanner-threads - 2) JBAS014774: Service status report
JBAS014777: Services which failed to start: service jboss.deployment.subunit."TestApps.ear"."TestEJB.jar".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."TestApps.ear"."TestEJB.jar".POST_MODULE: Failed to process phase POST_MODULE of subdeployment "TestE
JB.jar" of deployment "TestApps.ear"
我失败了。任何人都可以纠正我,告诉我部署的方法(jpa项目和ejb项目在同一个ear中)。
发布于 2014-11-14 13:46:56
您有两种可能的选择:
ejb
TestJpa.jar
在ear\lib
文件夹中,则默认情况下它在EJB模块中应该是可见的(确保EAR在EJB项目中通过6.0
Deployment Assembly
添加,JPA项目-应该会导致EJB模块的清单文件发生更改。如果您正确地配置了它,那么无论使用哪种方法,您都应该在Eclipse的EJB Module > EAR Libraries
中看到JPA项目,而不需要将它作为项目添加到构建路径中
发布于 2014-11-14 13:46:39
作为我们在评论中讨论的后续内容,我提供了这个“答案”,作为可能出错的第一个钩子。
关于EAR结构包类型EAR、WAR和JAR的结构定义良好,必须遵循这些定义才能生成稍后将在JBoss等应用服务器上运行的企业存档(EAR)。
您将在https://docs.oracle.com/javaee/6/tutorial/doc/bnaby.html下找到所有必需的打包信息(请注意,这是针对JavaEE6的)。
基本上,这就是我要走的路,我不能再帮你更多了:
但根据评论中的要求,我将尝试指出一些特别重要的点,根据上面的打包约定,链接会发生,并且必须绝对正确(我可以马上告诉您,我们的JPA模块也位于lib-文件夹中)。
因此,如果我打开我们的一个(工作的)耳朵,我会看到里面有以下内容:
例如,我们的ejb-part.jar
根本不包含任何Java代码。但是,它包含一个带有描述符(如ejb-jar.xml
)的META-INF
文件夹,以及properties
文件夹下的一些属性文件。它还定义了MANIFEST.MF
.中的类路径(我已经多年没有使用过JBoss了--我们目前使用的是IBM Websphere,因此在META-INF文件夹中也有-bnd.xml/-ext.xml部署描述符...我不知道Jboss是否需要类似的部署信息)。这里没什么可看的了。
暂时忘记这两个web模块--您似乎没有任何.war文件形式的web部件(该文件本身必须遵循oracle文档中定义的特定包要求)。
但是请注意,如果您有任何EJB-或WEB-Modules,它们必须列在META-INF文件中的application.xml文件中(不是ejb的META-INF文件夹,而是与/lib
、/our-ejb-part.jar
等位于同一级别的EAR的META-INF文件夹中)。还要注意,在META-INF目录中,我们同样有两个Websphere部署描述符和一个空的MANIFEST.MF)。
最后,我们有一个包含所有EAR-Dependencies (和大多数Web-Part依赖项)的lib
文件夹。这是我们保存JPA、Commons、服务、服务实现等组件模块的位置(而不是将它们放在ejb-part.jar
中……但我不能考虑这是否是一个好的实践)。
因此,回到您的情况,可能会有很多地方出错-我建议您添加最终*.ear文件内容的打印屏幕,而不是上面的eclipse视图,这样可能会得到进一步的建议。eclipse视图的主要问题是,至少我不知道最终的.ear文件到底是什么样子(例如,只有WEB-INF
文件夹的application.xml
位于EAR Content
下。
很抱歉,我不会在这里提供帮助,因为我没有任何JBoss知识(日志可能暗示了比我能解释的更详细的层次上的错误…我现在只知道您的EAR可能不会包含类LotUpdates
,或者它可能在那里,但没有正确地添加到类路径中)
发布于 2014-11-14 16:24:00
我在Ubuntu上用eclipse也做了同样的事情。EAR文件包含ejb.jar和jpa.jar,jpa.jar在*.ear/lib/中。Jboss 7可以部署耳塞。我认为根本原因是jpa类是用jpa.jar构建和打包的,这样ejb.jar就可以加载它的。
https://stackoverflow.com/questions/26929483
复制