RMI(Remote Method Invocation):远程方法调用
RMI是Enterprise JavaBean的支柱;其设计基础是
接口,它的架构基于一个重要的原理:
定义接口和定义接口的实现是分开的
一个正常的RMI系统组成部分,如下:
1、远程服务的接口定义
2、远程服务接口的具体实现
3、桩(stub)和框架(skeleton)文件的生成--->rmic命令的使用
4、一个RMI的命名服务,它允许远程调用的客户端去发现该服务
5、类文件的提供者(HTTP或FTP服务)
6、远程调用该服务的客户端
根据上述的简要说明,编写一个简单的RMI形式的calculator系统,实现远程调用加减乘除四种基本运算,let's go
1、定义远程服务的接口(Calculator)
|-该接口声明四个方法,分别是:add()、sub()、mul()、div()
|-该接口需要继承Remote,而且每个方法都必须抛出一个RemoteException的异常
具体代码如下:
pubilc interface Calculator extends Remote
{
public long add(long a,long b) throws RemoteException;
public long sub(long a,long b) throws RemoteException;
public long mul(long a,long b) throws RemoteException;
public long div(long a,long b) throws RemoteException;
}
2、远程服务接口的具体实现
|-继承UnicastRemoteObject,必须提供一个构造函数而且抛出一个RemoteException对象,当这个构造函数调用super()时,它就会激活UnicastRemoteObject中的代码完成RMI的连接和远程对象的初始化
|-如果一个类不是从UnicastRemoteObject上继承,则必须使用它的exportObject()方法去联接到RMI
使用继承UncastRemoteObject类来实现该服务接口,具体代码如下
public CalculatorImpl implements Calculator extends UnicastRemoteObject
{
public Calculator() throws RemoteException
{
super();
}
public long add(long a,long b) throws RemoteException
{
return a+b;
}
public long sub(long a,long b) throws RemoteException
{
return a-b;
}
public long mul(long a,long b) throws RemoteException
{
return a*b;
}
public long div(long a,long b) throws RemoteException
{
return a/b;
}
}
3、使用javac命令编译远程服务接口类和远程服务接口具体实现类
4、生成桩(stub)和框架(skeleton)文件
|-使用rmic编译刚刚编译了的远程服务接口具体的实现类
|-编译完在classes下会生成了一个CalculatorImpl_Stub.class文件
5、编写远程主机服务器
|-远程RMI服务必须在一个服务器中运行
具体代码如下
public class Server
{
public Server()
{
try
{
Calculator cal = new CalculatorImpl();
Naming.rebind("rmi://localhost:1099/Service",cal);
}
catch (Exception e)
{
System.out.println("访问时出现以下的错误:"+e);
}
}
public static void main(String[] args)
{
new Server();
}
}
6、编写远程调用的客户端
具体代码如下
public class Client
{
public static void main(String[] args)
{
try
{
CalculatorInterface cal = (CalculatorInterface)Naming.lookup("rmi://localhost/Service");
System.out.println(cal.add(3,4));
System.out.println(cal.sub(3,4));
System.out.println(cal.mul(3,4));
System.out.println(cal.div(12,4));
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
7、运行测试,具体步骤
|-启动RMI注册(Registry)程序,使用
start rmiregistry启动注册表服务器
|-启动远程服务器
java Server
|-启动远程调用客户端
java Client
RMI通过上面的7个步骤基本上可以实现,希望通过代码的具体演示可以为更多人对RMI有初步的了解,写得不足之处望多多指导,同时也要多多支持与交流
分享到:
相关推荐
java rmi java rmijava rmi javajava rmi java rmi rmi
Java编程rmi实例,给出远程方法调用技术在java方面的具体例子。
java RMI技术实现的网络聊天室 编译通过,很完整的。代码很有参考价值
Java分布式处理技术RMI,JNDI,
采用JAVA rmi,带图形界面,完全由自己实现的聊天室,具备基本的聊天功能,可以自己扩充功能
JAVA分布式之RMI实例教程网络通信原理[收集].pdf
java-RMI技术讲解
《Java高手真经(编程基础卷):Java核心编程技术》详细讲解了Java语言基础开发中的各种技术,主要内容包括如下。Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、...
在这次的项目中,对于客户端与服务器之间的通信,想了许多办法,由于做的是富客户端应用,最终将技术选定在了RMI和Java-sockets两种之间,其中RMI的灵活性不高,客户端和服务器端都必须是java编写,但使用比较方便,...
java RMI
RMI教程 Java RMIRMI教程 Java RMIRMI教程 Java RMIRMI教程 Java RMIRMI教程 Java RMI
简约而不简单的描述了RMI技术,希望对大家有所帮助。
java简单示例rmi java简单示例rmi
本项目使用socket直接发送数据包来攻击rmi,通过反序列化攻击rmi,双击直接运行,对1099端口的rmi服务直接进行漏洞检测。
java 有关rmi进行分布式学习的参考文档
精通RMI 这是RMI的入门基础 特别对刚开始学RMI的同胞们很有帮助
java RMI实现代码。分为客户端和服务器端,有清楚的代码注释。
Java RMI (Remote Method Invocation 远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。
Java RMI实例
Java 核心技术 卷1 Index Chapter 1: An Introduction to Java 1 Java As a Programming Platform 2 The Java “White Paper” Buzzwords 2 Java Applets and the Internet 7 A Short History of Java 9 ...