JBoss AS 7 迁移 - 部署失败问题

Posted

技术标签:

【中文标题】JBoss AS 7 迁移 - 部署失败问题【英文标题】:JBoss AS 7 migration - deployment failure issue 【发布时间】:2013-10-07 07:52:54 【问题描述】:

当我在 JBoss AS 7 中部署我的工作战争文件时,我遇到了以下异常

11:59:11,090 WARN [org.jboss.as.server.deployment](MSC 服务线程 1-6)JBAS015893:遇到无效的类名 'com.sun.jersey.server.impl.model.parameter.multivalued.StringReaderProviders$服务类型 'com.sun.jersey.spi.StringReaderProvider' 的 StringConstructor' 11:59:11,091 WARN [org.jboss.as.server.deployment](MSC 服务线程 1-6)JBAS015893:遇到无效的类名 'com.sun.jersey.server.impl.model.parameter.multivalued.StringReaderProviders$服务类型 'com.sun.jersey.spi.StringReaderProvider' 的 DateProvider' 11:59:11,092 WARN [org.jboss.as.server.deployment](MSC 服务线程 1-6)JBAS015893:遇到无效的类名 'com.sun.jersey.server.impl.model.parameter.multivalued.JAXBStringReaderProviders$服务类型 'com.sun.jersey.spi.StringReaderProvider' 的 RootElementProvider' 11:59:11,923 错误 [org.jboss.msc.service.fail](MSC 服务线程 1-5)MSC00001:无法启动服务 jboss.deployment.unit。“myimpl.war”.POST_MODULE:org.jboss.msc服务 jboss.deployment.unit."myimpl.war".POST_MODULE 中的 .service.StartException:无法处理部署“myimpl.war”的阶段 POST_MODULE 在 org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final] 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_37] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_37] 在 java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_37] 引起:java.lang.NoClassDefFoundError: org/hibernate/exception/ConstraintViolationException 在 java.lang.Class.getDeclaredConstructors0(Native Method) [rt.jar:1.6.0_37] 在 java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) [rt.jar:1.6.0_37] 在 java.lang.Class.getConstructor0(Class.java:2699) [rt.jar:1.6.0_37] 在 java.lang.Class.getConstructor(Class.java:1657) [rt.jar:1.6.0_37] 在 org.jboss.as.web.deployment.jsf.JsfManagedBeanProcessor.deploy(JsfManagedBeanProcessor.java:108) 在 org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final] ... 5 更多 引起:java.lang.ClassNotFoundException: org.hibernate.exception.ConstraintViolationException from [Module "deployment.myimpl.war:main" from Service Module Loader] 在 org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) [jboss-modules.jar:1.1.1.GA] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) [jboss-modules.jar:1.1.1.GA] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) [jboss-modules.jar:1.1.1.GA] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423) [jboss-modules.jar:1.1.1.GA] 在 org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) [jboss-modules.jar:1.1.1.GA] 在 org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) [jboss-modules.jar:1.1.1.GA] ... 11 更多 11:59:11,938 INFO [org.jboss.as](MSC 服务线程 1-7)JBAS015951:管理控制台监听 http://127.0.0.1:9990 11:59:11,938 错误 [org.jboss.as](MSC 服务线程 1-7)JBAS015875:JBoss AS 7.1.1.Final “Brontes”在 72380 毫秒内启动(有错误) - 启动了 1548 个服务中的 1402 个(1 个服务失败或缺少依赖项,136 个服务是被动的或按需的) 11:59:11,939 INFO [org.jboss.as.server](DeploymentScanner-threads - 2)JBAS015870:部署“myimpl.war”的部署已回滚并显示失败消息 “JBAS014671:失败的服务”=> “jboss .deployment.unit.\"myimpl.war\".POST_MODULE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"myimpl.war\".POST_MODULE: 无法处理阶段 POST_MODULE部署 \"myimpl.war\"" 11:59:12,036 INFO [org.jboss.as.server.deployment](MSC 服务线程 1-5)JBAS015877:在 95 毫秒内停止部署 myimpl.war 11:59:12,038 INFO [org.jboss.as.controller](DeploymentScanner-threads - 2)JBAS014774:服务状态报告 JBAS014777:无法启动的服务:服务 jboss.deployment.unit."myimpl.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit."myimpl.war".POST_MODULE: 无法部署“myimpl.war”的处理阶段 POST_MODULE 11:59:12,040 错误 [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) "JBAS014653: 复合操作失败并已回滚。失败的步骤:" => "操作步骤- 2" => "JBAS014671: 失败的服务" => "jboss.deployment.unit.\"myimpl.war\".POST_MODULE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit .\"myimpl.war\".POST_MODULE: 无法处理部署的阶段 POST_MODULE \"myimpl.war\""

