我将应用程序从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。但我找不到任何可以做到的事情。 非常感谢任何帮助。
答案 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>