2012-11-23 15 views
8

Ponieważ Java EE 5 nie ma CDI, jak działa tutaj DI?Wstrzyknięcie zależności Java EE 5?

Czy EJB można wstrzyknąć @EJB w klasie, która nie jest EJB? Czy wtyczka EntityManager może zostać zaimplementowana jako @PersistenceContext w klasie innej niż EJB (kontener zarządzany lokalnie, nie zasobu lokalnego EntityManager)? Czy jedynym rozwiązaniem do przeniesienia zasobów w klasach innych niż EJB jest wyszukiwanie JNDI?

Przez klasę inną niż EJB rozumiem klasę, która nie jest opatrzona przypisami @Stateless/@Statefull lub innymi.

+1

Pamiętaj, że w tej sytuacji możesz korzystać z wcześniejszych struktur CDI - Guice, PicoContainer, a nawet przerażająca wiosna. Nie mają naturalnej zdolności do wprowadzania EJB lub kontekstowego 'EntityManager' do swoich obiektów, ale powinno być dość proste zbudowanie mostu, który im na to pozwoli, chociaż ten margines jest zbyt mały, aby zawierać wyjaśnienie tego . –

Odpowiedz

5

albumu: http://www.oracle.com/technetwork/articles/javaee/injection-141192.html

Pamiętaj, że Java EE 5 platforma pojemnik może obsługiwać zastrzyki przejrzysty tylko wtedy, gdy są one wykorzystywane w kontenerze zarządzane składników, takich jak ziarna EJB, serwletów i JavaServer Pages (JSP) moduły obsługi tagów technologii.

onjava ma artykuł: http://onjava.com/pub/a/onjava/2006/01/04/dependency-injection-java-ee-5.html

prezentuje czytelną tabelę z których zarządzanych Składniki (na zbiorniku), które obsługują zastrzyk jaki rodzaj środków.

+0

Załóżmy, że mam EJB (POJO z adnotacją @Stateless), które ma pewne pola, które są komponentami zarządzanymi przez kontener, powiedzmy EntityManager z adnotacją @PersistenceContext i innym EJB z adnotacją @ EJB/Jeśli chcę użyć funkcjonalności tego EJB w klasa zarządzana bez kontenera I może sprawdzić ją za pomocą JNDI; ale czy EntityManager i inne EJB będą wstrzykiwane i gotowe do użycia? – m3th0dman

+0

Czy wierzysz, że doświadczasz różnych zachowań? –

Powiązane problemy