EJB注入非托管对象

时间:2014-08-05 10:00:27

标签: java-ee weblogic ejb-3.0 ejb-3.1

我们正在使用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强制扫描自定义类的解决方法?

非常感谢。

1 个答案:

答案 0 :(得分:0)

可以选择将Injection包装到CDI-Component中并在代码中使用它。一旦配置好,CDI就能够在独立的java中工作。 另一个有用的选择可能是CDI也支持EJB注入(在某些用例中): CDI.current().select(MyService.class).get();

但是:EJB有自己的事务管理。所以我更喜欢将其包装成cdi-component以获得更多的控制权。