rmi执行远程方法调用
来源:互联网 发布:福州大数据培训机构 编辑:程序博客网 时间:2024/05/05 02:10
Java RMI 指的是远程方法调用 (Remote Method Invocation)。
它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。
以下是rmi远程方法调用实现代码:
服务端
1、定义远程服务调用接口Product
import java.rmi.Remote;import java.rmi.RemoteException;/** * 产品服务接口 * @author Administrator * */public interface Product extends Remote{ /** * 获取产品描述 * @return * @throws RemoteException */ public String getDescription()throws RemoteException;}
2、Product的实现ProductImpl
import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class ProductImpl extends UnicastRemoteObject implements Product{ private String descr; public ProductImpl(String descr) throws RemoteException{ this.descr = descr; } @Override public String getDescription() throws RemoteException { return "i am a " + descr + ", buy me"; }}
3、发布服务接口
import java.rmi.Naming;import java.rmi.registry.LocateRegistry;import com.zooper.rmi.ProductImpl;public class ProductServer { public static void main(String[] args) throws Exception { ProductImpl p1 = new ProductImpl("blackwell toaster"); ProductImpl p2 = new ProductImpl("zapXpress Microware Oven"); /* * 本地主机上的远程对象注册表Registry的实例,并指定端口为8888, * 这一步必不可少(Java默认端口是1099),必不可缺的一步, * 缺少注册表创建,则无法绑定对象到远程注册表上 */ LocateRegistry.createRegistry(8888); //发布服务 Naming.bind("rmi://localhost:8888/toaster",p1); Naming.bind("rmi://localhost:8888/Microware",p2); System.out.println("rmi服务发布成功!"); }}
这时服务端的代码已经完成,此时执行ProductServer的main()方法即可将发布成功。
客户端
这里要注意的是:客户端程序可能需要操作服务器端的对象,但它实际上并不需要这些对象的拷贝,这些对象仍然位于服务器端,客户端代码只需要知道这些对象可以用来做什么,而他们的功能通过接口被表示了出来,这些接口是客户端与服务器共享的,并且必须同时存在于客户端与服务器端,因此客户端也需要创建Product接口.
1、定义远程服务接口Product
/** * 定义远程调用接口 * @author Administrator * */public interface Product extends Remote{ public String getDescription()throws RemoteException;}
2、客户端调用远程接口ProductClient
import java.rmi.Naming;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NameClassPair;import javax.naming.NamingEnumeration;import com.zooper.rmi.Product;/** * 调用远程rmi接口 * @author Administrator * */public class ProductClient { public static void main(String[] args) throws Exception{ /* * 获取注册成功的服务列表 * 方式一 */ String[] servers = Naming.list("rmi://localhost:8888/"); for (String name : servers) { System.out.println(name); } /* * 获取注册成功的服务列表 * 方式二 */ Context namingContext = new InitialContext(); NamingEnumeration<NameClassPair> e = namingContext.list("rmi://localhost:8888/"); while(e.hasMore()){ System.out.println(e.next().getName()); } /* * 请求接口 */ Product p1 = (Product) Naming.lookup("rmi://localhost:8888/toaster"); System.out.println(p1.getDescription()); Product p2 = (Product) Naming.lookup("rmi://localhost:8888/Microware"); System.out.println(p2.getDescription()); }}
这样客户端就算写好了,如果服务器端服务已经运行,此时执行ProductClient的main()方法就可以调用服务器端的远程rmi接口了。结果如下:
//localhost:8888/Microware//localhost:8888/toasterMicrowaretoasteri am a blackwell toaster, buy mei am a zapXpress Microware Oven, buy me
客户端和服务端的实现代码地址:
https://github.com/zZooper/RMI.git
阅读全文
0 0
- rmi执行远程方法调用
- RMI,远程方法调用
- RMI远程方法调用
- rmi 远程方法调用
- RMI远程方法调用
- RMI远程方法调用
- RMI 远程方法调用
- rmi远程方法调用
- RMI 远程方法调用
- RMI远程方法调用
- RMI远程方法调用
- 远程方法调用------RMI技术
- RMI远程方法调用概述
- Java RMI远程方法调用
- Java远程方法调用(RMI)
- Java远程方法调用RMI
- RMI远程方法调用示例
- Java Rmi 远程方法调用
- jquery封装获取表单数据组成Json数据
- 关于Class对象、类加载机制、虚拟机运行时的内存布局的全面解析和推测
- 物联网学习之数据库与物联网搜索引擎详解
- 给出分数数组,得到对应的名次数组,两种情况
- 深入理解Spring MVC 思想
- rmi执行远程方法调用
- ES6 —学习笔记01
- 最小二乘法
- JPA注解持久化类
- input type=number禁止输入小数
- HDOJ 1008 Elevator
- jquery get-post请求
- sublime text3 突然不能使用ctrl+e和tab
- 计算机网络和操作系统知识点总结