zoukankan      html  css  js  c++  java
  • JAVA RMI 实例

    下面我将介绍一个完整的实例,让初学者能快速体验RMI的功用。

    分为以下四个步骤

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

    具体代码及对应步骤如下:

    1. 创建远程接口及声明远程方法(HelloInterface.java)

    java 代码
    package cn.telling.rmi;
    
    import java.rmi.Remote;
    import java.rmi.RemoteException;
    
    /**
     * 远程接口必须扩展接口java.rmi.Remote
     * 
     * @ClassName: HelloInterface TODO
     * @author xingle
     * @date 2015-9-28 下午4:37:12
     */
    public interface HelloInterface extends Remote ,Serializable{
        /**
         * 远程接口方法必须抛出 java.rmi.RemoteException
         */
        public String sayHello() throws RemoteException;;
    
    }

    2. 实现远程接口及远程方法(继承UnicastRemoteObject)HelloImpl.java

    java 代码
    package cn.telling.rmi;
    
    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;
    
    /**
     * 扩展了UnicastRemoteObject类,并实现远程接口 HelloInterface
     * 
     * @ClassName: HelloImpl TODO
     * @author xingle
     * @date 2015-9-28 下午4:38:47
     */
    public class HelloImpl extends UnicastRemoteObject implements HelloInterface {
        private String message;
    
        /**
         * 必须定义构造方法,即使是默认构造方法,也必须把它明确地写出来,因为它必须抛出出RemoteException异常
         * 
         * @param msg
         * @throws RemoteException
         */
        public HelloImpl(String msg) throws RemoteException {
            this.message = msg;
        }
    
        /**
         * 
         * @Description: TODO
         * @return
         * @throws RemoteException
         * @author xingle
         * @data 2015-9-28 下午4:39:41
         */
        @Override
        public String sayHello() throws RemoteException {
            System.out.println("Called by HelloClient");
            return message;
        }
    
    }

    3. 启动RMI注册服务,并注册远程对象(HelloServer.java)

    java 代码
    package cn.telling.rmi;
    
    import java.net.MalformedURLException;
    import java.rmi.Naming;
    import java.rmi.RemoteException;
    import java.rmi.registry.LocateRegistry;
    
    /**
     * 
     * @ClassName: HelloServer TODO
     * @author xingle
     * @date 2015-9-28 下午4:41:47
     */
    public class HelloServer {
    
        public static void main(String[] args) {
            try {
                // 启动RMI注册服务,指定端口为1099 (1099为默认端口)
                // 也可以通过命令 $java_home/bin/rmiregistry 1099启动
                // 这里用这种方式避免了再打开一个DOS窗口
                // 而且用命令rmiregistry启动注册服务还必须事先用RMIC生成一个stub类为它所用
                LocateRegistry.createRegistry(1099);
                // 创建远程对象的一个或多个实例
                // 可以用不同名字注册不同的实例
                HelloImpl service = new HelloImpl("hello,world!");
                // 如果要把hello实例注册到另一台启动了RMI注册服务的机器上
                // Naming.rebind("//192.168.1.105:1099/Hello",hello);
                Naming.rebind("Hello", service);
                System.out.println("Hello Server is ready.");
            } catch (RemoteException e) {
                System.out.println("Hello Server failed: " + e);
                e.printStackTrace();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
    
        }
    
    }

    4. 客户端查找远程对象,并调用远程方法(HelloClient)

    java 代码
    package cn.telling.rmi;
    
    import java.rmi.Naming;
    
    /**
     * 
     * @ClassName: HelloClient TODO
     * @author xingle
     * @date 2015-9-28 下午4:54:51
     */
    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.sayHello());
            } catch (Exception e) {
                System.out.println("HelloClient exception: " + e);
            }
        }
    
    }

    5. 执行程序:启动服务HelloServer;运行客户端HelloClient进行调用

    执行结果:

    服务端:

    客户端:


    参考:
    1. JAVA RMI 实例

    2. 《Head First 设计模式》
  • 相关阅读:
    request
    href="#"
    可展开收起的客服导航。
    JS添加父节点的方法。
    精简漂亮的导航浮动菜单显示特效演示
    竖排导航
    仿新浪微博
    鼠标滑过改变文字
    滚动函数
    一些常用的兼容函数。
  • 原文地址:https://www.cnblogs.com/xingele0917/p/4844463.html
Copyright © 2011-2022 走看看