【问题标题】:loading shared classes in application javaee5在应用程序 javaee5 中加载共享类
【发布时间】:2010-07-21 22:42:03
【问题描述】:

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

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

b) 也在 application.xml 中指定

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

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

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

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

【问题讨论】:

    标签: java class shared ear classloader


    【解决方案1】:

    我不确定这里指的是哪个应用服务器,以及 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 也支持没有相应 library-directory 元素的 lib 目录概念。

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

    【讨论】:

    • 所以 - 如果不进入 WL 或 appserver 特定机制,我不能将裸类文件指定为共享?看起来,根据 javaee 规范,我总是必须 jar 我的公共共享类才能从 lib dir 或 java 模块中获取它......非常不方便......
    • 是不是因为需要在开发或者生产中做才不方便?我无法想象它在生产中的部署非常不方便。在开发过程中,最好使用其中一个 IDE 插件(尤其是用于 Eclipse 的插件),因为它们通常会引用分解后的 JAR。
    • 为了开发——由于各种原因,我无法使用 eclipse 插件,并且已经设置了我的项目,其中包含爆炸的目录结构和指向 eclipse 输出目录的符号链接。该插件只提供了一种方法来创建一个类似假耳朵的结构,以便应用服务器无论如何都可以拾取它,对吗?最终,应用服务器是必须从 lib 目录中获取类的服务器。它是如何做到的?您认为该插件将 Eclipse 中的类 jar 包起来,以便应用服务器可以访问类?
    • 除非我弄错了,否则构造的“假 EAR”文件将继续具有分解的 JAR 文件(即使对于普通类)。重要的是 application.xml 文件的内容 - 我目前不知道具体细节,但我认为 Eclipse 将目录文件路径插入到爆炸 JAR 的位置。
    • 看起来 WL 从 APPINF/classes 中挑选我们的课程就好了。如果我希望 WL 以非 appserver 的方式从目录中获取未压缩的类,我想我不走运。 application.xml 中的 标记需要一个 jar, 标记也是如此...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2017-08-27
    • 2023-03-07
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 2019-02-10
    相关资源
    最近更新 更多