Weblogic 12.2忽略@EJB注释

时间:2017-09-14 13:40:51

标签: java-ee ejb weblogic

我将应用程序从weblogic 10.3迁移到weblogic 12.2。

我包含一个与其他项目共享的库。这个jar包含一些带有@EJB注释的POJO,如下所示:

public abstract BaseSpecialService{
   @EJB DelegateService injectedService;
}

请注意,这只是一个POJO:它没有@Stateless或@Stateful注释。 这个想法是当我想要使用这个服务时,我在另一个ejb-jar中用一个具体的@Stateless Bean类扩展它。但我只想为我需要的服务这个,其他服务应该被视为POJOS。

在weblogic 10中这很好用,但是当转移到weblogic 12时,我无法部署应用程序,因为容器尝试在上面的示例中注入DelegateService,即使@EJB注释不在EJB但是在POJO中。我在部署时遇到此错误:

  

[J2EE:160200]解析ejb-ref时出错   " com.example.BaseSpecialService / injectedService"来自模块" null"的   应用" myapp-0.1.0-SNAPSHOT"。 ejb-ref没有   尚未指定ejb-link和目标bean的JNDI名称。   尝试自动将ejb-ref链接到其目标bean失败   因为没有找到应用程序中的EJB来实现   " com.example.DelegateService"接口。将此ejb-ref链接或映射到   它的目标EJB并确保在ejb-ref中声明的接口   正确的。

我的解释是,在java EE 7中,所有jar都会被扫描注释,而在java EE 5中,只扫描在application.xml中标记为ejb模块的jar。我正在寻找一种方法来阻止应用程序服务器将依赖项注入我的POJO并将共享库jar视为普通jar,而不是ejb-jar。但我找不到任何可以做到的事情。 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

似乎WebLogic的CDI容器扫描您的jar文件并尝试将POJO / EJB注入其中。我的建议是禁用给定jar文件的CDI扫描并查看结果。您可以通过添加包含以下内容的名为 beans.xml 的文件并将其放在jar文件的META-INF文件夹中来完成此操作:

<?xml version="1.0" encoding="UTF-8"?>
<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"
    version="1.1" bean-discovery-mode="none">
</beans>