#

World Wide Virtual Machine

Beim Herumstöbern im Netz nach aktuellen Opensource Java Projekten bin ich auf eine interessante API gestoßen, die RMI ähnlich, aber simpler, funktioniert. Dabei können Java Objekte zwischen verschiedenen JVMs, auch über das Netzwerk hinweg, miteinander arbeiten. Ein besonderer Artikel mit dem Namen „Inside the World Wide Virtual Machine“ öffnete mir dabei die Augen bezüglich der Möglichkeiten: Ein weltweites Netz von JVMs. Genial! Aber auch im kleineren Rahmen kann ich mir vorstellen, dass man einen Verbund aus Rechnern erstellt, welche sich gegenseitig sichern und miteinander Arbeiten.

Tags:, ,

2 Responses to “World Wide Virtual Machine” »»

  1. Comment by andrej | 12:17 11.02.06|X

    kann es denn mehr als RMI? und ist es besser als SOAP? ich meine, diese ansätze gibt es ja massig. was ist der unterschied?

  2. Comment by Secco | 10:44 13.02.06|X

    Cajo stellt einen Wrapper um RMI dar. Dabei wird das Erstellen von Stubs etc. umgangen. Man arbeitet mit POJOs und kann dann mit ein paar Zeilen das ganze distributable machen.
    Das Beispiel von der Seite macht dies deutlich:

    // POJO Server
    import gnu.cajo.invoke.Remote;
    import gnu.cajo.utils.ItemServer;
    
    public class SomeObject {
       protected String string = "this thing";
       public String foo() {
          System.out.println("foo method called!");
          return string;
       }
       public String baz(String string) {
          System.out.println("baz method called!");
          try { return this.string; }
          finally { this.string = string; }
       }
       public static void main(String args[]) {
          try {
             Remote.config(null, 1198, null, 0);
             ItemServer.bind(new SomeObject(), "someName");
             System.out.println("The server is running!");
          } catch(Exception x) { x.printStackTrace(); }
       }
    }
    
    // POJO Client
    import gnu.cajo.invoke.Remote;
    
    public class SomeClient {
       public static void main(String args[]) {
          try {
             Object object = Remote.getItem("//serverHost:1198/someName");
             String s = (String)Remote.invoke(object, "baz", "hello");
             System.out.println("first string = " + s);
             s = (String)Remote.invoke(object, "foo", null);
             System.out.println("second string = " + s);
          } catch(Exception x) { x.printStackTrace(); }
       }
    }
    

    Wie man sehen kann, werden die Remote Methoden über eine Reflection ähnliche Schnittstelle mit

    (String)Remote.invoke(object, "baz", "hello");
    

    aufgerufen.
    Das ganze kann dann natürlich auch einfach über SSL verschlüsselte Kommunikationswege gemacht werden.
    Man kann hier natürlich sehen, dass der Entwicklungsaufwand für die Verteilung der Anwendung minimal ist, weit geringer als bei RMI (Stubs etc.) oder SOAP (XML Schemata, Rumparserei etc.). Und die API ist so klein, dass man sie auch auf PDAs benutzen kann.

Leave a Reply »»

Note: All comments are manually approved to avoid spam. So if your comment doesn't appear immediately, that's ok. Have patience, it can take some days until I have the time to approve my comments.