2014-01-06 80 views
0

我正在使用依靠EJBStudentManagementEJB.jar)进行数据库接口的动态Web项目(StudentManagement.war)。 EJB项目已添加到Web项目的类路径中。然而,在部署时抛出以下例外:jboss-as-7.1.1上的Java .war部署问题。最终

22:23:21,275 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.deployment.unit."StudentManagement.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit."StudentManagement.war".POST_MODULE: Failed to process phase POST_MODULE of deployment "StudentManagement.war" 
    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.runWorker(Unknown Source) [rt.jar:1.7.0_45] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.7.0_45] 
    at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_45] 
Caused by: java.lang.RuntimeException: Error getting reflective information for class student.management.ManageStudentServlet with ClassLoader ModuleClassLoader for Module "deployment.StudentManagement.war: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: Lstudent/management/ManageStudentSessionBeanLocal; 
    at java.lang.Class.getDeclaredFields0(Native Method) [rt.jar:1.7.0_45] 
    at java.lang.Class.privateGetDeclaredFields(Unknown Source) [rt.jar:1.7.0_45] 
    at java.lang.Class.getDeclaredFields(Unknown Source) [rt.jar:1.7.0_45] 
    at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:57) [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: student.management.ManageStudentSessionBeanLocal from [Module "deployment.StudentManagement.war: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.performLoadClass(ConcurrentClassLoader.java:398) 
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) 
    ... 15 more 

这表明web模块找不到在bean中定义的类。我已经改变了我的默认:%JBOSS_HOME%\standalone\deployments\StudentManagement.war\META-INF\MANIFEST.MF到:

Manifest-Version: 1.0 
Class-Path: file:/C:/Utils/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final/standalone/deployments/StudentManagementEJB.jar 

尽管这样的例外仍然存在。在类路径:和URI之后有一个空格(../ standalone),后跟一个换行符。

我的语法有什么问题吗?
我使用java ee 7,jboss-as-7.1.1.Final和Win 7 x64。

+0

您可以在.war中包含.jar文件吗? – SpacePrez

+0

你已经用EJB jar打包了类,所以它只能在EJB模块中使用,而不能在WAR模块中使用。为了使它在EJB和WAR模块中均可用,您必须使用EAR进行打包。 –

回答

1

事实证明,StudentManagementEJB.jar文件在部署时未复制到/ lib目录中。除了将它添加到类路径,还必须将其复制到

%JBOSS_HOME%\standalone\deployments\<ProjectName>.war\WEB-INF\lib

目录(如果该项目部署的.war)。在这种情况下,ProjectName是StudentManagement。

0

请勿参考部署文件夹(独立/部署)。如果您使用其他形式的部署,例如部署的应用程序不是真正部署在那里,而是从那里复制到数据目录,或者甚至不在部署文件夹中。 jboss-cli.bat

有一些方法可以解决这个问题。

1)不要单独打包EJB,而是将其包含在WAR(最简单)中。

2)创建EAR并将WAR和EJB-JAR一起打包到EAR(经典)中。

3)从接口类和从EJB.jar和WAR引用到模块创建一个模块。见例如“依赖关系:” 在https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7

4)舱单EJB部署类似的战争参考:

Dependencies:deployment.StudentManagementEJB.jar 

https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7

的顶级部署模块名遵循格式 deployment.myarchive.war,而子部署被命名为 deployment.myear.ear.mywar.war。

这意味着它是可能的部署,从 进口类中使用其他部署模块名称的另一个部署,如何添加一个明确的模块依赖的 细节说明如下 。