好吧,我有一个具有以下结构的 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 服务器工作。