码迷,mamicode.com
首页 > 其他好文 > 详细

远程调用之RMI技术

时间:2015-01-13 19:14:41      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

---恢复内容开始---

RMI已经不是什么新的技术了,但是相对于webservice来说,rmi比较简单,比较适合一些小的应用,下面的helloword列子可以介绍rmi的相关技术

服务器端代码:

  服务器接口实现Remote

 1 package com.qcf.server;
 2 
 3 import java.rmi.Remote;
 4 import java.rmi.RemoteException;
 5 /**
 6  * 服务类
 7  * 定义行为集
 8  * @author Administrator
 9  *
10  */
11 public interface IHello extends Remote {
12 
13     //在服务器端打印客户端传过来的字符串并返回该字符串
14     public String sayHello(String str) throws RemoteException;
15 }

  接口的实现类

 1 package com.qcf.server;
 2 
 3 import java.rmi.RemoteException;
 4 import java.rmi.server.UnicastRemoteObject;
 5 
 6 /**
 7  * 服务器端实现类
 8  * 需要继承UnicastRemoteObject
 9  * @author Administrator
10  *
11  */
12 public class IHelloImpl extends UnicastRemoteObject implements IHello{
13 
14     //必须的
15     protected IHelloImpl() throws RemoteException {
16         super();
17     }
18 
19     @Override
20     public String sayHello(String str) throws RemoteException {
21         System.out.println("客户端传过来的字符串是:" + str);
22         return str;
23     }
24 
25 }

  服务类启动服务类

 1 package com.qcf.server;
 2 
 3 import java.net.MalformedURLException;
 4 import java.rmi.AlreadyBoundException;
 5 import java.rmi.Naming;
 6 import java.rmi.RemoteException;
 7 import java.rmi.registry.LocateRegistry;
 8 
 9 /**
10  * RMI服务器
11  * 1、创建一个服务
12  * 2、启动服务器
13  * 3、注册服务
14  * @author Administrator
15  *
16  */
17 public class HelloServer {
18 
19     public static void main(String[] args) throws RemoteException, MalformedURLException, AlreadyBoundException {
20         //1、创建一个服务
21         IHello iHello=new IHelloImpl();
22         //2、启动服务器 启动一个注册表并把注册表绑定到一个端口(默认端口1099)  
23         LocateRegistry.createRegistry(8189);
24         
25         //3将服务注册到注册表  绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略,下面两种写法都是正确的)   
26         Naming.bind("rmi://localhost:8189/ihello", iHello);
27         System.out.println("server start success!");
28     }
29 }

 

  客户端类

    创建接口类如上

    客户端测试类

 1 package com.qcf.client;
 2 
 3 import java.net.MalformedURLException;
 4 import java.rmi.Naming;
 5 import java.rmi.NotBoundException;
 6 import java.rmi.RemoteException;
 7 
 8 /**
 9  * 客户端测试类
10  * 服务器是谁  服务器
11  * 如何获取服务 查找
12  * 调用接口
13  * @author Administrator
14  *
15  */
16 public class HelloClient {
17     public static void main(String[] args) throws Exception, Exception, Exception {
18         //查找服务
19         IHello hello=(IHello) Naming.lookup("rmi://localhost:8489/ihello");
20         //调用接口
21         String str=hello.sayHello("哈哈哈 。我测试成功了");
22         System.out.println("客户端"+str);
23     }
24 }
运行RMI服务端程序:
技术分享
 
运行RMI客户端程序:
 
 
总结:
从上面的过程来看,RMI对服务器的IP地址和端口依赖很紧密,但是在开发的时候不知道将来的服务器IP和端口如何,但是客户端程序依赖这个IP和端口。
这也是RMI的局限性之一。这个问题有两种解决途径:一是通过DNS来解决,二是通过封装将IP暴露到程序代码之外。
RMI的局限性之二是RMI是Java语言的远程调用,两端的程序语言必须是Java实现,对于不同语言间的通讯可以考虑用Web Service或者公用对象请求代理体系(CORBA)来实现。

---恢复内容结束---

远程调用之RMI技术

标签:

原文地址:http://www.cnblogs.com/quchengfeng/p/4221981.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!