1

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

我试图通过将类(不是jar)放在一个名为“lib”的目录中来做到这一点

b) 也在 application.xml 中指定

   <module><java>lib/common.jar</java></module> 

并且通过选项 a 或 b 均未成功

但是当我将类 jar 到 common.jar 中时,我能够通过方法 b) 加载类

  1. 这两种方法都需要对类进行 jarred 吗?
  2. 通过上述两种方法提供类有什么区别?为什么似乎有两种方法可以指定加载公共类?
4

1 回答 1

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 不正确,它是用于JBoss 4 等应用程序服务器的方法,它不支持 application.xml 中的 library-directory 元素。我相信,Glassfish 也支持没有相应 library-directory 元素的 lib 目录概念。

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

于 2010-07-21T23:27:13.190 回答