`

<转>Jboss jar包冲突及jar加载顺序

 
阅读更多

转自http://blog.163.com/javaee_chen/blog/static/17919507720116149511489

 

将一个完整的.war包部署到Jboss容器中,启动后报如下错误:

15:04:48,632 ERROR [ContextLoader] Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.activemq.xbean.XBeanBrokerService#0' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.slf4j.MDC.getCopyOfContextMap()Ljava/util/Map;
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
        at java.security.AccessController.doPrivileged(Native Method)
分析情况:
在jboss根目录下执行如下命令
$find . -name slf4j*.jar                      
./bin/configuration/org.eclipse.osgi/bundles/24/1/.cp/slf4j-log4j12-1.4.3.jar
./bin/configuration/org.eclipse.osgi/bundles/24/1/.cp/slf4j-api-1.4.3.jar
./server/default/deploy/configuration/org.eclipse.osgi/bundles/14/1/.cp/slf4j-log4j12-1.4.3.jar
./server/default/deploy/configuration/org.eclipse.osgi/bundles/14/1/.cp/slf4j-api-1.4.3.jar
./server/default/deploy/etl_sngps.war/WEB-INF/lib/slf4j-api-1.6.1.jar
./server/default/deploy/etl_sngps.war/WEB-INF/lib/slf4j-log4j12-1.6.1.jar
./server/default/deploy/jboss-web.deployer/configuration/org.eclipse.osgi/bundles/14/1/.cp/slf4j-log4j12-1.4.3.jar
./server/default/deploy/jboss-web.deployer/configuration/org.eclipse.osgi/bundles/14/1/.cp/slf4j-api-1.4.3.jar
明明项目中lib地下的是1.6版本的,为什么还提示java.lang.NoSuchMethodError: org.slf4j.MDC.getCopyOfContextMap()Ljava/util/Map;(注:1.4一下版本会报这个错误,因为其不存在这里面的某个方法)
 
查看Jboss jar加载文档:
1)        org.jboss.Main.main(String[]) 为入口. 
2)        main 函数创建一个名叫”jboss”的线程组, 然后创建一个属于该组的线程, 在线程中执行boot方法. 
3)        boot 方法首先处理main函数中的参数(及一些其它的系统环境设置), 接着就用系统的属性创建了org.jboss.system.server.ServerLoader实例[new ServerLoader(props)]. 
4)        ServerLoader 注册Jboss相关的类路径, 包括XML解析器, jboss-jmx.jar, concurrent.jar及其它的一些额外的类路径. 
这里一般都是在JBOSS_HOME\lib下面的jar. 
5)        ServerLoader 通过load(ClassLoader)方法创建Jboss Server实例. 参数ClassLoader是ClassLoader parentCL = Thread.currentThread(). getContextClassLoader( )得到的当前线程的类加载器. 创建的Server实例是org.jboss.system.server.Server接口的实现. load(ClassLoader)方法的细节: 
?  用jar包及在ServerLoader中注册的类路径创建一个URLClassLoader的实例, 把传入的ClassLoader作为该URLClassLoader的parent. 
?  Server 接口的实现类由系统属性 jboss.server.type决定, 默认是 org.jboss.system.server.ServerImpl. 
?  URLClassLoader 通过无参构造函数加载Server接口实现的实例. 在加载前把当前线程的类加载器置为该URLClassLoader, 在加载完成后再置回之前传入的ClassLoader. 
 
6)        Server 实例用系统属性进行初始化[server.init(props)]. 
7)        服务起动[server.start()]. 起动过程的默认实现如下: 
?  把当前线程类型加载器置为加载该Server接口实现实例的ClassLoader. 
?  在jboss域内, 通过MBeanServerFactory的createMBeanServer(String)方法创建MbeanServer实例. 
?  在MBean Server上注册ServerImpl和ServerConfigImpl两个MBean. 
?  初始化统一的类加载仓库(unified class loader repository), 用来装载服务器配置目录及其它可选目录下的jar文件. 对于每一个jar文件和类目录都会创建一个相应的org.jboss.jmx.loading.UnifiedClassLoader实例, 并且注册到统一的仓库中. 其中一个UnifiedClassLoader实例会被设置为当前线程上下文的ClassLoader. [?: This effectively makes allUnifiedClassLoaders available through the thread context class loader.] 
?  接下来创建org.jboss.system.ServiceController的MBean实例. ServiceController管理JBoss MBean服务的生命周期. 
 
需要注意的是:JBOSS在加载自带的核心JAR之后,将会优先加载下面的两个目录 
1、D:\jboss\server\default\lib 
2、D:\jboss\server\default\tmp\deploy 
 
但是上面三组均不在以上1 2 所指的2个目录中。接着看......
找到如下文件,注意这个文件里面蕴藏着jar加载的有一个规则.
\jboss-4.2.3.GA\server\default\conf\xmdesc org.jboss.deployment.MainDeployer-xmbean.xml
最先加载的是后缀名为deployer目录下应用或者服务;
250:.rar,300:-ds.xml,400:.jar,500:.war,550:.jse,650:.ear,800:.bsh
<descriptors>
         <value value="250:.rar,300:-ds.xml,400:.jar,500:.war,550:.jse,650:.ear,800:.bsh"/>
</descriptors>
可以通过调整这个value来改变加载规则。
 
这里已经很清楚了,上面所引爆的问题,正是由于/jboss-web.deployer下面所用的1,4版本导致的。删除后,一切正常。
这里面还有一个问题,有些时候我们在使用jboss容器前,应该认真的看下jboss目录的机构及大致各个目录的作用,然后做一些精简删除无用的或者无关精要的目录,不仅可以让jboss瘦身还能减少问题引发的根源。
分享到:
评论

相关推荐

    (2.0版本)自己写的struts2+hibernate+spring实例

    common.jar &lt;br&gt;jboss-jmx.jar &lt;br&gt;jboss-system.jar &lt;br&gt;jacc-1_0-fr.jar &lt;br&gt;jgroups-2.2.8.jar &lt;br&gt;oscache-2.1.jar &lt;br&gt;proxool-0.8.3.jar &lt;br&gt;swarmcache-1.0rc2.jar &lt;br&gt;classes12.jar &lt;br&gt;spring.jar &lt;br&gt;...

    基于JBoss 4.x的J2EE 1.4应用开发指南

    J2EE发展趋势 &lt;br&gt;案例研究 &lt;br&gt;J2EE Tutorial&lt;br&gt;Java Pet Store&lt;br&gt;Java Adventure Builder&lt;br&gt;钟情JBoss 4.x&lt;br&gt;全书内容安排&lt;br&gt;1 安装JBoss 4.x&lt;br&gt;2 安装JBoss-IDE 1.4.0&lt;br&gt;3 基于JBoss 4.x的JSF应用开发&lt;br&gt;...

    myclipse+jboss+ejbStateless

    &lt;br&gt;配置myclipse下的Jboss服务器&lt;br&gt;&lt;br&gt; EJBStatelss&lt;br&gt;&lt;br&gt;Jboss测试&lt;br&gt;&lt;br&gt; http://localhost:8080/&lt;br&gt;&lt;br&gt;准备工程&lt;br&gt; &lt;br&gt;新建bean&lt;br&gt; Session建立完毕,我们只建了remote的访问方式&lt;br&gt; 写入代码:&lt;br&gt; ...

    在JBOSS下自定义JAAS登录模块的示例

    本示例利用JBoss提供的JAAS...&lt;/module-option&gt;&lt;br&gt; &lt;module-option name="hashAlgorithm"&gt;MD5&lt;/module-option&gt;&lt;br&gt; &lt;module-option name="hashEncoding"&gt;base64&lt;/module-option&gt; &lt;br&gt; &lt;module-option name="loginBo"&gt;...

    jbpm教程

    &lt;br&gt;&lt;br&gt;JBoss jBPM 只有最小的倚赖性可以很容易的作为java库来使用.当然它也可以用在吞吐量极为关键的J2EE 群应用服务器环境中. &lt;br&gt;&lt;br&gt;JBoss jBPM 可以同任何数据库配置可以部署在任何应用服务器上. &lt;br&gt;&lt;br&gt;

    jbpm中文用户指南

    &lt;br&gt;&lt;br&gt;JBoss jBPM 只有最小的倚赖性可以很容易的作为java库来使用.当然它也可以用在吞吐量极为关键的J2EE 群应用服务器环境中. &lt;br&gt;&lt;br&gt;JBoss jBPM 可以同任何数据库配置可以部署在任何应用服务器上. &lt;br&gt;&lt;br&gt;

    工作流详解

    &lt;br&gt;&lt;br&gt;JBoss jBPM 只有最小的倚赖性可以很容易的作为java库来使用.当然它也可以用在吞吐量极为关键的J2EE 群应用服务器环境中. &lt;br&gt;&lt;br&gt;JBoss jBPM 可以同任何数据库配置可以部署在任何应用服务器上. &lt;br&gt;

    jBoss jBMP.chm

    JBoss jBPM 是一个复杂的可扩展的工作流管理系统. JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,... &lt;br&gt;JBoss jBPM 可以同任何数据库配置可以部署在任何应用服务器上.&lt;br&gt;

    JSF1.2+EJB3.0实现的一个项目实例

    |--persistence.xml EJB3的持久化配置文件&lt;br&gt;&lt;br&gt; |--DBScript &lt;br&gt; |--employee.sql 数据库脚本及测试数据 &lt;br&gt; |--mysql-connector-java-5.1.5-bin.jar MySql的驱动程序包&lt;br&gt; |--mysql-ds.xml 在JBoss中配置...

    mysql5.1中文手册

    目录&lt;br&gt;&lt;br&gt;前言&lt;br&gt;1. 一般信息&lt;br&gt;1.1. 关于本手册&lt;br&gt;1.2. 本手册采用的惯例&lt;br&gt;1.3. MySQL AB概述&lt;br&gt;1.4. MySQL数据库管理系统概述&lt;br&gt;1.4.1. MySQL的历史&lt;br&gt;1.4.2. MySQL的的主要特性&lt;br&gt;1.4.3. MySQL稳定性...

    班级班费管理系统EJB3.0+mysql

    系统功能介绍: &lt;br&gt; 管理员功能 :&lt;br&gt; &lt;br&gt; 添加用户&lt;br&gt; 查看所有用户&lt;br&gt; 增加班费收入&lt;br&gt; 增加班费支出&lt;br&gt; 查看所有班费详细记录&lt;br&gt; 查看班费总帐&lt;br&gt;&lt;br&gt; 普通用户功能:&lt;br&gt;&lt;br&gt; 查看班费总帐&lt;br&gt;&lt;br&gt;&lt;br&gt;...

    tomcat与jboss冲突的日志jar包

    tomcat与jboss冲突的日志jar包,由于在jboss中存在此日志jar包,使用jboss时,必须删除它

    RichFaces 3.2.0 GA的demo

    Jboss的JSF的组件框架RichFaces 3.2版本发布了,这个版本具有如下新的组件: &lt;br&gt;* Combo Box &lt;br&gt;* Inplace Input &lt;br&gt;* Inplace Select &lt;br&gt;* Progress Bar &lt;br&gt;* File Upload &lt;br&gt;* Columns &lt;br&gt;* Pick List &lt;br&gt;...

    richfaces-ui-3.2.0.GA-bin.part2.rar

    Jboss的JSF的组件框架RichFaces 3.2版本发布了,这个版本具有如下新的组件: &lt;br&gt;* Combo Box &lt;br&gt;* Inplace Input &lt;br&gt;* Inplace Select &lt;br&gt;* Progress Bar &lt;br&gt;* File Upload &lt;br&gt;* Columns &lt;br&gt;* Pick List &lt;br&gt;...

    jboss jar包snowdrop-vfs.jar和jboss-logging.jar

    jboss jar包snowdrop-vfs.jar和jboss-logging.jar用于解决解决JBoss与Spring兼容的问题

    jboss相关Jar包

    jboss-jmx.jar jboss-cache.jar jboss-common.jar jboss-system.jar 网上都是分散的,我把他们合起来一起上传了,方便大家下载!

    Java类加密程序

    自定义main方法),运行java时,带上参数-agentlib:&lt;所在路径&gt;\hidea &lt;br&gt;Tomcat等JAVA Web Server,修改启动脚本,把执行java的命令行加上参数-agentlib:&lt;所在路径&gt;\hidea &lt;br&gt;JBOSS等JAVA Application Server...

    The JBoss 4 Application Server Guide

    The JBoss 4 Application Server Guide&lt;br&gt;PDF格式&lt;br&gt;&lt;br&gt;JBOSS AS 4.0.4

    C++网络服务开发套件0.5.5

    系统&lt;br&gt; 集成的C++通用通讯平台, 类似于JAVA的WEB 服务器(如TOMCAT、JBOSS等); 统一管理C++的SOCKET通讯、线程沲管理、调用管理等;&lt;br&gt; 可以注册为NT服务, 具实时监控重启功能;&lt;br&gt;&lt;br&gt;b. 通讯&lt;br&gt; 基于XML文本...

Global site tag (gtag.js) - Google Analytics