Ich will mich in nächster Zeit mehr mit Verteilten Systemen auseinander setzen.
Darum wollte ich ein kleines RMI-Bsp ausprobieren. Leider läuft es nicht...
Der Client soll den Server veranlassen, Hallo Welt auszugeben!
Hier mal der Code:
//Hello.java
import java.rmi.*;
public interface Hello extends Remote {
public String sayHello() throws java.rmi.RemoteException;
}
//HelloImpl.java
import java.rmi.*;
import java.rmi.server.*;
import java.net.*;
public class HelloImpl extends UnicastRemoteObject implements Hello {
public HelloImpl() throws RemoteException {
super();
}
public String sayHello() throws RemoteException {
return "Hello, World!";
}
public static void main(String args[]) {
try {
HelloImpl h = new HelloImpl();
Naming.rebind("rmi://localhost/hello", h);
System.out.println("Hello Server ready.");
} catch (RemoteException re) {
System.out.println("Exception in HelloImpl.main: " + re);
} catch (MalformedURLException e) {
System.out.println("MalformedURLException in HelloImpl.main: " + e);
}
}
}
//HelloClient.java
import java.rmi.*;
public class HelloClient {
public static void main(String args[]) {
System.setSecurityManager(new RMISecurityManager());
try {
Hello h = (Hello) Naming.lookup("rmi/hello");
String message = h.sayHello();
System.out.println("HelloClient: " + message);
} catch (Exception e) {
System.out.println("Exception in main: " + e);
}
}
}
Insgesamt brauch ich dann 3 Eingabe-Fenster zum Starten des RMI-Beipiels
1. Fenster
E:\Programmieren\20040805\anders>rmic HelloImpl
Daraufhin bekomm ich die beiden Dateien:
HelloImpl_Skel.class
und
HelloImpl_Stub.class
E:\Programmieren\20040805\anders>rmiregistry
2. Fenster
E:\Programmieren\20040805\anders>java HelloImpl
Hello Server ready.
3. Fenster
E:\Programmieren\20040805\anders>java HelloClient
Exception in main: java.security.AccessControlException: access denied (java.net
.SocketPermission 127.0.0.1:1099 connect,resolve)
Genau daran happerts dann immer! Was mach ich FALSCH?
Wo ich mich jetzt nicht recht auskenne ist:
Stimmt die Aufruf Reihenfolge so?
Wie erstelle ich ein policy file- bzw. was muß da rein und wo muß es abgespeichert werden?
Liegts evtl. daran, dass im Programm was falsch ist?
Liegts an Windows, muß ich da vielleicht was beachten? Win XP!
Firewall hab ich eigentlich abgeschaltet fürs testen...
Vielen Dank für die Hilfe
~rolex
Darum wollte ich ein kleines RMI-Bsp ausprobieren. Leider läuft es nicht...
Der Client soll den Server veranlassen, Hallo Welt auszugeben!
Hier mal der Code:
//Hello.java
import java.rmi.*;
public interface Hello extends Remote {
public String sayHello() throws java.rmi.RemoteException;
}
//HelloImpl.java
import java.rmi.*;
import java.rmi.server.*;
import java.net.*;
public class HelloImpl extends UnicastRemoteObject implements Hello {
public HelloImpl() throws RemoteException {
super();
}
public String sayHello() throws RemoteException {
return "Hello, World!";
}
public static void main(String args[]) {
try {
HelloImpl h = new HelloImpl();
Naming.rebind("rmi://localhost/hello", h);
System.out.println("Hello Server ready.");
} catch (RemoteException re) {
System.out.println("Exception in HelloImpl.main: " + re);
} catch (MalformedURLException e) {
System.out.println("MalformedURLException in HelloImpl.main: " + e);
}
}
}
//HelloClient.java
import java.rmi.*;
public class HelloClient {
public static void main(String args[]) {
System.setSecurityManager(new RMISecurityManager());
try {
Hello h = (Hello) Naming.lookup("rmi/hello");
String message = h.sayHello();
System.out.println("HelloClient: " + message);
} catch (Exception e) {
System.out.println("Exception in main: " + e);
}
}
}
Insgesamt brauch ich dann 3 Eingabe-Fenster zum Starten des RMI-Beipiels
1. Fenster
E:\Programmieren\20040805\anders>rmic HelloImpl
Daraufhin bekomm ich die beiden Dateien:
HelloImpl_Skel.class
und
HelloImpl_Stub.class
E:\Programmieren\20040805\anders>rmiregistry
2. Fenster
E:\Programmieren\20040805\anders>java HelloImpl
Hello Server ready.
3. Fenster
E:\Programmieren\20040805\anders>java HelloClient
Exception in main: java.security.AccessControlException: access denied (java.net
.SocketPermission 127.0.0.1:1099 connect,resolve)
Genau daran happerts dann immer! Was mach ich FALSCH?
Wo ich mich jetzt nicht recht auskenne ist:
Stimmt die Aufruf Reihenfolge so?
Wie erstelle ich ein policy file- bzw. was muß da rein und wo muß es abgespeichert werden?
Liegts evtl. daran, dass im Programm was falsch ist?
Liegts an Windows, muß ich da vielleicht was beachten? Win XP!
Firewall hab ich eigentlich abgeschaltet fürs testen...
Vielen Dank für die Hilfe
~rolex