• JBoss类隔离


    http://tiger888.iteye.com/blog/572875这几天,项目组在部署JBOSS时遇到不少问题,都是由于JBOSS的类装载问题引起,特发表一篇BLOG详细说一下JBOSS的类隔离机制。

    在部署应用到JBoss服务器时,通常见到的问题就是应用所带的jar包与容器自己的jar包版本不同导致的冲突,以及应用间jar包导致的冲突,JBOSS提供两种隔离机制:

    • 部署包之间的隔离
    • 覆盖JBoss Server的类的隔离

    对于这两种隔离,通常是修改部署文件来进行,以下进行说明:

    部署包之间的隔离机制

    • 对于.ear部署包,我们应该修改jboss-app.xml如下:

      Xml代码  收藏代码
      1. <jboss-app>  
      2.    <loader-repository>   
      3.    com.example:archive=unique-archive-name   
      4.    </loader-repository>   
      5. </jboss-app>  
       
    • 对于.war部署包,在jboss-web.xml中定义如下:
      Xml代码  
      1. <jboss-web>  
      2.    <class-loading>   
      3.       <loader-repository>   
      4.       com.example:archive=unique-archive-name   
      5.       </loader-repository>   
      6.    </class-loading>  
      7. </jboss-web>   
       
    • 在JBoss 4.2.1中<class-loading>不再被支持,而4.0.5两种方式都支持,直接修改为:
      Xml代码  
      1. <jboss-web>  
      2.    <loader-repository>   
      3.       com.example:archive=unique-archive-name   
      4.    </loader-repository>   
      5. </jboss-web>   
       
    • 在.sar部署包中,在jboss-service.xml定义如下:
      Xml代码  
      1. <server>  
      2.      <loader-repository>  
      3.           com.example:archive=unique-archive-name   
      4.      </loader-repository>  
      5. </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代码  
      1. <jboss-app>  
      2.   <loader-repository>   
      3.   com.example:archive=unique-archive-name   
      4.      <loader-repository-config>   
      5.      java2ParentDelegation=false   
      6.      </loader-repository-config>   
      7.   </loader-repository>  
      8. </jboss-app>  
       
    • 对于jboss-web.xml:
      Xml代码  
      1. <jboss-web>  
      2.  <class-loading java2ClassLoadingCompliance="false">  
      3.  <loader-repository>  
      4.         com.example:archive=unique-archive-name  
      5.         <loader-repository-config>java2ParentDelegation=false</loader-repository-config>  
      6.  </loader-repository>  
      7.  </class-loading>  
      8. ...  
      9.   
      10.    
    • jboss-service.xml:
      Xml代码  
      1. <server>  
      2.  <loader-repository>  
      3.         com.example:archive=unique-archive-name  
      4.         <loader-repository-config>java2ParentDelegation=false</loader-repository-config>  
      5.  </loader-repository>  
      6.  ...  
       

     EAR or WAR的类将按照以下顺序装载:

    1. WEB-INF/lib (for WARs)
    2. server/default/lib下的jar包
    3. tomcat的jar包server/default/deploy/jbossweb-tomcatxxx.sar,与server/default/lib将混合在一起,不区别顺序。 
     
     
     
    更多文章:
  • 相关阅读:
    iOS9 UITableViewCell separatorInset设置为0分割线还是没有顶到头的问题
    facebook登录(集成FBSDKLoginKit) result的isCancelled总是YES token为nil
    Mac OS X 在Finder新建文本文件
    Xcode8 Could not build Objective-C module 'FBSDKCoreKit'
    Multiple methods named 'status' found with mismatched result, parameter type or attributes
    iOS 10 UserNotifications 框架解析
    WKWebView无法(通过URL schemes)跳转到其他App
    WKWebView不显示提示框(Swift)
    Redis 3.2.1集群搭建
    高吞吐量的分布式发布订阅消息系统Kafka-- 管理工具 Kafka Manager
  • 原文地址:https://www.cnblogs.com/svennee/p/4075499.html
Copyright © 2020-2023  润新知