在应用程序javaee5中加载共享类

时间:2010-07-21 22:42:03

标签: java class shared ear classloader

我正在尝试在java ee 5应用程序中加载一些我耳朵的所有Web应用程序通用的类。

我尝试将类(而不是jar)放入其中 a)名为“lib”的目录

b)还在application.xml的

中指定
   <module><java>lib/common.jar</java></module> 

并且选项a或b

都没有成功

但是当我把这些类变成common.jar时,我能够通过方法b)加载类。

  1. 这两种方法都需要激活类吗?
  2. 通过上述两种方法提供课程有什么区别?为什么看起来有两种方法来指定加载公共类?

1 个答案:

答案 0 :(得分:2)

我不确定这里引用了哪个应用服务器,以及common.jar文件的性质。现在,我假设应用程序服务器是任何Java EE 5容器,并且common.jar文件是实用程序jar(而不是EJB或类似模块)。

Java EE 5平台规范实际上定义了容器提供库支持的方式:

.ear文件可能包含一个包含JAR文件中打包的库的目录。 .ear文件的部署描述符的library-directory元素包含此目录的名称。如果未指定library-directory元素,或者.ear文件不包含部署描述符,则使用名为lib的目录。可以使用空的library-directory元素来指定没有库目录。 扩展名为.jar的此目录(但不是子目录)中的所有文件必须对包含在EAR文件中的所有组件(包括应用程序客户端)可用。这些库可以使用本文描述的任何技术引用与应用程序捆绑在一起或单独安装的其他库。

这并不意味着方法B不正确,它是用于application servers like JBoss 4的方法,它不支持application.xml中的library-directory元素。我相信,Glassfish还支持lib目录概念,没有相应的库目录元素。

回到这个问题,将类单独放在EAR文件的目录中似乎仅在WebLogic Server中通过APP-INF \ classes结构支持(不用说,这不是平台标准)。因此,建议对常见类进行jar,并使用应用程序服务器支持的机制使这些公共类可供应用程序中的其他模块使用。