我认为默认情况下 JBoss AS 7 支持在启动时将休眠 jar 添加到类路径中(因为休眠模块已经在 J​​Boss AS7 中可用)。我在 hibernate-core-4.0.1.Final.jar 下找到了 ConstraintViolationException 类(在 'modules\org\hibernate\main' 文件夹结构下)。那么为什么会出现这个 NoClassDefFoundError 呢?

请注意,我没有使用 maven 来解决依赖关系。为了解决依赖关系,我手动将 jar 文件放入 myimpl.war\WEB-INF\lib

无论如何,我在 WEB-INF\lib 目录中添加了休眠的 jar (hibernate3.jar),之后出现了一些新异常,如下所示

12:51:19,146 错误 [org.jboss.msc.service.fail](MSC 服务线程 1-6)MSC00001:无法启动服务 jboss.deployment.unit."myimpl.war".POST_MODULE: org.jboss.msc服务 jboss.deployment.unit."myimpl.war".POST_MODULE 中的 .service.StartException:无法处理部署“myimpl.war”的阶段 POST_MODULE 在 org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final] 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_37] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_37] 在 java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_37] 原因:org.jboss.as.server.deployment.DeploymentUnitProcessingException:JBAS011232:只允许一个 JAX-RS 应用程序类。 com.sun.jersey.api.core.WebAppResourceConfig com.sun.jersey.api.core.ResourceConfig com.sun.jersey.api.core.ClassNamesResourceConfig com.sun.jersey.api.core.ScanningResourceConfig com.sun.jersey. api.core.ClasspathResourceConfig com.sun.jersey.api.core.DefaultResourceConfig com.sun.jersey.api.core.PackagesResourceConfig com.sun.jersey.server.impl.application.DeferredResourceConfig com.sun.jersey.api.core。应用适配器 在 org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.scan(JaxrsScanningProcessor.java:209) 在 org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.deploy(JaxrsScanningProcessor.java:105) 在 org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final] ... 5 更多

请告诉我如何解决这个问题

【问题讨论】:

你可以在This Link的WEB-INF/lib文件夹中找到jar 【参考方案1】:

您必须在 jboss 部署结构 xml 文件中添加 hibernate jar 的依赖项。尝试一下,让我知道结果

【讨论】:

我添加了对 WEB-INF/lib 目录的依赖,你可以从This Link 找到 lib 目录下的 jars。实际上我没有在 jboss-deployment-sturcture.xml 文件上添加任何依赖项【参考方案2】:

通过从 stanalone.xml 中删除以下两行来解决 org.jboss.as.server.deployment.DeploymentUnitProcessingException

<extension module="org.jboss.as.jaxrs"/> <subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/>

还有hibernate NoClassDefFoundError 是由于hibernate jar 版本问题。在我使用 hibernate3.jar 的 war 文件和包含 hibernate 4.0.1 版本的 JBoss AS7 的 hibernate 模块目录中

【讨论】:

【参考方案3】:

也检查类路径

问题-java.lang.NoClassDefFoundError

根本原因:环境变量部分中设置的 Java 路径不正确

解决方法:设置正确的 JAVA_HOME 路径

步骤->环境变量设置(My Comp-右键->属性->环境变量->高级选项卡->变量)

创建新的 JAVA_HOME 环境变量。

JAVA_HOME .;C:\Program Files (x86)\Java\jdk1.6.0_14

在 PATH 变量部分设置 JAVA_HOME 变量。

PATH %JAVA_HOME%\bin

在 CLASSPATH 变量中设置 JAVA_HOME 变量

CLASSPATH %JAVA_HOME%\jre\lib

重启系统

验证所有变量

回显 %CLASSPATH%

回显 %JAVA_HOME%

回显 %PATH%

编译运行程序

【讨论】:

【参考方案4】:

我同意 sankar 为 jboss 提供的休眠模块添加显式依赖。添加依赖项的其他方法是通过 META-INF 下的 MANIFEST 文件。

下面的链接是关于 Jboss 类加载和依赖关系的好文章。希望对您有所帮助。

http://www.mastertheboss.com/jboss-as-7/jboss-as-7-classloading

【讨论】:

以上是关于JBoss AS 7 迁移 - 部署失败问题的主要内容,如果未能解决你的问题,请参考以下文章

JBoss EAP 7.1 部署失败的集成器:未找到提供程序

无法在jboss AS 7.1.1中部署war文件

在 jboss 中部署应用程序失败

从 JBoss AS 7.1 迁移到 JBoss EAP 7.3.0

迁移到 Jboss 7.0 AS 后 Firefox 和 IE 中的 ViewExpiredException

迁移到 Jboss EAP7 时出现 WELD 异常