【问题标题】:Glassfish - Deploying two JARs with mutual dependenciesGlassfish - 部署两个相互依赖的 JAR
【发布时间】:2011-05-20 14:54:37
【问题描述】:

我是 Java EE 的新手,所以这可能是一个愚蠢的问题。但我正在将一个 WAR 和一个包含 EJB 的 JAR 部署到 Glassfish 3.1。服务器。 WAR 引用了 JAR 文件中的 EJB 之一。是否必须在 WAR 文件的 lib 目录中包含 EJB JAR 才能使其正常工作?由于 WAR 和 JAR 都将在同一个应用服务器上运行,我希望我不需要处理这些依赖关系。但是,如果 WAR 不包含 EJB JAR(即使 EJB JAR 已部署在应用服务器上),我在部署 WAR 时会收到 java.lang.NoClassDefFoundError

【问题讨论】:

    标签: jakarta-ee glassfish


    【解决方案1】:

    Java EE 的基石之一是不同组件可以在不共享命名空间的容器中运行的概念,即使这些组件可能在同一个 JVM 中运行。如果您有需要共享名称空间的模块,则需要将它们捆绑到 EAR(Java EE 6 之前)或组合成单个 WAR(Java EE 6 为需要利用 EJB 的 Web 应用程序建立的特殊情况) .

    这与熟悉 Java SE 开发的人们“知道”的情况相比发生了重大变化。对于大多数 Java SE 程序来说,容器就是 JVM 进程。

    因此,您的问题的答案是:“不。您不需要将 EJB jar 放在 WAR 文件的 lib 目录中。您可以创建一个包含 BOTH 档案的 EAR 文件。”

    这可能会为您澄清情况......

     myEar.ear
       + myEJBs.jar
       + myWAR.war
       + lib
           + a-jar-that-has-classes-used-in-both-archives-above.jar
    

    【讨论】:

      【解决方案2】:

      您是否尝试过将 WAR 和 JAR 文件一起打包成一个 EAR 文件? EAR 文件可以有一个 lib 目录,您可以在其中将要加载的 JAR 文件放在企业应用程序的类路径 FBO 上。

      这应该可以解决您的类加载器问题。

      【讨论】:

        猜你喜欢
        • 2011-04-26
        • 1970-01-01
        • 2021-09-19
        • 1970-01-01
        • 1970-01-01
        • 2010-11-11
        • 2011-06-26
        • 1970-01-01
        • 2017-03-01
        相关资源
        最近更新 更多