RMI的导入/包问题

时间:2012-01-22 11:29:04

标签: java rmi

我有两个包客户端和服务器:

enter image description here

客户端包包含一个接口“I_object”:

package client;

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface I_object extends Remote {  

public int Add(int a,int b) throws RemoteException;

}

和一个类main_client:

package client;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

/**
*
* @author marwen
*/

public class main_client {


public static void main(String [] args) throws NotBoundException,  MalformedURLException, RemoteException{

 I_object obj_distant=(I_object) Naming.lookup("rmi://localhost:1000/exemple");

 System.out.println(obj_distant.Add(5, 9));    

}
}

服务器包包含一个实现I_object接口的类(impl_object):

package server;

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;


/**
*
* @author marwen
*/
public class impl_object  extends UnicastRemoteObject implements I_object {

public impl_object() throws RemoteException
{}

public int Add(int a,int b) throws RemoteException{
return a+b;
}

}

最后是一个main_server:

package server;

import java.net.MalformedURLException;

import java.rmi.Naming;

import java.rmi.NotBoundException;

import java.rmi.RemoteException;


public class main_server {

public static void main(String [] args) throws NotBoundException, MalformedURLException, RemoteException{

    impl_object obj=new impl_object();

   java.rmi.registry.LocateRegistry.createRegistry(1000);

   Naming.rebind("rmi://localhost:1000/exemple", obj);

 System.out.println("server is running");
}
}

如果您注意到“impl_object”的实现,我还没有放入“import client.I_object;”为什么??????? 好的,确切地说,如果我放一个“import client.I_object;”到客户端包,所以服务器将“链接”到客户端!这是问题,当我分离客户端和服务器(我把服务器放在远程计算机和家里的客户端)??? .... 有人可以向我解释,我错了吗?

2 个答案:

答案 0 :(得分:0)

编辑回答:

您可以将接口和impl类放入单独的包中,如model,然后根据需要从此包中导入它们。 Impl对象是服务器和客户端使用的对象,它不以这种方式绑定它们(仅限客户端)。它是与JRMP一起使用的UnicastRemoteObject,它们都必须知道这个对象。

答案 1 :(得分:0)

  

我放了一个“import client.I_object;”到客户端包,所以   服务器将“链接”到客户端

“链接”这个词在Java中毫无意义。如果您担心类泄漏,可以将远程接口及其所依赖的任何应用程序对象放入服务器和客户端共用的第三个程序包中。