Hallo!
Bei meinem RMI Programm bekomme ich clientseitig immer eine ConnectionException, die ich mir par tout nicht erklären kann.
Eclipse sagt:
java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is:
java.net.ConnectException: Connection refused
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:340)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at client.Client.main(Client.java:28)
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:310)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:176)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:163)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)
at java.net.Socket.connect(Socket.java:546)
at java.net.Socket.connect(Socket.java:495)
at java.net.Socket.(Socket.java:392)
at java.net.Socket.(Socket.java:206)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:146)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
… 5 more
Das alles wirft der Client. Das exportieren des Ojects, erstellen der Registry und das stubs bei Server geht gut. In einem anderen Programm läuft derselbe Code ab, und alles geht glatt. Der einzige Unterschied ist, dass ich in diesem Programm ein generisches Interface verwende, wobei die Klassen es aber konkretisiert implementieren.
import interfaces.JobHandlerInterface;
import interfaces.JobInterface;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import server.Job;
import server.Server;
import tasks.*;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// System.setSecurityManager(new SecurityManager());
try {
Registry registry = LocateRegistry.getRegistry(Server.REGISTRY_PORT);
JobInterface jobservice = (JobInterface) registry.lookup(Server.JOBSERVICE_NAME);
JobHandlerInterface handlerstub = jobservice.executeJob(new Job(new Add(5, 6), new Rand(), new Sub(7, 7)));
System.out.println(handlerstub.getResults());
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}
jobservice ist mein exportiertes Objekt. Add(), Rand() und Sub() implementieren das generische Interface mit konkreten Typen (Integer, Double). handlerstub wird in jobservice.executeJob() erzeugt und exportiert.
Aber ich kann nirgendwo ein Problem feststellen Bei der Fehlermeldung oben bereitet mir vor allem die Zeile
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
Kopfschmerzen. Was könnte die bedeuten?
EDIT: Wäre mir mit einem SecurityManager geholfen?