- 浏览: 76381 次
文章分类
最新评论
第一步:远程对象接口
WareHose.java
第二步:实现远程对象接口
第三步:将远程对象注册到RMI注册表中
第四步:创建客户端访问远程对象
第五步:启动RMI注册表(Window下)
在java安装路径下bin目录下有一个rmiregistry.exe服务
由于类:RegisterRmiServer.java在注册远程对象到RMI注册表中的时候rmiregistry需要加载远程对象的.class字节码文件,这里涉及到一个classpath的问题
cmd>set classpath=%classpath%;远程对象的.class文件顶级包所在的目录
cmd>rmiregistry
上述命令要在同一个cmd窗口下执行
接下来可以用main方法测试效果
WareHose.java
package server; import java.rmi.Remote; import java.rmi.RemoteException; public interface WareHose extends Remote{ public Double getPrice(String description)throws RemoteException; }
第二步:实现远程对象接口
package server; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.util.HashMap; import java.util.Map; public class WareHoseImpl extends UnicastRemoteObject implements WareHose{ private static final long serialVersionUID = -5446129893581781406L; private Map<String,Double> map = null; public WareHoseImpl() throws RemoteException { super(); map = new HashMap<String,Double>(); map.put("Apple", 6.5); map.put("orange", 8.9); //如果WareHoseImpl已经继承了其他的类可用在构造函数中使用 //UnicastRemoteObject.exportObject(this, 0);第二个参数0表示可在服务器任意端口上监听远程调用请求 } @Override public Double getPrice(String description) throws RemoteException { return map.get(description); } }
第三步:将远程对象注册到RMI注册表中
package server; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; public class RegisterRmiServer { private final static void register(String name,Object obj) throws NamingException{ Context namingContext = new InitialContext(); if(name != null) //绑定的url格式为rmi://主机名:端口号/RMI注册对象的名称 次名称用于唯一表示远程对象客户端可通过此名称找到远程对象 //不写主机和端口号的话默认为localhost:1099 namingContext.bind("rmi:RemoteObject_"+name, obj); else namingContext.bind("rmi:"+obj.getClass().getSimpleName(), obj); } public final static void start(List<Object> list){ for(Object obj : list){ try { register(null, obj); } catch (NamingException e) { e.printStackTrace(); } } } public final static void start(Map<String,Object> map){ for(Entry<String, Object> entry : map.entrySet()){ try { register(entry.getKey(), entry.getValue()); } catch (NamingException e) { e.printStackTrace(); } } } public static void main(String[] args) throws Exception{ List<Object> list = new ArrayList<Object>(); WareHoseImpl wHose = new WareHoseImpl(); list.add(wHose); RegisterRmiServer.start(list); } }
第四步:创建客户端访问远程对象
package client; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NameClassPair; import javax.naming.NamingEnumeration; import server.WareHose; public class AccessRemoteObject { public static void main(String[] args) throws Exception{ Context namingContext = new InitialContext(); NamingEnumeration<NameClassPair> e = namingContext.list("rmi://localhost/"); while(e.hasMore()){ System.out.println(e.nextElement().getName()); } WareHose wareHose = (WareHose)namingContext.lookup("rmi:WareHoseImpl"); System.out.println(wareHose.getPrice("orange")); } }
第五步:启动RMI注册表(Window下)
在java安装路径下bin目录下有一个rmiregistry.exe服务
由于类:RegisterRmiServer.java在注册远程对象到RMI注册表中的时候rmiregistry需要加载远程对象的.class字节码文件,这里涉及到一个classpath的问题
cmd>set classpath=%classpath%;远程对象的.class文件顶级包所在的目录
cmd>rmiregistry
上述命令要在同一个cmd窗口下执行
接下来可以用main方法测试效果
发表评论
-
使用javamail组件-----邮件发送
2013-08-09 16:35 452public static void sendMessag ... -
利用快速排序算法快速的取出前一千条数据
2013-08-06 15:49 512实现代码如下:原理是利用了快速排序‘分治’思想,判断左边区域 ... -
java的JNI本地调用代码
2013-06-21 11:56 450Jni中C++和Java的参数传递 如何使用JNI的一些基 ... -
如何解决在window下高并发TCP请求端口被占用问题
2013-05-02 09:43 3020当客户端启动到服务器的 TCP/IP 套接字连接时,客户端通 ... -
Maven的简单使用
2013-04-26 11:44 682----------------准备工作---------- ... -
js 压缩工具使用
2013-04-19 11:40 697//测试代码 compiler("F:\\com ... -
解决加载相同的类
2013-04-19 09:38 601URLClassLoader classLoader1 = ... -
将长url转化为短url
2013-02-21 18:05 680public class ShortAddressUtil ... -
如何判断上传的图片是否是正真的图片 防止上传恶意的非图片文件
2013-02-19 17:03 985final String JPG = "ffd ... -
ChartDirect使用<制作统计图的组件>
2012-11-30 11:39 1518//创建一个由X,Y轴 ... -
获取字符拼音首字母
2012-10-08 13:41 754/** * @date 2010-1-22 * @bu ... -
jetty嵌入式采用xml配置
2012-09-24 09:40 999Server server = new Server(); ... -
生成验证码图片
2012-08-29 17:29 889Java生成验证码 为了防止用户恶意,或者使用软 ... -
WebService分布式应用实现
2012-08-28 17:30 1099WebService 是一种跨语言的系统间交互标准,对外提供功 ... -
利用MulticastSocket发送广播信息
2012-08-24 11:35 781多播组通过 D 类 IP 地址和标准 UDP 端口号指定。D ... -
插件类的一种加载形式URLClassLoader
2012-08-22 10:11 760URL url = new URL("file ... -
部署RMI应用(服务器与RMI注册表分离方式)
2012-08-20 17:56 2123一般情况下,我们的部署RMI应用的时候是把服务器和RMI注册表 ... -
使用JNDI获取DataSource对象
2012-08-03 14:24 803Tomcat的conf/context.xml在<Con ... -
获取摘要、加密、解密
2012-08-02 16:57 1188生成SHA或MD5摘要 MessageDigest sha ... -
SecurityManager安全管理器
2012-08-02 11:18 1193权限设定文件F:/my.policy ...
相关推荐
RMI简单远程调用,实现数字相加!代码简单易懂
JAVA RMI远程调用方法代码 RMI 远程 java
这个是基于C#的 RMI远程方法调用 这个是基于C#的 RMI远程方法调用这个是基于C#的 RMI远程方法调用
最近在学习代理模式,用到了java rmi远程调用,包含服务端和客户端,之前一直没有接触过,学习了java rmi远程调用,一方面可以了解代理模式,一方面熟悉java低层的远程
rmi远程调用读取文件,以及各种简单的例子
动态代理与RMI远程调用附有源码文件,以及ppt讲解
Java RMI 远程调用实例,各个文件的作用: DISPLAYPERFECTTIME.JAVA|:向rmiregistry查找PerfectTime对象,定义调用远程对象的方法。 PERFECTTIME.JAVA:向RMI注册服务,以便客户端查找,创建提供注册服务的本地...
实现java RMI 远程调用,包括 RMIServer RMIClient源码,测试用例。
RMI远程方法调用RMI远程方法调用RMI远程方法调用RMI远程方法调用RMI远程方法调用
使用rmi实现远程调用 多个客户端 一个服务端对话
spring RMI 远程接口调用 包含服务端客户端程序,可完整运行
三种方式实现java远程调用(rmi) 方式一:原始方式 方式二:spring 方式三:jndi 解压,放到myeclipse上可用
RMI是Remote Method Invocation(远程方法调用)的 所写。它允许一个Java程序调用网络中另一台计算机上的Java方法,就如调用本机的方法一样。实现RMI调用的程序和被调用的方法,都必须是Java代码,即客户端和服务器...
用java的rmi实现的 远程调用。希望对阁下有用
Java RMI远程方法调用的小Demo。详细:http://blog.csdn.net/u014375869/article/details/39344963
rmi 远程方法调用 客户端
使用rmi写的银行系统的小例子 博文链接:https://xiaoshan5634.iteye.com/blog/859649
RMI采用JRMP(Java Remote Method Protocol)通讯协议,是构建在TCP/IP协议上的一种远程调用方法。它允许运行在一个Java虚拟机上的对象调用运行在另一个Java虚拟机上的对象方法,从而使编程人员可以方便地在网络环境...
仅供本人自己参考................