PA165/Cvičení Remoting: Porovnání verzí

Z FI WIKI
Přejít na: navigace, hledání
(New page: (ve vývoji))
 
Řádka 1: Řádka 1:
(ve vývoji)
+
=== JavaRMI ===
 +
 
 +
Nejdřív si předvedeme JavaRMI.
 +
 
 +
Na [http://acrab.ics.muni.cz/~makub/rmi/tabule.jar tabule.jar] je JAR soubor s následující definicí:
 +
<java>
 +
package cz.muni.fi.pa165.rmi;
 +
 
 +
import java.rmi.Remote;
 +
import java.rmi.RemoteException;
 +
 
 +
public interface Tabule extends Remote {
 +
 
 +
    void zverejni(String text) throws RemoteException;
 +
   
 +
}
 +
</java>
 +
 
 +
Vytvořte si projekt, přidejte k němu tento JAR a vytvořte klienta:
 +
 
 +
<java>
 +
package cz.muni.fi.pa165.rmi;
 +
 
 +
import java.rmi.registry.Registry;
 +
import java.rmi.registry.LocateRegistry;
 +
import java.rmi.RemoteException;
 +
import java.rmi.NotBoundException;
 +
 
 +
public class Pisalek {
 +
 
 +
    public static void main(String[] args) throws RemoteException, NotBoundException {
 +
        if(args.length!=2) {
 +
            System.out.println("Usage: java "+Pisalek.class.getName()+" host text");
 +
            System.exit(1);
 +
        }
 +
        String host = args[0];
 +
        String text = args[1];
 +
 
 +
        Registry remregistry = LocateRegistry.getRegistry(host);
 +
        Tabule tabule = (Tabule) remregistry.lookup("tabule");
 +
 
 +
        tabule.zverejni(text);
 +
    }
 +
}
 +
</java>
 +
 
 +
Na straně serveru je třeba spustit program '''rmiregistry''' a mít implementaci (tohle nedělejte na svém stroji):
 +
<java>
 +
package cz.muni.fi.pa165.rmi;
 +
 
 +
import java.rmi.RemoteException;
 +
import java.rmi.registry.LocateRegistry;
 +
import java.rmi.server.ServerNotActiveException;
 +
import java.rmi.server.UnicastRemoteObject;
 +
 
 +
public class TabuleImpl implements Tabule {
 +
 
 +
    synchronized public void zverejni(String text) throws RemoteException {
 +
        try {
 +
            System.out.println(UnicastRemoteObject.getClientHost() + ": " + text);
 +
        } catch (ServerNotActiveException e) {
 +
            e.printStackTrace();
 +
        }
 +
    }
 +
 
 +
    public static void main(String[] args) throws RemoteException {
 +
        System.out.println("startuji Tabuli");
 +
        Tabule stub = (Tabule) UnicastRemoteObject.exportObject(new TabuleImpl(), 0);
 +
        LocateRegistry.getRegistry().rebind("tabule", stub);
 +
    }
 +
 
 +
}
 +
</java>
 +
která musí být spuštěna se správnými parametry:
 +
<nowiki>java -Djava.rmi.server.codebase=http://acrab.ics.muni.cz/~makub/rmi/tabule.jar -cp .  cz.muni.fi.pa165.rmi.TabuleImpl</nowiki>

Verze z 5. 11. 2009, 17:55

JavaRMI

Nejdřív si předvedeme JavaRMI.

Na tabule.jar je JAR soubor s následující definicí:

 
package cz.muni.fi.pa165.rmi;
 
import java.rmi.Remote;
import java.rmi.RemoteException;
 
public interface Tabule extends Remote {
 
    void zverejni(String text) throws RemoteException;
    
}

Vytvořte si projekt, přidejte k němu tento JAR a vytvořte klienta:

 
package cz.muni.fi.pa165.rmi;
 
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.RemoteException;
import java.rmi.NotBoundException;
 
public class Pisalek {
 
    public static void main(String[] args) throws RemoteException, NotBoundException {
        if(args.length!=2) {
            System.out.println("Usage: java "+Pisalek.class.getName()+" host text");
            System.exit(1);
        }
        String host = args[0];
        String text = args[1];
 
        Registry remregistry = LocateRegistry.getRegistry(host);
        Tabule tabule = (Tabule) remregistry.lookup("tabule");
 
        tabule.zverejni(text);
    }
}

Na straně serveru je třeba spustit program rmiregistry a mít implementaci (tohle nedělejte na svém stroji):

 
package cz.muni.fi.pa165.rmi;
 
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.ServerNotActiveException;
import java.rmi.server.UnicastRemoteObject;
 
public class TabuleImpl implements Tabule {
 
    synchronized public void zverejni(String text) throws RemoteException {
        try {
            System.out.println(UnicastRemoteObject.getClientHost() + ": " + text);
        } catch (ServerNotActiveException e) {
            e.printStackTrace();
        }
    }
 
    public static void main(String[] args) throws RemoteException {
        System.out.println("startuji Tabuli");
        Tabule stub = (Tabule) UnicastRemoteObject.exportObject(new TabuleImpl(), 0);
        LocateRegistry.getRegistry().rebind("tabule", stub);
    }
 
}

která musí být spuštěna se správnými parametry:

java -Djava.rmi.server.codebase=http://acrab.ics.muni.cz/~makub/rmi/tabule.jar -cp .  cz.muni.fi.pa165.rmi.TabuleImpl