网店版重生系列:回头看Jboss配置项CatchSystemOut、Java2ClassLoadingCompliance、UseJBossWebLoader

jboss classloader机制以及scope配置 1.  概念介绍 UCL : org.jboss.mx.loading.UnifiedClassLoader3 ,它继承标准的java.net.URLClassLoader,覆盖了标准parent delegation模型以使用共享class和资源仓库   仓库(responsitory): org.jboss.mx.loading.UnifiedLoaderRepository3。   平面模型... 阅读详情

最近一直忙于做一个纯技术驱动的项目:网店重生!就是要把网店版改造成为基于Mysql的分布式应用;由于在过去的1年半的时间里面,网店版都没有怎么发展,只是一些例行维护;此次要这么大规模重构的确是一个不小的挑战,那在这个重构过程中,我们也再次遇到了当初的一些老问题,但由于以前的主力开发人员早已经不在一个团队里面了,所以很多的小问题还是让我们费了一些力气,趁此机会将这个过程中遇到的一些小问题记录下来;

由于不被发展,所以以前的很多测试环境都已经被用作其他用途了,而且目前用的Jboss主要版本与当初是不一致的;本篇要讨论的是关于Jboss和Log4j的日志冲突问题;其一就是要解决应用启动过程中的这两个异常,其二就是要搞清楚为什么会出现这2个异常,以及在解决问题过程中使用到的几个关键配置项;
首先我们来看下我们经常会遇到的两类异常信息,如下所示:

异常1:

异常2:

要想解决以上2个异常方法很简单,修改Jboss的3个配置项即可,主要是针对于Jboss 4.*系列,对于之前的版本一般来说只会出现异常1的情况,此时只需要设置CatchSystemOut为false即可;配置项如下:
JBOSS_HOME/server/default/conf/jboss-service.xml
  
JBOSS_HOME/server/default/jbossweb*.sar/META-INFO/jboss-service.xml

或者在web应用下的jboss-web.xml

下面我们来分析下以上涉及的3个配置项到底都是什么意思:

  • CatchSystemOut:他是Log4jService中的一个属性,默认情况下没有显示配置该属性,也即属性值为true;
    因为Jboss应用服务器自身也用Log4j来作为日志框架,而我们部署的应用中一般也会用Log4j来进行日志记录;如果配置不当,则有可能导致两者出现冲突,比如:应用中也配置了ConsoleAppender,那这样就会导致Jboss启动时出现上面的 异常1;
    所以一般来说,推荐应用中不要重复设置ConsoleAppender;如果一定要设置,则需要修改CatchSystemOut的默认值,将其显示设置为false,告诉Jboss无需打印来自Console的相关信息;
  • Java2ClassLoadingCompliance:该配置项主要是告诉Jboss在进行classload时是否采取parent first的加载策略;除了jbossweb*.sar/META-INFO/jboss-service.xml之外,还可以在应用*ar包下面的jboss-web.xml中设置<class-loading java2ClassLoadingCompliance="true">;
    若设置为true,则表示优先让父级classloader加载相关class,如果无法加载再利用当前classloader加载;
    若设置为false,即采取child first的加载策略,表示优先让当前classloader加载相关class,如果无法加载再委托给父级classloader加载;
    注意:该配置在4.0.3的版本中有bug,具体可见:http://jira.jboss.com/jira/browse/JBAS-2347
    这里涉及到Jboss的classload机制,详见原网店技术分享下面小飞飞在wiki中相关文章:
    http://wiki.alisoft-inc.com/confluence/pages/viewpage.action?pageId=5818
  • UseJBossWebLoader:该配置表明是否使用Jboss自身的classloader来加载webApp相关的资源;因为Jboss是通过集成Tomcat来实现Web Container的,而两者都有自己独立的classloader;
    若设置为true,则表示Web应用加载时都将使用Jboss统一的classloader,即此时采用共享的扁平的UnifiedClassLoader;
    若设置为false,则表示Web应用采用自己独立的WebAppClassLoader进行加载,此时Web应用和Jboss之间是完全隔离的,这也是该配置项的默认值;
Jboss as 基本设置 Step one: download JBoss Application Server , e.g. jboss-4.2.2.GA Step two: extract jboss-4.2.2.GA.zip to a local dir say ${JBOSS_HOME} Step three: config - 注:以下配置对应的jboss本为4.2.2.GA,部署的应用类型为ear 阅读详情

相关推荐

一个关于java.lang.ClassCastException: $Proxy65的错误解决办法

<br />错误描述:<br />今天用jsp调用一个会话bean的时候,出现了一个“java.lang.ClassCastException: $Proxy65”的错误,百度了一下,中文的解释是:<br />说JBOSS的WEB加载器默认是FALSE,根据配置文件的说明,其目的就是当出现多个加载器的时候,通过设定真假值来决定是否把JBOSS的WEB加载器作为统一的加载器。也就是说,如果在程序中特殊指明了某一个加载器,或者lib中用到了其它本tomcat的JAR包,那么JBOSS自带的加载器设为FLASE

itjoy的专栏 2334

Jboss启动报错——DailyRollingFileAppender无法转换异常

问题:Jboss在启动时,报错java.lang.ClassCastException: org.jboss.logging.appender.DailyRollingFileAppender。 解决办法:D:/jboss-4.0.5.GA/server/default/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xml文件,修改

summer_lilac的专栏 1110

JBoss启动时无法转换DailyRollingFileAppender类的解决办法

错误现象: 12:49:46,251 INFO [STDOUT] log4j:ERROR A "org.jboss.logging.util.OnlyOnceErrorHandler" object is not assignable to a "oache.log4j.spi.ErrorHandler" variable.12:49:46,252 INFO [STDOUT] log4j:ER...

每一个明天 402

