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 添加到类路径中(因为休眠模块已经在 JBoss 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 迁移到 JBoss EAP 7.3.0