これは単純な RMI プログラムですが、 HelloClient.java を実行すると常に例外がスローされます。
リモート インターフェイスを作成する
public interface Hello extends Remote {
String sayHello(String name) throws RemoteException;
}
リモートクラスを作成する
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class HelloImpl extends UnicastRemoteObject implements Hello {
protected HelloImpl() throws RemoteException {
super();
}
@Override
public String sayHello(String name) throws RemoteException {
System.out.println("HelloImpl:" + name);
return name;
}
}
サーバーを作成します。
import java.rmi.RMISecurityManager;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class HelloServer {
public static final int port = 1099;
public static void main(String[] args) {
try {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
Registry registry = LocateRegistry.createRegistry(port);
HelloImpl impl = new HelloImpl();
registry.rebind("//SEJ1T1DYN68BZBF:1099/HelloService", impl);
String[] names = registry.list();
for (String name : names) {
System.out.println(name);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
クライアントを作成します。
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class HelloClient {
public static void main(String[] args) {
try {
Registry registry = LocateRegistry.getRegistry();
Hello hello = (Hello) registry
.lookup("//SEJ1T1DYN68BZBF:1099/HelloService");
System.out.println(hello.sayHello("javamaj blog"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
例外は次のとおりです。
java.rmi.ConnectIOException: non-JRMP server at remote endpoint
at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
at sun.rmi.server.UnicastRef.newCall(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at HelloClient.main(HelloClient.java:10)
環境:jdk 1.7 + eclipse + windows xp