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

发布于 2024-09-11 01:18:56 字数 390 浏览 10 评论 0原文

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

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

b) 也在 application.xml 中指定

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

,并且通过选项 a 或 b 都没有成功

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

  1. 执行这两项操作方法需要对类进行震动吗?
  2. 通过上述两种方法提供类有什么区别?为什么看起来有两种方法来指定加载公共类?

I am trying to load some classes that are common to all the web applications of my ear in a java ee 5 application.

I tried to do this by putting the classes (not jar) in
a) directory called "lib"

b) also specifying in application.xml's

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

and was not successful by either option a or b

but when I jarred the classes into common.jar, I was able to load the classes by method b)

  1. Do both these method need the classes to be jarred ?
  2. what is the difference between providing the classes via the above 2 methods ? why does it seem like there are two ways to specify loading common classes ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情释 2024-09-18 01:18:57

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

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

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

这并不意味着方法 B 不正确,它是用于 像 JBoss 4 这样的应用程序服务器,不支持 application.xml 中的库目录元素。我相信,Glassfish 也支持 lib 目录概念,但没有相应的库目录元素。

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

I'm not sure which application server is being referred to here, and the nature of the common.jar file. For now, I'll assume that the application server is any Java EE 5 container, and that the common.jar file is a utility jar (and not an EJB or similar module).

The Java EE 5 Platform Specification actually defines the manner in which library support is to be provided by containers:

A .ear file may contain a directory that contains libraries packaged in JAR files. The library-directory element of the .ear file’s deployment descriptor contains the name of this directory. If a library-directory element isn’t specified, or if the .ear file does not contain a deployment descriptor, the directory named lib is used. An empty library-directory element may be used to specify that there is no library directory.
All files in this directory (but not subdirectories) with a .jar extension must be made available to all components packaged in the EAR file, including application clients. These libraries may reference other libraries, either bundled with the application or installed separately, using any of the techniques described herein.

This does not mean that method B is incorrect, it is the one to be used for application servers like JBoss 4, that did not support the library-directory element in application.xml. I believe, Glassfish also supports the lib directory concept without a corresponding library-directory element.

Coming back to the question, placing classes alone in a directory in the EAR file appears to be supported only in WebLogic Server via the APP-INF\classes structure (needless to say, this is not a platform standard). Hence, it is recommended to jar the common classes and use the application server supported mechanism to make these common classes available to other modules in the application.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文