`
Free-man
  • 浏览: 10317 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java EE 核心技术之RMI

阅读更多
RMI(Remote Method Invocation):远程方法调用

RMI是Enterprise JavaBean的支柱;其设计基础是接口,它的架构基于一个重要的原理:定义接口和定义接口的实现是分开的

一个正常的RMI系统组成部分,如下:
1、远程服务的接口定义
2、远程服务接口的具体实现
3、桩(stub)和框架(skeleton)文件的生成--->rmic命令的使用
4、一个RMI的命名服务,它允许远程调用的客户端去发现该服务
5、类文件的提供者(HTTP或FTP服务)
6、远程调用该服务的客户端

根据上述的简要说明,编写一个简单的RMI形式的calculator系统,实现远程调用加减乘除四种基本运算,let's go

1、定义远程服务的接口(Calculator)
|-该接口声明四个方法,分别是:add()、sub()、mul()、div()
|-该接口需要继承Remote,而且每个方法都必须抛出一个RemoteException的异常

具体代码如下:
pubilc interface Calculator extends Remote
{
    public long add(long a,long b) throws RemoteException;
    public long sub(long a,long b) throws RemoteException;
    public long mul(long a,long b) throws RemoteException;
    public long div(long a,long b) throws RemoteException;
}


2、远程服务接口的具体实现
|-继承UnicastRemoteObject,必须提供一个构造函数而且抛出一个RemoteException对象,当这个构造函数调用super()时,它就会激活UnicastRemoteObject中的代码完成RMI的连接和远程对象的初始化
|-如果一个类不是从UnicastRemoteObject上继承,则必须使用它的exportObject()方法去联接到RMI
使用继承UncastRemoteObject类来实现该服务接口,具体代码如下
public CalculatorImpl implements Calculator extends UnicastRemoteObject 
{
    public Calculator() throws RemoteException
    {
        super();
    }
    public long add(long a,long b) throws RemoteException
    {
        return a+b;
    }
    public long sub(long a,long b) throws RemoteException 
    {
        return a-b;
    }
    public long mul(long a,long b) throws RemoteException
    {
        return a*b;
    }
    public long div(long a,long b) throws RemoteException
    {
        return a/b;
    }
}


3、使用javac命令编译远程服务接口类和远程服务接口具体实现类
4、生成桩(stub)和框架(skeleton)文件
   |-使用rmic编译刚刚编译了的远程服务接口具体的实现类
   |-编译完在classes下会生成了一个CalculatorImpl_Stub.class文件
5、编写远程主机服务器
   |-远程RMI服务必须在一个服务器中运行
具体代码如下
public class Server 
{
  public Server()
  {
      try 
      {
        Calculator cal = new CalculatorImpl();
        Naming.rebind("rmi://localhost:1099/Service",cal);
      }
      catch (Exception e)
      {
        System.out.println("访问时出现以下的错误:"+e);
      }
   }
	
  public static void main(String[] args)
   {
       new Server();
   }
}

6、编写远程调用的客户端
具体代码如下
public class Client 
{

   public static void main(String[] args)
   {
       try 
       {
	 CalculatorInterface cal = (CalculatorInterface)Naming.lookup("rmi://localhost/Service");
			
	 System.out.println(cal.add(3,4));
	 System.out.println(cal.sub(3,4));
	 System.out.println(cal.mul(3,4));
	 System.out.println(cal.div(12,4));
	} 
	catch (Exception e) 
	{
	  e.printStackTrace();
	}
  }
}

7、运行测试,具体步骤
|-启动RMI注册(Registry)程序,使用start rmiregistry启动注册表服务器
|-启动远程服务器java Server
|-启动远程调用客户端java Client

RMI通过上面的7个步骤基本上可以实现,希望通过代码的具体演示可以为更多人对RMI有初步的了解,写得不足之处望多多指导,同时也要多多支持与交流
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics