【发布时间】:2014-09-27 22:48:35
【问题描述】:
我们正在将我们的 Web 应用程序升级到带有 EJB 3.x 的 Oracle WebLogic 12c,但遇到了一个问题。
这就是场景……
我们有一个简单的 EJB,我们将调用 MyService,使用 EJB 3.x 注释定义的 bean 和本地/远程接口进行定义。
这是一个场景的伪代码:
class MyListener implements ServletContextListener {
@EJB private MyService myService;
public void contextInitialized(ServletContextEvent arg0) {
// Here myService is correctly instantiated, so we do something...
}
}
现在我们必须将 contextInitialized 方法逻辑移动到实用程序类中,因此新场景将是:
class MyUtility {
@EJB private MyService myService;
public void doSomething() {
// Here myService is NULL!!!!!
}
}
class MyListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent arg0) {
new MyUtility().doSomething();
}
}
我已经阅读了很多关于这个问题的文档,我发现应用服务器只扫描了某些类来解析注入的 EJB (Java EE 6, 5, 7 | List of managed beans or classes: EJBs , JSF beans and ..?)。
是否有一种解决方法可以强制使用 WebLogic 扫描像我这样的自定义类?
非常感谢。
【问题讨论】:
-
我不知道。你不能把EJB传给
MyUtility的构造函数吗? -
不,实用程序类必须隐藏其内部处理逻辑。
-
最后的手段是通过
InitialContext进行传统查找 -
+1 for @fvu - 良好的老式 InitialContext 查找是您始终可以做的事情,但要注意 MyUtility 类初始化依赖于 EJB,该 EJB 应该已经处于活动状态并已向 JNDI 注册。不适用于 WebLogic,但在 WebSphere 上,您可以为您的 WAR 和 EJB JAR 模块定义运行顺序,因此您应该确保在 MyUtility 之前初始化您的 EJB。
标签: java jakarta-ee weblogic ejb-3.0 ejb-3.1