java RMI技术

1、简介

      使用RMI可以实现远程方法的调用,是实现分布式技术的一种方法。RMI的具体应用主要来所可以归纳为三个角色:

  •  服务提供者:实现了服务接口,为其他客户端提供服务;
  •  注册服务器:是一个提供服务注册的实体,服务器提供者需要把他的服务注册到这个才可以被其他客户查找使用;
  •  客户端      :服务的使用者,从注册服务器查找到服务,再使用服务。

        关系如下图所示

 

      其实感觉和web Service的SOAP,WSDL,UDDI差不多。

      2、构建RMI应用的步骤基本如下:

      服务器端:

  •  创建远程接口
  •  实现远程接口提供的服务(即方法)
  •  启动注册服务器
  •  创建和注册服务实例

      客户端:

  •  根据注册的服务名查找服务得到实例的引用
  •  调用实例方法

       下面具体看了个例子如何使用RMI构建简单应用吧。我们来做一个加法的服务:

       服务器端:

创建接口IAdd

package myrmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IAdd extends Remote {
    public int add(int a, int b) throws RemoteException;
}

实现接口AddImpl

package myrmi;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class AddImpl extends UnicastRemoteObject implements IAdd {
    /** 
     *  
     */
    private static final long serialVersionUID = -7993126226032252610L;

    /*
     * 必須有構造方法,拋出RemoteException异常
     */
    public AddImpl() throws RemoteException {
    }

    public int add(int a, int b) throws RemoteException {
        return a + b;
    }
}

启动注册服务,注册服务

package myrmi;

import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;

public class AddService {
    
    public static void main(String[] args) {
        try {
            // 在本地启动注册服务,或者也可以在其他机器启动作为注册服务器
            LocateRegistry.createRegistry(1099);
            // 在其他机器启动注册服务器可以用:rmiregistry port
            // 建立一个远程服务对象并注册到注册服务器
            IAdd addobj = new AddImpl();
            // 注册服务对象到注册服务器
            Naming.rebind("//192.168.1.100/AddService", addobj);
            System.out.println("Add Service is started!");
        } catch (Exception e) {
            System.out.println("Service Error!");
        }
    }
}
 客户端 :

package myrmi;
import java.rmi.Remote;
import java.rmi.RemoteException;


public interface IAdd extends Remote {
    public int add(int a, int b) throws RemoteException;
}


package myrmi;
import java.rmi.Naming;

public class AddClient {
    public static void main(String[] argv) {
        try {
            // 创建远程对象引用
            IAdd objref = (IAdd) Naming.lookup("//192.168.1.100/AddService");
            // 调用远程方法
            int sum = 0;
            sum = objref.add(1, 1);
            System.out.println("result is " + sum);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值