【问题标题】:Access class in EJB project from War project in EAR project?EAR项目中War项目中EJB项目中的访问类?
【发布时间】:2011-10-15 22:29:27
【问题描述】:

我正在创建一个基于 MDB 和支持这些 MDB 的类的项目。我还需要使用 ServletContextListener 与 MDB 世界进行交互(详情如下),这意味着我需要一个 WAR 项目。

问题:ServletContextListener 如何访问 EJB 项目中的类?

项目组织(标准 Eclipse EAR 项目):

EAR 项目 里面有一些罐子 EJB 项目 有一些 MDB 和 MDB 使用的许多其他类 战争项目 有 ServletContextListener。

我为什么要这样做?我需要在项目启动时启动一个线程。该线程需要访问 MDB 也使用的一堆类。

注意:我知道我可以将这些通用类放入 EAR 项目中的 jar 中。如果有一种方法可以做到这一点,例如单个 Eclipse“调试为”->“在服务器上”,那么这将构成一个很好的解决方案。提供的任何解决方案都需要支持服务器上的调试,并逐步调试到所有类。

注意 2:我可以告诉 Eclipse WAR 项目依赖于 EJB 项目,这会删除 Eclipse 错误标志,但 Eclipse 会显示一个警告,即在部署的项目中将不存在这种依赖关系,这意味着我的类是从WAR 将无法在运行时实例化。

【问题讨论】:

    标签: java eclipse jakarta-ee


    【解决方案1】:

    在 Java EE 服务器上使用“标准”部署(意味着:使用默认的类加载器策略),WAR 类“可以看到”封闭 EAR 中的所有内容,并且 EAR 类具有优先权。

    我可以告诉 Eclipse WAR 项目依赖于 EJB 项目

    你不是反其道而行之吗? EAR 项目需要在项目的“Properties -> Deployment Assembly”部分中有您的 WAR 项目。

    想到的另一种可能性是,您可能正尝试在不支持 EAR 的非 Java EE 服务器上进行部署,例如 Tomcat。这可能是 Eclipse 说已部署项目中不存在依赖项的原因。

    【讨论】:

    • 在发帖之前,我阅读了一个同意您的网页。有可能,在 Glassfish(我的目标)上,它可以像你说的那样工作。但是,Eclipse 显示错误。我在 Eclipse 中创建了我的项目,如下所示: (1) 创建 EAR 项目。 (2) 创建 EJB 项目作为 EAR 的成员。 (3) 创建WAR项目作为EAR的成员。 WAR 项目中的类无法看到 EJB 项目中的类 - 根据 Eclipse 错误标志。我通过创建一个“实用程序”(库)项目作为同一个 EAR 的一部分来解决这个问题,并将我的所有类都移到它上面,除了 MDB 和 ServletContextListener。这似乎有点矫枉过正。
    猜你喜欢
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    相关资源
    最近更新 更多