Was ist ein EJB und was macht es?
Versucht zu lernen, was EJB
Bohnen sind, was bedeutet es, Ihre Instanzen verwaltet werden, in einem pool, blah, blah. Kann nicht wirklich ein guter Griff.
Können Sie mir erklären, was Sie wirklich sind (praktisch für einen Java-Programmierer)? Was tun Sie? Was sind Ihre Zwecke? Wirklich, warum verwenden Sie Sie? (Warum nicht einfach stick POJO
?) Vielleicht ein Beispiel für die Anwendung?
Bitte beziehen sich nur auf aktuelle Informationen, ist EJB 3.1
. Aktuelle Informationen über EJB irreführend sein kann.
EJB-learning-Einsteiger bitte beachten Sie:
EJB basieren auf verteilte Objektediese beziehen sich auf software-Stücke ausgeführt auf mehrere Maschinen (virtuelle oder physische), verbunden durch ein Netzwerk.
InformationsquelleAutor der Frage jacktrades | 2012-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
WENN Sie eine Komponente, die auf die Datenbank zugreift, oder greift auf andere Verbindungs - /directory-Ressourcen oder Zugriff von mehreren clients, oder soll ein SOA-service, EJBs sind heute in der Regel "größer, stärker, schneller (oder zumindest mehr skalierbar) und einfacher" als POJOs. Sie sind besonders wertvoll für die Wartung einer großen Anzahl von Benutzern über das Internet oder Firmennetzwerk und etwas weniger wertvoll für kleine Anwendungen innerhalb einer Abteilung.
Wiederverwendung/Weitergabe Logik über mehrere Anwendungen/clients mit Loser Kopplung.
EJBs werden können, verpackt in Ihren eigenen Gläser, bereitgestellt und aufgerufen, von vielen Orten.
Sie sind gemeinsame Komponenten. Stimmt, POJOs werden kann (vorsichtig!) konzipiert als Bibliotheken und
verpackt als Gläser. Aber EJBs unterstützt sowohl lokale und remote-Netzwerk-Zugang - einschließlich
über die lokale java-Schnittstelle, transparent, RMI, JMS asynchrone Nachricht und SOAP/REST-web-service,
speichern von cut-and-paste-jar-Abhängigkeiten mit mehreren (inkonsistent?) Bereitstellungen.
Sie sind sehr nützlich für die Erstellung von SOA-services. Wenn verwendet, für den lokalen Zugriff sind Sie
POJOs (mit frei container-Service Hinzugefügt). Der Akt der Gestaltung einer separaten EJB-Schicht
fördert die extra-Pflege für die Maximierung der Kapselung, lose Kopplung und zusammenhalt, und
fördert eine saubere Schnittstelle (Fassade), Abschirmung Anrufer aus komplexen Verarbeitung & Daten
Modelle.
Skalierbarkeit und Zuverlässigkeit
Wenn Sie eine große Anzahl von Anfragen von verschiedenen Aufruf-Nachrichten/Prozesse
/threads, Sie sind verteilt auf die zur Verfügung EJB-Instanzen im pool erste
und dann in der Warteschlange. Dies bedeutet, dass, wenn die Anzahl der eingehenden Anfragen pro Sekunde
größer als der server verarbeiten kann, wir degradieren anmutig - es gibt immer einige
Anfragen werden effizient bearbeitet und das überschüssige Anfragen werden gemacht, um zu warten. Wir
don ' T reach server "Kernschmelze" -, wo ALLE Anforderungen Erfahrung schrecklich Reaktionszeit
gleichzeitig, plus versucht der server den Zugriff auf mehr Ressourcen, als die hardware & OS
verarbeiten kann & folglich abstürzt. EJBs bereitgestellt werden können, die auf gesonderten tier werden kann
clustered - das gibt Zuverlässigkeit mittels failover von einem server zu einem anderen, plus
hardware Hinzugefügt werden können, werden Linear skaliert.
Concurrency-Management.
Der container sorgt dafür, dass EJB-Instanzen werden automatisch zugegriffen sicher (Seriell)
durch mehrere clients. Der container verwaltet die EJB-pool, der thread-pool, der
Aufruf Warteschlange, und führt automatisch Methode-level-schreiben, sperren (default) oder
Lesen Sie die Verriegelung (durch @Lock(READ)). Diese schützt Daten vor Beschädigung durch
concurrent write-write-clashes, und hilft, Daten zu Lesen, die konsequent durch die Verhinderung
Lesen-schreiben-Auseinandersetzungen.
Dies ist vor allem nützlich für @Singleton session beans, wo die Bohne ist die Manipulation und
die gemeinsame Staat über den client Anrufer. Dies kann leicht über-geritten, um Sie manuell
konfigurieren oder programmgesteuert erweiterte Szenarien für die gleichzeitige Codeausführung
und Daten zugreifen.
Automated transaction handling.
Gar nichts tun und alle Ihre EJB-Methoden werden ausgeführt
in einer JTA-Transaktion. Wenn Sie den Zugriff auf eine Datenbank mit JPA-oder JDBC-es ist automatisch
in der Transaktion eingetragen. Gleiche für JMS und JCA-Aufrufe. Angeben
@TransactionAttribute(someTransactionMode) vor, eine Methode, um anzugeben, ob/wie das
insbesondere die Methode nimmt in der JTA-Transaktion überschreiben des Standard-Modus: "Erforderlich".
Sehr einfache Ressource/Abhängigkeit Zugriff mittels Injektion.
Der container-lookup Ressourcen-und set-resource Referenzen als Instanz-Felder in
EJB: wie JNDI gespeichert JDBC-verbindungen, JMS-verbindungen/topics/queues, andere
EJB, JTA-Transaktionen, JPA entity manager persistence contexts, JPA entity manager
Fabrik Persistenz-Einheiten, und JCA-Adapter-Ressourcen.
z.B. das einrichten eines Verweises auf ein anderes EJB - & eine JTA-Transaktion & JPA-entity-Manager &
eine JMS-Verbindungsfactory und Warteschlange:
Einem Servlet aufrufen kann diese bean lokal, durch einfaches deklarieren einer Instanz-variable:
und dann einfach den Aufruf der Methoden, wie gewünscht.
Smart-Interaktion mit JPA.
Standardmäßig wird der EntityManager injiziert, wie oben verwendet, ein transaction-scoped persistence
Kontext. Dies ist ideal für stateless session beans. Wenn eine (zustandslose) EJB-Methode
wird aufgerufen, eine neue Persistenz-Kontext erstellt, in der neuen Transaktion, alle
Person-Objekt-Instanzen abgerufen/in die Datenbank geschrieben werden sichtbar, die nur im
Aufruf der Methode und sind isoliert von anderen Methoden. Aber wenn die anderen stateless EJBs sind
die von der Methode aufgerufen, die container verbreitet und teilt die gleichen PC, so gleichen
Entitäten werden automatisch freigegeben, in einer konsistenten Art und Weise über den PC in der gleichen
die Transaktion.
Wenn ein @Stateful session-bean deklariert ist, gleich smart-Affinität mit JPA wird erreicht durch
erklärt den entityManager zu einer erweiterten Umfang ein:
@PersistentContent(unitName="AccountsPU, type=EXTENDED). Diese besteht für das Leben von
die bean-session, die über mehrere bean-Aufrufe und Transaktionen, caching, in-memory kopiert
der DB-Entitäten, die zuvor abgerufen/geschrieben werden, so brauchen Sie nicht, um wieder abgerufen werden.
Life-Cycle-Management.
Der Lebenszyklus der EJB container verwaltet. Als erforderlich, es erzeugt EJB-Instanzen,
löscht und initialisiert stateful session bean Staat, passiviert & aktiviert, und fordert
lifecycle-callback-Methoden, also EJB-code kann teilnehmen in der lifecycle-Operationen
der Erwerb und die Freigabe von Ressourcen oder die Durchführung von anderen Initialisierung und shutdown-Verhalten.
Er erfasst auch alle Ausnahmen, protokolliert diese, Rollback Transaktionen wie erforderlich, und
wirft neue EJB-Ausnahmen oder @ApplicationExceptions als erforderlich.
Security Management.
Role-based access control, um EJBs können konfiguriert werden über eine einfache annotation oder XML
- Einstellung. Der server übergeht das den authentifizierten Benutzer-Informationen zusammen mit jede
Ruf als security-Kontext (der Aufruf von principal und Rolle). Es sorgt dafür, dass alle RBAC
Regeln werden automatisch durchgesetzt, so dass Methoden nicht illegal genannt, die von der
falsche Rolle. Es EJBs ermöglicht den einfachen Zugriff auf Benutzer - /Rollen-details für zusätzliche programmatische
- überprüfung. Es ermöglicht das anschließen der zusätzlichen Sicherheit der Verarbeitung (oder sogar IAM-tools), um die
container in einem standard-Weg.
Standardisierung & Portabilität.
EJB-Implementierungen konform zum Java EE-standards und coding-Konventionen, die Förderung der Qualität
und die Leichtigkeit des Verständnisses und Wartung. Es fördert auch die Portabilität von code, um neue
Anbieter app-Server, indem sichergestellt wird, dass Sie alle unterstützen die gleichen standard-Funktionen und
Verhaltensweisen, und durch Unterbindung Entwickler aus versehen die Annahme proprietäre
nicht-portable Hersteller-features.
Die Eigentliche Kicker: Einfachheit. Alle der oben genannten getan werden kann, mit
sehr schlanke code - entweder mit Standard-Einstellungen für EJBs
innerhalb von Java EE 6, oder hinzufügen von ein paar Anmerkungen. Codierung
Unternehmen/industrielle Kraft-features in Ihre eigenen POJOs würde
werden Weg mehr umfangreich, Komplex und fehleranfällig. Sobald Sie
beginnen Sie die Codierung mit EJBs, Sie sind ziemlich einfach zu entwickeln und geben eine große Menge von "free ride" nutzen.
In der original-EJB-spec von vor 10 Jahren, EJBs waren eine große Produktivität ärger. Sie waren aufgedunsen und brauchte viele code-und Konfigurations-Artefakte und etwa 2/3 von den oben genannten Vorteilen. Die meisten web-Projekte eigentlich nicht verwenden. Geändert hat dies aber deutlich mit 10 Jahren tweaking, überholung, funktionale Erweiterung und Entwicklung-stream-Futter. In Java EE 6 Sie bieten maximale level industrielle Stärke und Einfachheit der Nutzung.
Was ist nicht zu mögen?? 🙂 🙂
InformationsquelleAutor der Antwort Glen Best
Einer EJB ist eine Java-Komponente, enthält die business-Logik, die Bereitstellung in einem container, und profitiert von technischen Dienstleistungen durch die container werden in der Regel in einer deklarativen Art und Weise, Dank Anmerkungen:
InformationsquelleAutor der Antwort JB Nizet
Hoffen, dass diese von Oracle doc wird helfen, jemanden wie mich zu verstehen, das Thema von EJB in einer einfachen Weise.
InformationsquelleAutor der Antwort Tesfa Zelalem
Die Frage, die mich am meisten interessiert ist, wie und wo kann ich Sie verwenden. Um dies zu verstehen, müssen wir zuerst sehen, welche Arten von EJBs existieren. Es gibt 2 große Kategorien:
Betrachten wir die Session Beans. Sie sind von 3 Arten:
OrderService
. Eine andere große Verwendung für diese ist, um web-services. Wieder, diese werden in der Service-Ebene oder völlig getrennt.Configuration
Komponente in den Sinn kommt - wo Sie können, store-application-level-configs und auf Sie zugreifen, wenn Sie Sie benötigen-von überall aus.Nun der rest der Funktionen kann verwendet werden, in den verschiedenen Ebenen in solchen Situationen:
Einen großen Einsatz in modernen Zeiten sind die so genannten Microservices und Service-Orientierte Architekturen. Sie können Paket einige business-Logik-Komponenten wie EJBs und verteilen Sie in der gesamten Organisation, um von mehreren clients verwendet werden (durch client-hier meine ich andere back-end-Anwendungen).
Und so weiter. Jetzt der große Nachteil ist, dass man sich sehr abhängig vom EJB-container und obwohl Sie wechseln konnte, zwischen 2 Referenz-Anwendungen, die Sie nicht in der Lage zu wechseln etwas leichter - Tomcat zum Beispiel. Aber warum würden Sie wollen, zu opfern, alle die Vorteile?
InformationsquelleAutor der Antwort ACV