Thomas Darimont
Erfahrenes Mitglied
Hallo!
Hier mal ein Beispiel wie man mit Java 1.5.0 eine RMI Anwendung schreiben kann ohne den rmic zu verwenden um Stubs zu generieren.... ;-) *dazu gibts bis jetzt noch nicht so viele Beispiele )
(Das Ganze funktioniert jedoch nur, wenn die Client als auch die Server Version unter JDK 5.0 kompiliert und betrieben werden....)
Hierzu bauen wir die schon so oft gesehene ZeitDienst Anwendung nach ...
Unser Interface TimeService
Usere Server Klasse:
Unser Client:
Um das ganze zum Laufen zu bringen müssen wir mit Java 1.5.0 kompilieren (Eclipse Compiler Einstellungen in den preferences setzen Java -> Compiler-> Compliance and Classfiles auf 1.5.0)
Nachdem wir das ganze Kompiliert haben starten wir zuerst mal die rmiregistry (befindet sich im Verzeichnis %JJAVA_HOME%\bin.
Standardmäßig horscht diese RMIRegistry auf Port 1099.
Danach starten wir den Server mit folgenden Optionen:
bei ...codebase=file:/ .... die URL so setzen, dass das ITimeService Interface gefunden werden kann...
Das Property java.rmi.server.ignoreStubClasses benötigen wir um die Generierung von StubsProxys zu erzwingen.
Nachdem wir nun den Server gestartet haben sollten wir folgende Ausgabe sehen:
Wenn wir nun den Client starten erhalten etwas in der Form:
Viel Spaß beim herumprobieren ;-)
...inspiriert durch Artikel: http://today.java.net/pub/a/today/2004/06/01/RMI.html?page=2
Edit: hier noch ein klareres Beispiel dazu:
http://www.tutorials.de/forum/java/231847-rmi-unter-java-5-a.html?highlight=Remote
Gruß Tom
Ps.: Zitat eines bekannten Java Gurus:" ...HHHOOOORRRAAAYYYY ... no more RMIC.... ... Long live the (DYNAMIC) PROXIES!"
Hier mal ein Beispiel wie man mit Java 1.5.0 eine RMI Anwendung schreiben kann ohne den rmic zu verwenden um Stubs zu generieren.... ;-) *dazu gibts bis jetzt noch nicht so viele Beispiele )
(Das Ganze funktioniert jedoch nur, wenn die Client als auch die Server Version unter JDK 5.0 kompiliert und betrieben werden....)
Hierzu bauen wir die schon so oft gesehene ZeitDienst Anwendung nach ...
Unser Interface TimeService
Code:
package de.tutorials.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ITimeService extends Remote{
public long getServerTime() throws RemoteException;
}
Usere Server Klasse:
Code:
package de.tutorials.rmi.server;
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import de.tutorials.rmi.ITimeService;
public class Server implements ITimeService {
public final static int STD_RMI_PORT = 1099;
public Server() {
}
private void start() {
try {
ITimeService stub = (ITimeService) UnicastRemoteObject
.exportObject(this, 0);
Registry registry = LocateRegistry.getRegistry("127.0.0.1",
STD_RMI_PORT);
System.out.println(registry);
registry.bind("TIMESERVICE", stub);
} catch (RemoteException e) {
e.printStackTrace();
} catch (AlreadyBoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Server().start();
}
public long getServerTime() throws RemoteException {
return System.currentTimeMillis();
}
}
Unser Client:
Code:
package de.tutorials.rmi.client;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.Date;
import de.tutorials.rmi.ITimeService;
public class Client {
public final static int STD_RMI_PORT = 1099;
public static void main(String[] args) {
new Client().start();
}
private void start() {
try {
Registry registry = LocateRegistry.getRegistry("127.0.0.1",
STD_RMI_PORT);
ITimeService timeService = (ITimeService) registry
.lookup("TIMESERVICE");
System.out.println(new Date(timeService.getServerTime()));
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}
Um das ganze zum Laufen zu bringen müssen wir mit Java 1.5.0 kompilieren (Eclipse Compiler Einstellungen in den preferences setzen Java -> Compiler-> Compliance and Classfiles auf 1.5.0)
Nachdem wir das ganze Kompiliert haben starten wir zuerst mal die rmiregistry (befindet sich im Verzeichnis %JJAVA_HOME%\bin.
Standardmäßig horscht diese RMIRegistry auf Port 1099.
Danach starten wir den Server mit folgenden Optionen:
Code:
-Djava.rmi.server.ignoreStubClasses=true -Djava.rmi.server.codebase=file:/E:/eclipse/workspace/tutorials/
Also:
java -Djava.rmi.server.ignoreStubClasses=true -Djava.rmi.server.codebase=file:/E:/eclipse/workspace/tutorials/ de.tutorials.rmi.server.Server
Das Property java.rmi.server.ignoreStubClasses benötigen wir um die Generierung von StubsProxys zu erzwingen.
Nachdem wir nun den Server gestartet haben sollten wir folgende Ausgabe sehen:
Proxy[Registry,RemoteObjectInvocationHandler[UnicastRef [liveRef: [endpoint:[127.0.0.1:1099](remote),objID:[0:0:0, 0]]]]]
Wenn wir nun den Client starten erhalten etwas in der Form:
Tue Nov 09 19:44:29 CET 2004
Viel Spaß beim herumprobieren ;-)
...inspiriert durch Artikel: http://today.java.net/pub/a/today/2004/06/01/RMI.html?page=2
Edit: hier noch ein klareres Beispiel dazu:
http://www.tutorials.de/forum/java/231847-rmi-unter-java-5-a.html?highlight=Remote
Gruß Tom
Ps.: Zitat eines bekannten Java Gurus:" ...HHHOOOORRRAAAYYYY ... no more RMIC.... ... Long live the (DYNAMIC) PROXIES!"