JAVA 自带的RMI远程调用功能的实现和原理
2013-02-25 19:46
831 查看
本文介绍的是使用JDK自带的RMI包,实现简单的远程方法调用功能,虽有众多局限,在生产环境上未必能用上,但对于理解原理是非常有好处的,请深刻理解。
说明:
1. 本文使用的是JDK1.6+的版本
2. 文中会使用到rmic功能,这个工具是在本地生成Stub和Skeleton的工具,在JAVA_HOME\bin文件中有自带,
若想使用,请在path环境变量中添加%JAVA_HOME%\bin 目的是将JAVA_HOME\bin下的命令添加到path变量中,
使得rmic命令在dos的任何目录下使用。
先上代码,服务端类:
客户端类:
编写好后,继续:
1. 在工程的bin文件下为SayHello.class生成stub类,即进入dos后cd到SayHello.class所在目录,
执行 rimc SayHello (注意,别加后缀)
2. 成功后,执行命令: rmiregistry 启动rmiregistry服务
3. 先运行server,再运行client 就可以了。。。
说明:
1. 本文使用的是JDK1.6+的版本
2. 文中会使用到rmic功能,这个工具是在本地生成Stub和Skeleton的工具,在JAVA_HOME\bin文件中有自带,
若想使用,请在path环境变量中添加%JAVA_HOME%\bin 目的是将JAVA_HOME\bin下的命令添加到path变量中,
使得rmic命令在dos的任何目录下使用。
先上代码,服务端类:
import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; /** * UnicastRemoteObject 通过exportObject方法 将本实例export出去 * @author liuinsect * */ public class SayHello extends UnicastRemoteObject implements SayHelloInterface { // protected SayHello() throws RemoteException { super(); } /** * 序列化的标示 */ private static final long serialVersionUID = 999999L; /** * 在服务端的具体方法 */ @Override public void sayHello() { System.out.println(" hello "); } /** * 在服务端的具体方法 */ @Override public void sayHelloT0(String name) { System.out.println(" hello " + name); } }
import java.rmi.Remote; import java.rmi.RemoteException; /** * 作为标示,说明该接口支持远程调用 * @author liuinsect * */ public interface SayHelloInterface extends Remote { public void sayHello( ) throws RemoteException; public void sayHelloT0( String name) throws RemoteException; }
import java.rmi.*; /** * 服务端,完成的是发布服务的功能 * @author liuinsect * */ public class Server { public static void main(String[] args) { try { SayHelloInterface hello = new SayHello(); //实例化要发布的类 Naming.rebind("RMI_Hello", hello); //绑定RMI名称 进行发布,其实是将rmic生成的stub文件绑定待rmi registry中 System.out.println("=== Hello server Ready === "); } catch(Exception exception) { exception.printStackTrace(); } } }
客户端类:
import java.rmi.*; /** * 客户端类,调用远程服务 * @author liuinsect * */ public class Client { public static void main(String[] args) { try { //在RIM registry中需找名为RMI_Hello的服务 SayHelloInterface say = (SayHelloInterface) Naming.lookup("rmi://127.0.0.1/RMI_Hello"); //通过RMI名称查找远程对象 say.sayHello(); //调用远程对象的方法 ,这个时候的对象是在本地用classloader load进stub后,反序列化SayHelloInterface对象生成的 say.sayHelloT0("jack "); // } catch (Exception e) { e.printStackTrace(); } } }
编写好后,继续:
1. 在工程的bin文件下为SayHello.class生成stub类,即进入dos后cd到SayHello.class所在目录,
执行 rimc SayHello (注意,别加后缀)
2. 成功后,执行命令: rmiregistry 启动rmiregistry服务
3. 先运行server,再运行client 就可以了。。。
相关文章推荐
- Java的RMI远程方法调用实现和应用
- Java远程方法调用RMI的实现
- Java的RMI(远程方法调用)的实现范例
- 【Java】java实现的远程调用例子 rpc原理
- Java的RMI(远程方法调用)的实现范例
- RMI(远程方法调用)实现简单的查单词功能
- RMI(远程方法调用)实现简单的查单词功能
- Java的RMI远程方法调用实现和应用
- Java动态代理实现模拟RMI远程方法调用
- spring整合RMI实现Java远程方法调用
- 分布式Java--基于远程调用实现系统间通信
- java调用NLPIR(ICTCLAS2016)实现分词功能
- Java之——Spring与RMI集成实现远程访问(插曲)
- Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能
- 一起谈.NET技术,JAVA与.NET的相互调用——利用JNBridge桥接模式实现远程通讯
- 使用 RMI + ZooKeeper 实现远程调用框架
- 调用远程主机上的RMI服务时抛出java.rmi.ConnectException: Connection refused to host: 127.0.0.1异常原因及解决方案
- Java调用WebService接口实现发送手机短信验证码功能
- 使用 RMI + ZooKeeper 实现远程调用框架
- Java调用WebService接口实现发送手机短信验证码功能