Frühling gegen EJB. Kann Spring EJB ersetzen? [geschlossen]

96

Da Spring in der Lage ist, Transaktionen wie EJB zu verwenden . Für mich ist Spring in der Lage, die Anforderung der Verwendung von EJB zu ersetzen. Kann mir jemand sagen, was die zusätzlichen Vorteile von EJB sind?

Cometta
quelle

Antworten:

201

Spring wurde von Anfang an als Alternative zu EJB entwickelt. Die Antwort lautet also, dass Sie Spring anstelle von EJBs verwenden können.

Wenn die Verwendung von EJBs einen "Vorteil" hat, würde ich sagen, dass dies von den Fähigkeiten Ihres Teams abhängt. Wenn Sie keine Spring-Expertise und viel EJB-Erfahrung haben, ist es vielleicht ein guter Schritt, bei EJB 3.0 zu bleiben.

App-Server, die zur Unterstützung des EJB-Standards geschrieben wurden, können theoretisch von einem kompatiblen Java EE-App-Server auf einen anderen portiert werden. Dies bedeutet jedoch, dass Sie sich von allen herstellerspezifischen Erweiterungen fernhalten, die Sie an einen Anbieter binden.

Spring Ports leicht zwischen App-Servern (z. B. WebLogic, Tomcat, JBOSS usw.), da dies nicht von ihnen abhängt.

Sie sind jedoch an Spring gebunden.

Spring fördert gute OO-Entwurfspraktiken (z. B. Schnittstellen, Ebenen, Trennung von Bedenken), die jedem Problem zugute kommen, das sie berühren, selbst wenn Sie sich entscheiden, zu Guice oder einem anderen DI-Framework zu wechseln.

Update: Diese Frage und Antwort sind 2014 fünf Jahre alt. Es muss gesagt werden, dass sich die Welt der Programmierung und Anwendungsentwicklung in dieser Zeit stark verändert hat.

Es ist nicht mehr nur eine Wahl zwischen Java oder C #, Spring oder EJBs. Mit vert.x ist es möglich, Java EE vollständig zu vermeiden. Sie können hoch skalierbare, mehrsprachige Anwendungen ohne App-Server schreiben.

Update: Es ist jetzt März 2016. Spring Boot bietet eine noch bessere Möglichkeit, Anwendungen ohne Java EE-App-Server zu schreiben. Sie können eine ausführbare JAR erstellen und auf einer JVM ausführen.

Ich frage mich, ob Oracle die Java EE-Spezifikation weiterhin unterstützen wird. Webdienste haben für EJBs übernommen. Die EJB-Lösung ist tot. (Nur meine Meinung.)

Duffymo
quelle
7
Meiner Meinung nach ist "Lock In" ein zu starker Ausdruck, um den Frühling zu beschreiben. Schließlich ist Spring so konzipiert, dass alles zusammengeklebt und nicht ersetzt wird. Sie können jederzeit auswählen, in was Sie integrieren möchten. Außerdem hat alles Lock-Ins, selbst die einfachsten Apache Commons sperren uns ein, aber wir verwenden es immer noch jeden Tag.
Christopher Yang
3
Es gibt keine alternativen Anbieter zu VMWare / Spring, mit denen Sie zwischen Oracle, Red Hat und IBM für Java EE-Plattformen wählen können. Das ist alles was ich meinte. Es ist kein Kommentar zu Spring 'Fähigkeit oder Nützlichkeit. Ich mag es sehr. Ich benutze es jeden Tag und schlafe nachts.
Duffymo
1
@ChristopherYang das ist richtig. Ich meine, "Java" wäre ein Vendor Lock-n. Irgendwann müssen wir einfach aufhören zu streiten und etwas erledigen. :-)
cbmeeks
4
Diese Frage ist fast fünf Jahre alt. Persönlich denke ich, dass EJBs veraltete Technologien sind, die in jeder Hinsicht an HTTP-Webdienste verloren haben. Einfacher und offener Gewinn. Geben Sie mir REST-Services und Sie können Ihre EJBs behalten. Der Frühling unterstützt sie gut. Dort ist die Welt hingegangen.
Duffymo
1
danke für die Antwort. Suchen Sie nur nach den Vorteilen, indem Sie die bessere (SPRING, EJB 3.x) für die Migration von einer vorhandenen EJB 2.1-Anwendung bewerten. Eine weitere Frage: EJB 3.x unterstützt auch den WebService. Könnten wir also die Vorteile von JNDI / RMI für die Verteilung von Java-Apps und WS für andere Apps nutzen?
Noboundaries
48

