Java Enterprise: Enterprise Java Beans
Aus Wikibooks
Inhaltsverzeichnis |
[Bearbeiten] Allgemein
Enterprise Java Beans [EJB] sind standardisierte Komponenten innerhalb eines J2EE-Servers. Sie vereinfachen die Entwicklung komplexer mehrschichtiger verteilter Softwaresysteme in Java. Enterprise Java Beans gibt es in mehreren unterschiedlichen Ausprägungen für verschiedene Klassen von Anwendungsfällen:
- EntityBeans - persistente Business Objekte
- SessionBeans - Business Fachlogik Objekte
- MessageDrivenBeans - Objekte für asynchrone Business Logik
[Bearbeiten] Zugriff auf Objekte
Während in der Standardedition meist das Schlüsselwort new oder Factory Methoden zum Erhalt eines Objektes Verwendung finden, wird im Applicationserverumfeld ein Objekt über einen Namensdienst bereitgestellt. Dies kann z.B. über JNDI, CORBA oder RMI over IIOP erfolgen. Der Applicationserver generiert hierbei die Stub und Skeleton Objekte.
CORBA Beispiel:
orb.omg.CORBA.Object objectReference = orb.resolve_initial_reference ("NameService");
NamingContext namingContext = NamingContextHelper.narrow (objectReference);
NameComponent nameComponent = new NameComponent ("Beispiel", "");
NameComponent pfad [] = {nameComponent};
Beispiel bsp = BeispielHelper.narrow (namingContext.resolve (pfad));
RMI Beispiel:
Beispiel bsp = (Beispiel) Naming.lookup ("rmi://127.0.0.1/Beispiel");
Die EJB Komponenten haben grundsätzlich vollen Zugriff auf die Dienste des Containers und werden von diesem verwaltet (z.B. Instance Pooling, Instance Swapping). Sie unterteilen sich hierbei zuerst in folgende Java Typen:
[Bearbeiten]
Session Bean
Session-Beans übernehmen die serverseitigen Aufgaben und bilden Geschäftsprozesse ab. Sie bedienen sich häufig mehrerer EntityBeans, um die Auswirkungen des Prozesses darzustellen. Ein SessionBean ist vom Typ javax.ejb.SessionBean.
Man unterscheidet zustandslose ("stateless") und zustandsbehaftete ("stateful") Session-Beans.
Beispiel code für EJB 3.0 (Interface)
@Remote
public interface HelloRemote {
public String sayHello(String name);
}
Beispiel code für EJB 3.0 (Implementierung)
@Stateless //oder halt Stateful
public class HelloBean implements HelloRemote {
public String sayHello(String name) {
return "Hello, " + name + "!";
}
}
[Bearbeiten]
Entity Bean
EntityBeans modellieren die dauerhaften (persistenten) Daten eines Systems und werden häufig mit einem Datensatz gleichgesetzt. Ein EntityBean ist eineindeutig und existiert somit nur einmal in einem Application Server. Sie sind jedoch für mehrere Komponenten / Clients gleichzeitig verfügbar. Ein EntityBean ist vom Typ javax.ejb.EntityBean.
Die Persistenz kann entweder vom Bean Entwickler selbst programmiert ("Bean Managed Persistence", BMP) oder vom EJB Container übernommen werden ("Container Managed Persistence", CMP).
[Bearbeiten]
Message Driven Bean
Message-Driven Beans sind diejenigen Komponenten, die EJB-Systeme für asynchrone Kommunikation zugänglich machen. MessageDrivenBeans sind vom Typ javax.ejb.MessageDrivenBean. Eine Message Driven Bean wird per Deployment-Descriptor grundsätzlich mit einer JMS-Queue bzw einem JMS-Topic assoziert. Innerhalb der Message-Driven-Bean ist eine Methode mit der Signatur void onMessage(javax.jms.Message) zu implementieren. Diese Methode wird vom EJB-Container gerufen, wenn eine Nachricht auf der assoziierten Queue bzw. Topic eingeht.
Ist keine Anwendung im Applicationsserver deployed, die auf Nachrichten in einer bestimmten Queue wartet, so werden die Nachrichten vom Applicationsserver gepuffert und ausgeliefert, sobald sich eine Anwendung mit der Queue assoziiert. In den Applicationsservern der meisten Hersteller ist es sogar möglich, Queues zu persistieren (d.h. deren Inhalt in eine Datenbank bzw. Datei zu speichern) und es somit sogar zu gewährleisten, daß die auszuliefernden Nachrichten selbst nach einem Neustart des Applicationsservers noch zur Verfügung stehen.

