2017-08-04 14 views
1

以下のMyServiceはステートレスなEJBです。たとえば、トランザクションのような場合にCDIを使用して検索すると、その動作が異なりますか? 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

、あなたは依存のインスタンスを取得しています。 EJBアプローチでは、EJBマネージド参照を取得しています。

依存インスタンスでは、完了したら参照を破棄する必要があります。そうしないと、メモリリークが発生する可能性があります。この仕様は実際にはthis sectionから始まり、

から始まります。ほとんどの場合、CDIルックアップが優先されますが、その背後にあるBeanがEJBであり、プログラムによるルックアップが必要な場合は、EJBアプローチ。