Was EJBs
Ich bin derzeit lernen, Jave-EE, mit viel C++ Erfahrung und haben gelernt, Java SE. Ich verstehe nicht den Zweck von Enterprise Java Beans; kann jemand das für mich aufklären. Ich bin nicht daran interessiert legacy verwendet: dies ist im Kontext der EJB-3.1-und Java-EE-6.
Es scheint, dass einige Leute verwenden, Sie enthalten die Geschäftslogik für die Umsetzung der business-Schicht der konventionellen 3-Schicht-Architektur. Trennt, dass die domain-Logik von der domain-Objekte, was zu einer anemic domain model. Aber das geht gegen alle meine OOD Instinkte; ich Stimme mit Martin Fowler,es ist ein anti-Muster. Sollte ich entspannen, meine Einwände gegen eine anemic domain model? Oder tun EJBs haben andere verwendet?
InformationsquelleAutor der Frage Raedwald | 2011-04-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nutzung von Java-EE bedeutet dies nicht automatisch eine anemic domain model, nur wie kann man code schreiben, der in sagen java was nicht machen gute Nutzung von best practices, bedeutet nicht, es ist nicht möglich in java. Ich glaube, dass Martin Fowler ' s Punkt war, J2EE (beachten Sie die Verwendung von J2EE-und nicht-Java-EE -) so ziemlich durchgesetzt Betrieb von Logik und Daten. Mit POJO-basierte Organisationen ermöglicht, Daten und Verhalten modelliert angemessen. Die "business-Logik" in Ihre EJBs in der Regel orchestriert Anwendung von business-Logik, aber mehr als oft nicht, die eigentlich gar nicht ausführen, es ist in der Regel ein sehr dünner wrapper.
EJBs, die damit Ihre Service-API, müssen Sie diese-je nachdem welche Plattform/framework, die Sie verwenden, Sie brauchen, um etwas, das Sie körperlich noch aufrufen, es ist ein Einstiegspunkt. Ob Sie die Implementierung mit spring, web-services etc...., die Sie brauchen eine service-Schicht, es gibt nichts stoppen diese wurden umgesetzt in Java EE. Ein eher gekünstelt Beispiel
Ich werde nicht in den Gründen zu bevorzugen EJBs über jede andere Technik auch, nur wollen Sie darauf hinweisen, dass Sie diese verwenden, bedeutet nicht, dass Ihre Umsetzung nicht anhand von best-practice.
InformationsquelleAutor der Antwort vickirk
Wie mehrere andere Antworten, EJBs sind ideal für die Implementierung der service-Schicht. Sie sind eine sehr moderne, leichte Art von bean im Java-EE. Trotz des namens kann man nicht vergleichen Sie Sie mit der drakonischen schweres Gewicht EJB2 Tiere wurden in J2EE. Alle sind sich einig diese waren eine Katastrophe, aber es ist nicht 2002 nicht mehr.
Seit EJB3 (2006), EJB-beans wurde ein völlig in Ordnung-Technologie.
Helfen Sie viel hier durch eine deklarative Transaktionen (jeder Eintrag wird automatisch eine Transaktion startet, wenn nicht bereits im Gange, obwohl dies kann geändert werden, wenn gewünscht), pooling -, Sicherheits -, schließ -, remoting und dann einige. Finden Sie unter den folgenden Antworten einige weitere details:
Transaktionen erklärt wurden, hier aber hinzufügen: es ist nicht etwas, das nur für sehr komplexe und hochsichere Systeme. Ich würde so weit gehen zu Zustand, es ist ein basic Vorschrift gilt auch, wenn nur der Umgang mit Datenbanken. Wenn ich eine einfache Bestellung, ich möchte, dass der Bestand und die Reihenfolge sind beide aktualisiert oder beide überhaupt nicht. Dies ist so einfach wie mit PKs und FKs in Ihrer Datenbank, um sicherzustellen, Integrität.
EJBs machen es trivial, um Transaktionen zu verwalten. Ohne EJBs, es gibt eine Menge von boilerplate-code für das starten, das commit oder Roll-back der tx.
Sollte man auch nicht unterschätzen, die Vorteile des pooling und stubs, die EJB bietet. Es bedeutet, dass eine bean kann eine Menge von EJBs injiziert, und Sie nicht haben, um sorgen über Sie instanziiert werden jedes mal, wenn solch eine bean erstellt. Anders wäre dies besonders problematisch sein, wenn nicht alle EJBs verwendet werden würde, wie jedes mal.
Weil der pooling-allerdings nur sehr leichten stubs injiziert werden, die eher an eine Art von URLs, die auf einem tatsächlichen Fall. Diese Kosten so gut wie nichts in Bezug auf Speicher oder cpu-overhead zu injizieren.
EJBs auch feature-Annotationen deklarieren Sie als Singleton, ordnen Sie Ihre locking-Verhalten (schreiben sperren/read-locks), erklärte eines gestartet werden soll beim Start, die Ihnen erlauben, um eine sogenannte extended persistence context (ein Persistenz-Kontext nicht eingeschränkt auf eine TX), etc.
Diese sind alle Bedenken, die Sie nicht wollen, in Ihrem slim Personen. In vielen Architekturen ein User-Objekt für die Instanz ist eine einfache Daten-Entität, die ich senden möchten, in den verschiedenen Ebenen. Ich will nicht, dass meine User-Instanz, um eine sendMsg () - Methode und eine JMS-Ressource als Abhängigkeit, so dass das senden von Nachrichten, können plötzlich von einigen Kunden. Ich bin mir nicht wirklich sicher, warum die Leute denken, das ist irgendwie 'natürlich' und 'OOP'.
In der realen Welt, in der ich auch nicht aufrufen sendMsg-Betrieb auf meinem Freund Joe wenn ich will, schicken Sie ihm eine Postkarte. Stattdessen habe ich Adresse eine Karte und bringen Sie es zum postoffice, oder legen Sie Sie in einen Briefkasten.
Ich auch nicht aufrufen Backen () - operation auf einem Kuchen. Stattdessen lege ich den Kuchen in den Ofen, etc.
InformationsquelleAutor der Antwort Arjan Tijms
Du schon das zitieren der "Implementierung von business Logik" use case.
EJBs EJB - 3.x-Session Beans, Message-Driven-Beans und in 3.1 das neue Singleton-Beans in der Tat ermöglichen, implementieren Sie die Geschäft Logik.
Session Beans oft server als Fassade, in denen clients eine Verbindung herstellen. Diese clients können Servlets dienen der Inhalte über z.B. HTTP oder auch "fat" - clients das sprechen über andere (mehr binäre) Protokolle, um die EJBs.
Message Driven Beans dienen als Endpunkt der asynchronen Kommunikation und kann sich selbst aufrufen von Methoden auf Session Beans als ein Beispiel.
Alle EJBs haben eine Sache gemeinsam, das macht Sie sehr attraktiv: Sie sind geleitet von einem container. So wird der container kümmert sich um Instanziierung, pooling, Transactions, Security etc.
Wenn Sie schreiben, in einem EJB -
Den container stellt sicher, dass, wenn Ihr bean ist bereit zu empfangen-Methode aufrufen, wird die variable " x " enthält eine geeignete Datenquelle.
Bündelung der Bohnen können Sie noch viele weitere clients, die eine Verbindung zu einer Website, als Sie konnten, ohne entweder die Instanzen geteilt werden (Stateless SB) oder Instanzen kann ausgelagert werden durch den container in 2ndary Speicher, wenn der Speicher knapp ist und Sie zu re-aktivieren Sie später.
In EJB 3, die alten EntityBeans aus EJB-1.x und 2.x sind verschwunden und ersetzt durch JPA, die baut die domain-Daten-Modell von POJOs, die mit Anmerkungen versehen, um die relationale Semantik oder die Semantik bereitgestellt werden können, die von externen XML-Dateien.
Mit JPA (die nicht erforderlich ist, EJBs), die EJBs dienen oftmals zu implementieren, die den Umgang mit diesen Entitäten:
InformationsquelleAutor der Antwort Heiko Rupp
Ein paar Punkte:
InformationsquelleAutor der Antwort Michael Borgwardt
Nur eine Bemerkung aus persönlicher Erfahrung ...
Ich zweifle nicht daran, die Vorteile von EJBs, aber da hatte mit Ihnen gearbeitet, ich sehe EJBs nur passend in Fällen, in denen die Sicherheit und Transaktionen sind sehr wichtig (ich.e: Finanz-Anwendungen). Für 90% der Fälle, die Sie in Ordnung sein würde, ohne EJBs. Noch was ... der Skalierbarkeit und EJBs sind keine guten Freunde.
InformationsquelleAutor der Antwort Manuel Salvadores
Einige Jungs erzählt in einer Diskussion wie dieser der EJB nützlich sein, in EJB3 nicht vor, dass, und das ist nicht die Zukunft.
Recht es wurde mehr leistungsfähige, speziell mit dem PPV, aber EJB1.0 und EJB2.1 immer noch viel.
vielleicht haben Sie nicht verwenden Sie es in großen Anwendungen, so dass Sie sagen, dass.
beispielsweise POJO nicht umgehen können mit einer Transaktion, also in EJB können Sie angeben, die Art der Transaktion für eine bestimmte Methode ist es erforderlich eine neue Transaktion oder es nicht aus der Transaktion .
in meiner Organisation haben wir ERP-bauen von Grund auf, mit und wir nutzen die EJB in der Business-Logik, es war von 2000 und der EJB war die Version 1.0 .
und es ist nicht nur die Trennung der business-Schicht von den anderen thiers, aber es ' s auch trennen Sie das system von jedem anderen,
zum Beispiel:
finance-Modul ist getrennt von HR-Modul.
und wenn Sie möchten, um ein neues Modul hinzufügen, Sie können hinzufügen, dass es ohne einen Neustart des Systems und es integriert das system in perfekter Weise..
erinnern und diese in der EJB:
was Sie sehen, im code ist nichts und das, was der EJB-container ist denn für Sie ist jedes Ding 🙂 .
InformationsquelleAutor der Antwort Majed
stateless-und stateful-enterprise-java-beans
ejb-stateless-session-beans und stateful-session-bean
InformationsquelleAutor der Antwort Dead Programmer