- 浏览: 132538 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (137)
- java (138)
- c# winform (笨方法)根据不同的样式配置 设置窗体相关控件的背景 以改变窗体风格 (1)
- Android平台下实现一个进程管理器 (1)
- 装饰模式 (1)
- 【转】介绍线性代数 (1)
- fqueue初步分析 (1)
- 千万级sql优化 (1)
- 开源项目 (1)
- js弹出遮罩层【并弹出提示信息】 (1)
- 代码高亮、源码格式、iteye代码格式的种种方法 (1)
- Drupal学习笔记(四)warning: array_key_exists(): The first argument should be either a string or an integer (1)
- 2011年Java EE生产力报告 (1)
- java(j2se)学习笔记----类注释文档编写方法? (1)
- ubuntu 添加应用程序 到快速启动 (1)
- JPA注解配置实例 (1)
- C++著名内裤 (1)
- Android笔试或者面试的几个题目 (1)
- Ajax&&GWT (1)
- IHS静默安装(转) (1)
- WIN98下运行DOTNET程序的一些问题 (1)
- 开启新的项目——基于电子邮件的知识管理系统 (1)
- 这里的BLOG服务器也太不稳定了 (1)
- MapXtreme2004代码 读取TAB表中的元素 (1)
- 终于把我的大部分BLOG复制到这里来了 (1)
- 2011NOKIA笔试题目 (1)
- Ajax实现省市二级联动(源代码) (1)
- mxgraph之保存图片 (1)
- sso单点登录 (1)
- Android开发之SurfaceView (1)
- Android开发之ListView (1)
- SQL SERVER 2008 中分页方法集锦 (1)
- 2011-12-2 (1)
- 分页组件 (1)
- Myeclipse自动加入struts 2 Core Libraries导致antlr错误 (1)
- jbpm4在tomcat6中EL错误 (1)
- c++中有关数组和指针的若干问题 (1)
- rails 上传文件和删除文件 (1)
最新评论
-
mazongfei:
就是有点乱,不过还是不错的
sso单点登录 -
xiaokang1582830:
写得这么乱,地球人是无法看得懂的...
sso单点登录 -
shenyu:
大侠,下回分解在哪里啊?
mxgraph之保存图片 -
GZQ0821:
为啥不编译后贴出来呢!
SQL SERVER 2008 中分页方法集锦 -
evil9999:
http://belives2012.blog.163.com ...
千万级sql优化
去年同事的一个项目在jboss中部署时遇到类版本冲突问题,当时协助他处理了此问题,现在将当时处理的过程记录一下,以备以后参考使用。错误日志如下:
从上面的日志可以看出spring batch 依赖的jettison的abstractxmlstreamwriter类找不到getserializedasarrays(java.util.arraylist)方法。遇到这个问题,我们很自然的先检查一下xxxx-ear.ear/lib/codehaus.jettison-1.0.1.jar这个jar中的abstractxmlstreamwriter类是否符合要求,检查结果这个类存在getserializedasarrays(java.util.arraylist)方法。这样也就是说jboss没有加载到ear包中的类。
下面我们来跟踪一下,看看应用究竟在那个jar里加载了abstractxmlstreamwriter类。首先我们需要修改一下jboss log4j的配置,这个配置的意思相信大家一看就了解了。
然后,我们查看ucl的日志可以看到下列信息
从上面的日志可以看出有个jettison.jar加到了这个ucl org.jboss.mx.loading.unifiedclassloader3@1fe500a中。从日志里还可以看到这个jar存在的路径是/home/sean/web-deploy/jboss_server/default/deploy/jbossws.sar/
再来看一段日志
从上面的日志可以看到又有一个codehaus.jettison-1.0.1.jar加到了这个ucl org.jboss.mx.loading.unifiedclassloader3@16274ea中这个是我们应用自己的jar(xxxx-ear.ear-contents/lib/codehaus.jettison-1.0.1.jar,)
在应用加载abstractxmlstreamwriter类时出现了如下日志
从这个日志中我们可以看出来abstractxmlstreamwriter是从org.jboss.mx.loading.unifiedclassloader3@1fe500a中加载到的也就是说这个class来自/home/sean/web-deploy/jboss_server/default/deploy/jbossws.sar/下的jettison.jar中,根本就不是应用想要的类。
为什么会出现上面这样的情况呢???
这就要从jboss的类加载机制说起。请查看我以前写的一篇关于jboss classloader的分析文章
分析了问题的原因之后,我们来看一下如何解决此问题
参考这里http://community.jboss.org/wiki/jbossclassloadingusecases的介绍,我一开始是参考case 3的做法将ear的repository和应用服务器中的默认的repository进行隔离。实现如下结构
<div class="quote_title">引用
2010-12-13 17:06:00,101 error [stderr] exception in thread "defaultquartzscheduler_worker-1" 2010-12-13 17:06:00,101 error [stderr] java.lang.nosuchmethoderror: org.codehaus.jettison.abstractxmlstreamwriter.getserializedasarrays()ljava/util/arraylist;2010-12-13 17:06:00,101 error [stderr] at com.thoughtworks.xstream.io.json.jettisonstaxwriter.startnode(jettisonstaxwriter.java:71)2010-12-13 17:06:00,101 error [stderr] at com.thoughtworks.xstream.io.writerwrapper.startnode(writerwrapper.java:33)2010-12-13 17:06:00,101 error [stderr] at com.thoughtworks.xstream.io.path.pathtrackingwriter.startnode(pathtrackingwriter.java:44)2010-12-13 17:06:00,101 error [stderr] at com.thoughtworks.xstream.io.extendedhierarchicalstreamwriterhelper.startnode(extendedhierarchicalstreamwriterhelper.java:17)2010-12-13 17:06:00,101 error [stderr] at com.thoughtworks.xstream.core.treemarshaller.start(treemarshaller.java:96)2010-12-13 17:06:00,101 error [stderr] at com.thoughtworks.xstream.core.abstracttreemarshallingstrategy.marshal(abstracttreemarshallingstrategy.java:38)2010-12-13 17:06:00,101 error [stderr] at com.thoughtworks.xstream.xstream.marshal(xstream.java:837)2010-12-13 17:06:00,102 error [stderr] at com.thoughtworks.xstream.xstream.marshal(xstream.java:826)2010-12-13 17:06:00,102 error [stderr] at com.thoughtworks.xstream.xstream.toxml(xstream.java:801)2010-12-13 17:06:00,102 error [stderr] at com.thoughtworks.xstream.xstream.toxml(xstream.java:789)2010-12-13 17:06:00,102 error [stderr] at org.springframework.batch.core.repository.dao.xstreamexecutioncontextstringserializer.serialize(xstreamexecutioncontextstringserializer.java:43)
从上面的日志可以看出spring batch 依赖的jettison的abstractxmlstreamwriter类找不到getserializedasarrays(java.util.arraylist)方法。遇到这个问题,我们很自然的先检查一下xxxx-ear.ear/lib/codehaus.jettison-1.0.1.jar这个jar中的abstractxmlstreamwriter类是否符合要求,检查结果这个类存在getserializedasarrays(java.util.arraylist)方法。这样也就是说jboss没有加载到ear包中的类。
下面我们来跟踪一下,看看应用究竟在那个jar里加载了abstractxmlstreamwriter类。首先我们需要修改一下jboss log4j的配置,这个配置的意思相信大家一看就了解了。
<appender name="ucl" class="org.apache.log4j.fileappender"> <param name="file" value="/home/sean/output/logs/user/ucl.log"/> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="[%r,%c{1},%t] %m%n"/> </layout> </appender> <category name="org.jboss.mx.loading" additivity="false"> <priority value="trace" class="org.jboss.logging.xlevel"></priority> <appender-ref ref="ucl"></appender-ref> </category>
然后,我们查看ucl的日志可以看到下列信息
[10141,classloaderutils,main] indexed pkg: org.codehaus.jettison, ucl: org.jboss.mx.loading.unifiedclassloader3@1fe500a{ url=file:/home/sean/web-deploy/jboss_server/default/deploy/jbossws.sar/ ,addedorder=12}[10141,classloaderutils,main] indexed pkg: org.codehaus.jettison.badgerfish, ucl: org.jboss.mx.loading.unifiedclassloader3@1fe500a{ url=file:/home/sean/web-deploy/jboss_server/default/deploy/jbossws.sar/ ,addedorder=12}[10142,classloaderutils,main] indexed pkg: org.codehaus.jettison.json, ucl: org.jboss.mx.loading.unifiedclassloader3@1fe500a{ url=file:/home/sean/web-deploy/jboss_server/default/deploy/jbossws.sar/ ,addedorder=12}[10143,classloaderutils,main] indexed pkg: org.codehaus.jettison.mapped, ucl: org.jboss.mx.loading.unifiedclassloader3@1fe500a{ url=file:/home/sean/web-deploy/jboss_server/default/deploy/jbossws.sar/ ,addedorder=12}[10144,classloaderutils,main] indexed pkg: org.codehaus.jettison.util, ucl: org.jboss.mx.loading.unifiedclassloader3@1fe500a{ url=file:/home/sean/web-deploy/jboss_server/default/deploy/jbossws.sar/ ,addedorder=12}[10144,repositoryclassloader,main] added url: file:/home/sean/output/logs/jboss_stout/tmp/deploy/tmp8907418620370263381jettison.jar, to ucl: org.jboss.mx.loading.unifiedclassloader3@1fe500a{ url=file:/home/sean/web-deploy/jboss_server/default/deploy/jbossws.sar/ ,addedorder=12}
从上面的日志可以看出有个jettison.jar加到了这个ucl org.jboss.mx.loading.unifiedclassloader3@1fe500a中。从日志里还可以看到这个jar存在的路径是/home/sean/web-deploy/jboss_server/default/deploy/jbossws.sar/
再来看一段日志
[19814,classloaderutils,main] multiple class loaders found for pkg: org.codehaus.jettison.badgerfish[19814,classloaderutils,main] indexed pkg: org.codehaus.jettison.badgerfish, ucl: org.jboss.mx.loading.unifiedclassloader3@16274ea{ url=file:/home/sean/output/logs/jboss_stout/tmp/deploy/tmp7754042895360577419xxxx-ear.ear ,addedorder=45}[19814,classloaderutils,main] multiple class loaders found for pkg: org.codehaus.jettison[19814,classloaderutils,main] indexed pkg: org.codehaus.jettison, ucl: org.jboss.mx.loading.unifiedclassloader3@16274ea{ url=file:/home/sean/output/logs/jboss_stout/tmp/deploy/tmp7754042895360577419xxxx-ear.ear ,addedorder=45}[19814,classloaderutils,main] multiple class loaders found for pkg: org.codehaus.jettison.json[19814,classloaderutils,main] indexed pkg: org.codehaus.jettison.json, ucl: org.jboss.mx.loading.unifiedclassloader3@16274ea{ url=file:/home/sean/output/logs/jboss_stout/tmp/deploy/tmp7754042895360577419xxxx-ear.ear ,addedorder=45}[19815,classloaderutils,main] multiple class loaders found for pkg: org.codehaus.jettison.util[19815,classloaderutils,main] indexed pkg: org.codehaus.jettison.util, ucl: org.jboss.mx.loading.unifiedclassloader3@16274ea{ url=file:/home/sean/output/logs/jboss_stout/tmp/deploy/tmp7754042895360577419xxxx-ear.ear ,addedorder=45}[19815,classloaderutils,main] multiple class loaders found for pkg: org.codehaus.jettison.mapped[19815,classloaderutils,main] indexed pkg: org.codehaus.jettison.mapped, ucl: org.jboss.mx.loading.unifiedclassloader3@16274ea{ url=file:/home/sean/output/logs/jboss_stout/tmp/deploy/tmp7754042895360577419xxxx-ear.ear ,addedorder=45}[19816,repositoryclassloader,main] added url: file:/home/sean/output/logs/jboss_stout/tmp/deploy/tmp7754042895360577419xxxx-ear.ear-contents/lib/codehaus.jettison-1.0.1.jar, to ucl: org.jboss.mx.loading.unifiedclassloader3@16274ea{ url=file:/home/sean/output/logs/jboss_stout/tmp/deploy/tmp7754042895360577419xxxx-ear.ear ,addedorder=45}
从上面的日志可以看到又有一个codehaus.jettison-1.0.1.jar加到了这个ucl org.jboss.mx.loading.unifiedclassloader3@16274ea中这个是我们应用自己的jar(xxxx-ear.ear-contents/lib/codehaus.jettison-1.0.1.jar,)
在应用加载abstractxmlstreamwriter类时出现了如下日志
[70806,repositoryclassloader,defaultquartzscheduler_worker-9] loadclass org.jboss.mx.loading.unifiedclassloader3@1fe500a{ url=file:/home/sean/web-deploy/jboss_server/default/deploy/jbossws.sar/ ,addedorder=12} name=org.codehaus.jettison.abstractxmlstreamwriter class=class org.codehaus.jettison.abstractxmlstreamwriter cl=org.jboss.mx.loading.unifiedclassloader3@1fe500a{ url=file:/home/sean/web-deploy/jboss_server/default/deploy/jbossws.sar/ ,addedorder=12}
从这个日志中我们可以看出来abstractxmlstreamwriter是从org.jboss.mx.loading.unifiedclassloader3@1fe500a中加载到的也就是说这个class来自/home/sean/web-deploy/jboss_server/default/deploy/jbossws.sar/下的jettison.jar中,根本就不是应用想要的类。
为什么会出现上面这样的情况呢???
这就要从jboss的类加载机制说起。请查看我以前写的一篇关于jboss classloader的分析文章
分析了问题的原因之后,我们来看一下如何解决此问题
参考这里http://community.jboss.org/wiki/jbossclassloadingusecases的介绍,我一开始是参考case 3的做法将ear的repository和应用服务器中的默认的repository进行隔离。实现如下结构
<div class="quote_title">引用
发表评论
-
rails 上传文件和删除文件
2012-02-07 14:33 1074文件上传,页面代码: <%form_tag '/ ... -
c++中有关数组和指针的若干问题
2012-02-07 14:13 766<pre class="reply-t ... -
jbpm4在tomcat6中EL错误
2012-02-04 14:03 1027? jbpm4 在tomcat6 下面ssh2 这个错 ... -
Myeclipse自动加入struts 2 Core Libraries导致antlr错误
2012-02-04 13:29 940解决方法: 选择windows---preferenc ... -
分页组件
2012-02-03 12:23 881撒地方阿斯顿的撒啊受到爱上 ... -
2011-12-2
2012-02-02 15:34 712ubuntu系统root默认密码,每次开机会随机产生默 ... -
SQL SERVER 2008 中分页方法集锦
2012-02-01 09:34 1340<span style="font-s ... -
Android开发之ListView
2012-01-31 13:53 1221<p><br></p&g ... -
Android开发之SurfaceView
2012-01-11 15:34 1203<h1>Android开发 ... -
sso单点登录
2012-01-11 12:44 3860SSO单点登录 目 ... -
mxgraph之保存图片
2011-12-28 18:38 23011、写在前端:任何情况下,保存图片不可能只通过前台代码 ... -
Ajax实现省市二级联动(源代码)
2011-12-28 16:23 4972<span style="font-f ... -
2011NOKIA笔试题目
2011-12-21 09:29 1036今天去NOKIA机试,纯粹打酱油,没什么准备,题目貌似 ... -
终于把我的大部分BLOG复制到这里来了
2011-12-16 16:22 1000本来我的BLOG都在博客中国的<img src= ... -
MapXtreme2004代码 读取TAB表中的元素
2011-12-15 12:14 870<?xml:namespace prefix = ... -
这里的BLOG服务器也太不稳定了
2011-12-14 20:53 643<p class="MsoPlainT ... -
开启新的项目——基于电子邮件的知识管理系统
2011-12-14 19:59 903</span></font>& ... -
WIN98下运行DOTNET程序的一些问题
2011-12-14 17:24 771</span></font>& ... -
IHS静默安装(转)
2011-12-13 11:59 1262<span style="col ... -
Ajax&&GWT
2011-12-13 10:14 632工作的久了,一直忙于公司相关的技术和业务上,对于如今流 ...
相关推荐
JBoss完全实现了J2EE的服务栈: EJB (Enterprise JavaBeans) JMS (Java Message Service) ...可以从http://labs.jboss.com/jbossas/downloads/ 下载最新JBoss应用服务器,本章选用JBoss 4.2.2.GA版本。
Jboss项目部署文档
jboss热部署,jboss热部署,jboss热部署,jboss热部署,jboss热部署,jboss热部署,jboss热部署,jboss热部署,jboss热部署,jboss热部署,jboss热部署,jboss热部署
JBOSS,JBoss安装部署 JBOSS,JBoss安装部署
Linux下JBOSS部署手册
NULL 博文链接:https://lionelf.iteye.com/blog/1532452
jboss热部署必须文件.更改jsp文件不用再频繁关闭、启动jboss.
windows环境下使用jboss配置web应用 配置单向双向SSL
jboss_EAP 部署在Window平台上
jdk1.6与jboss5.x冲突问题的解决方法
JBoss部署Web Project时的问题——请刷新
公司的网站系统使用的中间是jboss7.1.1 Final,由于有些数据和服务测试环境不具备,免不了要在测试环境调试些jsp页面,发现从jboss社区里下载的jboss应用有个问题,新增jsp页面会实时部署,修改过的jsp页面就无法正常...
本文档描述了apache web服务器安装以及常用的编译模式;描述了apache jboss3.2.6做负载均衡(load ...5.关于多工程后,JBOSS会有内存溢出时的解决方案 25 6.Java, jre ,jdk 的安装 25 7.JBOSS服务的启动脚本 26
jboss源码导入过程分析与解决方法,方便你能够快速的读懂jboss源码
JBoss5部署原理 基本可以了解 具体的可以参考官方文档
jboss部署jar包的bat脚本 快速,方便部署jar到jboss中
JBoss MicroContainer分析及应用
一台机器部署多个jboss说明:如果在一台机器上部署了多个jboss server,需要修改相关端口以避免端口冲突。
配置JBoss应用服务器配置JBoss应用服务器配置JBoss应用服务器配置JBoss应用服务器配置JBoss应用服务器配置JBoss应用服务器配置JBoss应用服务器配置JBoss应用服务器配置JBoss应用服务器配置JBoss应用服务器配置JBoss...