2012-11-23 17 views
8

Da Java EE 5 nicht über CDI verfügt, wie funktioniert DI hier?Java EE 5 Abhängigkeitsinjektion?

Kann ein EJB mit @EJB in eine Klasse injiziert werden, die kein EJB ist? Kann ein EntityManager mit @PersistenceContext in einer Klasse injiziert werden, die ein Nicht-EJB ist (Container verwaltete nicht Ressource lokal EntityManager)? Oder die einzige Lösung, um die Ressourcen in Nicht-EJB-Klassen zu bringen, ist die JNDI-Suche?

Mit Nicht-EJB-Klasse meine ich eine Klasse, die nicht mit @Stateless/@Statefull oder anderen beschriftet ist.

+1

Denken Sie daran, dass es Pre-CDI-Frameworks gibt, die Sie in dieser Situation verwenden können - Guice, PicoContainer, sogar der gefürchtete Frühling. Sie haben keine natürliche Fähigkeit, EJBs oder den kontextabhängigen "EntityManager" in ihre Objekte zu injizieren, aber es sollte ziemlich einfach sein, eine Brücke zu bauen, die es ihnen erlauben würde, obwohl dieser Spielraum zu klein ist, um eine Erklärung dafür zu enthalten . –

Antwort

5

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

Beachten Sie, dass eine Java EE 5-Plattform Behälter transparent nur die Injektionen behandeln können, wenn sie auf Container verwalteten Komponenten verwendet werden, wie EJB Bohnen, Servlets, und JavaServer Pages (JSP) Technologie-Tag-Handler.

onjava hat einen Artikel: http://onjava.com/pub/a/onjava/2006/01/04/dependency-injection-java-ee-5.html

Es stellt eine lesbare Tabelle davon verwalteten Komponenten (pro Container), die Injektion, welche Art von Ressourcen unterstützen.

+0

Angenommen, ich habe ein EJB (POJO mit @Stateless versehen), das einige Felder enthält, die Container-verwaltete Komponenten sind, z. B. ein mit @PersistenceContext annotierter EntityManager und ein mit EJB annotiertes anderes EJB, wenn ich die Funktionalität dieses EJB verwenden möchte eine nicht containerverwaltete Klasse kann ich über JNDI nachschlagen; Aber werden der EntityManager und das andere EJB injiziert und können verwendet werden? – m3th0dman

+0

Ich glaube, Sie haben ein anderes Verhalten? –