远程方法调用RMI的问题
答案:3 悬赏:40 手机版
解决时间 2021-04-01 20:39
- 提问者网友:你挡着我发光了
- 2021-04-01 14:48
远程方法调用RMI的问题
最佳答案
- 五星知识达人网友:慢性怪人
- 2021-04-01 16:10
RMI远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外一台计算机上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。
简单实例:
1、首先为服务建立一个Model层,注意因为此对象需要现实进行远程传输,所以必须继承Serializable
2、创建远程接口PersonService,注意远程接口需要继承Remote
3、建立PersonServiceImpl实现远程接口,注意此为远程对象实现类,需要继承UnicastRemoteObject
4、建立服务器端,在服务器端注册RMI通讯端口与通讯路径,然后通讯javac命令编译文件,通过java -server 命令注册服务。
5、以下面代码为例,如果将项目建立于D:\\RMI\RemotingService文件夹上时,则先输入D:\\RMI\RemotingService\src>javac rmi/remotingservice/Program.java获取Program.class,然后输入D:\\RMI\RemotingService\src>javarmi/remotingservice/Program启动服务。
6、最后建立客户端进行测试,注意客户调用的RMI路径必须服务器配置一致。
简单实例:
1、首先为服务建立一个Model层,注意因为此对象需要现实进行远程传输,所以必须继承Serializable
2、创建远程接口PersonService,注意远程接口需要继承Remote
3、建立PersonServiceImpl实现远程接口,注意此为远程对象实现类,需要继承UnicastRemoteObject
4、建立服务器端,在服务器端注册RMI通讯端口与通讯路径,然后通讯javac命令编译文件,通过java -server 命令注册服务。
5、以下面代码为例,如果将项目建立于D:\\RMI\RemotingService文件夹上时,则先输入D:\\RMI\RemotingService\src>javac rmi/remotingservice/Program.java获取Program.class,然后输入D:\\RMI\RemotingService\src>javarmi/remotingservice/Program启动服务。
6、最后建立客户端进行测试,注意客户调用的RMI路径必须服务器配置一致。
全部回答
- 1楼网友:佘樂
- 2021-04-01 17:41
用spring来的绑定的,具体没有深入去了解了。
- 2楼网友:第幾種人
- 2021-04-01 17:34
看了一下API,发现Naming是静态的、registy是接口。楼主可以看看JDK的API说明追问就是看过API没看明白,API说的很简单,一句话就带过了。我试了一下,都不行。追答刚测试了一下,没有报错
try {
PersonService personService=new PersonServiceImpl();
//注册通讯端口
LocateRegistry.createRegistry(6600);
//注册通讯路径
Naming.rebind("rmi://127.0.0.1:6600/PersonService", personService);
Naming.unbind("rmi://127.0.0.1:6600/PersonService");
Naming.rebind("rmi://127.0.0.1:6600/PersonService", personService);
System.out.println("Service Start!");
} catch (Exception e) {
e.printStackTrace();
}追问在同一个类当中我试过没有问题,我刚才报异常应该是用Naming绑定,registry 取消绑定造成的。我现在用registry 绑定,在另一个类当中通过Registry registry = LocateRegistry.getRegistry(8888)方法来获得绑定的registry ,然后取消绑定。现在没有异常,但是还是没有效果,后台的服务还是存在。我觉得可能是后来获得的registry 跟先前
Registry registry = LocateRegistry.createRegistry(8888);的registry不是同一个
try {
PersonService personService=new PersonServiceImpl();
//注册通讯端口
LocateRegistry.createRegistry(6600);
//注册通讯路径
Naming.rebind("rmi://127.0.0.1:6600/PersonService", personService);
Naming.unbind("rmi://127.0.0.1:6600/PersonService");
Naming.rebind("rmi://127.0.0.1:6600/PersonService", personService);
System.out.println("Service Start!");
} catch (Exception e) {
e.printStackTrace();
}追问在同一个类当中我试过没有问题,我刚才报异常应该是用Naming绑定,registry 取消绑定造成的。我现在用registry 绑定,在另一个类当中通过Registry registry = LocateRegistry.getRegistry(8888)方法来获得绑定的registry ,然后取消绑定。现在没有异常,但是还是没有效果,后台的服务还是存在。我觉得可能是后来获得的registry 跟先前
Registry registry = LocateRegistry.createRegistry(8888);的registry不是同一个
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