Voyager Eigenschaften/Vorzüge • Universalität: – ROI-Modelle: CORBA, RMI, DCOM – verschiedene Namens-, Verzeichnisdienste • Nachrichtentypen: synchron, oneway, future • Einfachheit: – vollautomatische Erzeugung von Stubs etc. – keine (wenig) Anpassung der Objekte nötig – problemlose Fernerzeugung, Migration Voyager-Laufzeitumgebung • Integration verschiedener JVMs zu einem Voyager-System durch aktive Laufzeitsysteme – in Java für Clienten (keine eingehenden Nachrichten): Voyager.startup() – in Java für Server (lauscht am Port): Voyager.startup(int port) – auf der Kommandozeile > voyager portnummer • Adressierung von Laufzeitumgebungen mit URL “//host:port“ Entfernte Objekte • Aufruf auf entf.Objekte nur über Schnittstellen • Repräsentation entf. Objekte durch Proxies • Argumentübergabe bei entf. Methodenaufrufe – als Referenz, wenn Parameter die Schnittstelle com.objectspace.voyager.IRemote erfüllt – sonst als Kopie (mittels Serialisierung) • Bei Fehlern/Exceptions – und deklarierter java.rmi.RemoteException wird die Voyager-Exception als RMI-Exception signalisiert, – sonst als (nicht deklarationspflichtige) com.objectspace.voyager.RuntimeRemoteException Entfernte Erzeugung+Namensdienst • Objekte können entfernt erzeugt werden: – in einer Laufzeitumgebung auf hai unter Port 8000 IServer serv =(IServer)Factory.create(“vs.Server“,“//hai:8000“) – mit Parameter für den Konstruktor Object[] args={“plot“,new Integer(2)} serv = Factory.create(“vs.Server“,args, “//hai:8000“) • Namensdienst funktioniert analog zu RMI – Namespace.bind(String name, Object obj) – Namespace.lookup(String name) Hard working server... Schnittstelle: public interface IServer { void doSomeService(); } Implementierung: public class Server implements IServer { public void doSomeService() { System.out.println("Working hard..");} } Konfiguration/Applikation import com.objectspace.voyager.*; public class App { static public void main(String args[]) { Voyager.startup(); // generate and configure Server IServer server = (IServer) Factory.create("Server","//z1:8001"); // use service server.doSomeService(); } } Starten Starten der Laufzeitumgebung auf Rechner z1 z1> voyager 8001 voyager orb 3.1.1, copyright objectspace 1997-1999 Starten der Applikation auf beliebigem Rechner mumu> java App Ausgabe auf z1: Working hard..