Messaging mit JBossMQ

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.

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.
Ich würde sagen, dass Spring mittlerweile auch schon ein Industriestandard ist. Nur mal zum Beispiel:
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,...)

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.
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 ;-)

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

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.
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 ;-)

Aber warten wir mal noch auf Olli, der hat sicherlich noch ein paar weitere Anmerkungen ;-)

Gruß Tom
 
Och, du hast das doch schon gut zusammengefasst. Ein Schwerpunkt der mir noch einfällt, ist Testbarkeit. EJBs sind grundsätzlich schwer zu testen, da technologieabhängig. Mit Spring ist es sehr leicht möglich technischen Code gut von geschäftlichem Code zu trennen. Das sorgt halt für einfache Unittestbarkeit. Auch Integrationstests sehen mit Spring wesentlich einfacher aus, als mit EJB.

Grundsätzlich stellt sich die Sache für mich so dar: es gibt nur wenige Fälle in denen ich eine EJB Implementierung einer Spring Implementierung vorziehen würde - verteilte Transaktionen z.B. oder bei bestimmten Infrastrukturkonfigurationen im Bereich JMS.

Ansonsten ist halt Spring der einfachere, integrativere und offenere Ansatz im Enterprisebereich. Ausserdem ist Spring OpenSource und Defacto Standard. Interface21 ist daher zwar entwickelnde Firma, aber die Community darum ist sowas von groß, dass es da keinen Stress geben wird. Das kann natürlich keiner Beweisen, aber das stell ich jetzt mal so in den Raum. Zu der Kernbenefit von Spring eher aus den Konzepten kommt: Dependency Injection, Strategy Pattern, AOP usw. D.h. du kannst eine Springanwendung auch mit wenig Umkonfigurationsaufwand auch in nem anderen DI Container laufen lassen z.B.

Zumal die EJB Integration von Spring auch sehr nett ist. In nem aktuellen Projekt, wo ich so ein wenig die Hand über der Architektur habe setzen wir zum Beispiel Spring hinter einer 2.1er MessageDrivenBean an, weil Spring im Bereich der Konfiguration von Inbound JMS Resourceadaptern noch sehr wenig Unterstützung bereit stellt (erst ab Spring 2.1 wahrscheinlich). Das alles geht ziemlich elegant, problemlos und ist auch gut ohne Infrastruktur Testbar.

Vielleicht wirfst du auch einfach mal nen Blick auf die Referenzenseite von Spring. Das französische Onlinesteuersystem ist mit Spring implementiert, genauso wie Voca, ein riesiges Bankingsystem in England... ich glaub die hätten das nicht mit Spring gemacht, wenn die Technologie nicht ausgereift wäre.

Gruß
Ollie

@Tom: eigentlich sollten wir ne Evangelistprämie bei I21 beantragen ;)
 
Zurück