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进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作 ...
随机推荐
- [PKUSC2018]真实排名
[PKUSC2018]真实排名 题目大意: 有\(n(n\le10^5)\)个人,每个人有一个成绩\(A_i(0\le A_i\le10^9)\).定义一个人的排名为\(n\)个人中成绩不小于他的总人 ...
- lightoj 1244 - Tiles 状态DP
思路:状态DP dp[i]=2*dp[i-1]+dp[i-3] 代码如下: 求出循环节部分 1 #include<stdio.h> 2 #define m 10007 3 int p[m] ...
- MYSQL复习笔记6-字符集
Date: 20100101 Auth: Jin 参考http://blog.sina.com.cn/s/blog_9707fac301016wxm.html 一.字符集介绍 计算机只处理二进制代码 ...
- redis_常见问题
一.使用shutdown关闭服务后,使用redis-server.redis-server redis.conf.redis-cli均提示无法连接,运行命令services.msc,启动redis服务 ...
- VUE -- 如何快速的写出一个Vue的icon组件?
伴随着Vue的诞生,它似乎就被人寄予厚望,不仅仅是因为其轻量级的MVVM设计方式,而且其实现了组件化开发模式,所以越来越多的人会拿Vue和AngularJS.React Native做比较.具体关于它 ...
- android非法字符的判定、表情符号的判定
public class EmojiEditText extends EditText {// 输入表情前的光标位置private int cursorPos; // 输入表情前EditText中的文 ...
- Object.keys()的简单理解
1.对象的话返回属性名 var obj = {'a':'123','b':'345'}; console.log(Object.keys(obj)); //['a','b'] var obj1 = { ...
- jquery-qrcode 生成和读取二维码
首先要导入jar包(生成二维码的jar和读取二维码的jar) 生成二维码: package com.imooc.qrcode; import java.awt.Color; import java.a ...
- B. Suffix Structures 模拟吧,情况比較多要想周全
这道题须要考虑的情况比較多,flag1表示情况是:b数组里有的字母而a里没有和b里面的同一个字母个数比a里面的多 flag2表示情况:b里面的左右字母能不能在a中同等顺序的存在 flag3表示情况:a ...
- iOS:quartz2D绘图(处理图像,绘制图像并添加水印)
绘制图像既可以重写drawRect:方法并在该方法中绘制,也可以不用重写该方法,它有封装好的函数获取自己的图像绘制上下文,即UIGraphicsBeginImageContext(CGSize siz ...