Dieses Thema bietet einen problemorientierten Überblick über die verteilte Komponentenarchitektur, wie sie in Version 2.x der Architekturspezifikation für Sun Microsystems Enterprise JavaBeans™ (EJB) definiert ist.
Die vollständigen Spezifikationen für Enterprise JavaBeans und Beschreibungen der Technologie sind auf der Website java.sun.com verfügbar.
,Enterprise-Beans bieten verschiedene Vorteile für Anwendungsentwickler, und zwar:
- Sie ermöglichen das Erstellen verteilter Anwendungen durch Kombinieren von Komponenten,
die mit Tools verschiedener Anbieter entwickelt wurden.
- Sie vereinfachen das Schreiben von Anwendungen. Der Programmierer muss sich nicht mit
allen Einzelheiten von Transaktions- und Statusverwaltung, Multithreading, Ressourcenpooling
und anderen komplexen APIs der unteren Ebene befassen. Bei Bedarf können versierte Programmierer jedoch auf
die APIs der unteren Ebene direkt zugreifen.
- Sie werden einmal entwickelt und anschließend auf mehreren Plattformen implementiert, und zwar ohne
erneute Kompilierung oder Quellcodeänderung.
- Die EJB-Spezifikation, der die Verwendung von Enterprise-Beans unterliegt, ist mit anderen Java™-APIs und mit CORBA kompatibel. Dies ermöglicht außerdem die Interoperabilität zwischen
Enterprise-Beans und Nicht-Java-Anwendungen.
- Enterprise-Beans
- Eine Enterprise-Bean ist eine nicht grafische Komponente einer verteilten, transaktionsorientierten Unternehmensanwendung. Enterprise-Beans werden normalerweise
in EJB-Containern implementiert und auf EJB-Servern ausgeführt. Sie können durch Ändern
der zugehörigen Implementierungsdeskriptoren angepasst und mit anderen Beans kombiniert
werden, um neue Anwendungen zu erstellen.
Es gibt drei Arten von Enterprise-Beans: Session-Beans, Entity-Beans und nachrichtengesteuerte Beans. Session-Beans und nachrichtengesteuerte Beans sind allgemein definierte Komponenten für den Entwurf von Geschäftsprozessen, während Entity-Beans verwendet werden, um differenzierte Datenobjekte zu modellieren.
- Session-Beans: Session-Beans sind nicht persistente Enterprise-Beans.
Sie können statusabhängig (stateful) oder statusunabhängig (stateless)
sein.
- Statusabhängige Session-Beans: Diese arbeiten für einen einzelnen Client und verwaltet clientspezifische Sitzungsdaten (auch Dialogstatus genannt) über mehrere Methodenaufrufe und
Transaktionen hinweg. Sie existieren für die Dauer einer einzigen Client/Server-Sitzung.
- Statusunabhängige Session-Beans: Diese verwalten keinen Dialogstatus und werden im zugehörigen Container als Pool verwaltet, um Mehrfachanforderungen von mehreren Clients zu verarbeiten.
- Entity-Beans: Entity-Beans sind Enterprise-Beans, die persistente Daten enthalten und die in verschiedenen persistenten Datenspeichern gespeichert werden können. Jede Entity-Bean verfügt über eine eigene Identität. Entity-Beans, die ihre eigene
Persistenz verwalten, werden als BMP-Entity-Beans (bean-managed persistence, beangesteuerte Persistenz) bezeichnet. Entity-Beans, die ihre Persistenz an ihren EJB-Container delegieren, werden als CMP-Entity-Beans (container-managed persistence, containergeseteuerte Persistenz) bezeichnet.
- Nachrichtengesteuerte Beans: Nachrichtengesteuerte Beans sind Enterprise-Beans, die JMS-Nachrichten empfangen und verarbeiten. Im Unterschied zu Session- und Entity-Beans
verfügen nachrichtengesteuerte Beans nicht über Schnittstellen. Sie können nur über Nachrichtenübertragung
aufgerufen werden, und sie verwalten keine Dialogstatus. Nachrichtengesteuerte Beans ermöglichen
asynchrone Übertragung zwischen der Warteschlange und dem Listener, und sie trennen Nachrichtenverarbeitung
und Geschäftslogik voneinander.
- Ferne Clientsicht
- Die Spezifikation 'Ferne Clientsicht' wurde in EJB 1.1 eingeführt. Die ferne Clientsicht einer Enterprise-Bean ist positionsunabhängig.
Ein Client, der in derselben JVM wie eine Bean-Instanz ausgeführt wird, greift über dieselbe
API auf die Bean zu wie ein Client, der in einer anderen JVM auf derselben oder einer anderen
Maschine ausgeführt wird.
Die ferne Clientsicht besteht aus zwei Schnittstellen.
- Remote-Schnittstelle: Die Remote-Schnittstelle gibt an, welche fernen Geschäftsmethoden ein Client auf einer Enterprise-Bean aufrufen kann.
- Remote-Home-Schnittstelle: Die Remote-Home-Schnittstelle gibt an, welche Methoden von fernen Clients zum Lokalisieren, Erstellen und Entfernen von Instanzen der Enterprise-Bean-Klassen verwendet werden.
- Lokale Clientsicht
- Die Spezifikation der lokalen Clientsicht ist seit EJB 2.0 verfügbar.
Im Unterschied zur fernen Clientsicht ist die lokale Clientsicht einer Bean
positionsabhängig. Für den Zugriff einer lokalen Clientsicht auf eine
Enterprise-Bean müssen sich der lokale Client und die Enterprise-Bean
in derselben JVM befinden. Daher stellt die lokale Clientsicht nicht die
Positionsunabhängigkeit bereit, die von der fernen Clientsicht
bereitgestellt wird. Lokale Schnittstellen und lokale Home-Schnittstellen bieten Unterstützung für reduzierten Zugriff von Enterprise-Beans, die lokale Clients sind. Session- und Entity-Beans können eng mit ihren Clients gekoppelt sein und ermöglichen so den Zugriff ohne den Systemaufwand, der normalerweise mit Remote-Methodenaufrufen verbunden ist. Die lokale Clientsicht besteht aus zwei Schnittstellen.
- Lokale Schnittstelle: Die lokale Schnittstelle ist eine reduzierte Version der Remote-Schnittstelle für lokale Clients. Sie enthält Methoden für Geschäftslogik, die von einem
lokalen Client aufgerufen werden können.
- Lokale Home-Schnittstelle: Die lokale Home-Schnittstelle gibt an, welche Methoden von lokalen Clients zum Lokalisieren, Erstellen und Entfernen von Instanzen der
Enterprise-Bean-Klassen verwendet werden.
- Ansicht 'Web-Service-Client'
- In der Spezifikation EJB 2.1 wurde die Unterstützung für Web-Services in die EJB-Architektur
eingeführt. Ein Client für ein Session-Bean kann ein Web-Service-Client sein.
Ein Web-Service-Client kann die Web-Service-Clientsicht einer statusunabhängigen Session-Bean
verwenden, die über eine entsprechende Serviceendpunktschnittstelle verfügt.
- Serviceendpunktschnittstelle
- Die Serviceendpunktschnittstelle für eine statusunabhängige Session-Bean stellt die Funktionalität der Session-Bean als Web-Service-Endpunkt dar. Das WSDL-Dokument (WSDL = Web Service
Description Language) für einen Web-Service beschreibt den Web-Service als Gruppe von Endpunkten, die
auf Nachrichten reagiert. Ein WSDL-Dokument kann die Serviceendpunktschnittstelle einer statusunabhängigen
Session-Bean als einen seiner Endpunkte enthalten.
Eine vorhandene statusunabhängige Session-Bean kann so modifiziert werden, dass sie eine
Web-Service-Clientsicht enthält, oder eine Serviceendpunktschnittstelle kann von einem
vorhandenen WSDL zugeordnet werden, um die richtige Schnittstelle bereitzustellen.
Ein Web-Service-Client ist positionsunabhängig und kann über Remotezugriffe aufgerufen
werden.
- JAR-Datei für EJB-Client
- Eine JAR-Datei für EJB-Client ist eine optionale JAR-Datei, die die Clientschnittstellen enthalten kann, die ein Clientprogramm verwenden muss und die Clientsichten der Enterprise-Beans, die in der EJB-JAR-Datei enthalten sind. Wenn Sie für ein EJB-Modul keine JAR-Datei
für EJB-Client erstellen, sind alle Clientschnittstellenklassen in der EJB-JAR-Datei
enthalten. Standardmäßig erstellt die Workbench JAR-Projekte für EJB-Clients für jedes
entsprechende EJB-Projekt.
- EJB-Container
- Ein EJB-Container ist eine Laufzeitumgebung, die mindestens eine
Enterprise-Bean verwaltet. Der EJB-Container verwaltet die Lebenszyklen von
Enterprise-Bean-Objekten, koordiniert verteilte Transaktionen und implementiert
die Objektsicherheit. In der Regel wird jeder EJB-Container von einem EJB-Server
bereitgestellt und enthält eine Gruppe von Enterprise-Beans, die auf dem Server
ausgeführt werden.
- Implementierungsdeskriptor
- Ein Implementierungsdeskriptor ist eine XML-Datei, die zusammen mit den
Enterprise-Beans in eine EJB-JAR-Datei oder eine EAR-Datei gepackt ist. Sie enthält
Metadaten, die den Inhalt und die Struktur der Enterprise-Beans beschreiben sowie
Informationen zu Laufzeittransaktionen und Sicherheit für den EJB-Container.
- EJB-Server
- Ein EJB-Server ist ein Prozess oder eine Anwendung auf hoher Ebene, der bzw. die
eine Laufzeitumgebung zur Unterstützung der Ausführung von Serveranwendungen bereitstellt,
die Enterprise-Beans verwenden. Ein EJB-Server stellt einen JNDI-fähigen Namensservice bereit,
der die Zuordnung von Ressourcen zu Clientanwendungen verwaltet und koordiniert, Zugriff auf
Systemressourcen bietet und einen Transaktionsservice zur Verfügung stellt. Ein EJB-Server
kann beispielsweise von einer Datenbank oder einem Anwendungsserver bereitgestellt werden.