`
ch_space
  • 浏览: 109194 次
  • 性别: Icon_minigender_1
  • 来自: 农村进城务工人员
社区版块
存档分类
最新评论

Java RMI

    博客分类:
  • Java
阅读更多
RMI(remote method invoke)是Java实现透明远程调用的机制,客户端仅持有服务端的接口。RMI应用的两种写法:

1、利用UnicastRemoteObject.exportObject()

server端:
public interface Business extends Remote {
	public void call(String str) throws RemoteException;
}
public class BusinessImpl implements Business{//服务类实现Remote接口
	public void call(String str) throws RemoteException{
		System.out.println("client send:"+str);
	}
}
public class Server {
	public static void main(String[] args) throws Exception{
		String name="business";
		Business bus=new BusinessImpl();
		Registry reg=LocateRegistry.createRegistry(1099);//在rmi默认端口创建rmi注册表
		reg.bind(name, bus);//将remote对象绑定到rmi注册表
		UnicastRemoteObject.exportObject(bus);//将remote对象暴露到匿名端口
	}
}

client端:
public class Client {
	public static void main(String[] args) throws Exception{
		BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
		Registry reg=LocateRegistry.getRegistry("192.168.1.110",1099);//获得指定主机的rmi注册表引用
		String name="business";
		Business bus=(Business)reg.lookup(name);//查找remote对象
		String line;
		while(!"bye".equals(line=in.readLine())){
			bus.call(line);
		}
		in.close();
	}
}


2、Remote对象继承UnicastRemoteObject

第一种方式不需要生成服务器端remote对象存根(stub),但编码有些多。还可以通过继承UnicastRemoteObject的方式,利用Naming.bind()简化代码,但这种方式需要rmic生成remote实现类的存根。
//Business接口不变
...
//remote实现类继承UnicastRemoteObject 
public class BusinessImpl extends UnicastRemoteObject implements Business{
	public void call(String str) throws RemoteException{
		System.out.println("client send:"+str);
	}
}

服务端:
public class Server {
	public static void main(String[] args) throws Exception{
		String name="rmi://192.168.1.110:1099/business";
		Business bus=new BusinessImpl();
		Naming.bind(name, bus);
	}
}

客户端:
public class Client {
	public static void main(String[] args) throws Exception{
		BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
		String name="rmi://192.168.1.110:1099/business";
		Business bus=(Business)Naming.lookup(name);
		String line;
		while(!"bye".equals(line=in.readLine())){
			bus.call(line);
		}
		in.close();
	}
}

然后的步骤:
1)生成remote实现类的存根
rmic xx.xx.BusinessImpl
2)启动rmi注册表
windows下:start rmiregistry
linux下:rmiregistry
3)启动服务端
java xx.xx.Server
4)启动客户端请求
java xx.xx.Client

第2种方式其实更加不方便(需要手动生成存根、启动rmiregistry)

下一篇介绍利用Spring更方便的将普通的Service暴露为Remote服务。
分享到:
评论

相关推荐

    java rmi java rmi

    java rmi java rmijava rmi javajava rmi java rmi rmi

    java RMI技术实现的网络聊天室

    java RMI技术实现的网络聊天室 编译通过,很完整的。代码很有参考价值

    基于JAVA RMI的聊天室

    采用JAVA rmi,带图形界面,完全由自己实现的聊天室,具备基本的聊天功能,可以自己扩充功能

    javaRMI反序列化漏洞验证工具

    检测javaRMI反序列化漏洞

    java RMI简单Demo

    java RMI

    java RMI实现代码

    java RMI实现代码。分为客户端和服务器端,有清楚的代码注释。

    Java RMI 简单示例

    Java RMI 简单示例

    java rmi远程调用

    最近在学习代理模式,用到了java rmi远程调用,包含服务端和客户端,之前一直没有接触过,学习了java rmi远程调用,一方面可以了解代理模式,一方面熟悉java低层的远程

    JavaRMI.pdf

    JavaRMI.pdf

    Java RMI.pdf

    《Java RMI》一书的英文版本,With Java RMI, you'll learn tips and tricks for making your RMI code excel. This book provides strategies for working with serialization, threading, the RMI registry, ...

    javaRMI完整版.pdf

    javaRMI完整版.pdf

    Java RMI中文规范

    这是本人搜集整理的Java RMI规范,中文版,经过排版 共包括10个章节,2个附录

    java rmi上传文件

    在这次的项目中,对于客户端与服务器之间的通信,想了许多办法,由于做的是富客户端应用,最终将技术选定在了RMI和Java-sockets两种之间,其中RMI的灵活性不高,客户端和服务器端都必须是java编写,但使用比较方便,...

    原创的JavaRMI项目

    这是原创的最简单的Java RMI入门项目,内含二个Eclipse项目,一是服务器端,二是客户端。非常简单,只看其中的注释就能理解(当然先要知道什么是RMI了),只供入门用。 这是用Java 1.7编辑的,如果你用的版本低,则...

    JavaRMI的原理和实现方法

    JavaRMI的原理和实现方法 分布式对象计算 来源于青岛大学学报

    分布式程序java 实验名称 基于Java RMI的C/S编程实验

    实验名称 基于Socket的C/S编程实验 实验名称 基于Java RMI的C/S编程实验

    java rmi HelloWorld版(源码)

    java rmi 调用实例及详细说明,详细可参见博客:http://blog.csdn.net/fufengrui/article/details/9855865

    JAVARMI实例[文].pdf

    JAVARMI实例[文].pdf

    JavaRMI分布式编程心得

    网络上绝大多数关于Java RMI分布式编程的资料真的很久、很古老了, 我也是偶尔看到别人的文章,自己动手做实验才总结的一些心得与例子, 希望能够帮到那些有用的人!

Global site tag (gtag.js) - Google Analytics