`
terrycong
  • 浏览: 22260 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

RMI基础

阅读更多
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学习笔记(1)

    rmi基础知识学习笔记,从最简单的例子讲述rmi的用途

    关于RMI方面的规范知识

    RMI的基础规范,关于RMI方面的规范知识

    RMI+EHCACHE Demo

    RMI+EHCACHE可以做基础学习理解

    java_in_rmi.rar_Java RMI_RMI java_rmi _精通rmi

    精通RMI 这是RMI的入门基础 特别对刚开始学RMI的同胞们很有帮助

    rmi技术客户端调用服务器的函数解决问题

    在基础知识基本搞定的基础上,我开始了配置环境,经过两天的奋斗,rmi环境配置终于以失败告终,然后一脸遗憾的去问同学,得到的回答是rmi要配置环境?我一脸懵逼,不要配置环境,jar又放不进去,eclipse又不是神仙,...

    Java分布式RMI获取服务器时间

    Java语言编写的简单的分布式Demo,使用RMI远程调用实现,RMI是JavaEE中EJB调用的基础,入门的需要先搞清楚

    JavaBean和RMI 学习

    JavaBean保留了其他软件组件的技术精华,并增加了被其他软件组件技术忽略的技术特性,使得它成为完整的软件组件解决方案的基础,并在可移植的Java平台上方便地用于网络世界中 Java RMI(Remote Method Invocation)-...

    spring rmi 改造

    基于spring rmi的一些小改造,在原基础上加入了线程池控制线程数。

    RMI.zip_HTTP RMI_http视频_rmi视频教程

    用RMI实现的远程视频控制程序,建立在http协议的基础上

    长沙蓝杰实训java课件之 RMI技术解析(www.NetJava.cn)

    做为java分布式计算的基础框架的RMI体系,是javaEE结构的基础技术. 本课件全面讲解了RMI的一般实现,特殊问题解决及与sping的组合应用. 1.分布式计算的起因及基本原理 2.RMI体系结构 3.RMI服务器实现及编码 4.RMI...

    java程序设计与开发课件

    第2章 Java语言基础······························ (11) 2.1 Java语言要素······························ (11) 2.1.1 标识符···········...

    基于RMI的分布式消息传送模型

    本文本的RMI分布式消息传送模型是以一个商业的消息传送平台为基础,将其分布组件结构、点对点和发布/订阅模型、消息队列的实现描绘出来。这个商业消息传送平台暂且称为RMI平台。 主要是一个RMI实现模型,对RMI技术...

    RMI分布式消息传送模型.doc

    本文本的RMI分布式消息传送模型是以一个商业的消息传送平台为基础,将其分布组件结构、点对点和发布/订阅模型、消息队列的实现描绘出来。这个商业消息传送平台暂且称为RMI平台。

    rmi分布式管理初步

    java实现分布式管理的例子程序,从如何使用开始讲起,到最终运行,分布式管理程序的基础

    论文研究-基于JavaRMI的分布式WebGIS模型研究.pdf

    WebGIS是当前GIS的技术热点,立足于WebGIS的分布式特性,在分析Java RMI特点以及优势的基础上,提出基于Java RMI的分布式WebGIS构造模型,并且详细介绍了空间数据模型、组件注册服务器等相关概念和主要实现技术。

Global site tag (gtag.js) - Google Analytics