Jakarta Enterprise Beans

Jakarta Enterprise Beans (Ejb; ehemals Enterprise Javabeans) ist einer von mehreren Java apis für modulare Konstruktion von Unternehmenssoftware. EJB ist a Server-Seite Softwarekomponente das kapüelt Geschäftslogik einer Anwendung. Ein ejb Webcontainer bietet a Laufzeitumgebung für Web -verwandte Softwarekomponenten, einschließlich Computersicherheit, Java Servlet Lifecycle Management, Transaktionsverarbeitung, und andere Internetdienste. Die EJB -Spezifikation ist eine Teilmenge der Java ee Spezifikation.[1]

Spezifikation

Die EJB -Spezifikation wurde ursprünglich 1997 von entwickelt IBM und später angenommen von Sun Microsystems (EJB 1.0 und 1.1) 1999[2] und unter dem erweitert Java Community -Prozess wie JSR 19 (EJB 2.0), JSR 153 (EJB 2.1), JSR 220 (EJB 3.0), JSR 318 (EJB 3.1) und JSR 345 (EJB 3.2).

Die EJB-Spezifikation bietet eine Standardmethode zur Implementierung der Server-Seite (auch genannt.Back-End") 'Business'-Software, die normalerweise in Enterprise-Anwendungen zu finden ist (im Gegensatz zu 'Front-End' Benutzeroberfläche Software). Diese Software befasst sich mit den gleichen Problemtypen, und Lösungen für diese Probleme werden häufig von Programmierern wiederholt neu implementiert. Jakarta Enterprise Beans soll so gemeinsame Bedenken wie Beharrlichkeit, Transaktionsintegrität und Sicherheit Auf eine Standardweise, wobei Programmierer frei bleiben können, sich auf die jeweiligen Teile der Unternehmenssoftware zu konzentrieren.

Allgemeine Verantwortlichkeiten

Die EJB -Spezifikation beschreibt, wie eine Anwendungsserver Bietet die folgenden Verantwortlichkeiten:

Darüber hinaus definiert die Spezifikation von Jakarta Enterprise Beans die Rollen des EJB -Containers und der EJBS sowie der Bereitstellung der EJBs in einem Container. Beachten Sie, dass die EJB -Spezifikation nicht beschreibt, wie ein Anwendungsserver Persistenz bietet (eine auf die JPA -Spezifikation delegierte Aufgabe), sondern stattdessen, wie die Geschäftslogik problemlos in die vom Anwendungsserver angebotenen Persistenzdienste integriert werden kann.

Geschichte

Die Unternehmen stellten fest, dass die Verwendung von EJBs zur Einkapselung der Geschäftslogik eine Leistungsstrafe beibrachte. Dies liegt daran Corba (und optional andere Protokolle), obwohl die große Mehrheit der Geschäftsanwendungen tatsächlich nicht erforderlich ist verteiltes Computer Funktionalität. Die EJB 2.0 -Spezifikation befasste sich mit diesem Anliegen, indem das Konzept lokaler Schnittstellen hinzugefügt wurde, das direkt ohne Leistungsstrafen von Anwendungen aufgerufen werden könnte, die nicht über mehrere Server verteilt wurden.[3]

Die EJB 3.0 -Spezifikation (JSR 220) war nach einem neuen leichten Paradigma eine Abkehr von seinen Vorgängern. EJB 3.0 zeigt einen Einfluss von Frühling in seiner Verwendung von einfachen Java -Objekten und ihrer Unterstützung für Abhängigkeitsspritze So vereinfachen Sie die Konfiguration und Integration heterogener Systeme. EJB 3.0 zusammen mit der anderen Version des EJB kann in integriert werden in Mulesoft-V4 mit Mulesoft zertifiziert Plektonlabs EJB -Anschluss. Gavin King, der Schöpfer von Hibernate, nahm am EJB 3.0 -Prozess teil und ist ein ausgesprochener Befürworter der Technologie. Viele Merkmale ursprünglich in Hibernate wurden in die eingearbeitet Java Persistenz API, der Ersatz für Entitätsbohnen in EJB 3.0. Die EJB 3.0 -Spezifikation hängt stark von der Verwendung von ab Anmerkungen (Eine Funktion, die der Java -Sprache mit seiner 5.0 -Version hinzugefügt wurde) und Konvention über Konfiguration um einen viel weniger ausführlichen Codierungsstil zu ermöglichen. Dementsprechend ist EJB 3.0 in praktischer Hinsicht viel leichter und fast eine völlig neue API, die wenig Ähnlichkeit mit den vorherigen EJB -Spezifikationen hat.

Beispiel

Das Folgende zeigt ein grundlegendes Beispiel dafür, wie ein EJB im Code aussieht:

@Staatenlos  Öffentlichkeit Klasse Kundendienst {      Privatgelände EntityManager EntityManager;       Öffentlichkeit Leere AddCustomer(Kunde Kunde) {   EntityManager.fortdauern(Kunde);   }  } 

Das obige definiert eine Serviceklasse für das Bestehen eines Kundenobjekts (über O/R Mapping). Die EJB kümmert sich um die Verwaltung des Persistenzkontexts und die addCustomer () -Methode ist standardmäßig transaktional und thread-sicher. Wie gezeigt, konzentriert sich das EJB nur auf Geschäftslogik und Beharrlichkeit und weiß nichts über eine bestimmte Präsentation.

Eine solche EJB kann von einer Klasse in z. Die Webschicht wie folgt:

@Genannt	 @RequestScoped Öffentlichkeit Klasse Kundenback {  @Ejb   Privatgelände Kundendienst Kundendienst;  Öffentlichkeit Saite AddCustomer(Kunde Kunde) {  Kundendienst.AddCustomer(Kunde);  Kontext.Nachricht hinzufügen(...); // für Kürze abkürzte  Rückkehr "Customer_overview";  } } 

Das obige definiert a Javaserver Gesichter (JSF) Backing -Bohne, in die das EJB mittels der @EJB -Annotation injiziert wird. Die AddCustomer -Methode ist normalerweise an eine UI -Komponente gebunden, z. B. eine Taste. Entgegen der EJB enthält die Backing Bean keine Geschäftslogik oder Persistenzcode, sondern delegiert solche Bedenken an die EJB. Die Backing Bean kennt eine bestimmte Präsentation, von der die EJB keine Kenntnisse hatte.

Arten von Unternehmensbohnen

Ein EJB -Behälter enthält zwei Haupttypen von Bohnen:

  • Sitzungsbohnen[4] Das kann entweder "staatlich", "staatenlos" oder "Singleton" sein und kann über entweder a zugegriffen werden Lokal (gleiche JVM) oder Fernbedienung (unterschiedliche JVM) Schnittstelle oder direkt ohne Schnittstelle,[5] In diesem Fall gelten die lokale Semantik. Alle Sitzungsbohnen unterstützen die asynchrone Ausführung[6] Für alle Ansichten (lokal/remote/ohne obere Face).
  • Nachrichten angetriebene Bohnen (MDBS, auch als Nachrichtenbohnen bezeichnet). MDBS unterstützen auch die asynchrone Ausführung, jedoch über ein Messaging -Paradigma.

Sitzungsbohnen

Staatliche Sitzungsbohnen

Staatliche Sitzungsbohnen[7] sind Geschäftsobjekte haben Zustand: Das heißt, sie verfolgen, mit welchem ​​Ruf Kunden sie während einer Sitzung zu tun haben, und der Zugriff auf die Bean -Instanz ist streng auf nur einen Kunden gleichzeitig beschränkt.[8] Wenn der gleichzeitige Zugriff auf eine einzige Bohne versucht wird, serialisiert der Container diese Anfragen, aber über die @AccessTimeout -Annotation kann der Container stattdessen eine Ausnahme ausgeben.[9] Der Staat der staatlichen Sitzung besitzt möglicherweise automatisch vom Container, um den Speicher freizugeben, nachdem der Kunde seit einiger Zeit nicht mehr auf die Bean zugegriffen hat. Der JPA Extended Persistence -Kontext wird explizit durch staatliche Sitzungsbohnen unterstützt.[10]

Beispiele
  • Wenn Sie sich in einem Webladen auschecken Es wäre weniger ideal, dass der Kunde diese Schlösser verwaltet).

Staatelose Sitzungsbohnen

Staatelose Sitzungsbohnen[11] sind Geschäftsobjekte, die keinen Zustand mit ihnen haben. Der Zugang zu einer einzigen Bohneninstanz ist jedoch immer noch auf jeweils nur auf einen Kunden beschränkt. gleichzeitig Der Zugang zur Bohne ist verboten.[8] Wenn der gleichzeitige Zugriff auf eine einzige Bohne versucht wird, leitet der Container einfach jede Anfrage zu einer anderen Instanz.[12] Dies macht eine staatenlose Sitzungsbean automatisch fadensicher. Instanzvariablen können während eines einzelnen Methodenaufrufs eines Kunden in die Bean verwendet werden, aber der Inhalt dieser Instanzvariablen wird nicht garantiert, dass sie über verschiedene Clients hinweg erhalten bleiben Methode Anrufe. Fälle von staatenlosen Sitzungsbohnen werden normalerweise zusammengefasst. Wenn ein zweiter Client gleich nach dem Abschluss einer Methode auf eine bestimmte Bohne zugreift, kann dies dieselbe Instanz erhalten. Der Mangel an Gemeinkosten, um ein Gespräch mit dem anrufenden Kunden zu führen, macht sie weniger ressourcenintensiv als staatliche Bohnen.

Beispiele
  • Das Senden einer E-Mail an den Kundensupport kann von einer staatenlosen Bean behandelt werden, da dies ein einmaliger Betrieb ist und nicht Teil eines mehrstufigen Prozesses.
  • Ein Benutzer einer Website, die auf ein Feld "Keep Me über zukünftige Updates informiert" klickt müssen warten, um über seinen Erfolg oder Misserfolg informiert zu werden).
  • Das Abrufen mehrerer unabhängiger Daten für eine Website wie eine Liste von Produkten und der Geschichte des aktuellen Benutzer parallel Auf diese Weise, was möglicherweise die Leistung erhöht). In diesem Fall wird die asynchrone Methode a zurückgeben Zukunft Beispiel.

