3

我目前有一个包含 EJB 和 WAR 的 J2EE 项目。当我在最终的 EAR 中只捆绑了一个 WAR 和一个 EJB 模块时,一切都很好。我现在需要使用相同的 EJB 模块开发另一个 WAR。

因此,我在新 WAR 的库中添加了 EJB 模块。问题是当我尝试部署与两个 WAR 和共享 EJB 捆绑的 EAR 时,出现以下异常:

Caused by: java.lang.RuntimeException: Error while binding JNDI name com.alex.ejb.MyBeanRemote__3_x_Internal_RemoteBusinessHome__ for EJB : MyBean

当我从第二个 WAR 的库中删除 EJB 时,一切都恢复了。

有什么我错过的吗?

最后,真正的问题是“如何在多个 Web 应用程序中共享 EJB?”

感谢帮助

4

2 回答 2

4

问题是当我尝试部署与两个 WAR 和共享 EJB 捆绑的 EAR 时,出现以下异常 (...)

这是因为 bean 被部署了两次,导致命名冲突。实际上,在使用 EAR 打包时,您不应该这样打包应用程序。

最后,真正的问题是“如何在多个 Web 应用程序中共享 EJB?”

不要将您的 EJB 模块放在WEB-INF/libWeb 模块的文件夹中,您的 EAR 应该具有以下结构:

耳朵
|-- 元信息
| |-- 应用程序.xml
| `-- sun-application.xml(可选)
|-- myejbmodule1-ejb.jar
|-- ...
|-- myejbmoduleN-ejb.jar
|-- mywebapp1-war.war
`-- mywebapp2-war.war

资源

于 2010-10-31T18:49:43.260 回答
0

您不需要在新的 WAR 中包含 EJB,您可以使用 JNDI 或通过注入来简单地查找它。就针对它进行编译而言,您可以创建一个 JAR,其中仅包含您需要使用的接口,以及新项目的类路径。

于 2010-10-29T10:08:22.843 回答