RMI – Projekt „getTime“

Werbung
Kurzanleitung
RMI-Beispiel: getTime
Seite 1 / 7
Inhaltsverzeichnis
RMI – Projekt „getTime“ _____________________________________________ 1
Schritt 1: Interface Klasse definieren _______________________________________ 1
Schritt 2: Implementation Class definieren __________________________________ 2
Schritt 3: RMI Compiler erstellen und starten ________________________________ 3
Schritt 4: Main-Class getTimeServer erstellen _______________________________ 4
Policy-Datei integrieren ________________________________________________________ 5
Schritt 5: Main-Class getTimeClient erstellen ________________________________ 6
Policy-Datei integrieren ________________________________________________________ 7
RMI – Projekt „getTime“
Schritt 1: Interface Klasse definieren
Methoden der Interface-Klasse definieren:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface GetTimeInterface extends Remote {
public String getTime() throws RemoteException;
}
Kurzanleitung
RMI-Beispiel: getTime
Seite 2 / 7
Schritt 2: Implementation Class definieren
Danach muss noch der Constuctor und die Funktion getTime() ausprogrammiert werden:
import
import
import
import
java.rmi.RemoteException;
java.rmi.server.UnicastRemoteObject;
java.text.SimpleDateFormat;
java.util.Date;
public class GetTimeImplementation extends UnicastRemoteObject implements
GetTimeInterface {
public GetTimeImplementation() throws RemoteException {
super();
}
public String getTime() throws RemoteException {
// Zeit zurückgeben
SimpleDateFormat formatter = new SimpleDateFormat("hh:mm:ss");
java.util.Date now = new Date();
return formatter.format(now);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
Kurzanleitung
RMI-Beispiel: getTime
Seite 3 / 7
Schritt 3: RMI Compiler erstellen und starten
Neues File im Projekt mit dem Filenamen rmiCompiler.cmd erstellen.
SET JAVA_HOME=C:\j2sdk1.4.2_10
SET PATH=%PATH%;C:\j2sdk1.4.2_10\bin
rmic -keep GetTimeImplementation
Diese cmd Datei direkt im Windows-Explorer im entsprechenden Folder per Doppelklick
starten.
Wichtig: Sobald etwas im Interface geändert wird (z.B. zusätzliche Methoden), dann muss
der RMI Compiler wieder ausgeführt werden.
Vor dem Ausführen:
Nach dem Ausführen:
Kurzanleitung
RMI-Beispiel: getTime
Seite 4 / 7
Schritt 4: Main-Class getTimeServer erstellen
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class GetTimeServer {
/**
* @param args
*/
public static void main(String[] args) throws RemoteException {
int port
= 1099;
String objName
= "GetTime"; //Vermittlername
//Implementation Class integrieren
GetTimeImplementation impl = new GetTimeImplementation();
//Die Verbindung zum NameService herstellen
Registry registry = LocateRegistry.getRegistry(port);
boolean bound = false;
for (int i = 0;!bound && i < 2;i++) {
try{
//Registrierung der Verbindung mit dem Vermittlername objName
registry.rebind(objName,impl);
bound = true;
System.out.println(objName+"bound to registry port "+port+".");
} catch (RemoteException e){
//Falls er die Verbindung nicht findet die Datei
//"C:\j2sdk1.4.2_10\bin\rmiregistry.exe" (NameService)
//starten und verbinden
System.out.println("Rebinding "+objName+"failed, retrying...");
registry = LocateRegistry.createRegistry(port);
System.out.println("Registry started on port " + port + ".");
}
}
System.out.println("HelloServer ready.");
}
Kurzanleitung
RMI-Beispiel: getTime
Seite 5 / 7
}
Policy-Datei integrieren
Falls eine Policy-Datei integriert werden soll, folgende Codezeile vor der LocateRegistryZeile implementieren:
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
Registry registry = LocateRegistry.getRegistry(port);
boolean bound = false;
Zusätzlich muss in der Run-Configuration die Policy noch als Argument hinterlegt werden.
Kurzanleitung
RMI-Beispiel: getTime
Seite 6 / 7
Schritt 5: Main-Class getTimeClient erstellen
import
import
import
import
java.net.MalformedURLException;
java.rmi.Naming;
java.rmi.NotBoundException;
java.rmi.RemoteException;
public class getTimeClient {
/**
* @param args
*/
public static void main(String[] args) {
try {
int port = 1099; // Gleicher Port wie beim GetTimeServer benutzt wurde
String host = "127.0.0.1";
// Verbindung zum NameServic herstellen - und zwar auf die
// Verbindung "GetTime"
// Der Der Verbinung ist im File "getTimeServer" definiert worden.
GetTimeInterface obj = (GetTimeInterface) Naming.lookup("rmi://"
+ host + ":" + port + "/" + "GetTime");
// Zeit auslesen / Methode, welche in der Implementation Class
//definiert wurde
String serverTime = obj.getTime();
// Zeit ausgeben
System.out.println("Server Zeit: " + serverTime);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NotBoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Kurzanleitung
RMI-Beispiel: getTime
Seite 7 / 7
Policy-Datei integrieren
Falls eine Policy-Datei integriert werden soll, folgende Codezeile direkt nach dem try {
implementieren:
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
Zusätzlich muss in der Run-Configuration die Policy noch als Argument hinterlegt werden.
Herunterladen