Enterprise-Beans
Eine Enterprise-Bean ist eine Java-Komponente, die mit anderen Ressourcen zu Java-Anwendungen kombiniert werden kann. Es gibt drei Typen von Enterprise-Beans: Entity-Beans, Session-Beans und Message-driven Beans.
Alle Beans befinden sich in EJB-Containern (Enterprise JavaBeans), die eine Schnittstelle zwischen den Beans und dem Anwendungsserver, in dem sie gespeichert sind, darstellen.
EJB 2.1 und frühere Versionen der Spezifikation definieren Entity-Beans als ein Mittel zum Speichern von permanenten Daten, daher benötigen Sie Verbindungen zu einer Art permanentem Speicher. Dieser Speicher kann eine Datenbank, eine vorhandene traditionelle Anwendung, eine Datei oder eine andere Art permanenter Speicher sein.
Die Spezifikation EJB 3.0 bietet keine Unterstützung mehr für EJB-1.1-Entity-Beans. Die Spezifikation Java Persistence API (JPA) ist für die Ersetzung der veralteten Enterprise-Beans vorgesehen. Obwohl die Ersetzung JPA als Entitätsklasse bezeichnet wird, darf sie nicht mit Entity-Enterprise-Beans verwechselt werden. Eine JPA-Entität ist keine Enterprise-Bean und muss nicht in einem EJB-Container ausgeführt werden.
Session-Beans enthalten in der Regel die Logik der hohen und mittleren Ebene für eine Anwendung. Jede Methode einer Session-Bean führt eine bestimmte Operation auf hoher Ebene aus, beispielsweise die Übermittlung eines Auftrags oder die Überweisung von Geldern zwischen Konten. Session-Beans rufen im Rahmen ihrer Logik häufig Methoden in Entity-Beans auf.
Es gibt drei Arten von Session-Beans: Stateful (statusabhängig), Stateless (statusunabhängig), Singleton. Eine Stateful-Bean-Instanz ist für einen einzelnen Clients bestimmt. Der Client führt zur Laufzeit der Instanz eine Reihe von Methodenaufrufen durch, die miteinander in Verbindung stehen. Ein Beispiel hierfür ist ein elektronischer Warenkorb, dem der Client im Verlauf seiner Einkaufssitzung online Artikel hinzufügt. Im Gegensatz dazu wird eine Stateless-Bean-Instanz normalerweise von vielen Clients verwendet. Deshalb eignen sich Stateless-Beans für Logikoperationen, die im Verlauf eines einzelnen Methodenaufrufs ausgeführt werden. Stateful-Beans sollten nur verwendet werden, wenn es unbedingt erforderlich ist. Stateless-Beans vereinfachen das Debugging, die Verwaltung und die Skalierung der Anwendung.
Die Spezifikation EJB 3.1 unterstützt Singleton-Session-Beans. Der EJB-Container initialisiert nur eine einzige Instanz einer Singleton-Session-Bean und diese Instanz wird von allen Clients gemeinsam genutzt. Da eine einzige Instanz von allen Clients gemeinsam genutzt wird, haben Singleton-Session-Beans eine spezielle Semantik für den Lebenszyklus und die Parallelität. Singleton-Session-Beans können lokale Geschäftssichten, ferne Geschäftssichten und Web-Service-Clientsichten haben. Lokale EJB-2.1- und ferne Clientsichten werden von diesen Beans nicht unterstützt.
- Definition der Geschäftsschnittstelle
- Definition der Klasse, die die Schnittstelle implementiert
- Hinzufügen von Metadaten mit Annotationen oder mit XML-Implementierungsdeskriptoren
package ejb3demo;
@Stateful
public class Cart3Bean implements ShoppingCart {
private ArrayList contents = new ArrayList();
public void addToCart (Object o) {
contents.add(o);
}
public Collection getContents() {
return contents;
}
}
EJB-Komponenten können Annotationen wie
@EJB und andere @Resource-Referenzen, die über Injektion eingefügt werden können,
verwenden, wenn es sich bei dem Modul um ein EJB-3.x-Modul handelt. Webanwendungsclients und Anwendungsclients können vom Implementierungsdeskriptor definierte EJB-Referenzen verwenden. Wenn sich die Referenz auf eine EJB-3.x-Session-Bean ohne Home-Schnittstelle bezieht, sollte die Referenz im Implementierungsdeskriptor mit der Einstellung "null" für <home> oder <local-home> definiert werden.
Webanwendungsclients und Anwendungsclient können für Referenzen auf EJB-Session-Beans innerhalb derselben EAR-Datei (Enterprise Archive) auch @EJB-Injektionen verwenden. Die Bindung muss jedoch entweder die AutoLink-Unterstützung im Container verwenden, oder die Annotation muss den Namen der vom Implementierungsdeskriptor definierten und bei Installation der Anwendung gebundenen Referenz verwenden. Weitere Informationen zu AutoLink finden Sie im Artikel über die "Unterstützung von EJB-3.x-Anwendungsbindungen".
- Der EJB-Container und ein JMS-Provider verarbeiten gemeinsam Nachrichten. Wenn eine Nachricht von einer anderen Anwendungskomponente über JMS ankommt, leitet sie der EJB-Container über einen onMessage-Aufruf an eine MDB-Instanz weiter, die dann die Nachricht verarbeitet. In sonstiger Hinsicht sind MDBs ähnlich wie Stateless-Session-Beans.
- Der EJB-Container und ein JCA-Ressourcenadapter (Java Connector Architecture) verarbeiten gemeinsam Nachrichten von einem unternehmensweiten Informationssystem (Enterprise Information System, EIS). Wenn eine Nachricht von einem EIS eingeht, empfängt der Ressourcenadapter die Nachricht und leitet sie an eine MDB weiter, die die Nachricht verarbeitet. Der MDB werden Services wie Transaktionsunterstützung vom EJB-Container auf dieselbe Weise wie anderen Enterprise-Beans bereitgestellt.
Beans, die Datenzugriff erfordern, verwenden Datenquellen. Dies sind Verwaltungsressourcen, die Pools von Verbindungen zu permanenten Speicherverfahren definieren.