• 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);    
          }    
       }    
    }  
  • 相关阅读:
    Android 中文 SDK (47) —— Filter
    Android 中文API (65) —— BluetoothClass[蓝牙]
    Android 中文 API——android.widget合集(中)(50篇)(chm格式)
    android 中文 api (72) —— BluetoothSocket[蓝牙]
    Android 中文API (61) —— ViewSwitcher
    Android API 中文 (51) —— ZoomButtonsController
    Android API 中文 (55) —— ListAdapter
    Android SDK 中文 (56) —— ViewFlipper
    什么是 COM编程技术?
    怎么打出全角的小写英文字母?
  • 原文地址:https://www.cnblogs.com/end/p/2772903.html
Copyright © 2020-2023  润新知