2017-08-04 82 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方法。