私はRMIを学んでいて、次のようなことをしました。
Interface
import java.rmi.*;
public interface IRemote extends Remote {
public void say() throws RemoteException;
}
Server
import java.rmi.*;
import java.rmi.server.*;
public class Server extends UnicastRemoteObject implements IRemote{
public Server() throws RemoteException{}
public void say() throws RemoteException{
System.out.println("I am saying Hello World...");
}
public static void main (String[] argv) {
try {
Naming.rebind ("myserver", new Server());
System.out.println ("Server is ready.");
} catch (Exception e) {
System.out.println ("Hello Server failed: " + e);
}
}
}
Client
import java.rmi.*;
class Client{
public static void main(String args[]){
try{
IRemote obj = (IRemote) Naming.lookup ("rmi://MYPCNAME/myserver");
obj.say();
}catch(Exception e){
System.out.println("Exception : "+e);
}
}
}
そして実行するために、私は最初にRMIレジストリを開始しています。
start rmiregistry
その後java Server
、そしてjava Client
これら3つすべてを同じパッケージに入れている場合、このことは正常に機能しています。しかし、それはRMIのすべてではありません。クライアントを他のマシンまたは他の場所に配置し、そこからサーバーメソッドを呼び出すことができるはずです。
しかし、Client.javaのパッケージを変更してコンパイルしようとすると、次のエラーが発生します。
Client.java:6: error: cannot find symbol
IRemote obj = (IRemote) Naming.lookup ("rmi://MYPCNAME/myserver");
symbol: class IRemote
location: class Client
サーバーのパッケージに含まれているIRemoteが見つからないと表示されます。知りたいのですが、どうすればこれを正しく機能させることができますか?異なるパッケージまたはマシン上のクライアントとサーバーの両方?