【发布时间】:2017-09-14 13:40:50
【问题描述】:
我正在将应用程序从 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 时出错 来自模块“null”的“com.example.BaseSpecialService/injectedService” 应用程序“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。但我找不到任何东西可以做到这一点。 非常感谢任何帮助。
【问题讨论】:
标签: jakarta-ee ejb weblogic