Seit der JEE Version 6 gibt es einige Verwirrung bezüglich der Annotations die man in seinen Klassen verwenden sollte. Einige Annotations sind doppelt vorhanden (@ManagedBean), andere haben einen ähnlichen Einsatzzweck (@Named oder @ManagedBean in JSF, @Inject oder @EJB)

Ich versuche mal dieses Wirrwar etwas aufzulösen.

Ich fange mal mit den Annotations für das Injecten von EJB-Instanzen an: @EJB bzw. @Inject

Beide werden für die Injektion von EJBs  in einer JEE-Umgebung verwendet, z.B. werden hierüber Fachklassen in JSF-ManagedBeans oder anderen CDI-Bean vom Container übergeben.

Welche Annotation soll ich aber benutzen für das Injizieren einer EJB Session Bean?

 

@Inject
private ServiceBean serviceBean;

 

oder

 

@EJB
private ServiceBean serviceBean;

 

??? Was denn nun?

 

Im Kontext von CDI sind Session Beans ebenfalls Managed Beans. Deshalb können entsprechend EJB-Instanzen mit @Inject in CDI-Beans oder andere SessionBeans injiziert werden. Die EJB-Spezifikation hatte vor CDI-Zeiten für diesen Zweck eine eigene Annotation definiert: @javax.ejb.EJB

Diese Annotation ist aber eher historisch bedingt und bewirkt das Gleiche wie @Inject, ist aber auf EJBs beschränkt.

In neuen Projekten sollte deshalb nur noch @Inject verwendet werden. Es sein denn man arbeitet in einer Umgebung mit EJBs aber ohne CDI, was aber seit JEE6 ziemlich selten vorkommen dürfte.

 

 

 

 

 

Beitrag erstellt in