WAR 模块无法在同一 EAR 的 EJB 模块中找到 EJB 类



好吧,我有一个具有以下结构的 EAR 项目:

EarSample
  - EarSample-ejb.jar
  - EarSample-web.war

在 EJB 模块内部,有一个简单的无状态会话 Bean,没有接口(无视图接口(。

正在发生的事情是,我无法将该 EJB 注入打包在 war 模块中的 JSF 托管 bean 中。Netbeans 甚至看不到这个类。

我已经尝试过GF 3/4和Payara。

任何帮助将不胜感激。谢谢。

好吧,正如@OndrejM所建议的,我只在 WAR 的 pom 中添加了 EJB 模块依赖.xml作为"提供",它运行良好。

    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>EarSample-ejb</artifactId>
        <version>${project.version}</version>
        <scope>provided</scope>
    </dependency>

你应该从 EarSample-ejb.jar 模块中提取 EJB 接口,并将它们放入单独的 jar 文件 EarSample-common.jar 中。这样的存档应该放在 EarSample 中的 lib 文件夹中,这样就可以从两个模块访问它。

结构应如下所示:

EarSample
  EarSample-ejb.jar
  EarSample-web.war
  /lib/EarSample-common.jar

背后的原因是符合JSR标准,其中通常EAR模块应该有单独的类加载器(默认情况下,这在Glassfish或JBoss/Wildfly中不受限制(。

如果您将上述 EJB 接口提取到单独的 maven 模块中,并将该工件作为编译范围依赖项添加到 ejb 和 Web 模块中,那么您的解决方案将跨所有 JavaEE 6/7 服务器工作。

最新更新