EJB与CDI查找

时间:2017-08-04 08:23:57

标签: java-ee dependency-injection transactions ejb cdi

下面的MyService是一个无状态EJB。如果我用CDI查找它,例如交易时,它的行为会不同吗?

    InitialContext initialContext = new InitialContext();
    MyService myService1 = (MyService) initialContext.lookup("...MyService...");

VS

    BeanManager beanManager = CDI.current().getBeanManager();
    Bean<?> bean = beanManager.getBeans(MyService.class).iterator().next();
    CreationalContext<?> ctx = beanManager.createCreationalContext(bean);
    MyService myService2 = (MyService) beanManager.getReference(bean, MyService.class, ctx);

1 个答案:

答案 0 :(得分:1)

使用CDI方法,您将获得一个依赖实例。使用EJB方法,您将获得EJB管理引用。

对于Dependent实例,您需要注意在完成时销毁引用,否则您可能会遇到一些内存泄漏。该规范实际上从this section

开始调出此问题

虽然在大多数情况下,CDI查找是首选,如果它背后的bean是EJB并且您需要进行编程查找,那么最好使用EJB方法。