Weblogic 12 找不到 JNDI 绑定

问题描述

我们有一个使用 EJB 的多模块 Java EE 应用程序。

这是我们得到的错误示例:

20210211:20:02:37:923|错误|线程 223|-||||c.o.p.i.I.c.o.p.i.InterceptionMetadata|找不到JNDI 绑定于 'java:comp/env/be.cm.apps.evsb.datasplitter.mdb.GsBOBDataFileNotificationMDB/gsDataFileReader',在尝试查找时 comp/env/be.cm.apps.evsb.datasplitter.mdb.GsBOBDataFileNotificationMDB/gsDataFileReader 在 /app/ejb/be.cm.common.vsb-vsb-sync-client-javaee-1.3.0-SNAPSHOT.jar/#RabbitTopicConnectionImpl.

我们无法在线或在文档中找到有关此错误的信息。

vsb-sync-client-javaee一个外部依赖,我们将其作为 ejb 类型导入到一个模块中,然后我们又将其作为 ejb 类型导入到全局 ear 项目中的 pom 依赖文件中。
RabbitTopicConnectionImpl 此处是该依赖项中的 EJB。

此处的示例类:gsDataFileReader 是在同一 EAR 内的一个模块中使用的 EJB。此模块声明并注入 EJB。
对于此模块中的每个 EJB(本地),我们会在 Weblogic 中收到完整的错误流。
一个模块 (vsb-sync-client-javaee) 依赖于第二个模块,但反过来不行。
看起来好像第二个模块试图在第一个模块中查找 EJB,这是没有意义的。
更是如此,因为 EjB 是从该模块中声明的。

知道为什么会发生这种情况,或任何其他想法吗?

注意,在我们添加外部 vsb-sync-client-javaee EJB 模块之前,应用程序运行良好。
如果有任何不清楚的地方,请告诉我,因为这不是一个容易描述的问题。

解决方法

您需要在resources/META-INF下的模块中添加一个beans.xml文件,内容如下:

<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="all"
       version="1.1">
</beans>