国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Candle點亮你的Web應用(CandleRMI)

2019-11-18 12:53:05
字體:
來源:轉載
供稿:網友

  IntrodUCtion
  CandleRMI是java遠程方法調用(Remote Method Invocation)的實現,與Sun RMI的實現方式不同,CandleRMI利用Java本身的特性并結合HTTP實現了簡單高效的RMI功能。CandleRMI Service 作為Candle Services的一部分,與Candle Server整合在一起。
  
  CandleRMI Facilities
  
  •  不需要生成Stub和Skel文件
  •  通過文本的方式注冊RMI,不需要單獨的注冊服務和在程序中實現綁定
  •  遠程接口和實現不需要繼續非凡的類或接口
  •  最小資源利用,開發和部署方便
  
  CandleRMI Architecture
  CandleRMI體系結構圖中最核心的是中間Remote與Service如何通訊。通訊內容通過HTTP協議以時間順序分別為:名字查詢(Lookup),返回遠程對象(Remote Object),方法調用(Method Invoke)和方法返回(Return)。上述四個通訊內容按照HTTP通訊協議的標準封裝在兩個客戶端請求中。
  
  RMI Remote
  遠程接口封裝和定義遠程方法。接口是公開的,隱藏了具體的實現部分。Client只能使用接口,接口的設計必須符合規范,并且需要封裝必須的遠程方法。對于實際的應用來說,遠程接口可能按照系統功能模塊來分有許多個。一個簡單的接口如下:
  
  package cn.candle.demo;
  
  import java.rmi.RemoteException;
  
  /**
   * @author zhouj
   *
   */
  interface Compute {
    public String calculate(Double d, String[] args) throws RemoteException;
  }
  
  遠程接口看上去和一般的接口定義沒有任何不同,但是遠程方法需要拋出一個遠程異常,并且方法參數和返回參數必須是可序列化的對象類。目前版本的CandleRMI并不能把PRototype映射為相應的對象類,比如例子中的參數"Double d",不能定義成"double d"。
  
  遠程接口實現在Server端利用Server VM的資源為Remote提供資源服務和運算。CandleRMI 體系結構圖中,遠程接口實現類對象需要傳遞,因此遠程接口實現必須是可序列化的對象類。這些規則約束與Sun RMI并沒有多大不同,只不過是一個更簡單的版本。理解規則以后,編碼和運行才能避免常見錯誤。遠程接口具體實現例子如下:
  
  package cn.candle.demo;
  
  import java.io.Serializable;
  
  /**
   * @author zhouj
   * 
   */
  public class ComputeImpl implements Compute, Serializable {
  
    /*
     *
     * @see cn.candle.demo.Compute#calculate
     */
    public String calculate(Double d, String[] args) {
      double _d = Math.sqrt(d.doubleValue());
      return "Square root of " + d.doubleValue() + " is " + _d + " at "
          + args[1];
    }
  }
  
  Invoke Remote Method
  遠程接口和實現是開發的重點和核心部分,接下來如何使用遠程接口并調用其中的遠程方法呢?在Sun RMI規范中有JNDI Naming來幫助查找遠程服務;CandleRMI使用類似的規則查詢遠程接口對應的名稱,不過遠程接口實現都是在固定的Server上,因此并不需要JNDI命名規則。使用CandleRMI部署你的遠程方法調用,開發包是candle0.76版本中的candle-rmi.jar。例子代碼如下:
  
  package cn.candle.demo;
  
  import java.rmi.NotBoundException;
  import java.rmi.RemoteException;
  
  import cn.candle.rmi.Naming;
  
  /**
   * @author zhouj
   * 
   */
  public class TestRMI {
  
    public static void main(String[] args) {
      Compute compute = null;
      try {
        compute = (Compute) Naming.lookup("Compute");
      } catch (RemoteException e) {
        // TODO 自動生成 catch 塊
        e.printStackTrace();
      } catch (NotBoundException e) {
        // TODO 自動生成 catch 塊
        e.printStackTrace();
      }
      try {
        System.out.println(compute.calculate(new Double(3), new String[] {
            "", "Test" }));
      } catch (RemoteException e1) {
        // TODO 自動生成 catch 塊
        e1.printStackTrace();
      }
    }
  }
  
  RMI Registry
  RMI注冊是把遠程接口和實現與自定義的名稱關聯起來。上述例子中遠程接口cn.candle.demo.Compute對應的名稱是"Compute",可以定義成任意不重復的名字。注重CandleRMI規則中遠程服務名稱是英文不區分大小寫。CandleRMI注冊是使用文本文件的方式,固定的文件名稱和相對路徑為WEB-APP/rmi.registry。文件為普通的Java 資源文本文件,格式如下:
  
  #CandleRMI Registry
  compute=cn.candle.demo.ComputeImpl
  
  Run CandleRMI Example

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台南市| 启东市| 崇左市| 始兴县| 弥渡县| 芒康县| 彩票| 同心县| 海安县| 崇左市| 安泽县| 湘潭县| 刚察县| 岗巴县| 绥芬河市| 日喀则市| 西宁市| 墨玉县| 大竹县| 庆城县| 共和县| 萨迦县| 齐河县| 斗六市| 阜阳市| 衡水市| 游戏| 石首市| 喜德县| 东港市| 青铜峡市| 溧阳市| 长岭县| 嵊泗县| 云和县| 合作市| 建湖县| 元江| 治县。| 凯里市| 微博|