文档章节

jboss 模块化及类加载总结

玺感
 玺感
发布于 2014/09/20 17:48
字数 864
阅读 108
收藏 0

最近在深入学习jboss as7相关知识,as7的模块化和类加载是其中比较重要的知识点,现总结如下:

注:此部分知识官方英文介绍地址是:https://docs.jboss.org/author/display/MODULES/Module+descriptors


1.所有的类逻辑上被分组,每组叫一个模块

2.每个被部署的jar或者war被当作一个模块处理

3.某个模块可能包含一个jar或者多个jar以及其它资源,通常代表一个功能集合

4.如果模块A依赖模块B,则模块A加载的时候会把模块B的类也添加到自己的类路径上

5.模块分为动态模块和静态模块,它们之间的区别在打包上面,其它方面完全一样

   1)静态模块

      位于modules下的模块都是静态模块,每个子目录代表一个模块,每个模块中包含一个或者多个JAR文件以及一个module.xml文件;模块的名字定义在module.xml文件中  ;jboss应用服务器提供的API都是静态模块提供的,比如:JAVA EE apis以及jboss 日志api

     当多个应用都依赖于同一个第三方类库的时候,用静态依赖的方式将会比较好,避免多次加载

    2)动态模块

       被部署到应用服务器的jar WAR或者EAR都是动态模块,动态模块的名字就是归档包的名字前加一个deployment(如:deployment.inventory.war),因为每个被部署的jar 或者war都是一个模块,所以它可以依赖于别的模块也可以被别的模块所依赖

6.模块依赖

    模块依赖分为显示依赖(explicit)和隐式依赖(implicit)

    显示依赖通过配置文件指定,比如静态模块中modules.xml文件中定义的依赖;

动态模块(用户自己的应用)中通过MANIFEST.MF(META-INF下面)和jboss-deployment-strucure.xml(位于WEB-INF下面)文件声明显示依赖。

    MANIFEST.MF依赖案例:

    1)Dependencies: org.javassist, org.apache.velocity

    2)Dependencies: org.javassist, org.apache.velocity export //导出依赖

    3)Dependencies: org.javassist optional, org.apache.velocity //配置依赖可选属性

    deployment-strucure.xml配置:

                <jboss-deployment-structure>

                         <deployment>

                                  <dependencies>

                                           <module name="org.javassist" />

                                           <module name="org.apache.velocity" export="TRUE" />

                                  </dependencies>

                         </deployment>

                </jboss-deployment-structure> 

    隐式依赖(implicit)的类库是被自动添加,有一个列表列出那些依赖属于隐式依赖,

当然,可以通过jboss-deployment-strucure.xml文件配置排除使用隐式依赖:

<jboss-deployment-structure>

        <deployment>

                <exclusions>

                        <module name="org.jboss.logging" />

                </exclusions>

        </deployment>

</jboss-deployment-structure>  

7.多层依赖

 当A-->B-->C时,有一个属性叫export="true|false",如果此时B的定义如下:

<?xml version="1.0" encoding="UTF-8"?>

<module xmlns="urn:jboss:module:1.1" name="B">

        <resources>

                <resource-root path="B.jar" />

        </resources>

        <dependencies>

                <module name="C" export="true" />

        </dependencies>

</module> 

此时export="true",表示C中的类也会在A的类路径下,即当A加载C中的类时

可以成功;如果export="false",则A加载C中的类时会失败,但是B加载C会成功

8.类加载优先级顺序

    1)隐式依赖,自动被jboss添加

    2)显式依赖,通过MANIFEST.MF或者jboss-deployment-structure.xml添加

    3)被打包进入部署包的类,比如war包下的classes或者lib目录

    4)外部部署依赖,主要是指EAR部署的时候,有一个lib目录以及EJB 的jar

9.通过maven产生MANIFEST.MF依赖

<plugin>

        <groupId>org.apache.maven.plugins</groupId>

        <artifactId>maven-war-plugin</artifactId>

        <configuration>

                <archive>

                        <manifestEntries>

                                    <Dependencies>

                                                    org.javassist, org.apache.velocity

                                    </Dependencies>

                        </manifestEntries>

                </archive>

        </configuration>

</plugin>



© 著作权归作者所有

玺感
粉丝 3
博文 9
码字总数 15766
作品 0
朝阳
架构师
私信 提问
JBoss 系列八十五: JBoss Modules 简单介绍

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

无鸯
2014/02/04
0
0
JBoss 系列八十九: JBoss 7/WildFly 中如何阻止一个模块被默认加载

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

无鸯
2014/02/04
0
0
JBoss AS 7.0.0.Alpha1 发布

因为 6.0 已经接近 CR 了,因此 JBoss AS 开发团队开始了 7.0 的版本计划,故发布了此代号为 Halloween的版本。 JBoss AS 7.0 下载地址:http://jboss.org/jbossas/downloads JBoss AS 7.0 基...

红薯
2010/11/09
904
5
JBossWS 4.0.0.Beta1 发布

JBossWS实现了一个新的符合JAX-RPC1.1标准的SOAP stack,可用于替代先前的WS4EE和JBoss.NET。它能够更好的与整个JBoss架构体系相集成。 经过数月的开发,JBossWS 4.0 终于发布了第一个 beta...

红薯
2011/05/12
373
0
几种javaweb容器的配置备忘

1 JBOSS端口更改 1.到jboss-4.2.3.GAserverdefaultdeployjboss-web.deployer下,打开server.xml,修改默认的8080端口为8081. 2.然后到jboss-4.2.3.GAserverdefaultconfjboss-service.xml 修改......

王小明123
2013/06/18
0
1

没有更多内容

加载失败,请刷新页面

加载更多

Exchanger

从官方的javadoc可以知道, 当一个线程到达exchange调用点时, 如果它的伙伴线程此前已经调用了此方法, 那么它的伙伴会被调度唤醒并与之进行对象交换, 然后各自返回。 如果它的伙伴还没到达...

Java搬砖工程师
7分钟前
0
0
Istio 在阿里云容器服务的部署及流量治理实践

目标 在阿里云容器服务 Kubernetes 集群上部署 Istio 服务网格 实践灰度发布、故障注入、熔断等 Istio 流量管理特性 准备工作 安装和设置 kubectl 客户端,请参考不同的操作系统,如果已经安...

阿里云云栖社区
15分钟前
0
0
深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)

上篇文章《深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)》我们通过对mybatis源码的简单分析,可看出,在mybatis配置文件中,在configuration根节点下面,可配置properties、typeA...

须臾之余
33分钟前
3
0
Java Web项目通过filter限制IP访问及路由拦截

背景 web开发中出于安全方面的考虑,对于后台管理项目通常会对用户访问做限制,常见的做法是硬件上设置白名单,过滤掉不需要的IP访问来保证管理平台的安全。但是在硬件操作不方便的情形之下,...

豫华商
48分钟前
4
0
nginx启动后页面还是打不开

是因为防火墙没有关闭 service iptables stop

米修米修er
58分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部