JBoss类隔离
http://tiger888.iteye.com/blog/572875这几天,项目组在部署JBOSS时遇到不少问题,都是由于JBOSS的类装载问题引起,特发表一篇BLOG详细说一下JBOSS的类隔离机制。
在部署应用到JBoss服务器时,通常见到的问题就是应用所带的jar包与容器自己的jar包版本不同导致的冲突,以及应用间jar包导致的冲突,JBOSS提供两种隔离机制:
- 部署包之间的隔离
- 覆盖JBoss Server的类的隔离
对于这两种隔离,通常是修改部署文件来进行,以下进行说明:
部署包之间的隔离机制
对于.ear部署包,我们应该修改jboss-app.xml如下:
Xml代码
- <jboss-app>
- <loader-repository>
- com.example:archive=unique-archive-name
- </loader-repository>
- </jboss-app>
- 对于.war部署包,在jboss-web.xml中定义如下:
Xml代码
- <jboss-web>
- <class-loading>
- <loader-repository>
- com.example:archive=unique-archive-name
- </loader-repository>
- </class-loading>
- </jboss-web>
- 在JBoss 4.2.1中<class-loading>不再被支持,而4.0.5两种方式都支持,直接修改为:
Xml代码
- <jboss-web>
- <loader-repository>
- com.example:archive=unique-archive-name
- </loader-repository>
- </jboss-web>
- 在.sar部署包中,在jboss-service.xml定义如下:
Xml代码
- <server>
- <loader-repository>
- com.example:archive=unique-archive-name
- </loader-repository>
- </server>
示例中,com.example:archive=unique-archive-name代表jar仓库的对象名objectName ,其中,com.example可以随意取,unique-archive-name 就用部署包的名字即可,例如com.example:archive=helloworld.sar,保证这一串唯一即可。而com.example将出现在JMX-Console (http://localhost:8080/jmx-console/)列出的节点上(每个节点为一个LoaderRepository domain:jar参考的域概念,其实就是一个所有jar容器仓库的分组概念)
对于部署包内内嵌了其他部署包,只有最上层的部署描述配置才起作用,例如:
- .ear中包含了.sar和.war,这只有.ear中的META-INF/jboss-app.xml 中定义的隔离范围才会起作用。
- .sar中包含了.war,则只有.sar META-INF/jboss-service.xml中定义的隔离范围才起作用
覆盖JBoss Server的类的隔离
- 对于jboss-app.xml:
Xml代码
- <jboss-app>
- <loader-repository>
- com.example:archive=unique-archive-name
- <loader-repository-config>
- java2ParentDelegation=false
- </loader-repository-config>
- </loader-repository>
- </jboss-app>
- 对于jboss-web.xml:
Xml代码
- <jboss-web>
- <class-loading java2ClassLoadingCompliance="false">
- <loader-repository>
- com.example:archive=unique-archive-name
- <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
- </loader-repository>
- </class-loading>
- ...
- jboss-service.xml:
Xml代码
- <server>
- <loader-repository>
- com.example:archive=unique-archive-name
- <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
- </loader-repository>
- ...
EAR or WAR的类将按照以下顺序装载:
- WEB-INF/lib (for WARs)
- server/default/lib下的jar包
- tomcat的jar包server/default/deploy/jbossweb-tomcatxxx.sar,与server/default/lib将混合在一起,不区别顺序。
JBoss类隔离的更多相关文章
- tomcat 是如何做到不同webapp 类隔离的
这个问题的核心是classloader 上图中 启动类加载器,扩展类加载器,应用程序类加载器是 jvm 自带的类加载器. comm catalina shared webapp 是tomcat 扩 ...
- ThreadLocal工具类 隔离思想
ThreadLocal不是用来解决共享对象的多线程访问问题的, 通过ThreadLocal的set()方法设置到线程的ThreadLocal.ThreadLocalMap里的是是线程自己要存储的对象, ...
- InnoDB事务隔离级别
转载于:http://blog.csdn.net/wudongxu/article/details/8623610 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的 ...
- 1031MySQL事务隔离级别详解
转自http://xm-king.iteye.com/blog/770721 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低级别的隔离级一般支 ...
- 《高性能MySQL》读书笔记--锁、事务、隔离级别 转
1.锁 为什么需要锁?因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对表中同一行记录进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作进 ...
- MySQL事务隔离级别详解
原文地址:http://xm-king.iteye.com/blog/770721 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低级别的隔离级 ...
- 关于SWT中的表格(TableViewer类)
JFace是SWT的扩展.它提供了一组功能强大的界面组件.其中包含表格,树,列表.对话框,向导对话框等. 表格是一种在软件系统中很常用的数据表现形式.特别是基于数据库的应用系统.表格更是不可缺少的界面 ...
- 转:修改类不重启tomcat 自动加载项目
可以修改类不用重启Tomcat加载整个项目(手工启动) 配置reloadable=true(自动重载) 使用Debug模式,前提是仅限于局部修改.(修改类不用重启--热加载) (rel ...
- 高性能MySql学习笔记——锁、事务、隔离级别(转)
为什么需要锁? 因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对Table1.rown进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作 ...
随机推荐
- vue-cli创建vue项目
原文出处:https://segmentfault.com/a/1190000008922234 第一步 node环境安装 1.1 如果本机没有安装node运行环境,请下载node 安装包进行安装1. ...
- Java编程思想学习(四)----第四章:控制执行流程
在Java中,涉及的关键字包括if-else.while.do-while.for.return.break 以及选择语句switch.然而,Java并不支持goto语句(该语句引起许多反对意见,但它 ...
- ob_flush()和flush()和ob_implicit_flush(true)
http://www.jb51.net/article/16215.htm 第一: “ob_flush()和flush()的区别.前者是把数据从PHP的缓冲中释放出来,后者是把不在缓冲中的或者说是被释 ...
- Codeforces Round #339 (Div. 1) C. Necklace 构造题
C. Necklace 题目连接: http://www.codeforces.com/contest/613/problem/C Description Ivan wants to make a n ...
- Linux关于终端的基本概念汇总(tty/pty)(转)
在Linux系统的设备特殊文件目录/dev/下,终端特殊设备文件一般有以下几种: 1.串行端口终端(/dev/ttySn) 串行端口终端(Serial Port Terminal)是使用计算机串行端口 ...
- Kubernetes下的Redis主从配置架构
文章看了一大堆,但都是直接从各种地方直接拉master,slave镜像,没有交代这些镜像如何构建出来的 好把,我这篇就讲讲这些master,slave镜像如何做成. 先得找到一个标准的redis镜像, ...
- iOS:UIView的CALayer基本演练
UIView的CALayer基本演练的属性和注意事项: 在UIView中创建一个按钮UIButton,然后设置UIButton的Layer属性 –圆角.边框.阴影及3D形变属性 注意: 1.在UIVi ...
- 流畅的python第二章序列构成的数组学习记录
python内置序列类型概览 列表推导和生成器表达式 列表推导是构建列表的快捷方式,而生成器表达式可以用来创建其他任何类型的序列 列表推导的示例 >>>test = [i*2 for ...
- jQuery选择器的灵活用法
// 摘自: http://hi.baidu.com/274084093/item/47a4ce696e89e534ad3e836b jQuery中选择器很强大,可以根据元素名称.ID.class等多 ...
- hdoj-1301-Jungle Roads【最小生成树】
Jungle Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
.png)