模块名是由"."号分割的字符串,它和version slot一起用来在module loader中唯一标志一个模块。一般来说,名称的组成就像包名一样,但在模块名和模块包含的包之间并没有任何的联系。一下有一些典型的模块名:
org.apache.commons.logging
org.jboss.remoting
cglib
javax.ejb.api
ch.qos.cal10n
大多数的module loader支持加载一个名叫"system"的特别模块。这个模块引用了用来加载jboss-module.jar的类加载器。由于事实上这个类加载器可能包含了任何的资源,所以不要直接使用这个模块,而是应该使用 import/export filter 来提供一个这个模块的受限版本。
当在一个module loader中希望一个模块的多个实例的时候,就需要使用Version slot来进行标志。如果你想部署一个模块的新版本,因为有一个新的应用需要它,但是新版本不能兼容老版本,你就需要用到version slot。Version slot可以是任何的字符串;所以可以按照系统的要求进行任意的组织。如果没有指定,version slot默认为"main"。 当使用字符串来唯一标志一个模块时,version slot可以附在模块名之后,用":"分隔。比如,下面的两个模块Id字符串引用的是同一个模块:
org.jboss.remoting:main
org.jboss.remoting
下面的3个模块Id字符串标志不同的模块:
org.jboss.remoting:2
org.jboss.remoting:3
org.jboss.remoting
在Modules API中,模块Id由org.jboss.modules.ModuleIdentifier
类来表示,它负责解析Id字符串以及组装名称或者名称加上version slot成模块的Id。