WAR 模块在同一个 EAR 的 EJB 模块中找不到 EJB 类
WAR module can't find EJB classes in EJB module in the same EAR
嗯,我有一个具有以下结构的 EAR 项目:
EarSample
- EarSample-ejb.jar
- EarSample-web.war
在 EJB 模块中有一个没有接口(无视图接口)的简单无状态会话 bean。
发生的事情是我无法将 EJB 注入到 war 模块中打包的 JSF 托管 bean 中。 Netbeans 甚至看不到 class.
我已经尝试过 GF 3/4 和 Payara。
如有任何帮助,我们将不胜感激。
谢谢。
您应该从 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 服务器。
好吧,正如@OndrejM 所建议的,我只在 WAR 的 pom.xml 中添加了 EJB 模块依赖项作为 "provided",并且它运行良好。
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>EarSample-ejb</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
嗯,我有一个具有以下结构的 EAR 项目:
EarSample
- EarSample-ejb.jar
- EarSample-web.war
在 EJB 模块中有一个没有接口(无视图接口)的简单无状态会话 bean。
发生的事情是我无法将 EJB 注入到 war 模块中打包的 JSF 托管 bean 中。 Netbeans 甚至看不到 class.
我已经尝试过 GF 3/4 和 Payara。
如有任何帮助,我们将不胜感激。 谢谢。
您应该从 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 服务器。
好吧,正如@OndrejM 所建议的,我只在 WAR 的 pom.xml 中添加了 EJB 模块依赖项作为 "provided",并且它运行良好。
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>EarSample-ejb</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>