Thomas Darimont
Erfahrenes Mitglied
Hallo,
also zunächst einmal EJB 3.0 und Spring sind nicht das gleiche noch nicht mal ungefähr.
EJB 3.0 ist die Neuauflage des Standard Komponenten Modells EJB 2.x für JEE Anwendungen nach der Spezifikation von Sun.
Spring ist ein Dependency Injection (DI) Framework / IoC (Inversion of Control) Container. DI in dem Sinne, das das Framework für dich die Abhängigkeiten zu dritten Komponenten auflöst (die Komponenten für dich fix und fertig konfiguriert). IoC meint hier nun, dass du nicht mehr dafür verantwortlich bist deine Komponenten programmatisch zu konfigurieren, das macht das Framework für dich. Zusätzlich kommt noch die Eigenschaft eines Containers hinzu. Das heißt du hast die Möglichkeit
den Lebenszyklus eines verwalteten Objects (Spring Managed / Komponente)
eben von Spring steuern zu lassen (aber um einiges flexibler als das bei EJB 3.0 Komponenten in einem EJB Container möglich ist) und Sichtbarkeitsbereiche (Scopes) definieren zu können (Prototype, Singleton,...). Weiterhin kommt noch der Framework Aspekt hinzu. Aufbauend auf dieser Infrastrutkur bietet das Springframework zahlreiche Module die generische hoch flexible Lösungen zu Remoting, Asynchronous Task Execution, Messaging, Security (ACEGI / Spring Security), Webframeworks (Spring Webflow, Spring Web MVC), Persistenz, AOP etc.
Siehe:
http://static.springframework.org/spring/docs/2.1.x/reference/introduction.html
Spring war und ist viel mehr und mächtiger / flexibler als EJB 2.x / 3.x
Was Spring und EJB gemeinsam haben ist das sie Dependency Injection Konzepte verwenden und Objekte verwalten können und verschiedene Interceptor Mechanismen mit sich bringen. Das ist bei EJB 3.0 jedoch alles etwas steifer und unflexibler als bei Spring.
Hier gibts noch einen Vergleich:
http://www.devx.com/Java/Article/32314/0/page/1
Wie schon gesagt Spring ist halt mehr, nicht nur eine Technologie wie EJB 3.0 sondern ein Framework.
Im Projekt Pitchfork haben Interface 21 und BEA eine Spring basierte EJB 3.0 Implementierung hochgezogen ;-) Mittlerweile haben sich alle großen Hersteller zu Spring Committed (IBM, BEA, Oracle,...)
Vorteile hat Spring IMHO ziemlich viele gegenüber EJB 3.0
Beispielsweise kann man bei Spring jedes Objekt per DI Konfigurieren lassen und nicht nur Objekte welche im JNDI abgelegt sind...
Ansonsten: Architectural benefits of Spring
http://www.theserverside.com/tt/articles/article.tss?l=SpringFramework
Aber warten wir mal noch auf Olli, der hat sicherlich noch ein paar weitere Anmerkungen ;-)
Gruß Tom
also zunächst einmal EJB 3.0 und Spring sind nicht das gleiche noch nicht mal ungefähr.
EJB 3.0 ist die Neuauflage des Standard Komponenten Modells EJB 2.x für JEE Anwendungen nach der Spezifikation von Sun.
Spring ist ein Dependency Injection (DI) Framework / IoC (Inversion of Control) Container. DI in dem Sinne, das das Framework für dich die Abhängigkeiten zu dritten Komponenten auflöst (die Komponenten für dich fix und fertig konfiguriert). IoC meint hier nun, dass du nicht mehr dafür verantwortlich bist deine Komponenten programmatisch zu konfigurieren, das macht das Framework für dich. Zusätzlich kommt noch die Eigenschaft eines Containers hinzu. Das heißt du hast die Möglichkeit
den Lebenszyklus eines verwalteten Objects (Spring Managed / Komponente)
eben von Spring steuern zu lassen (aber um einiges flexibler als das bei EJB 3.0 Komponenten in einem EJB Container möglich ist) und Sichtbarkeitsbereiche (Scopes) definieren zu können (Prototype, Singleton,...). Weiterhin kommt noch der Framework Aspekt hinzu. Aufbauend auf dieser Infrastrutkur bietet das Springframework zahlreiche Module die generische hoch flexible Lösungen zu Remoting, Asynchronous Task Execution, Messaging, Security (ACEGI / Spring Security), Webframeworks (Spring Webflow, Spring Web MVC), Persistenz, AOP etc.
Siehe:
http://static.springframework.org/spring/docs/2.1.x/reference/introduction.html
Spring war und ist viel mehr und mächtiger / flexibler als EJB 2.x / 3.x
Was Spring und EJB gemeinsam haben ist das sie Dependency Injection Konzepte verwenden und Objekte verwalten können und verschiedene Interceptor Mechanismen mit sich bringen. Das ist bei EJB 3.0 jedoch alles etwas steifer und unflexibler als bei Spring.
Hier gibts noch einen Vergleich:
http://www.devx.com/Java/Article/32314/0/page/1
Wie schon gesagt Spring ist halt mehr, nicht nur eine Technologie wie EJB 3.0 sondern ein Framework.
Ich würde sagen, dass Spring mittlerweile auch schon ein Industriestandard ist. Nur mal zum Beispiel:EJB3.0 ist allerdings ein Industriestandard der von vielen Firmen getragen wird und zu dem es mehrere Implementierungen gibt. Spring hingegen wird nur von einer Firma getragen.
Ich habe schon viel schlechte Erfahrungen mit Singlevendorlösungen gemacht und darum Spring nicht in die nähere Wahl gezogen.
Im Projekt Pitchfork haben Interface 21 und BEA eine Spring basierte EJB 3.0 Implementierung hochgezogen ;-) Mittlerweile haben sich alle großen Hersteller zu Spring Committed (IBM, BEA, Oracle,...)
Würde ich nicht so sehen. Zum einen mal sind die Konzepte so ähnlich, dass man sie ziemlich leicht übertragen kann. Weiterhin beschäftigt man sich bei der Arbeit mit EJB 3.0 mit den gleichen Tehcnologien die man auch für eine moderne Spring Anwendung benötigt (AOP, JPA, Transaction Handling via JTA, nur um mal ein paar zu nennen). Außerdem kann man Spring nachträglich in so ziemlich jede Anwendung einbringen. Spring arbeitet wunderbar mit EJB 3.0 zusammen. Dabei kann man bei der Verwendung von Spring die Konfiguration der Komponenten so umstellen, dass diese von Spring und nicht vom EJB Container bereitgestellt / verwaltet werden. Dabei muss man an den vorhandenen EJB 3.0 Komponenten nocht nicht mal was ändern ;-)Ich habe mich erst sechs Wochen eingearbeitet und ich kann noch auf ein anderes Framework umsteigen. Das heißt aber auch sechs Wochen Arbeit wegwerfen.
Vorteile hat Spring IMHO ziemlich viele gegenüber EJB 3.0
Beispielsweise kann man bei Spring jedes Objekt per DI Konfigurieren lassen und nicht nur Objekte welche im JNDI abgelegt sind...
Ansonsten: Architectural benefits of Spring
http://www.theserverside.com/tt/articles/article.tss?l=SpringFramework
Sobald du dich mit Spring beschäftigst wirst du merken, dass du noch weniger Code (aber ein wenig mehr XML) schreiben musst um das selbe zu erreichen ;-)Ich kenne nur die EJB3.0 implementierung JBoss. Da habe ich den Eindruck das man mit sehr wenigen Zeilen Code sehr viel Funktionalität programmieren kann.
Aber warten wir mal noch auf Olli, der hat sicherlich noch ein paar weitere Anmerkungen ;-)
Gruß Tom