RMI是java最基本的分布式计算模型。这是一种最简单的方法实现分布式计算和远程调用。
数次碰壁以,找到一不错的教程,在此进行简单解读:
原文地址:
http://www.bitscn.com/pdb/java/200605/22375.html
服务的约定接口,需要扩展Remote接口
import java.rmi.Remote;
public interface Calculator extends Remote
{
public long add(long a, long b)
throws java.rmi.RemoteException;
public long sub(long a, long b)
throws java.rmi.RemoteException;
public long mul(long a, long b)
throws java.rmi.RemoteException;
public long div(long a, long b)
throws java.rmi.RemoteException;
}
服务器端实现类
import java.rmi.server.UnicastRemoteObject;
public class CalculatorImpl extends UnicastRemoteObject implements Calculator
{
// 这个实现必须有一个显式的构造函数,并且要抛出一个RemoteException异常
public CalculatorImpl()
throws java.rmi.RemoteException {
super();
}
public long add(long a, long b)
throws java.rmi.RemoteException {
return a + b;
}
public long sub(long a, long b)
throws java.rmi.RemoteException {
return a - b;
}
public long mul(long a, long b)
throws java.rmi.RemoteException {
return a * b;
}
public long div(long a, long b)
throws java.rmi.RemoteException {
return a / b;
}
}
程序入口,服务器启动类
import java.rmi.Naming;
public class CalculatorServer {
public CalculatorServer() {
try {
Calculator c = new CalculatorImpl();
Naming.rebind("rmi://localhost:1099/CalculatorService", c);
} catch (Exception e) {
System.out.println("Trouble: " + e);
}
}
public static void main(String args[]) {
new CalculatorServer();
}
}
客户端程序
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
public class CalculatorClient {
public static void main(String[] args) {
try {
Calculator c = (Calculator)
Naming.lookup(
"rmi://localhost
/CalculatorService");
System.out.println( c.sub(4, 3) );
System.out.println( c.add(4, 5) );
System.out.println( c.mul(3, 6) );
System.out.println( c.div(9, 3) );
}
catch (MalformedURLException murle) {
System.out.println();
System.out.println(
"MalformedURLException");
System.out.println(murle);
}
catch (RemoteException re) {
System.out.println();
System.out.println(
"RemoteException");
System.out.println(re);
}
catch (NotBoundException nbe) {
System.out.println();
System.out.println(
"NotBoundException");
System.out.println(nbe);
}
catch (
java.lang.ArithmeticException
ae) {
System.out.println();
System.out.println(
"java.lang.ArithmeticException");
System.out.println(ae);
}
}
}
OK,现在代码已经完整了。接下来看看具体启动。
1 在该服务器实现类的路径下执行以下命令
>rmic CalculatorImpl
rmic 程序可以将CalculatorImpl生成Calculator_stub.class
2 在程序的目录执行
>rmiregistry
3 新建一个策略文件policy.txt(文本)
grant {
permission java.security.AllPermission "", "";
};
这是最简单的授权策略,授权所有权限。若果在正式的生产环境,应该按照具体需求具体配置。
4 启动服务端
> java -Djava.security.policy=policy.txt CalculatorServer
5 启动客户端
> java -Djava.security.policy=policy.txt CalculatorClient
如果所有的这些都成功运行,你应该看到下面的输出:
1
9
18
3
如果在执行那两个可执行文件的时候发现找不到程序,请检查好path环境变量配置好没有。
另外
rmiregistry在执行后请勿关闭。
完
分享到:
相关推荐
rmi基础教程 系统运行机理
基础代码
rmi不可多得的学习材料!
没有使用过RMI的学者可以参考本资源的实例,比较适用于没有RMI基础的学者,使用分布式编程
rmi基础知识学习笔记,从最简单的例子讲述rmi的用途
RMI的基础规范,关于RMI方面的规范知识
RMI+EHCACHE可以做基础学习理解
精通RMI 这是RMI的入门基础 特别对刚开始学RMI的同胞们很有帮助
在基础知识基本搞定的基础上,我开始了配置环境,经过两天的奋斗,rmi环境配置终于以失败告终,然后一脸遗憾的去问同学,得到的回答是rmi要配置环境?我一脸懵逼,不要配置环境,jar又放不进去,eclipse又不是神仙,...
Java语言编写的简单的分布式Demo,使用RMI远程调用实现,RMI是JavaEE中EJB调用的基础,入门的需要先搞清楚
JavaBean保留了其他软件组件的技术精华,并增加了被其他软件组件技术忽略的技术特性,使得它成为完整的软件组件解决方案的基础,并在可移植的Java平台上方便地用于网络世界中 Java RMI(Remote Method Invocation)-...
基于spring rmi的一些小改造,在原基础上加入了线程池控制线程数。
用RMI实现的远程视频控制程序,建立在http协议的基础上
做为java分布式计算的基础框架的RMI体系,是javaEE结构的基础技术. 本课件全面讲解了RMI的一般实现,特殊问题解决及与sping的组合应用. 1.分布式计算的起因及基本原理 2.RMI体系结构 3.RMI服务器实现及编码 4.RMI...
第2章 Java语言基础······························ (11) 2.1 Java语言要素······························ (11) 2.1.1 标识符···········...
本文本的RMI分布式消息传送模型是以一个商业的消息传送平台为基础,将其分布组件结构、点对点和发布/订阅模型、消息队列的实现描绘出来。这个商业消息传送平台暂且称为RMI平台。 主要是一个RMI实现模型,对RMI技术...
本文本的RMI分布式消息传送模型是以一个商业的消息传送平台为基础,将其分布组件结构、点对点和发布/订阅模型、消息队列的实现描绘出来。这个商业消息传送平台暂且称为RMI平台。
java实现分布式管理的例子程序,从如何使用开始讲起,到最终运行,分布式管理程序的基础
WebGIS是当前GIS的技术热点,立足于WebGIS的分布式特性,在分析Java RMI特点以及优势的基础上,提出基于Java RMI的分布式WebGIS构造模型,并且详细介绍了空间数据模型、组件注册服务器等相关概念和主要实现技术。