网店版重生系列:回头看Jboss配置项CatchSystemOut、Java2ClassLoadingCompliance、UseJBossWebLoader
最近一直忙于做一个纯技术驱动的项目:网店重生!就是要把网店版改造成为基于Mysql的分布式应用;由于在过去的1年半的时间里面,网店版都没有怎么发展,只是一些例行维护;此次要这么大规模重构的确是一个不小的挑战,那在这个重构过程中,我们也再次遇到了当初的一些老问题,但由于以前的主力开发人员早已经不在一个团队里面了,所以很多的小问题还是让我们费了一些力气,趁此机会将这个过程中遇到的一些小问题记录下来;
由于不被发展,所以以前的很多测试环境都已经被用作其他用途了,而且目前用的Jboss主要版本与当初是不一致的;本篇要讨论的是关于Jboss和Log4j的日志冲突问题;其一就是要解决应用启动过程中的这两个异常,其二就是要搞清楚为什么会出现这2个异常,以及在解决问题过程中使用到的几个关键配置项;
首先我们来看下我们经常会遇到的两类异常信息,如下所示:
异常1:
ERROR: invalid console appender config detected, console stream is looping.
异常2:
ERROR A "org.jboss.logging.util.OnlyOnceErrorHandler" object is not assignable to a "org.apache.log4j.spi.ErrorHandler" variable
要想解决以上2个异常方法很简单,修改Jboss的3个配置项即可,主要是针对于Jboss 4.*系列,对于之前的版本一般来说只会出现异常1的情况,此时只需要设置CatchSystemOut为false即可;配置项如下:
JBOSS_HOME/server/default/conf/jboss-service.xml
<!-- mbean org.jboss.logging.Log4jService 中新增 --> <attribute name="CatchSystemOut">false</attribute>
JBOSS_HOME/server/default/jbossweb*.sar/META-INFO/jboss-service.xml
<attribute name="Java2ClassLoadingCompliance">true</attribute> <attribute name="UseJBossWebLoader">true</attribute>
或者在web应用下的jboss-web.xml
<jboss-web> <class-loading java2ClassLoadingCompliance='true'> <loader-repository> com.example:loader=unique-archive-name <loader-repository-config> java2ParentDelegaton=true </loader-repository-config> </loader-repository> </class-loading> </jboss-web>
下面我们来分析下以上涉及的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配置项CatchSystemOut、Java2ClassLoadingCompliance、UseJBossWebLoader相关推荐
- 网店版重生系列:多数据源单sqlMapClient导致NullPointerException问题跟踪
从前面的<网店版重生系列:都是Spring配置中自动注入惹的祸>中我们可以看出一些有关datasource.sqlMapClientTemplate.sqlMapClient的相关配置信息 ...
- 网店版重生系列:因为webwork.configuration.xml.reload遭遇Web应用性能测试瓶颈
网店版重生项目中,因为我们要将最主要的核心数据由Oracle迁移到分布式Mysql中:虽然说业务逻辑不进行任何改动,只是将数据源由单一的Oracle改造成基于Mysql的动态数据源,但为了保险起见,我 ...
- 网店版重生系列:Linux下Jboss启动、关闭、端口配置等常见问题FAQ
单台Linux服务器中如何部署多个独立应用,即多个应用不能run在一个jboss实例中?换言之,这个问题也可以这样描述:在单台Linux服务器中服务启动多个Jboss实例? 默认情况下,jboss启动 ...
- 网店版重生系列:都是Spring配置中自动注入惹的祸
在对Spring Container管理的bean进行配置时,有一个很好用的功能就是自动注入,可以根据不同规则对bean所依赖的bean进行自动set,相信最常用的就是设置default-autowi ...
- 嘉奥(JAO.CC)办公用品专营店的网店策划
嘉奥(JAO.CC)办公用品专营店的网店策划 本文前言: 一直以来都想开个网店!可一直没作为!看着同事们朋友们一个个的都开起来了!还有点烟钱的收入也不错,我也下水看看深浅!呵呵,记录下这个历程分享给有 ...
- [转]网店博客营销之微博实战技巧:还没有做微博的掌柜看过来
网店博客营销之微博实战技巧:还没有做微博的掌柜看过来 提起微博,估计对于很多掌柜来说还是新鲜事.因为很多掌柜对于传统的博客都不太感冒,还未深究,现在又来了一个微博.其实,2009年中国的网络才正式步入 ...
- 20210507新版友价框架制作江雀网店交易天猫淘宝京东拼多多唯品会网店转让送手机版系统
20210507新版友价框架制作江雀网店交易天猫淘宝京东拼多多唯品会网店转让送手机版系统 本套源码演示地址:http://jq.94gan.net(pc端) 手机版 :http://jq.94gan. ...
- ShopNum1网店系统标准版常见问题总结
ShopNum1网店系统标准版常见问题总结 请问,什么是ShopNum1标准版啊? 答: ShopNum1标准版就是帮助您快速搭建B2C模式的网上销售平台的网店系统 用ShopNum1标准版开网店可 ...
- 月入过万——网店推广实战方法(第2版)
月入过万--网店推广实战方法(第2版) 本书以淘宝网为例,结合各种案例全面介绍了网店推广宣传的各种方法,手把手教读者如何运用这 些方法来增加网店的客流量和成交量.这些方法也同样适合于拍拍等网店. 对其 ...
最新文章
- 详细说明Spring--AOP
- python 文件追加写入_Python写入文件–解释了打开,读取,追加和其他文件处理功能
- Kafka整体结构图、Consumer与topic关系、Kafka消息分发、Consumer的负载均衡、Kafka文件存储机制、Kafka partition segment等(来自学习资料)
- [转载]JAVA实现鼠标右键功能
- 致谢!LF AI Day
- #!(sha-bang)--脚本的开始
- P3369-[模板]普通平衡树【无旋Treap】
- ireport实现金额小写转大写
- PCB设计培训,Layout工程师培训,射频基带技术培训,硬件技术培训,驱动开发培训
- python连接MongoDB
- reboot复位ipcam,为何不可靠?
- 《手把手教你》系列基础篇之(三)-java+ selenium自动化测试- 启动三大浏览器(上)(详细教程)
- 微信小程序开发手册 - 02JSON 配置
- 计算机网络 吕林涛,吕林涛简介
- python制作成绩分析系统_python实现学生成绩测评系统
- 作为荣耀脱离华为后的第二代旗舰,荣耀Magic4 Pro是否值得选购?
- OrientDB 图状数据库示例
- 哈希取模余的基底为什么要选择素数?
- xtrabackup 命令详解
- 一个投资人必须具备的心理素质 心理素质如何培养