2017-08-04 4 views
1

MyService unten ist eine zustandslose EJB. Wird es sich anders verhalten, wenn ich mit CDI nachschaue, wenn es beispielsweise um Transaktionen geht?EJB vs CDI Lookup

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

Gibt es einen Grund, @Inject nicht zu verwenden? – Milkmaid

+0

Normalerweise mache ich das aber in meinem Fall nicht. – aandeers

Antwort

1

Mit dem CDI-Ansatz, sind Sie eine abhängige Instanz zu bekommen. Mit dem EJB-Ansatz erhalten Sie eine EJB-verwaltete Referenz.

Bei abhängigen Instanzen müssen Sie darauf achten, die Referenz zu zerstören, wenn Sie fertig sind, andernfalls können Speicherlecks auftreten. In den meisten Fällen ist CDI Look-Up bevorzugt, wenn die Bean dahinter ein EJB ist und Sie programmatische Lookups durchführen müssen, ist es besser, den EJB-Ansatz zu verwenden .