Gestern habe ich gerade an verschiedenen Passagen meines Spring Buches gearbeitet, an denen es um die Beziehung zwischen EJB und Spring geht. Heute hat hier Floyd Marinescu einen Blog Eintrag geschrieben, der die Schwächen von EJB auflistet. Ich muss gestehen, dass sich bei mir nach einigen Jahren Beschäftigung mit der EJB Technologie - ich bin seit 1.0 dabei - langsam ein Desinteresse an EJJB einstellt. Mir ist im Rahmen des Schreibens an meinem Buch auch deutlich geworden, das die Frage eigentlich sein sollte, warum man EJB überhaupt einsetzten will.
Die Eleganz des Programmiermodells ist bei Spring genauso gut wie EJB 3. Wenn ich nun EJB 3 nutze, lege ich mich auf einen Application Server fest. Warum sollte ich das tun? Mit Spring habe ich die Flexibilität, auch andere Infrastrukturen zu verwenden, ohne dabei die Features von EJB wie verteilten Zugriff, Instanz Pooling, deklaratives Transaktionshandling usw. zu verlieren. Wo ist nun das Feature, das EJB Spring vorraus hat? Der einzige Grund, den ich mir vorstellen kann, ist, dass man aus irgendwelchen Gründen (welchen?) RMI nutzen muss. EJB bietet hier eine Infrastruktur, in der ich Load Balancing, Fail Over usw. mit RMI bekomme. Aber wenn ich hier flexibler bin und z.B. Hessian als Protokoll nutzen kann, bin ich mit Spring mindestens genauso gut. Und Spring kann ich heute nutzen, während EJB 3 immer noch in der Standardisierung ist.
Beim EJB 2.1 Programmiermodell ist es völlig klar, dass Spring um Klassen eleganter ist - ohne XDoclet und andere Hilfsmittel ist es völlig unerträglich. Ein mögliches Hilfsmittel kann übrigens wieder Spring sein...