Wann benutze ich RMI und wann EJB

y0dA

Erfahrenes Mitglied
Hi!
Da ich mit beiden Themen nicht vertraut bin ich aber zumindest wissen möchte wann ich was benutze, hier meine Frage (vllt erbarmt sich ja einer):

Wann benutze ich RMI?

Wann benutze ich EJB?

Die 3te Variante wäre dann bspw ein Webservice, hierbei weiß ich aber wann ich es als Technologie verwenden würde (Webservice benutzen wenn ich bspw verschiedene Programme welche wiederum in den unterschiedlichsten Sprachen geschrieben sind auf ein Service zugreifen solln --> sprich mit nem Webservice bin ich nicht an Java gebunden, also die Aufrufer des Services).

mfg
 
Im besten Fall nutzt du gar nichts davon ;). Martin Fowler hat mal geschrieben: "The first rule of distributing objects is: don't do it!" :D. Remotekommunikation ist ungefähr um den Faktor 1000 langsamer als lokale. Hinzu kommen die Themen Serialisierung usw.

Grundsätzlich gehst du mit deiner Erklärung schon in die richtige Richtung. Wenn die erste Frage (Brauche ich remoting?) geklärt und mit "ja" beantwortet ist, stellt sich die Frage nach der einzusetzenden Technologie. Hierbei gibt es eine Reihe von Entscheidungskriterien. In welchen Sprachen sind die kommunizierenden Systeme implementiert? Gibt es eine heterogene Systemlandschaft setzt man meißt auf WebServices. Die sind sprachneutral und werden in den meisten Sprachen unterstützt. Allerdings gibt es hier auch Interoperabilitätsschwierigkeiten (v.a. zw. Java und C# z.B.). WebServices sind XML basiert und produzieren einen ordentlichen Overhead, so dass in performancekritischen Anwendungen durchaus nach Alternativen geschaut werden muss.

Hier fallen dann schnell die Namen Hessian und Burlap. Burlap ist ein XML basiertes, sprachunabhängiges Protokoll mit weniger Overhead als WebServices. Hessian ist die binärvariante von Burlap, ebenfalls sprachunabhängig.

RMI ist nur für Java 2 Java Kommunikation möglich, ist aber selbst von den Binärprotokollen das schnellste.

Als wenn das nicht schon genug wirrwarr wäre, gilt es in vielen Fällen noch das Übertragungsprotokoll zu beachten. RMI basiert auf TCP, kann also in Umgebungen, wo Ports stark restriktiert sind Probleme bereiten, ebenso Hessian und Burlap. Weitaus entspannter gestalten sich Protokolle die auf HTTP aufsetzen, wie Springs HTTP Invoker (nur Spring <-> Spring). WebServices gehen sowohl über HTTP als auch über JMS und SMTP.

Der große Vorteil von WebServices ist die enorme Flexibilität, gegen die man meist etwas Performance opfert.

Genug Verwirrung gestiftet? Hier gibts noch nen netten Artikel zu dem meisten Technologien: http://daniel.gredler.net/2008/01/07/java-remoting-protocol-benchmarks/

Gruß
Ollie

PS: EJB ist unter der Haube RMI. Ich würde aber auf keinen Fall anfangen EJB einzuführen, nur um Remoting zu machen. Dazu ist der Kram (immernoch) zu schwergewichtig.
 
Hallo,

RMI und Webservices sind eine Remoting Technologie
EJB ist ein Komponentenmodell.
Also per se sind das erstmal zwei paar Schuhe.

Ich kann mich der Erklärung von Ollie nur anschließen.

RMI ist nur für Java 2 Java Kommunikation möglich, ist aber selbst von den Binärprotokollen das schnellste.
Stimmt nicht ganz ;-) Mit IIOP.Net (http://iiop-net.sourceforge.net/rmiAdderDNClient.html)
kann man auch mit einer Java Anwendung via RMI over IIOP kommunizieren und ist auch ziemlich schnell.

PS: EJB ist unter der Haube RMI. Ich würde aber auf keinen Fall anfangen EJB einzuführen, nur um Remoting zu machen. Dazu ist der Kram (immernoch) zu schwergewichtig.
Das ist zwar der default lässt sich aber in der Regel im Container konfigurieren.

Nur weil Systeme in unterschiedlichen Sprachen geschrieben sind, muss man nicht gleich Webservices zur Kommunikation verwenden. Es lassen sich auch eigene binäre Kommunikation über TCP/UDP Sockets, XML RPC oder JMS (via JNI Bridge oder NMS mit ActiveMQ: http://activemq.apache.org/nms/).

Gruß Tom
 

Neue Beiträge

Zurück