Singleton Session Beans

Singleton Session Beans[13][14] sind Geschäftsobjekte mit einem globalen gemeinsamen Staat innerhalb eines JVM. Der gleichzeitige Zugriff auf die einzige Bean-Instanz kann durch den Container (Container-Managed-Parallelität, CMC) oder durch die Bohne selbst (mit Bean verwaltete Parallelität, BMC) gesteuert werden. CMC kann mit der @lock -Annotation eingestellt werden, in der festgestellt wird, ob ein Leseschloss oder ein Schreibschloss für einen Methodenaufruf verwendet wird. Darüber hinaus können Singleton Session -Bohnen ausdrücklich dazu bitten, zu instanziieren, wenn der EJB -Container mit der @Startup -Annotation startet.

Beispiele
  • Wenn Sie eine globale tägliche Preisliste laden, die für jeden Benutzer mit einer Singleton -Sitzungsbean gleich erfolgt, verhindern Sie, dass die Anwendung immer wieder dieselbe Abfrage in eine Datenbank durchführen muss ...

Nachrichten angetriebene Bohnen

Nachrichten angetriebene Bohnen[15] sind Geschäftsobjekte, deren Ausführung durch Nachrichten statt durch Methodenaufrufe ausgelöst wird. Die meldungsgetriebene Bean wird unter anderem verwendet, um eine hohe Nutzungsabstraktion für die untere Ebene JMS zu bieten (JMS () (Java Message Service) Spezifikation. Es kann JMS -Nachrichten -Warteschlangen oder Nachrichtenthemen abonnieren, die normalerweise über das ActivationConfig -Attribut der @MessAnedRiven -Annotation erfolgen. Sie wurden in EJB hinzugefügt, um eine ereignisorientierte Verarbeitung zu ermöglichen. Im Gegensatz zu Sitzungsbohnen hat ein MDB keine Client-Ansicht (lokal/remote/ohne obere Face), i. e. Kunden können keine MDB-Instanz nachsehen. Ein MDB hört nur auf eine eingehende Nachricht zu, beispielsweise eine JMS -Warteschlange oder ein Thema und verarbeitet sie automatisch. Die Java ee -Spezifikation ist nur JMS -Unterstützung erforderlich.[16] Messing -Bohnen können jedoch andere Messaging -Protokolle unterstützen.[17][18] Solche Protokolle können asynchron sein, können aber auch synchron sein. Da Sitzungsbohnen auch synchron oder asynchron sein können, ist der Hauptunterschied zwischen Sitzungs- und Nachrichtenbeschwerden nicht die Synchronizität, sondern der Unterschied zwischen (objektorientiert) Methode Berufung und Nachrichten.

Beispiele
  • Das Senden eines Konfigurationsupdates an mehrere Knoten kann durchgeführt werden, indem eine JMS -Nachricht an ein "Nachrichtenthema" gesendet wird und von einer Nachricht angetrieben wird, die dieses Thema anhört (das Nachrichtenparadigma wird hier verwendet, da der Absender das nicht wissen muss Anzahl der Verbraucher, deren Standort oder sogar ihr genauer Typ).
  • Wenn Sie einen Job an einen Arbeitscluster senden, können Sie eine JMS -Nachricht an eine "Nachrichtenwarteschlange" senden und auch von einer Nachricht bearbeitet werden, diesmal jedoch eine Warteschlange (das Nachrichtenparadigma und die Warteschlange werden verwendet, seitdem seitdem, seitdem, seitdem verwendet wird, seitdem, seitdem, seitdem, seitdem verwendet wird, seitdem, seitdem, seitdem verwendet wird, seitdem, seitdem, seitdem verwendet Der Absender muss sich nicht darum kümmern, welcher Mitarbeiter den Job ausführt, aber er muss sicher sein, dass ein Job nur einmal ausgeführt wird).
  • Verarbeitung von Timing -Ereignissen aus dem Quarzplaner kann von einer meldungsgetriebenen Bohne behandelt werden; Wenn ein Quarz Abzug Brände, der MDB wird automatisch aufgerufen. Da Java ee standardmäßig nichts über Quartz weiß, ist a JCA Der Ressourcenadapter wäre erforderlich und der MDB würde mit einem Hinweis darauf kommentiert.[19]

Ausführung

EJBs werden in einem EJB -Behälter eingesetzt, typischerweise innerhalb eines Anwendungsserver. Die Spezifikation beschreibt, wie ein EJB mit seinem Container interagiert und wie der Clientcode mit der Kombination aus Container/EJB interagiert. Die von Anwendungen verwendeten EJB -Klassen sind in der enthalten Javax.ejb Paket. (Das javax.ejb.spi Paket ist a Serviceanbieterschnittstelle verwendet nur durch EJB -Containerimplementierungen.)

Kunden von EJBs instanziieren diese Bohnen nicht direkt über den neuen Operator von Java, sondern müssen über den EJB -Container eine Referenz erhalten. Diese Referenz ist normalerweise kein Hinweis auf die Implementierungsbohne selbst, sondern auf a Proxy, die entweder die lokale oder entfernte Geschäftsschnittstelle, die der Client beantragt hat, einen Untertyp der tatsächlichen Bean implementiert oder dynamisch implementiert. Der Stellvertreter kann dann direkt an die Schnittstelle oder Bohne gegossen werden. Ein Client soll eine "Ansicht" auf der EJB haben, und die lokale Schnittstelle, die Remote-Schnittstelle und der Bean-Typ selbst entsprechen der lokalen Ansicht, der Remoteansicht und der No-Grent-Ansicht.

Dieser Stellvertreter ist erforderlich, um dem EJB-Container die Möglichkeit zu geben, transparent eine Kreuzung zu bieten (AOP-ähnlich) Dienste für eine bean -ähnliche Transaktionen, Sicherheit, Interceptions, Injektionen und Remotten. Beispielsweise ruft ein Client eine Methode auf einen Proxy auf, der zuerst eine Transaktion mit Hilfe des EJB -Containers startet und dann die tatsächliche Bean -Methode aufruft. Wenn die Bean -Methode zurückgibt, beendet der Proxy die Transaktion (d. H. Durch das Verhalten oder eine Rollback) und überträgt die Kontrolle an den Client zurück.

Der EJB -Container ist dafür verantwortlich, sicherzustellen, dass der Kundencode über ausreichende Zugriffsrechte für eine EJB verfügt.[20] Sicherheitsaspekte können über Anmerkungen deklarativ auf ein EJB angewendet werden.[21]

Transaktionen

EJB -Container müssen beide verwalteten Container unterstützen SÄURE Transaktionen und Bean verwaltete Transaktionen.[22]

Container-verwaltete Transaktionen (CMT) sind standardmäßig für Anrufe zu Sitzungsbohnen aktiv. Das heißt, keine explizite Konfiguration ist erforderlich. Dieses Verhalten kann von der Bean über Annotationen deklarativ eingestellt werden, und bei Bedarf kann eine solche Konfiguration später im Bereitstellungsdeskriptor überschrieben werden. Das Tuning umfasst das Ausschalten von Transaktionen für die gesamte Bohne oder bestimmte Methoden oder das Anfordern alternativer Strategien für die Transaktionsausbreitung und das Starten oder Verbinden einer Transaktion. Solche Strategien befassen sich hauptsächlich mit dem, was passieren sollte, wenn eine Transaktion zum Zeitpunkt der Aufforderung der Bohne ist oder nicht. Die folgenden Variationen werden unterstützt:[23][24]

Deklarative Transactions -Management -Typen
Typ Erläuterung
OBLIGATORISCH Wenn der Kunde keine Transaktion gestartet hat, wird eine Ausnahme ausgelöst. Andernfalls wird die Transaktion des Kunden verwendet.
ERFORDERLICH Wenn der Client eine Transaktion gestartet hat, wird er verwendet. Ansonsten wird eine neue Transaktion gestartet. (Dies ist die Standardeinstellung, wenn kein explizite Typ angegeben wurde)
Benötigt_new Wenn der Kunde eine Transaktion gestartet hat, wird er suspendiert. Eine neue Transaktion wird immer gestartet.
Unterstützung Wenn der Client eine Transaktion gestartet hat, wird er verwendet. Andernfalls wird keine Transaktion verwendet.
NICHT UNTERSTÜTZT Wenn der Kunde eine Transaktion gestartet hat, wird er suspendiert. Es wird keine neue Transaktion gestartet.
NOCH NIE Wenn der Client eine Transaktion gestartet hat, wird eine Ausnahme ausgelöst. Es wird keine neue Transaktion gestartet.

Alternativ kann die Bean auch über eine Annotation deklarieren, dass sie Transaktionen programmgesteuert über die verarbeiten möchte JTA API. Diese Funktionsweise wird als Bean Managed Transactions (BMT) bezeichnet, da die Bohne selbst die Transaktion anstelle des Containers abwickelt.[25]

Veranstaltungen

JMS (Java Message Service) wird verwendet, um Nachrichten von Bohnen an Clients zu senden, damit Clients asynchrone Nachrichten von diesen Bohnen empfangen können. MDBs können verwendet werden, um Nachrichten von Clients asynchron mit beiden a zu empfangen JMS Warteschlange oder ein Thema.

Namens- und Verzeichnisdienste

Als Alternative zur Injektion können Kunden eines EJB einen Verweis auf das Proxy -Objekt der Sitzungsbean (der EJB -Stub) verwenden Java -Namens- und Verzeichnisschnittstelle (JNDI). Diese Alternative kann in Fällen verwendet werden, in denen keine Injektion verfügbar ist, z.

JNDI -Namen für EJB Session Beans werden vom EJB -Container über das folgende Schema zugewiesen:[26][27][28]

JNDI -Namen
Zielfernrohr Namensmuster
Global Java: Global [/<APP-Name>]/<Modul-name>/<Boan-name> [! <vollständig qualifizierter Schnitt- und Name>]
Anwendung Java: App/<Modulenname>/<Bohnenname> [! <vollqualifiziertes Schnittstellen-Name>]
Modul Java: Modul/<Bohnenname> [! <vollqualifiziertes Schnittstellen-Name>]

(Einträge in quadratischen Klammern kennzeichnen optionale Teile)

Eine einzelne Bohne kann mit jedem Namen erhalten werden, der den oben genannten Mustern entspricht, abhängig von der "Position" des Clients. Clients im selben Modul wie die erforderliche Bean können das Modulbereich und größere Bereiche verwenden, Clients in derselben Anwendung wie die erforderliche Bean können das App -Bereich verwenden und höher usw.

Z.B. Code, der im selben Modul wie die Customerservice -Bohne ausgeführt wird (Wie durch das Beispiel, das früher in diesem Artikel gezeigt wurde) könnte den folgenden Code verwenden, um einen (lokalen) Verweis darauf zu erhalten:

Customerservicelocal Kundendienst =  (Customerservicelocal) Neu InitialContext().Sieh nach oben("Java: Modul/Kundenservice"); 

Remoting/Distributed Execution

Für die Kommunikation mit einem Kunden, der in der Java-Programmiersprache geschrieben ist, kann eine Sitzungsbean eine Remote-Ansicht über eine @Remote-kommentierte Schnittstelle aufdecken.[29] Dadurch können diese Bohnen von Kunden in anderen aufgerufen werden JVMS die sich selbst auf anderen (entfernten) Systemen befinden. Aus Sicht des EJB -Containers ist jeder Code in einem anderen JVM abgelegen.

Staatenlose und Singleton-Sitzungsbohnen können auch eine "Webdienst-Client-Ansicht" für die Remote-Kommunikation aufdecken WSDL und SEIFE oder einfach xml.[30][31][32] Dies folgt dem JAX-RPC und Jax-WS Spezifikationen. Die Unterstützung von JAX-RPC wird jedoch für die künftige Entfernung vorgeschlagen.[33] Um JAX-WS zu unterstützen, ist die Sitzungsbean mit der @Webservice-Annotation und Methoden, die mit der @WebMethod-Annotation ausgesetzt werden sollen.

Obwohl die EJB -Spezifikation die Belichtung in keiner Weise als erholsame Webdienste erwähnt und keine ausdrückliche Unterstützung für diese Form der Kommunikation hat, ist die JAX-RS Die Spezifikation unterstützt explizit EJB.[34] Nach der JAX-RS-Spezifikation können staatslos- und Singleton-Sitzungsbohnen über die Geschäftsmethoden @Path Annotation und EJB-Geschäftsmethoden über die Anmerkungen @get, @put, @post und @Delete auf Ressourcenmethoden zugeordnet werden. Dies gilt jedoch nicht als "Webdienst-Client-Ansicht", die ausschließlich für JAX-WS und JAX-RPC verwendet wird.

Die Kommunikation über Webdienste ist typisch für Clients, die nicht in der Java -Programmiersprache geschrieben sind, sondern auch für Java -Clients, die Probleme haben, über eine Firewall den EJB -Server zu erreichen. Darüber hinaus kann von Java-Clients auf Web-Service-basierte Kommunikation verwendet werden, um die arkanen und schlecht definierten Anforderungen für die sogenannten "Client-Library" zu umgehen. Eine Reihe von JAR-Dateien, die ein Java-Client auf seinem Klassenpfad haben muss, um mit dem Remote-EJB-Server zu kommunizieren. Diese Client-Bibliotheken in Konflikt mit Bibliotheken, die der Client möglicherweise bereits hat (zum Beispiel, wenn der Client selbst auch ein voller Java-EE-Server ist) und ein solcher Konflikt als sehr schwer oder unmöglich zu lösen ist.[35]

Erbe

Home -Schnittstellen und erforderliche Geschäftsschnittstelle

Mit EJB 2.1 und früher musste jede EJB eine Java -Implementierung bereitstellen Klasse und zwei Java -Schnittstellen. Der EJB -Container erstellte Instanzen der Java -Implementierungsklasse, um die EJB -Implementierung bereitzustellen. Die Java -Schnittstellen wurden vom Client -Code des EJB verwendet.

Erforderlicher Bereitstellungsdeskriptor

Bei EJB 2.1 und früher musste die EJB -Spezifikation ein Bereitstellungsdeskriptor vorhanden sein. Dies war erforderlich, um einen Mechanismus umzusetzen, der es EJBs ermöglichte, es zu sein eingesetzt in konsistenter Weise unabhängig von der spezifischen EJB -Plattform, die ausgewählt wurde. Informationen darüber, wie die Bean bereitgestellt werden sollte (z. B. der Name der Heim- oder Remote -Schnittstellen, ob und wie die Bean in einer Datenbank usw. gespeichert wird), mussten im Bereitstellungsdeskriptor angegeben werden.

Das Bereitstellungsdeskriptor ist ein Xml Dokument mit einem Eintrag für jede EJB, die bereitgestellt werden soll. Dieses XML -Dokument gibt die folgenden Informationen für jedes EJB an:

  • Name der Home -Schnittstelle
  • Java -Klasse für die Bean (Geschäftsobjekt)
  • Java -Schnittstelle für die Heimoberfläche
  • Java -Schnittstelle für das Geschäftsobjekt
  • Persistierter Laden (nur für Entitätsbohnen)
  • Sicherheitsrollen und Berechtigungen
  • Zustandsfür oder staatenlos (für Sitzungsbohnen)

Alte EJB -Container vieler Anbieter benötigten mehr Bereitstellungsinformationen als in der EJB -Spezifikation. Sie würden die zusätzlichen Informationen als separate XML -Dateien oder ein anderes Konfigurationsdateiformat benötigen. Ein EJB -Plattformanbieter stellte im Allgemeinen ihre eigenen Tools zur Verfügung, die diesen Bereitstellungsdeskriptor lesen und möglicherweise eine Reihe von Klassen generierten, die die jetzt veralteten Home- und Remote -Schnittstellen implementieren würden.

Seit EJB 3.0 (JSR 220) Der XML -Deskriptor wird durch ersetzt durch Java -Anmerkungen Legen Sie in der Implementierung von Enterprise Bean (auf Quellebene) fest, obwohl es immer noch möglich ist, einen XML -Deskriptor anstelle (oder zusätzlich zu den Anmerkungen) zu verwenden. Wenn ein XML-Deskriptor und Annotationen in einer Unternehmensbean beide auf dasselbe Attribut angewendet werden, überschreibt die XML-Definition die entsprechende Annotation auf Quellenebene, obwohl einige XML-Elemente auch additiv sein können (z. B. eine Aktivierungs-Konfiguration in XML mit einem Unterschiedlicher Name als bereits definiert über eine @ActivationConfigProperty -Annotation wird hinzugefügt, anstatt alle vorhandenen Eigenschaften zu ersetzen).

Behältervariationen

Ab EJB 3.1 definiert die EJB -Spezifikation zwei Varianten des EJB -Containers; Eine Vollversion und eine begrenzte Version. Die begrenzte Version hält sich an a echte Teilmenge der Spezifikation als EJB 3.1 Lite bezeichnet [36][37] und ist Teil von Das Webprofil von Java EE 6 (Dies ist selbst eine Teilmenge der vollen Java ee 6 -Spezifikation).

EJB 3.1 Lite schließt die Unterstützung für die folgenden Funktionen aus:[38]

  • Remote -Schnittstellen
  • RMI-IIIP-Interoperabilität
  • JAX-WS-Webdienstendpunkte
  • EJB Timer Service (@Schedule, @timeout)
  • Asynchrone Session Bean -Aufrufe (@Asynchron)
  • Messagebedingte Bohnen

EJB 3.2 Lite schließt weniger Funktionen aus. Insbesondere schließt es @Asynchronous und @plan/ @timeout nicht mehr aus, aber für @Schedule unterstützt es das "persistente" Attribut nicht, dass die vollständige EJB 3.2 unterstützt. Die vollständige ausgeschlossene Liste für EJB 3.2 Lite lautet:

  • Remote -Schnittstellen
  • RMI-IIIP-Interoperabilität
  • JAX-WS-Webdienstendpunkte
  • Persistente Timer ("persistentes" Attribut auf @Schedule)
  • Messagebedingte Bohnen

Versionsgeschichte

EJB 4.0, endgültige Veröffentlichung (2020-05-22)

Jakarta Enterprise Beans 4.0Als Teil von Jakarta EE 9 war eine Tooling -Version, die sich hauptsächlich von den API -Paketnamen von der obersten Ebene bewegte javax.ejb Paket auf der obersten Ebene jakarta.ejb Paket.[39]

Weitere Änderungen waren die Entfernung von veralteten APIs, die sinnlos waren, um zum neuen Paket der obersten Ebene zu wechseln, und die Entfernung von Merkmalen, die von Merkmalen abhielten, die von Java oder an anderer Stelle in Jakarta EE 9 entfernt wurden. Die folgenden APIs wurden entfernt:

  • Methoden, die sich auf java.security.Identity das wurde aus der Java 14 entfernt.
  • Methoden, die sich auf Jakarta XML RPC Um die Entfernung von XML RPC von der Jakarta EE 9 -Plattform widerzuspiegeln.
  • veraltet EJBContext.getEnvironment() Methode.
  • "Unterstützung für verteilte Interoperabilität", um die Entfernung von CORBA von Java 11 und der Jakarta EE 9 -Plattform widerzuspiegeln.

Weitere geringfügige Änderungen sind die Markierung der Enterprise Beans 2.x API -Gruppe als "optional" und das Erstellen der Schedule Annotation wiederholbar.

EJB 3.2.6, Abschlussveröffentlichung (2019-08-23)

Jakarta Enterprise Beans 3.2, als Teil von Jakarta EE 8 und trotz der Verwendung von "EJB" -abkürzung wurde diese Sätze von APIs offiziell in "Jakarta Enterprise Beans" von den benannt Eclipse Foundation Um nicht auf das Orakel "Java" -Marke zu treten.

EJB 3.2, endgültige Veröffentlichung (2013-05-28)

JSR 345. Enterprise JavaBeans 3.2 war eine relativ geringe Freisetzung, die hauptsächlich Spezifikationsklarifikationen enthielt und einige Einschränkungen erhöhte, die von der Spezifikation auferlegt wurden, im Laufe der Zeit jedoch keinen wirklichen Zweck zu erfüllen schienen. Einige vorhandene vollständige EJB -Merkmale wurden auch in EJB 3 Lite angefordert, und die in EJB 3.1 beschnittene Funktionalität wurde tatsächlich beschnitten (optional gemacht).[40][41]

Die folgenden Funktionen wurden hinzugefügt:

  • Die Passivierung einer staatlichen Sitzungsbean kann durch Attribut auf @Stateful Annotation deaktiviert werden (PassivationScapable = False)
  • TimerService kann alle aktiven Timer im selben EJB -Modul abrufen (könnte zuvor nur Timer für die Bohne abrufen, in der der TimerService aufgerufen wurde)
  • Lebenszyklusmethoden (z. B. @Postconstruct) können für staatliche Sitzungsbohnen mithilfe der vorhandenen @TransactionAttribute -Annotation transaktional sein
  • Autoclosenbare Schnittstelle durch einbettbarer Container implementiert

EJB 3.1, endgültige Veröffentlichung (2009-12-10)

JSR 318. Der Zweck der Spezifikation der Unternehmen JavaBeans 3.1 besteht darin, die EJB -Architektur weiter zu vereinfachen, indem die Komplexität aus der Sicht des Entwicklers verringert wird und gleichzeitig neue Funktionen als Reaktion auf die Bedürfnisse der Community hinzugefügt wird:

  • Lokale Ansicht ohne Schnittstelle (Ansicht ohne Schnittstelle)
  • .Krieg Verpackung von EJB -Komponenten
  • EJB Lite: Definition einer Teilmenge von EJB
  • Tragbares EJB Global JNDI Namen
  • Singletons (Singleton Session Beans)
  • Anwendungsinitialisierung und Herunterfahrenereignisse
  • EJB -Timer -Serviceverbesserungen
  • Einfache Asynchronität (@Asynchronous für Sitzungsbohnen)

EJB 3.0, Abschlussveröffentlichung (2006-05-11)

JSR 220 - Hauptveränderungen: Diese Veröffentlichung hat es viel einfacher gemacht, EJBs zu schreiben, wobei Anmerkungen verwendet werden, anstatt die in Version 2.x verwendeten komplexen "Bereitstellungsdeskriptoren". Die Verwendung von Home- und Remote-Schnittstellen sowie der EJB-Jar.xml-Datei wurde in dieser Version ebenfalls nicht mehr erforderlich, nachdem sie durch eine Geschäftsschnittstelle und eine Bean ersetzt wurden, die die Schnittstelle implementiert.

EJB 2.1, endgültige Veröffentlichung (2003-11-24)

JSR 153 - Hauptveränderungen:

  • Internetservice Support (neu): Staatenlose Sitzungsbohnen können aufgerufen werden SEIFE/Http. Außerdem kann ein EJB mit der neuen Servicereferenz problemlos auf einen Webdienst zugreifen.
  • EJB Timer Service (neu): ereignisbasiertes Mechanismus zum Aufrufen von EJBs zu bestimmten Zeiten.
  • Nachrichtenbetriebene Beans akzeptieren Nachrichten aus anderen Quellen als JMS.
  • Nachrichtenziele (die gleiche Idee wie EJB -Referenzen, Ressourcenreferenzen usw.) wurden hinzugefügt.
  • EJB Query Language (EJB-QL) Ergänzungen: Order by, avg, min, max, sum, count und mod.
  • XML -Schema wird verwendet, um Bereitstellungsdeskriptoren anzugeben, ersetzt DTDs

EJB 2.0, endgültige Veröffentlichung (2001-08-22)

JSR 19 - Hauptveränderungen:Gesamtziele:

  • Die Standardkomponentenarchitektur für das Gebäude verteilt objektorientierte Geschäftsanwendungen in Java.
  • Ermöglichen Sie, verteilte Anwendungen zu erstellen, indem Komponenten kombiniert werden Verschiedene Anbieter.
  • Machen Sie es einfach zu schreiben (Unternehmensanwendungen): Anwendungsentwickler müssen keine Transaktions- und Zustandsmanagementdetails mit niedrigem Niveau, Multi-Threading, Verbindungspooling und andere komplexe APIs auf niedriger Ebene verstehen.
  • Wird der Philosophie von "einmal schreiben, überall rennen" folgen Java. Eine Enterprise -Bean kann einmal entwickelt und dann ohne Neukompilierungs- oder Quellcode -Änderung auf mehreren Plattformen bereitgestellt werden.
  • Besprechen Sie die Entwicklungs-, Bereitstellungs- und Laufzeitaspekte des Lebenszyklus einer Unternehmensanwendung.
  • Definieren Sie die Verträge, mit denen Tools von mehreren Anbietern Komponenten entwickelt und bereitgestellt werden können, die zur Laufzeit interoperieren können.
  • Seien Sie mit vorhandenen Serverplattformen kompatibel. Anbieter können ihre vorhandenen Produkte zur Unterstützung von EJBs erweitern.
  • Mit anderen kompatibel sein Java Apis.
  • Bereitstellung der Interoperabilität zwischen Unternehmensbohnen und Java-EE-Komponenten sowie Nicht-Java-Programmiersprachenanwendungen.
  • Seien Sie mit den CORBA-Protokollen (RMI-IIIP) kompatibel.

EJB 1.1, Final Release (1999-12-17)

Hauptveränderungen:

  • XML -Bereitstellungsdeskriptoren
  • Standard JNDI -Kontexte
  • RMI über IIOP
  • Sicherheit - rollengesteuert, nicht methodgetrieben
  • Unterstützung der Entitätsbean - obligatorisch, nicht optional

Ziele Für Release 1.1:

  • Bieten Sie eine bessere Unterstützung für die Anwendungsmontage und -bereitstellung.
  • Geben Sie die Verantwortlichkeiten der einzelnen EJB -Rollen ausführlicher an.

EJB 1.0 (1998-03-24)

Angekündigt bei Javaone 1998,[42] Suns dritte Java Developers Conference (24. bis 27. März)Ziele Für Release 1.0:

  • Definierte die unterschiedlichen "EJB -Rollen", die von der Komponentenarchitektur angenommen werden.
  • Definierte die Kundenansicht von Unternehmensbohnen.
  • Definierte die Ansicht des Enterprise Bean Developer.
  • Definierte die Verantwortlichkeiten eines EJB -Containeranbieters und Serveranbieter; Zusammen bilden diese ein System, das die Bereitstellung und Ausführung von Unternehmensbohnen unterstützt.

Verweise

  1. ^ "Enterprise Javabeans Technology". www.oracle.com. Abgerufen 2016-12-15.
  2. ^ J2EE -Design und -entwicklung, © 2002 Wrox Press Ltd., p. 5.
  3. ^ J2EE -Design und -entwicklung, 2002, Wrox Press Ltd., p. 19.
  4. ^ JSR 318, 4.1, http://jcp.org/en/jsr/detail?id=318
  5. ^ "Optionale lokale Geschäftsschnittstellen (Ken Saks Blog)". Archiviert von das Original am 19. November 2015. Abgerufen 1. Juni 2016.
  6. ^ JSR 318, 4,5, http://jcp.org/en/jsr/detail?id=318
  7. ^ JSR 318, 4.6, http://jcp.org/en/jsr/detail?id=318
  8. ^ a b JSR 318, 4.10.3, http://jcp.org/en/jsr/detail?id=318
  9. ^ JSR 318, 4.3.14, 21.4.2, http://jcp.org/en/jsr/detail?id=318
  10. ^ "Persistenzkontext in staatlich". Archiviert von das Original am 16. März 2008. Abgerufen 1. Juni 2016.
  11. ^ JSR 318, 4.7, http://jcp.org/en/jsr/detail?id=318
  12. ^ JSR 318, 4.3.14, http://jcp.org/en/jsr/detail?id=318
  13. ^ JSR 318, 4.8, http://jcp.org/en/jsr/detail?id=318
  14. ^ "Singleton EJB". Openejb.apache.org. Abgerufen 2012-06-17.
  15. ^ JSR 318, 5.1, http://jcp.org/en/jsr/detail?id=318
  16. ^ JSR 318, 5.7.2, http://jcp.org/en/jsr/detail?id=318
  17. ^ JSR 318, 5.4.2, http://jcp.org/en/jsr/detail?id=318
  18. ^ JSR 318, 5.6.2, http://jcp.org/en/jsr/detail?id=318
  19. ^ Entwickeln von Quartz MDB (29. April 2009). "Quartz MDB entwickeln". MasterTheBoss.com. Abgerufen 2012-06-17.
  20. ^ JSR 318, Kapitel 17, http://jcp.org/en/jsr/detail?id=318
  21. ^ "Sicherheitsanmerkungen". Openejb.apache.org. Abgerufen 2012-06-17.
  22. ^ JSR 318, Kapitel 13, http://jcp.org/en/jsr/detail?id=318
  23. ^ JSR 318, 13,6,2, http://jcp.org/en/jsr/detail?id=318
  24. ^ "Transaktionsanmerkungen". Openejb.apache.org. Abgerufen 2012-06-17.
  25. ^ JSR 318, 13.3.6, http://jcp.org/en/jsr/detail?id=318
  26. ^ JSR 318, 4.4, http://jcp.org/en/jsr/detail?id=318
  27. ^ "Tragbare globale JNDI -Namen (Maheshkannan)". Blogs.oracle.com. Archiviert von das Original Am 2011-06-20. Abgerufen 2012-06-17.
  28. ^ "Tragbare globale JNDI -Namen (Ken Saks Blog)". Blogs.oracle.com. Archiviert von das Original Am 2011-12-29. Abgerufen 2012-06-17.
  29. ^ JSR 318, Kapitel 15, http://jcp.org/en/jsr/detail?id=318
  30. ^ JSR 318, 2.6, http://jcp.org/en/jsr/detail?id=318
  31. ^ JSR 318, 3.2.4, http://jcp.org/en/jsr/detail?id=318
  32. ^ JSR 318, 4.3.6, http://jcp.org/en/jsr/detail?id=318
  33. ^ JSR 318, 2.7, http://jcp.org/en/jsr/detail?id=318
  34. ^ JSR 311, Kapitel 6.2, http://jcp.org/en/jsr/detail?id=311
  35. ^ "Kommunikation zwischen JBoss als 5 und Jboss als 6 | JBoss als | JBoss Community". Community.jboss.org. Abgerufen 2012-06-17.
  36. ^ "Harz Java EE 6 Webprofil - Harz 3.0". Wiki.caucho.com. 2010-02-12. Archiviert von das Original Am 2012-03-23. Abgerufen 2012-06-17.
  37. ^ JSR 318, 21,1 EJB 3.1 Lite, http://jcp.org/en/jsr/detail?id=318
  38. ^ JSR 318, Tabelle 27 - Erforderlicher Inhalt von EJB 3.1 Lite und Voll EJB 3.1 API, http://jcp.org/en/jsr/detail?id=318
  39. ^ "Was ist neu in dieser Veröffentlichung". Jakarta Enterprise Beans, Kernmerkmale. Jakarta Enterprise Beans 4.0. Jakarta ee. 5. November 2020. Abgerufen 2020-12-05.
  40. ^ "Was ist neu in EJB 3.2? - Java ee 7 tuckern! (Arun Gupta, Meilen zu gehen ...)". Abgerufen 1. Juni 2016.
  41. ^ "Wenn Sie nicht wussten, was in EJB 3.2 kommt ... (Marina Vatkinas Weblog)". Archiviert von das Original am 4. März 2016. Abgerufen 1. Juni 2016.
  42. ^ "Javaone Conference Trip Report: Enterprise JavaBeans Technology: Entwicklung und Bereitstellung von Geschäftsanwendungen als Komponenten". Alephnaught.com. Abgerufen 2012-06-17.

Externe Links