10 Stimmen

EJB3 - Abrufen von Bean über Injektion vs. Lookup - was sind die Unterschiede, Auswirkungen, Probleme?

Es gibt zwei mir bekannte Möglichkeiten, eine EJB-Instanz zu erhalten:

  • Dependency Injection in Servlets und EJBs über die @EJB-Annotation
  • JNDI-Lookup über Context.lookup überall

Was sind die Unterschiede, Auswirkungen und Probleme bei der Verwendung dieser beiden Ansätze? Sind sie identisch? Ist Dependency Injection schneller als Lookup? Wie sieht es mit der Transaktionsverarbeitung und der Verwaltung des Objektlebenszyklus aus?

Zu den Dingen, die mir bekannt sind, gehören:

Anmerkung

  • funktioniert nur mit Servlets und EJBs
  • passende Syntax
  • containerunabhängig

Nachschlagen

  • kann verschiedene Implementierungen der EJB-Schnittstelle zur Laufzeit programmatisch instanziieren.
  • funktioniert von überall - z.B. POJOs.
  • hängt von der Namenskonvention des Containers ab

6voto

ewernli Punkte 37122

Beide erzielen das gleiche Ergebnis. Es ist eher eine Frage der Kupplung . Mit Annotationen erreichen Sie eine lose Kopplung und es ist einfacher, zu mocken und zu testen. Bei der direkten Suche sind Sie auf den ursprünglichen Kontext angewiesen, was manchmal ungünstig sein kann.

IMHO Lookup funktioniert nicht überall . In Glassfish zum Beispiel funktioniert ein Lookup auf eine lokale EJB von einem POJO aus nur, wenn es zuvor "importiert" wurde mit @EJBs(...) auf einer der Session-Beans, die das POJO verwendet. Siehe diese Diskussion . Sie müssen den Unterschied zwischen dem . y weltweit JNDI dafür.

Mein Rat wäre: verwenden Sie Annotation so viel wie möglich. Wenn ein POJO eine Referenz auf eine EJB benötigt, übergeben Sie diese als Parameter (z.B. im Konstruktor). Das nennt man Abhängigkeitsinversion und ist auf jeden Fall eine gute Praxis.

2voto

axtavt Punkte 233070

Lookup hängt vom Vorhandensein einer JNDI-Implementierung ab, d.h. Sie müssen die JNDI-Implementierung konfigurieren, um Unit-Tests durchführen zu können, dann können die kommentierten Felder manuell konfiguriert werden.

0voto

justastefan Punkte 585

Ich denke, es ist ziemlich schwer, kommentierte EJBs zu spiegeln. Bei der Verwendung von Lookup können Sie einige Schalter entsprechend Ihrer Umgebung (Test -> LoginMockBean, Produktion -> LoginBean) bauen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X