Lassen Sie es mich zunächst klar sagen. Ich sage nicht, dass Sie Spring nicht verwenden sollten, aber da Sie nach einigen Vorteilen fragen, sind hier mindestens zwei davon:

  • EJB 3 ist ein Standard, während Spring kein Standard ist (es ist ein De-facto-Standard, aber das ist nicht dasselbe), und dies wird sich auf absehbare Zeit nicht ändern. Obwohl Sie das Spring-Framework mit jedem Anwendungsserver verwenden können, sind Spring-Anwendungen sowohl an Spring selbst als auch an die spezifischen Dienste gebunden, die Sie für die Integration in Spring auswählen.

  • Das Spring-Framework befindet sich über den Anwendungsservern und Servicebibliotheken. Service-Integrationscode (z. B. Datenzugriffsvorlagen) befindet sich im Framework und wird den Anwendungsentwicklern zur Verfügung gestellt. Im Gegensatz dazu ist das EJB 3-Framework in den Anwendungsserver integriert und der Service-Integrationscode ist hinter einer Schnittstelle eingekapselt. EJB 3-Anbieter können so die Leistung und Entwicklererfahrung optimieren, indem sie auf Anwendungsserverebene arbeiten. Beispielsweise können sie die JPA-Engine eng mit dem JTA-Transaktionsmanagement verknüpfen. Ein weiteres Beispiel ist die Clustering-Unterstützung, die für EJB 3-Entwickler transparent ist.

EJB 3 ist zwar nicht perfekt, es fehlen jedoch noch einige Funktionen (z. B. das Einfügen nicht verwalteter Komponenten wie einfacher POJOs).

Pascal Thivent
quelle
1
Pädagogische Antwort, aber ich frage mich, warum / wann Sie ein einfaches POJO injizieren müssen, anstatt ein neues zu initialisieren?
Ömer Faruk Almalı
4
Zu Testzwecken.
Philip
22

Pascals Punkte sind gültig. Es gibt jedoch Folgendes zugunsten des Frühlings.

  • Die EJB-Spezifikation ist tatsächlich etwas locker, und daher können bei verschiedenen Anwendungsservern unterschiedliche Verhaltensweisen beobachtet werden. Dies wird natürlich in den meisten Fällen nicht zutreffen, aber ich hatte ein solches Problem für einige "dunkle Ecken".

  • Spring hat viele zusätzliche Extras wie Spring-Test, AOP, MVC, JSF-Integration usw. EJB hat einige davon (z. B. Interceptors), aber meiner Meinung nach sind sie nicht so weit entwickelt.

Zusammenfassend hängt es hauptsächlich von Ihrem genauen Fall ab.

Bozho
quelle
Vielleicht braucht so etwas wie Spring nur eine Servlet-Engine , die genauer ist (EJB kann in jedem JEE-Container verwendet werden, Servlet-Engine! = JEE-Container).
Pascal Thivent
1
Technisch gesehen benötigt Spring auch keinen Servlet-Motor. Zum Beispiel verwendet der Frühlingstest einen In-Memory-Kontext.
Bozho
3
Technisch gesehen benötigen EJBs auch keinen eigenständigen Container, wenn Sie diesen Weg gehen. Seit EJB 3.1 gibt es die Standard- EJBContainer.createEJBContainer()API zur Verwendung eines eingebetteten Containers. Ihre Aussage ist also immer noch falsch.
Pascal Thivent
ok, 3.1 ist ziemlich neu und offensichtlich habe ich die Ergänzungen vergessen. Dieser Punkt wurde aus meiner Antwort entfernt.
Bozho
-30

Der Frühling soll EJB ergänzen, nicht ersetzen. Der Frühling ist eine Schicht über EJB. Wie wir wissen, erfolgt die Codierung von EJB mithilfe der API. Dies bedeutet, dass wir alles in APIs mithilfe des Spring-Frameworks implementieren müssen. Wir können einen Kesselplattencode erstellen, dann einfach diese Platte nehmen, ein paar Sachen hinzufügen, dann ist alles erledigt. Intern ist Spring mit EJB verbunden - Spring würde ohne EJB nicht existieren.

Der Hauptvorteil der Verwendung von Spring besteht darin, dass zwischen den Klassen überhaupt keine Kopplung besteht.

sasi
quelle
8
Sie sind völlig falsch, sorry
Jakub H
2
sorry @sasi das ist nicht mal nah an einer richtigen oder netten Antwort .......
Prakash
4
"Ohne EJB würde es keinen Frühling geben." Mann, bist du echt? Haben Sie jemals in Ihrem Leben das "\ @Stateless" in der Deklaration eines EJB oder die \ @EJB-Annotation für die Injektion verwendet? Glaubst du, dass diese in Jetty oder Tomcat funktionieren würden? Wie werden Transaktionen Ihrer Meinung nach im Frühjahr verwaltet? Sie wissen, dass Sie eine Spring-Anwendung in einem Servlet-Container bereitstellen können, oder?
99 Sono
Entschuldigung, aber Sie haben ein nicht gut strukturiertes Verständnis für beide, EJBs als Teil von Java EE und Spring als Prinzip der Konvention über Konfiguration. In Wirklichkeit könnten Sie, wenn Sie nicht in die Tiefe graben, denken, dass es sich um etwas Ähnliches oder Ähnliches handelt oder was auch immer. Warum? Sie haben beide Ähnlichkeiten wie Injektion und aber der Unterschied zwischen ihnen ist riesig. Es ist wahr, dass der Frühling aufgrund der Komplexität von EJB als Alternative zu EJBs Zeitreise geboren wurde, aber es war. Gut genug während der Zeit von Java EE 5 (EJB 3) wurde retuschiert,
genauso