zoukankan      html  css  js  c++  java
  • RMI代码示例

    看到RMI,首先想到了这个问题,什么是RMI

    Java RMI (Remote Method Invocation 远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。(从网上copy的,呵呵)

    它与WEBSERVICE有什么区别。

    rmi的客户端和服务端都必须是java,webservice没有这个限制

    webservice是在http协议上传递xml文本文件,与语言和平台无关

    rmi是在tcp协议上传递可序列化的java对象,只能用在java虚拟机上,绑定语言

    RMI是EJB远程调用的基础,仅用RMI技术就可以实现远程调用,使用EJB是为了实现组件,事物,资源池,集群等功能。

    WebService是通过XML来传输数据,可用http等协议因此可在异构系统间传递,并且可以穿过防火墙,可在公网上远程调用

    不说了,提供小示例:

    本文出自 “兄弟无间” 博客,请务必保留此出处http://llwbrothers.blog.51cto.com/2360705/537086

     

    分为以下几个步骤:

    1. 创建远程接口及声明远程方法(HelloInterface.java)
    2. 实现远程接口及远程方法(继承UnicastRemoteObject)(Hello.java)
    3. 启动RMI注册服务,并注册远程对象(HelloServer.java)
    4. 客户端查找远程对象,并调用远程方法(HelloClient)
    5. 执行程序:启动服务HelloServer;运行客户端HelloClient进行调用


    package com.unmi;
    import java.rmi.*;    
       
    /**   
     * 远程接口必须扩展接口java.rmi.Remote   
     
    */   
    public interface HelloInterface extends Remote    
    {    
       /**   
        * 远程接口方法必须抛出 java.rmi.RemoteException   
        
    */   
       public String say() throws RemoteException;    
    }
    package com.unmi;
    import java.rmi.*;    
    import java.rmi.server.*;    
       
    /**   
     * 扩展了UnicastRemoteObject类,并实现远程接口 HelloInterface   
     
    */   
    public class Hello extends UnicastRemoteObject implements HelloInterface    
    {    
       private String message;    
       
       /**   
        * 必须定义构造方法,即使是默认构造方法,也必须把它明确地写出来,因为它必须抛出出RemoteException异常   
        
    */   
       public Hello(String msg) throws RemoteException    
       {    
          message = msg;    
       }    
       
       /**   
        * 远程接口方法的实现   
        
    */   
       public String say() throws RemoteException    
       {    
          System.out.println("Called by HelloClient");    
          return message;    
       }    
    package com.unmi;
    import java.rmi.Naming;    
       
    public class HelloClient    
    {    
       /**   
        * 查找远程对象并调用远程方法   
        
    */   
       public static void main(String[] argv)    
       {    
          try   
          {    
             HelloInterface hello = (HelloInterface) Naming.lookup("Hello");    
                 
             //如果要从另一台启动了RMI注册服务的机器上查找hello实例    
             
    //HelloInterface hello = (HelloInterface)Naming.lookup("//192.168.1.105:1099/Hello");    
                 
             
    //调用远程方法    
             System.out.println(hello.say());    
          }    
          catch (Exception e)    
          {    
             System.out.println("HelloClient exception: " + e);    
          }    
       }    
    }  
    package com.unmi;
    import java.rmi.Naming;    
    import java.rmi.registry.LocateRegistry;    
       
    public class HelloServer    
    {    
       /**   
        * 启动 RMI 注册服务并进行对象注册   
        
    */   
       public static void main(String[] argv)    
       {    
          try   
          {    
             //启动RMI注册服务,指定端口为1099 (1099为默认端口)    
             
    //也可以通过命令 $java_home/bin/rmiregistry 1099启动    
             
    //这里用这种方式避免了再打开一个DOS窗口    
             
    //而且用命令rmiregistry启动注册服务还必须事先用RMIC生成一个stub类为它所用    
             LocateRegistry.createRegistry(1099);    
                
            //创建远程对象的一个或多个实例,下面是hello对象    
             
    //可以用不同名字注册不同的实例    
             HelloInterface hello = new Hello("Hello, world!");    
                
             //把hello注册到RMI注册服务器上,命名为Hello    
             Naming.rebind("Hello", hello);    
                 
             //如果要把hello实例注册到另一台启动了RMI注册服务的机器上    
             
    //Naming.rebind("//192.168.1.105:1099/Hello",hello);    
                
             System.out.println("Hello Server is ready.");    
          }    
          catch (Exception e)    
          {    
             System.out.println("Hello Server failed: " + e);    
          }    
       }    
    }  
  • 相关阅读:
    CSS3 背景
    CSS3 边框
    CSS3中的transform变形
    兼容IE与firefox火狐的回车事件(js与jquery)
    JS相关链接
    JS操作DOM元素属性和方法
    用js给html设置style
    JavaScript数学函数(一)
    [JS] 如何清空file input框 [整理]
    未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序(Oledb)
  • 原文地址:https://www.cnblogs.com/end/p/2772903.html
Copyright © 2011-2022 走看看