我们正在使用EJB 3.x将我们的Web应用程序升级到Oracle WebLogic 12c,我们遇到了一个问题。
这是方案......
我们有一个简单的EJB,我们将调用MyService,它由bean和EJB 3.x注释定义的本地/远程接口定义。
以下是该场景的伪代码:
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();
}
}
我已经阅读了很多关于该问题的文档,并且我发现Application Server只扫描某种类来解析注入的EJB(Java EE 6, 5, 7 | List of managed beans or classes: EJBs , JSF beans and ..?)。
是否存在使用WebLogic强制扫描自定义类的解决方法?
非常感谢。
答案 0 :(得分:0)
可以选择将Injection包装到CDI-Component中并在代码中使用它。一旦配置好,CDI就能够在独立的java中工作。
另一个有用的选择可能是CDI也支持EJB注入(在某些用例中):
CDI.current().select(MyService.class).get();
但是:EJB有自己的事务管理。所以我更喜欢将其包装成cdi-component以获得更多的控制权。