jboss4.0.5-GA在使用RMI时的大坑
去年3月份解决的,最近要转岗时清闲点了才有时间写,罪过罪过..
故事的起因是这样的..
我们公司使用jboss4.0.5-GA..APP的classloader一直用Jboss的classloader(UCL3),它会和jboss本身的classloader共享一片仓库缓存(ULR)...这种模式下,jboss容器本身需要的一些jar包和APP需要的一些jar包如果出现同名的话,就会优先加载jboss本身提供的(因为容器启动的时候就已经先被加载了)..
比较经典的case就是jboss中用到了commons-lang-2.1.jar,而我们的APP使用了commons-lang-2.4.jar..编译一切正常,但运行时抛了一个找不到method的异常..一查发现APP用到了StringUtils.join(Collection collection, String separator) 方法,这个方法在2.3版本才有,而当时应用运行时因为先加载了2.1版本,导致运行时挂掉..
详情可见附件中当年分享的PPT
后来引入wurfl的时候又出现了类似的问题..一怒之下就想把APP的classloader和容器的classloader隔离掉..
隔离的方法很简单,修改一下这个配置,把true改成false就行
<!-- A flag indicating if the JBoss Loader should be used. This loader
uses a unified class loader as the class loader rather than the tomcat
specific class loader.
The default is false to ensure that wars have isolated class loading
for duplicate jars and jsp files.
-->
<attribute name="UseJBossWebLoader">true</attribute>
修改完后解决了几个问题后应用终于顺利运行..
但性能测试的时候发现页面的响应速度大大下降..
经过各种排查,最后定位到是做
RMI请求的时候变慢了..后来biubiu推荐了wireshark去查看request和response的包...对比修改前后发现,独立classloader后网络包中出现了大量的jar包全路径..
继续跟踪代码终于发现RMI请求会调用WebAppClassLoader这个类中getURLs()方法,这个方法会返回WEB-INF/lib和WEB-INF/classes所有文件的全路径..
最后直接修改WebAppClassLoader的getURLs()方法,返回了一个空白对象,问题解决...
解决后想给jboss提bug,发现已经早有人提了..https://issues.jboss.org/browse/JBAS-5022
按照这个bug的记录,从JBossAS-5.0.0.CR2开始就不会有这个问题了..
但在之前版本使用RMI的朋友们就得注意了..
分享到:
相关推荐
在使用"jboss-4.0.5.GA.zip"这个压缩包时,用户需要先将其解压,然后按照官方文档或者社区教程进行配置,包括但不限于设置环境变量、配置服务器端口、部署应用程序等步骤。在开发和部署过程中,理解并掌握上述知识点...
在给出的压缩包文件列表中,除了上述的两个文件外,还提到了"jboss-as-spring-int-5.1.0.ga.jar"。虽然描述中没有提及这个文件,但它是5.1.0版本的Spring集成模块,可能意味着这是一个更新的版本,用于替换或与5.0.0...
在实际应用中,`jbossl-logging-3.1.0.GA.jar`是JBoss Logging框架的库文件,它包含了所有必需的类和资源,用于在项目中引入和使用该框架。将这个jar文件添加到项目的类路径中,就可以开始使用JBoss Logging的功能。...
赠送jar包:jboss-logging-3.4.1.Final.jar; 赠送原API文档:jboss-logging-3.4.1.Final-javadoc.jar; 赠送源代码:jboss-logging-3.4.1.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.4.1.Final....
赠送jar包:jboss-threads-3.1.0.Final.jar; 赠送原API文档:jboss-threads-3.1.0.Final-javadoc.jar; 赠送源代码:jboss-threads-3.1.0.Final-sources.jar; 赠送Maven依赖信息文件:jboss-threads-3.1.0.Final....
赠送jar包:jboss-annotations-api_1.3_spec-2.0.1.Final.jar; 赠送原API文档:jboss-annotations-api_1.3_spec-2.0.1.Final-javadoc.jar; 赠送源代码:jboss-annotations-api_1.3_spec-2.0.1.Final-sources.jar;...
赠送jar包:jboss-logging-3.4.3.Final.jar; 赠送原API文档:jboss-logging-3.4.3.Final-javadoc.jar; 赠送源代码:jboss-logging-3.4.3.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.4.3.Final....
- 配置服务器的主配置文件(如server/default/deploy/jboss-service.xml和conf/jboss.conf)。 - 部署应用程序,通常是将WAR或EAR文件复制到相应部署目录。 - 启动服务器,通过bin/run.sh(Linux/Unix)或bin/run....
赠送jar包:jboss-logging-3.3.2.Final.jar; 赠送原API文档:jboss-logging-3.3.2.Final-javadoc.jar; 赠送源代码:jboss-logging-3.3.2.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.3.2.Final....
总之,`jboss-as-sprint-int-5.0.0.GA.jar`和`jboss-spring-int-vfs.jar`是将Spring应用迁移到JBoss AS的关键组件,它们提供了Spring与JBoss AS之间的桥梁,使开发者能够在保持原有架构优势的同时,充分利用JBoss AS...
- JBoss的主要端口号配置文件位于`/opt/jboss-4.0.5.GA/server/default/deploy/jbossweb-tomcat.sar/server.xml`。这里假设您已经安装了JBoss 4.0.5.GA版本,并且部署目录结构保持默认状态。 3. **修改端口号:** ...
可移植性,能够在各种平台上直接使用。 把一个JAR文件添加到系统的classpath环境变量之后,java通常会把这个JAR文件当做一个路径来处理。通常使用jar命令来压缩,可以把一个或多个路径全部压缩成一个JAR文件。
jboss-as-sprint-int-5.0.0.GA
JavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-...
共5个压缩包,全部下载才能够解压 jboss jboss4.2 jboss4.2.2 jboss-4.2.2 jboss-4.2.2.GA
共5个压缩包,全部下载才能够解压 jboss jboss4.2 jboss4.2.2 jboss-4.2.2 jboss-4.2.2.GA............
然而,实际的端口配置信息并不在此文件中,而是在另一个路径下的`server.xml`文件中,具体位置为`%JBOSS_HOME%/server/default/deploy/JBoss-web.deployer/server.xml`。 #### 修改端口配置 一旦定位到了正确的`...
赠送jar包:jboss-websocket-api_1.1_spec-2.0.0.Final.jar; 赠送原API文档:jboss-websocket-api_1.1_spec-2.0.0.Final-javadoc.jar; 赠送源代码:jboss-websocket-api_1.1_spec-2.0.0.Final-sources.jar; 赠送...
JBoss-4.2.3.GA-jdk6.zip 是一个包含了JBoss应用服务器的版本4.2.3 GA(General Availability),专为Java Development Kit(JDK)6设计的软件包。JBoss是一个开源的企业级Java应用服务器,它遵循Java EE...