龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

基于Java的企业分布式应用(3)

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
1、定义远程接口 Java RMI运行环境要求任何可以远程调用的方法必须放在远程接口中。 该远程接口用来扩展java.rmi.Remote接口,在Java API中,可以发现它没有

  1、定义远程接口

  Java RMI运行环境要求任何可以远程调用的方法必须放在远程接口中。

  该远程接口用来扩展java.rmi.Remote接口,在Java API中,可以发现它没有任何方法,只是个标志性接口,这样,可以让Java运行环境(JRE)认识每个接口的特殊属性,以便能够远程访问。

  因此,按照信息发布服务的命名(InfoDistributeService),首先须将InfoDistributeRemote定义为远程接口,同时仅放入一个供测试的方法 getRemoteInfo()来实现编码,将所有模块至于新建的enterprise.distribute包中,代码如下:


  // -----------InfoDistributeRemote.java-------------------
  package enterprise. distribute;
  import java.rmi.Remote;
  import java.rmi.RemoteException;
  public interface InfoDistributeRemote extends Remote{
  public String getRemoteInfo() throws RemoteException;
  }


  2、实现远程接口

  这是一个实现远程对象的类。如果实现了远程接口,就能够覆盖(override)该对象中的所有方法,因此,远程对象的实现类将真正包含我们希望导出的方法的代码。

  在远程信息发布系统中,我们至少实现一个远程接口的对象,它就是远程可访问的对象。这里,InfoDistributeService类可以为我们生成远程可访问对象的实例:


  // -----------InfoDistributeService.java------------------
  package enterprise. distribute;
  import java.rmi.RemoteException;
  import java.rmi.server.UnicastRemoteObject;
  public class InfoDistributeService
  extends UnicastRemoteObject implements InfoDistributeRemote{
  public InfoDistributeService() throws RemoteException{
  super();
  }
  // The return value of the method only for testing...
  public String getRemoteInfo(){
  return "Hello! I am a remote object.";
  }
  }


  InfoDistributeService类实现远程接口InfoDistributeRemote,并继承java.rmi.server.UnicastRemoteObject。由于符合InfoDistributeRemote接口,因此该类除构造方法之外,还应有getRemoteInfo()方法,而且必须将该方法实现。

  同时我们注意到,getRemoteInfo()方法抛出了java.rmi.RemoteException异常。由于远程方法调用过程中,要进行很多的低级网络操作,因此网络错误可能在调用过程中随时发生,这样,远程接口中的每个方法(尽管这里只有一个getRemoteInfo()方法)都必须抛出RemoteException异常,而且,java.rmi.RemoteException都要在代码中显式处理,即将所有RMI活动涉及的代码都要放在try-catch块中。

  3、准备供远程调用的服务器对象

  这是一个作为服务器使用的类,它是相对于要访问远程方法的客户端而言的。它存储着绑定的字符串和对象。

  将远程对象设置成接受远程调用就像启动了侦听ServerSocket对象的socket服务器。事实上在使用RMI时,TCP/IP协议的传输方式,在幕后发生了很多底层网络操作,但是此刻,用户不需要知道这些细节,只需要逐步导出远程对象:

  在Java开发工具的较新版本JDK 1.4中,可以选择java.rmi.UnicastRemoteObject或者java.rmi.Activation.Activatable。其中,更多用到的是UnicastRemoteObject,因为它顾名思义,就是在客户机与服务器对象实例之间建立一对一连接。

精彩图集

赞助商链接