2017-08-04 44 views
1

下面的MyService是一个无状态的EJB。如果我在CDI上查询它,例如事务处理,它的行为会有所不同吗?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); 
+0

任何不使用@Inject的理由? – Milkmaid

+0

我通常会做,但不能做到这一点在我的情况。 – aandeers

回答

1

随着CDI方法,你得到一个相关的实例。使用EJB方法,您将获得一个EJB管理的引用。

使用依赖实例时,需要注意在完成时销毁引用,否则可能会面临一些内存泄漏。该规范实际上是调用了这个问题,开始this section

虽然在大多数情况下,CDI抬头是首选,如果后面的bean是一个EJB,你需要做的纲领性查找,你最好使用EJB方法。