好吧,我有一个 EAR 项目,其结构如下:
EarSample
- EarSample-ejb.jar
- EarSample-web.war
在 EJB 模块内部有一个简单的无状态会话 bean,没有接口(无视图接口)。
发生的事情是我无法将该 EJB 注入到打包在 war 模块中的 JSF 托管 bean 中。Netbeans 甚至没有看到课程。
我已经尝试过 GF 3/4 和 Payara。
任何帮助将不胜感激。谢谢你。
好吧,我有一个 EAR 项目,其结构如下:
EarSample
- EarSample-ejb.jar
- EarSample-web.war
在 EJB 模块内部有一个简单的无状态会话 bean,没有接口(无视图接口)。
发生的事情是我无法将该 EJB 注入到打包在 war 模块中的 JSF 托管 bean 中。Netbeans 甚至没有看到课程。
我已经尝试过 GF 3/4 和 Payara。
任何帮助将不胜感激。谢谢你。
好吧,正如@OndrejM 所建议的那样,我只在 WAR 的 pom.xml 中将 EJB 模块依赖添加为“已提供”,并且效果很好。
<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 服务器。