假设 JBOSS EAP 的安装目录为 %{JBOSS_HOME},则 JBOSS默认提供的 MODULE的存储存路径为:%{JBOSS_HOME}/modules,以下称之为%{JBOSS_MODULE }。EAP 6.1 中的 module 如下截图:
在说 module 的引用之前,先说一下如何自定义一个 module。
- 自定义的 module,一般存放于%{JBOSS_MODULE }/com目录下。
- 既然系统默认提供了这么多的 module,那我们就从中选择一个来进行参考。这里我参考的是:\com\google\guava,截图如下:
![]()
自定义的module定义好了之后,如何使用呢?
- 关键的是 module.xml这份文件,里面是对这个 module 的配置,内容如下:
![]()
- properties 中是系统解析这个 module 时会使用到的一些属性。
- resources是这个 module 对应的 jar包名称,与该 module 放于同一目录下。
- dependencies是指这个 module 依赖的其他 module的信息。
- 需要要注意的是,第一行的 name属性的值必须与该 module的路径保持一致。比
如此 module的路径是”com\google\guava”(main是不被包含在内的),所以它的
name属性的值必须是”com.google.guava”。这个值也是当该 module被引用时所使
用的值。(下面有使用示例)- 下面,我们自定义一个 module,其中使用的 jar包是我自己做的,先上截图:
![]()
![]()
- 可以看到,跟之前参考的那个,结构几乎是一样的。此处不在赘述。至此,一个自定义的 module就 OK了。
- 不管是系统默认提供的 module,还是自定义的 module,要想使用它们,需要通过配置文件来声明对它们进行依赖。
- 对 module的依赖,有两种方式。
- 隐式依赖:这个依赖由系统自动进行。比如当你部署一个 JAVAEE工程时,即使你没有配置文件中声明对 servlet-api.jar的依赖,你的工程也可以正常部署
及运行。这就是因为 JBOSS自动为你的工程依赖了这个 jar包。(当然其实是依赖了包含这个 jar包的 module)。
ps:具体隐式依赖细节请参照:https://access.redhat.com/site/documentation/en-US/JBoss_Enterprise_Application_Platform/6.1/html/Development_Guide/sect-Reference.html#Implicit_Module_Dependencies- 显示依赖:如果你要使用到一个未被包含在隐式依赖中的 module时(比如,上面自定义的 module),那么就必须通过配置文件来引用相应的 module。
- 下面以 war包的部署为例说明如何进行显示的依赖 module
![]()
从上图来看,我们需要增加一份 jboss-deployment-structure.xml至 WEB-INF 目录下。jboss-deployment-structure.xml中,声明了对自定义的module “com.fujitsu.util” 和 JBOSS 自带的 module ”org.apache.commons.lang”的引用。这两个 module的名称是与它们的 module.xml中的 name 属性的值保持一致的。
(参见上面 相关 说明)
- 下面以 ear包的部署为例说明如何进行显示的依赖 module(方式一)
从上图来看,我们将 jboss-deployment-structure.xml从 war 包的 WEB-INF 目录移至了 ear 包的 META-INF 目录下面,且同时,为每个 module增加了一个 export 的属性,并将其值设为 true。如果没有这个 export=”true”的话,在 war中将无法访问到这两个 module。
- ear包,部署方式二
从上图来看,与方式一相比,差异点是:我们将 jboss-deployment-structure.xml中的”com.fujitsu.util”的依赖注释掉了,同时,在 eartest.ear下面建立了一个 lib子目录,然后将 fujitsu-numberutil.jar拷贝至此目录下了。这样部署之后,war包仍然是可以访问到 fujitsu-numberutil.jar中的 api的。因为 ear的 lib目录下的所有jar包对 ear包中所有其他 sub system(比如此处的 webtest.war )都是可见的。这样的话,如果我们有一些 jar包要供工程来使用,但又不想自定义 module的时候,可以采用这个方式。
- 下面说明一下全局 module的建立
请看上图的阴影部分,我们通过 global-modules声明了两个全局 module,这样一来,在所有工程中,不需要任何其他配置(比如上面的
jboss-deployment-structure.xml),就可以使用这两个 module了。
PS:在官方网站上,说可以通过修改 MANIFEST.MF文件来指定显示依赖,但我试了很多次,都不起作用。有兴趣的可以试一下。
官方链接如下:
https://access.redhat.com/site/documentation/en-US/JBoss_Enterprise_Application_Platform/6.1/html/Development_Guide/Add_an_Explicit_Module_Dependency_to_a_Deployment1.html
最后附上测试所使用的 ear:http://download.csdn.net/detail/rainbow702/9466265
本文详细介绍了JBoss EAP模块的概念、自定义模块的创建过程、如何通过配置文件引用模块,包括隐式依赖和显示依赖两种方式,以及全局模块的建立。同时,提供了war包和ear包部署时引用模块的具体步骤和示例。
5061

被折叠的 条评论
为什么被折叠?



