WikiDer > Enterprise JavaBeans
Das Enterprise JavaBeansSpezifikation ist eine der Java-APIs in dem J2EE-Standard. EJBs sollen die sogenannte Geschäftslogik einer Anwendung in einem mehrschichtigen Modell enthalten.
EJBs bieten die folgenden Funktionen:
- Kommunikation mit anderen Komponenten über CORBA
- Beharrlichkeit
- Transaktionen
- parallele Ausführung
- benutzen Java-Messaging-Dienst
- Nutzung von Namens- und Verzeichnisdiensten (JNDIA)
- Sicherheit
- Bereitstellen von Komponenten in einem EJB-Container in einem J2EE-Anwendungsserver
Darüber hinaus definiert die EJB-Spezifikation die Rollen, die der EJB-Container und die EJBs spielen. Außerdem wird beschrieben, wie EJBs im Container bereitgestellt werden. Der Platz von EJB in der geschichteten J2EE-Architektur ist wie folgt:
Arten von EJBs
Es gibt drei Arten von Bohnen:
- Zustandslose Session-Beans
- Stateful-Session-Beans
- Message-driven Beans
Frühere Versionen von Enterprise JavaBeans enthalten auch eine Entity-Bohne. Dies waren Objekte mit einem persistenten Zustand. Dieser Status kann von der Bean selbst (Bean Managed Persistency oder BMP) oder vom Container (Container Managed Persistency) erfasst werden. Die Bean Managed Persistent Entity Bean war weniger verbreitet. Ab Enterprise JavaBeans 3.0 wurden die EntityBeans durch die Java-Persistenz-API.
Zustandslose Session-Bean
Ein Stateless Session Bean ist ein verteiltes Objekt, das den Zustand nicht verfolgt und daher von mehreren Clients verwendet werden kann.
Zustandsbehaftete Session-Bean
Ein Stateful Session Bean ist ein verteiltes Objekt, das den Zustand des Clients zwischen Aufrufen verfolgt. Der EJB-Container ordnet eine Stateful-Session-Bean-Instanz einem bestimmten Client zu. Somit wird für jeden Client, der die J2EE-Anwendung verwendet, ein Stateful Session Bean nach Bedarf instanziiert.
Message-driven Beans
Ein Message Driven Bean ist ein Objekt, das Nachrichten (Messages) aus einer Message Queue verarbeitet.
EJB-Technik
EJBs werden in einem EJB-Container in einem Anwendungsserver verwendet. Die EJB-Spezifikation beschreibt, wie ein EJB mit einem Container interagiert und wie ein Client mit der Kombination aus EJB-Container und EJB interagiert.
Jedes EJB besteht aus einer Java-ImplementierungKlasse und zwei Schnittstellen. Der EJB-Container instanziiert Objekte der Implementierungsklasse, um die EJB-Implementierung bereitzustellen. Die beiden Schnittstellen werden vom Client verwendet, der das EJB aufruft. Dies kann ein 'echter' Client sein, aber auch ein anderes EJB. Die beiden Interfaces, das Home- und das Remote-Interface, spezifizieren die Methoden des EJB, die vom Client aufgerufen werden.
Diese Methoden werden in zwei Gruppen unterteilt:
- Methoden, die nicht mit einer bestimmten Instanz des EJB verknüpft sind, beispielsweise die Methoden zum Erstellen eines EJB oder zum Auffinden eines vorhandenen EJB. Diese werden im Home-Interface definiert.
- Methoden für eine bestimmte Instanz einer EJB. Diese werden in der Remote-Schnittstelle platziert.
Da diese beiden Schnittstellen nur Schnittstellen sind und somit selbst keine Implementierung enthalten, muss die EJB-Container-Implementierung Klassen generieren, die ähnlich sind Stellvertreter kann im Client verwendet werden. Der Client-Code ruft eine Methode auf dem Proxy auf, die dann die Argumente an den EJB-Server sendet. Diese Proxys verwenden Java-RMI mit dem EJB-Server zu kommunizieren.
Der Server ruft dann eine Methode für eine Instanz eines EJB im Container auf. Diese Methode entspricht der Methode, die auf dem Proxy aufgerufen wird.
Home-Schnittstelle
Wie oben erwähnt, enthält die Home-Schnittstelle die Methoden, die es den Clients ermöglichen, KlasseMethoden, dh Methoden, die keiner bestimmten Instanz einer Klasse zugeordnet sind. Der EJB-Standard beschränkte die Funktionalität dieser Methoden darauf, ein EJB zu erstellen oder ein EJB zu finden, wenn es sich um eine Entity-Bean handelt. Seit der EJB 2.0-Spezifikation ist mehr Funktionalität als create, delete und find erlaubt.
Remote-Schnittstelle
Die Remote-Schnittstelle definiert die Methoden, die auf einer Instanz eines EJB aufgerufen werden können. Im Allgemeinen sind dies die Methoden, die die eigentliche Funktionalität eines EJB implementieren.
EJB-Implementierungsklasse
Die Implementierungsklasse wird definiert durch die Programmierer geschrieben. Diese Klasse implementiert die Geschäftslogik (oder enthält Daten für die Geschäftslogik in anderen Klassen). Diese Klasse implementiert immer die Methoden der Remote-Schnittstelle und ggf. Methoden der Home-Schnittstelle.
Ähnlichkeiten zwischen Schnittstellenmethoden und Implementierungsmethoden
Der Aufruf einer Methode vom Home-Interface wird vom EJB-Container an eine entsprechende Methode der Implementierungsklasse mit dem Präfix 'ejb' weitergeleitet. Der erste Buchstabe der Home-Interface-Methode wird hierbei großgeschrieben (dies entspricht den Richtlinien zur Methodenbenennung, die von Sonne sind beschrieben). Offensichtlich muss die Implementierungsmethode genau dieselben Argumente akzeptieren wie die Home-Schnittstellenmethode.
Aufrufe von Methoden der Remote-Schnittstelle werden vom EJB-Container an die entsprechende Implementierungsmethode übergeben, wobei der Name und die Argumente exakt gleich sind.
Kommunikation mit anderen Komponenten
Die EJB-Spezifikation erfordert, dass EJB-Container den Zugriff auf EJBs über RMI-IIOP ermöglichen. Dadurch sind EJBs von jedem aus zugänglich CORBAAnwendung.
Beharrlichkeit
EJB-Container müssen sowohl CMP (Container Managed Persistency) als auch BMP (Bean Managed Persistency) unterstützen.
Transaktionen
EJB-Container müssen Container- und Bean-verwaltete Transaktionen unterstützen. Container-verwaltete Transaktionen werden in einer deklarativen Syntax im Bereitstellungsdeskriptor.
Lebensmittel
Java-Nachrichtendienste (JMS) werden verwendet, um Nachrichten asynchron zwischen Komponenten auszutauschen. Dadurch ist es auch möglich, dass eine J2EE-Anwendung mit anderen Anwendungen über eine Message Queue (zB IBM MQSeries oder Oracle Advanced Queueing) kommuniziert.
Sicherheit
Der EJB-Container muss sicherstellen, dass EJBs nur von Clients aufgerufen werden können, die dazu berechtigt sind.
Bereitstellen von EJBs (Bereitstellung)
Die EJB-Spezifikation beschreibt auch den Mechanismus, der es ermöglicht, EJBs standardmäßig zu implementieren, unabhängig davon, welcher J2EE-Anwendungsserver verwendet wird. Informationen zur Verwendung des EJB wie die Namen der Remote- und Home-Interfaces, ob und wie das Bean in einer Datenbank abgelegt wird, sind im Deployment Descriptor beschrieben.
Diese XML-document hat eine vorgeschriebene Struktur mit einer Beschreibung für jedes zu verwendende EJB. Diese Beschreibung enthält die folgenden Informationen für jede EJB:
- Name der Home-Schnittstelle.
- Java-Klasse der EJB.
- Java-Schnittstelle für die Home-Schnittstelle.
- Java-Schnittstelle für das Objekt.
- Eine Beschreibung eines persistenten Speichers.
- Eine Beschreibung der Rollen und Berechtigungen für die Zugriffssteuerung.
Es sollte beachtet werden, dass viele EJB-Container zusätzliche Beschreibungen verwenden, um EJBs bereitzustellen. Diese Informationen müssen dann in einer zusätzlichen Datei oder in einem anderen Format aufgezeichnet werden. Die meisten EJB-Container-Lieferanten stellen auch Tools bereit, die diese zusätzlichen Informationen aufnehmen und möglicherweise auch die Home- und Remote-Schnittstellen aus diesen zusätzlichen Informationen generieren.