文档章节

jboss module依赖 问题

o
 ovirtKg
发布于 2016/09/06 10:17
字数 1124
阅读 161
收藏 0

问题来源于 ovirt部署在jboss中,所用到的版本Jboss版本如下。

JBoss AS release: 7.5.4.Final-redhat-4 "Janus"
JBoss AS product: EAP 6.4.4.GA

而在我们开发的过程中,需要引入第三方的jar包,出现了很多问题,通过官网上的文档,以及各种尝试终于解决了以下几种场景的jar包引入的问题。

对于Jboss而言,有其类自定的类加载机制。所有的jar包都是一个module,所以需要以moudle的形式引入。而jboss又默认提供了一些通用的module,而对于jboss环境中没有提供的module,就需要我们自己在项目中生成一个module。分两种情况

  1. 系统提供的 static   module     多种应用 就可以使用同一个公用的jar。

    1. jboss目录中的modules文件夹下就提供了module,
    2. /jbossas/modules/system/layers/base/  目录下,就是提供了各module
    3. 如 commons-io,目录结构如下,
      [root@localhost main]# ls
      commons-io.jar  module.xml
      [root@localhost main]# pwd
      /usr/share/jbossas/modules/system/layers/base/org/apache/commons/io/main
      
      而该commons.jar指向了commons-io.jar -> /usr/share/java/commons-io-eap6/commons-io.jar ,而该版本为2.1.
    4. 如果我们需要在ovirt中引用commos-io的jar包,有两种方式,第一种是使用系统提供的module,则版本只能为2.1,而如果 不想使用系统提供的。则使用下面第二种方式,自己创建module。
    5. 而对于第一种引用,则直接在对应的project的 pom.xml引用相关的配置即可,version为2.1。
      1. 同时由于jboss的依赖问题,还需要在对应的MANIFEST.MF文件中添加Dependencies:commons-io。
      2. 或者在pox.xml中加入自动 生成的依赖
      3. <manifestEntries> <Dependencies>org.apache.commons.io</Dependencies></manifestEntries>

         

  2. 自己创建moudule

    1. 对于第三方的jar包,jboss没有提供的情况下,则需要在相应的project下,按照相应的目录格式,创建相应的modules.xml。同时将jar包传入即可,也可以通过pom.xml的形式导入.
  3. 对于依赖传递问题,A-B-C

以下摘自jboss官网文档

Module A depends on Module B and Module B depends on Module C. Module A can access the classes of Module B, and Module B can access the classes of Module C. Module A cannot access the classes of Module C unless:

  • Module A declares an explicit dependency on Module C, or

  • Module B exports its dependency on Module C.

如果A依赖于B,B依赖于C,A需要用到C,则需要在A的module中写入对C的依赖,或者在B的module中将C导出。

4.    Class Loading in Deployments

For the purposes of classloading all deployments are treated as modules by JBoss EAP 6. These are called dynamic modules. Class loading behavior varies according to the deployment type.

WAR Deployment

A WAR deployment is considered to be a single module. Classes in the WEB-INF/lib directory are treated the same as classes in WEB-INF/classes directory. All classes packaged in the war will be loaded with the same class loader.

EAR Deployment

EAR deployments are made up more than one module. The definition of these modules follows these rules:

  1. The lib/ directory of the EAR is a single module called the parent module.

  2. Each WAR deployment within the EAR is a single module.

  3. Each EJB JAR deployment within the EAR is a single module.

Subdeployment modules (the WAR and JAR deployments within the EAR) have an automatic dependency on the parent module. However they do not have automatic dependencies on each other. This is called subdeployment isolation and can be disabled on a per deployment basis or for the entire application server.

Explicit dependencies between subdeployment modules can be added by the same means as any other module.

Report a bug

5. Class Loading Precedence

The JBoss EAP 6 modular class loader uses a precedence system to prevent class loading conflicts.

During deployment a complete list of packages and classes is created for each deployment and each of its dependencies. The list is ordered according to the class loading precedence rules. When loading classes at runtime, the class loader searches this list, and loads the first match. This prevents multiple copies of the same classes and packages within the deployments class path from conflicting with each other.

The class loader loads classes in the following order, from highest to lowest:

  1. Implicit dependencies.

    These are the dependencies that are added automatically by JBoss EAP 6, such as the JAVA EE APIs. These dependencies have the highest class loader precedence because they contain common functionality and APIs that are supplied by JBoss EAP 6.

    Refer to Section 3.7.1, “Implicit Module Dependencies” for complete details about each implicit dependency.

  2. Explicit dependencies.

    These are dependencies that are manually added in the application configuration. This can be done using the application's MANIFEST.MF file or the new optional JBoss deployment descriptor jboss-deployment-structure.xml file.

    Refer to Section 3.2, “Add an Explicit Module Dependency to a Deployment” to learn how to add explicit dependencies.

  3. Local resources.

    Class files packaged up inside the deployment itself, e.g. from the WEB-INF/classes or WEB-INF/libdirectories of a WAR file.

  4. Inter-deployment dependencies.

    These are dependencies on other deployments in a EAR deployment. This can include classes in the libdirectory of the EAR or classes defined in other EJB jars.

 

 

 

https://access.redhat.com/documentation/zh-CN/JBoss_Enterprise_Application_Platform/6.1/html/Migration_Guide/Find_the_JBoss_Module_Dependency1.html    查找 JBoss 模块依赖关系

 

https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.1/html/Development_Guide/chap-Class_Loading_and_Modules.html#Overview_of_Class_Loading_and_Modules-1

https://my.oschina.net/iwuyang/blog/197231

http://jbosscn.iteye.com/blog/1143426  jboss modules介绍

http://blog.csdn.net/andyelvis/article/details/6719996 tomcat classpath 类加载介绍

© 著作权归作者所有

o
粉丝 3
博文 57
码字总数 48798
作品 0
景德镇
私信 提问
JBoss 系列八十五: JBoss Modules 简单介绍

概述 从JBoss AS7开始,Classloader这块开始使用全新的JBoss Modules。本文简单介绍说明JBoss Modules的设计思路,以及给出一个例子说明这一设计思路。 JBoss Modules 介绍 我们都知道,Jav...

无鸯
2014/02/04
1K
0
jboss7添加了jboss-deployment-structure也不能切换到自定义的日志

jboss7添加了jboss-deployment-structure也不能切换到自定义的日志,依然走的JBOSS自带的moudle 如下是我的配置文件:

说梦话的猫
2016/12/19
726
0
JBoss7虚拟主机的配置及输入域名直接访问项目(配置多个二级域名)

standalone.xml中修改: enable-welcome-root="true" 改为 false <socket-binding name="http" port="80"/> 2. 在第一个项目中添加jboss-web.xml(和web.xml一个目录)。 <?xml version='1.0......

40岁的青春
2015/08/08
961
3
JBoss EAP 6.1.0 发布,企业应用平台

全新版本 JBoss EAP 6.1 发布了,包含大量的 bug 修复和新特性: JBoss Web 的全局值 JBoss Enterprise Application Platform 5 offered the capability to configure a global valve for t......

oschina
2013/05/22
6.7K
5
JBoss 系列八十九: JBoss 7/WildFly 中如何阻止一个模块被默认加载

概述 如前面 JBoss Modules 简单介绍等的介绍,JBoss 7/WildFly 使用模块化的类加载机制,它定义了模块之间的明确依赖关系, JBoss 7/WildFly 启动时一些模块会被默认加载,JBoss 的日志系统是...

无鸯
2014/02/04
104
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部