0

好吧,我有一个 EAR 项目,其结构如下:

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

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

发生的事情是我无法将该 EJB 注入到打包在 war 模块中的 JSF 托管 bean 中。Netbeans 甚至没有看到课程。

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

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

4

2 回答 2

1

好吧,正如@OndrejM 所建议的那样,我只在 WAR 的 pom.xml 中将 EJB 模块依赖添加为“已提供”,并且效果很好。

    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>EarSample-ejb</artifactId>
        <version>${project.version}</version>
        <scope>provided</scope>
    </dependency>
于 2017-03-17T00:48:43.777 回答
0

您应该从 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 服务器。

于 2017-03-16T15:29:45.870 回答