JBoss应用服务器相关问题

问题1:Jsp exception,错误代码:Unable to initialize TldLocationsCache: invalid entry size 解决方法:注解掉 jboss-4.0.5.GA\server\slim\deploy\jbossweb-tomcat55.sar\conf\web.xml     engineOptionsClass    or

小葱的博客 568

useJBossWebClassLoader in JBoss5

Q: I set useJBossWebClassLoader=true in war-deployers-jboss-beans.xml but it doesn't work?   A: This parameter is no longer used in JBoss5. The "WarDeployer" no longer handles the classloading con...

wukunlsy的专栏 169

Jboss部署问题整理

问题一: ERROR [JBossContextConfig] XML error parsing: WEB-INF/context.xml    org.jboss.xb.binding.JBossXBRuntimeException: Failed to create a new SAX parser 解决方案:在Jboss的部署目录,找到刚刚部署的项目WebRoot/lib下,找到:

牛儿吃草的博客 1万+

主流web容器(jetty,tomcat,jboss)的classloader机制对比和相关问题分析

背景      前段时间一直在做应用容器的迁移,将公司的应用容器从jboss,tomcat统一迁移到jetty。在整个迁移过程中遇到最多的潜在问题还是在classloader机制上,这里记录一下希望能对大家有所帮助,避免重复走弯路。   啥都不说,先来看下遇到的几个问题,比较纠结的问题。 问题1: (jar sealed问题) Caused by: java.lang.SecurityE...

agapple 400

jboss classloader加载机制

1. 概念 UCL : org.jboss.mx.loading.UnifiedClassLoader3 ,它继承标准的java.net.URLClassLoader,覆盖了标准parent delegation模型以使用共享class和资源仓库 仓库(responsitory): org.jboss.mx.loading.UnifiedLoad...

weixin_34360651的博客 363

JBOSS ClassLoadingConfiguration

Discussion By default JBoss (prior to version 3.2) uses a flat class loading model that avoids the need to redundantly include classes in different layers. WAR files would only have the web content...

yangzibin的博客 199

jboss log4j冲突分析与解决

Log4j作为日志组件被大多数的系统所使用,Jboss也不例外的采用了Log4j作为它的日志输出组件。但在使用JBoss时,很多人经常碰到一些冲突,这些冲如自己配置的log4j文件无效,系统抛org.jboss.logging.util.OnlyOnceErrorHandlerobject is not assignable to a org.apache.log4j.spi.Erro

youfly的专栏 5766

JBoss 类加载器问题解决

<br />最近在将项目部署到jboss上时出现一些问题,经过两天研究终于解决了,<br /> <br />在JSOSS4.2.3中JBOSS的WEB加载器默认是FALSE,根据配置文件的说明,其目的就是当出现多个加载器的时候,通过设定真假值来决定是否把JBOSS的WEB加载器作为统一的加载器。也就是说,如果在程序中特殊指明了某一个加载器,或者lib中用到了其它本tomcat的JAR包,那么JBOSS自带的加载器设为FLASE,就会导致WAR包的JAR和类文件都没有被JBOSS的加载器加载,所以把JBOS

宏轩JAVA技术专栏 3849

jboss4.2中的类加载问题

jboss4.2 出现类似以下问题:java.lang.NoClassDefFoundError: com/sun/facelets/tag/AbstractTagLibrary如何解决?修改文件modify jboss-4.2.0.CR2/server/default/deploy/jboss-web.deployer/META-INF/jboss-service.xml

1100

[Eclipse Jboss]System.out.println和logger在控制台不显示

1、问题描述 在eclipse中使用jboss作为web服务器,在代码中使用System.out.println(“打印消息”)。 logger.info(“打印消息”); 但在控制台都没有消息输出。 2、问题处理 查看了一下web-info下面没有log4j.xml文件 从另外一个项目中copy了一个,放到web-info下。 log4j.xml的内容如下:<log4j:config

ytangdigl的博客 5647

JBOSS 下的web应用中用system.out.println不生效,不显示到控制台

问题原因: 自己的应用程序中采用了log4j 记录日志, 而JBOSS 的日志也是通过log4j来实现的,,所以两者有冲突 解决办法: 参见下面的主题: http://community.jboss.org/message/635446#635446 只要在jboss-server.xml 中的log4j 节点下增加一个属性就可以了:  false

JasonYao的程序猿路 3741

jboss对system.out输出的没有处理好

jboss服务器对java应用代码中的System.out的控制台输出做了处理: 1、缓存输出 2、统一了输出格式的头部 一开始我以为,jboss对System.out也作了性能方面的优化:比如使用队列等,可是通过关闭hibernate的show_sql选项,我们发现,性能竟让提高了50%。由此观之,jboss对控制台输出没有处理好,至少性能上。 ...

技术迷 259

一个JBOSS同时发布两个应用的两种方法

在一个jboss中同时发布两个应用,并且两个应用中含有相同的类,可采用以下两个方法来实现: 一、在\jboss-3.2.8.SP1\server\default\deploy\jbossweb-tomcat50.sar\META-INF\jboss-service.xml这个文件中,将其中的                  uses a unified class loader as t

duxikuan的专栏 2215

jboss 7 log输出包含System.out.println输出,并且中文为乱码

使用logger输出的中文正常显示,但是System.out.println中如果包含中文的话,就会显示乱码。 我是这样解决的。 在%JBOSS_HOME%/bin/standalone.conf 中配置export LANG="en_US.UTF-8"重启解决

mmoooodd的专栏 2709
上一篇: 网店版重生系列:都是Spring配置中自动注入惹的祸
下一篇: 网店版重生系列:Linux下Jboss启动、关闭、端口配置等常见问题FAQ
sfdev
博客等级 码龄22年 467粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值