[EJB Injektion] Verständnisfrage

ratnalein

Mitglied
Hallo zusammen,

dass EJB-Technologie auf RMI-Konzept basiert, habe ich soweit verstanden(Methodenaufruf auf einer anderen JVM). Nun verstehe ich noch eine Sache nicht:

Code:
@Stateless
public class DataReader {

    @EJB
    private DataStoreRemote dataStoreRemote;
    @EJB
    private DataStoreLocal dataStoreLocal;
    @EJB
    private DataStore dataStore;

    public String readDataFromLocalStore() {
        return "LOCAL:" + dataStoreLocal.getData();
    }

    public String readDataFromLocalBeanStore() {
        return "LOCALBEAN:" + dataStore.getData();
    }

    public String readDataFromRemoteStore() {
        return "REMOTE:" + dataStoreRemote.getData();
    }
}

Das obige Bean bietet 3 Methoden an, die vom Client aufgerufen werden können. Desweiteren werden 3 EJBs injiziert.

Kann man eigentlich statt @EJB auch eine new-Methode aufrufen? Also:
Statt
Code:
@EJB
private DataStore dataStore;

einfach
Code:
 DataStore meinDataStore = new (DataStore);

Ich verstehe das so:
diese Injektionen finden ja lokal im Applikationsserver bzw. innerhalb des Beans "DataReader" statt, ich könnte doch eigentlich die Instantiierung von jeweils DataStoreRemote, DataStoreLocal und DataStore auch per new() implementieren?

Vielen Dank für Eure Hilfestellungen.

Viele Grüße aus Rheinland,

Eure Ratna
 

number8

Aktives Mitglied
Mmh. Naja, also wenn man die Beans mit new instanziiert, dann sind die eben auch nicht vom Container verwaltet was u.a. auch zB fehlende Transaktionskontrolle bedeutet.
 

Hootch

Mitglied
Eine @Annotation ist eine Auszeichnung für ein vereinbartes Verhalten oder Zustand, d.h. @Stateless oder @EJB unterliegt bestimmten Regeln. Der Server erzeugt das "new" damit er diese Vereinbarung auch halten kann.

Man nutzt hier das IoC (Inverse of Control) / Dependency Injection. Mit einem eigenen "new" erzeugt man nur die Instanz eines Objektes. Im einfachsten Fall ist das nur ein POJO.

In Testklassen kann man mit new ObjektXY() die Algo's testen die unabhängig von Dritt-Diensten lauffähig sind (Datenbank, Services, JMS etc.)

Das vereinfacht Tests und den Integrationsaufwand.
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben