转自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瘦身还能减少问题引发的根源。
相关推荐
common.jar <br>jboss-jmx.jar <br>jboss-system.jar <br>jacc-1_0-fr.jar <br>jgroups-2.2.8.jar <br>oscache-2.1.jar <br>proxool-0.8.3.jar <br>swarmcache-1.0rc2.jar <br>classes12.jar <br>spring.jar <br>...
J2EE发展趋势 <br>案例研究 <br>J2EE Tutorial<br>Java Pet Store<br>Java Adventure Builder<br>钟情JBoss 4.x<br>全书内容安排<br>1 安装JBoss 4.x<br>2 安装JBoss-IDE 1.4.0<br>3 基于JBoss 4.x的JSF应用开发<br>...
<br>配置myclipse下的Jboss服务器<br><br> EJBStatelss<br><br>Jboss测试<br><br> http://localhost:8080/<br><br>准备工程<br> <br>新建bean<br> Session建立完毕,我们只建了remote的访问方式<br> 写入代码:<br> ...
<artifactId>jboss-as-maven-plugin</artifactId> <version>7.9.Final</version> <!-- 根据你的JBoss版本选择合适的插件版本 --> <configuration> <serverName>localhost</serverName> <!-- JBoss服务器的地址 -...
本示例利用JBoss提供的JAAS...</module-option><br> <module-option name="hashAlgorithm">MD5</module-option><br> <module-option name="hashEncoding">base64</module-option> <br> <module-option name="loginBo">...
<br><br>JBoss jBPM 只有最小的倚赖性可以很容易的作为java库来使用.当然它也可以用在吞吐量极为关键的J2EE 群应用服务器环境中. <br><br>JBoss jBPM 可以同任何数据库配置可以部署在任何应用服务器上. <br><br>
<br><br>JBoss jBPM 只有最小的倚赖性可以很容易的作为java库来使用.当然它也可以用在吞吐量极为关键的J2EE 群应用服务器环境中. <br><br>JBoss jBPM 可以同任何数据库配置可以部署在任何应用服务器上. <br><br>
<groupId>org.jboss.logging</groupId> <artifactId>jboss-logging</artifactId> <version>3.1.0.CR2</version> </dependency> ``` JSR 303的引入使得Java应用程序的数据验证更加标准化和便捷,提高了代码的...
<br><br>JBoss jBPM 只有最小的倚赖性可以很容易的作为java库来使用.当然它也可以用在吞吐量极为关键的J2EE 群应用服务器环境中. <br><br>JBoss jBPM 可以同任何数据库配置可以部署在任何应用服务器上. <br>
JBoss jBPM 是一个复杂的可扩展的工作流管理系统. JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,... <br>JBoss jBPM 可以同任何数据库配置可以部署在任何应用服务器上.<br>
|--persistence.xml EJB3的持久化配置文件<br><br> |--DBScript <br> |--employee.sql 数据库脚本及测试数据 <br> |--mysql-connector-java-5.1.5-bin.jar MySql的驱动程序包<br> |--mysql-ds.xml 在JBoss中配置...
目录<br><br>前言<br>1. 一般信息<br>1.1. 关于本手册<br>1.2. 本手册采用的惯例<br>1.3. MySQL AB概述<br>1.4. MySQL数据库管理系统概述<br>1.4.1. MySQL的历史<br>1.4.2. MySQL的的主要特性<br>1.4.3. MySQL稳定性...
系统功能介绍: <br> 管理员功能 :<br> <br> 添加用户<br> 查看所有用户<br> 增加班费收入<br> 增加班费支出<br> 查看所有班费详细记录<br> 查看班费总帐<br><br> 普通用户功能:<br><br> 查看班费总帐<br><br><br>...
tomcat与jboss冲突的日志jar包,由于在jboss中存在此日志jar包,使用jboss时,必须删除它
这个压缩包包含的四个jar文件分别是JBoss在不同模块中的核心库,下面将详细解释每个文件的主要功能和在JBoss中的作用。 1. **jboss-jmx.jar**: JMX(Java Management Extensions)是Java平台的标准管理框架,用于...
3. **启用自动启动**:如果jar包没有自动启动,可以在部署目录下创建一个与其同名的`.deployment`文件,使JBOSS在启动时识别并加载该应用,例如: ``` echo. > %JBOSS_HOME%\standalone\deployments\myapp.jar....
总的来说,"snowdrop-vfs.jar" 和 "jboss-logging.jar" 这两个jar包是解决Spring与JBoss集成问题的重要工具,它们优化了类加载和日志处理,提高了应用的可维护性和稳定性。在开发和部署过程中,理解并合理使用这些...
这个压缩包文件"jboss-logging-3.0.0.ga.jar"是JBoss的logging组件,它是JBoss框架中用于日志记录的重要模块。JBoss Logging 提供了一种灵活的日志解决方案,它支持多种日志实现,如Log4j、Java Util Logging 和 ...
Jboss的JSF的组件框架RichFaces 3.2版本发布了,这个版本具有如下新的组件: <br>* Combo Box <br>* Inplace Input <br>* Inplace Select <br>* Progress Bar <br>* File Upload <br>* Columns <br>* Pick List <br>...
Jboss的JSF的组件框架RichFaces 3.2版本发布了,这个版本具有如下新的组件: <br>* Combo Box <br>* Inplace Input <br>* Inplace Select <br>* Progress Bar <br>* File Upload <br>* Columns <br>* Pick List <br>...