熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

等級結構數據集在Aspire和Tomcat中的使用

2013-11-23 20:29:37  來源: Java開源技術 

  什末是等級化數據集?我們為什末要關注它?
  等級化數據集並不是一個新的概念 在客戶控制信息系統的事務化數據表單中目錄的文件中 以及常用的JAVA對象中都存在著等級化數據集 同樣的它也很明顯的存在於XML中早期的XML 雜志中 我發表了一個觀點程序員會受益於等級化數據抽即使他們的很多數據源是顯著相關的(比如數據庫包括MySQL Oracle SQL Server DB 等等)
  在NET世界中有一個相似的觀點來自於數據集概念雖然在我提議的等級化數據集和微軟的數據集有很重要的不同但是很顯然等級化數據集通過豐富的細節化處理增強了相關的抽象提取
  
  這篇文章描述了Java API使用的分等級的數據集結構不同於二年前XML 學報參考您現在將會有可執行的代碼片斷通過運行它可以體驗開始利用分等級的數據集雖然程序員能使用Java編碼來訪問各種各樣的數據源以及構建最後的分等級的數據集這篇文章可以通過簡單地組成預構造的關系適配器讓您很容易的構建這些分等級的數據集關系適配器包括文件閱讀器SQL閱讀器存儲過程的閱讀器等等
  
  您大概會問這些分等級的數據集的好處在哪裡?雖然他們目前的作用還不是主導地位的但是在編程界等級結構數據集是相當有用的對於初學者一個完整的HTML頁面所應具有的數據價值可以由一個等級結構數據集來滿足在一個MVC 模型中一個servlet 控制器 能提供一個等級制度的數據集給JSP 頁面這個頁面可以輕松的作它需要做的 在數據准備方面它能被轉換成XML 並直接地通過servlet控制器返回到訪問者在應用方面等級結構數據集能被轉換成Excel 文檔在格式方面等級結構數據集能重定向為一個報告引擎或一個支持XML 數據的繪制圖表的引擎
  雖然文章的主要焦點是面向Java 程序員的Java 編程API等級結構數據集能被非NonJava 程序員相當有效地使用直接地從關系數據庫和其它數據源同過使用像Tomcat這樣的JEE 服務器獲得XML HTML 或Excel 格式閒言少講讓我們研究一下等級結構數據集的結構以及看看這些數據集是怎樣被獲得的(當放松一下您的編程肌肉)
  
  等級化數據結構
  一種等級化數據結構能概念性地描述為如同Java API 或XML 或某一其它格式它最容易形象化地作為XML
  <AspireDataSet>
    <!—一組在根級別的key value 對>
    <key>val</key> 
    <key>val</key>
  
    <!—一組指定的循環 >
    <loop name=loop>
    </loop>
    <loop name=loop>
    </loop>
  </AspireDataSet>
  
  這是一套key/value 對給出的這套key/value 對能產生n 個獨立的循環各個循環本質上來說是一個數據表這裡術語循環表?±是同義的 我沒有使用 是因為人們可能會根據字面意思來只采用表作為從關系表中取出的的唯一數據被提及是行的集合(RowSet) 讓我們更加接近地看一下循環的結構:
  
  <loop name=loopname>
    <row>
      <!一組key value 對>
      <key>val</key>
      <key>val</key>
  
      <!一組指定的循環>
      <loop name=loopname>
      </loop>
  
      <!一組指定的循環>
      <loop name=loopname>
      </loop>
    </row>
    <row>
    </row>
  </loop>
  
  這裡唯一的沒有配對的是列的結構列是期望的key/value對的集合這裡列不僅包括key/value 對而且包括另外的一個n個獨立循環的遞歸集引伸一下可以生成任意數量深度的樹(或者我應該說任意的高度!)
  
  Java中的等級化數據結構
  在我用XML顯示等級化數據的時候有一種可能性就是人們也許采取一個等級化數據集逐字的訪問XML數據繼而逐字地使用DOM繼而在JVM 裡面消耗很多的內存不過不必驚慌等級化數據集有它自己的Java API從而可以不使用DOM多數的時候只是向前遍歷加載數據樹下面是一個使用Java API 處理一個等級化數據集的例子:
  
  package lgen;
  import comaidata*;
  
  /**
   * 代表了一個等級化數據集
   * 一個hds 是一個行的集合
   * 你可以通過ILoopForwardIterator枚舉這些行
   * 你可以通過IMetaData 枚舉各個列
   * 一個hds 也是一個基於當前行得循環集
  
   */
  public interface ihds extends ILoopForwardIterator
  {
    /**
     *返回父級接口
     * 如果沒有父級接口則返回NULL
     */
    public ihds getParent() throws DataException;
  
    /**
   * 基於當前行返回一系列的子循環名字ILoopForwardIteraor 確當前行是什末
     *
     *
     * @see ILoopForwardIterator
     */
    public IIterator getChildNames() throws DataException;
  
    /**
     * 通過給定的名字返回一個ihds 類型的Java子對象
     */
    public ihds getChild(String childName) throws DataException;
  
    /**
  返回一個列這跟對一個行集合進行求和求平均很類似
       */
    public String getAggregatevalue(String keyname) throws DataException;
  
    /**
  返回這個循環或者表的列名字
     * @see IMetaData
     */
    public IMetaData getMetaData() throws DataException;
  
    /**
  釋放所有數據或表格循環使用的資源
     */
    public void close() throws DataException;
  }
  簡而言之Javaihds 接口描述了面向等級數據集的接口這個API允許你使用循環遞歸調用在運行時有個選項指定只有當他們被要求的時候才加載這些循環它也能夠假定是僅僅向前還是隨機遍歷在往下繼續以前 讓我來介紹兩個另外該API使用的接口ILoopForwardIterator 和ImetaData
  如何在HDS中移動遍歷一系列的行ILoopForwardIterator
  package lgen;
  import comaidata*;
  
  public interface ILoopForwardIterator
  {
    /**
  * 根據匹配的鑰匙從當前的行中獲取相應的值
    */
    public String getvalue(final String key);
  
    public void moveToFirst() throws DataException;
  
    public void moveToNext() throws DataException;
  
    public boolean isAtTheEnd() throws DataException;
  }
  
  
  IMetaData: 用來讀取列名
  package comaidata;
  public interface IMetaData
  {
   public IIterator getIterator();
  
   public int    getColumnCount();
  
   public int    getIndex(final String attributeName)
   throws FieldNameNotFoundException;
  }
  你如何獲取一個等級數據集 從而你可以使用它?
  現在我們知道了等級化數據集的結構 你如何來控制它呢?根據我的經驗 這個在Aspire下會很容易下面是所列的步驟:
   學習Aspire的基礎
   為你的等級化數據集創建一個定義文件
   在Java代碼中調用你得定義文件從而獲取ihds
  下面對每一步進行詳細的介紹
  
  閱讀Aspire JAR的用法基礎
  Aspire 是一個小的JAR 文件它可以直接運行 特別的它可以被一個應用程序服務器調用例如TomcatAspire的核心是一套配置文件 在這些文件中你可以通過Java類術語和這些類的參數聲明數據訪問機制Aspire 將運行那些Java類並且返回結果對象等級化數據集並非例外
  OReilly的一篇早期文章介紹了Aspire:對於Tomcat的開發者來說 Aspire可以作為JAR它會通過定義數據庫和調用SQL以及存儲過程來讓你熟悉這些運作就像配置和初始化Aspire一樣
  為你的等級化數據集創建一個定義文件
  下面是一個等級化數據集的簡單定義
  ###################################
  # ihdsTest 數據定義:
  ###################################
  requestihdsTestclassName=lgenDBHashTableFormHandler
  requestihdsTestloopNames=works
  
  #
  requestihdsTestworksclass_requestclassName=lgenGenericTableHandler
  requestihdsTestworksloopNames=childloop
  requestihdsTestworksquery_requestclassName=comaidataRowFileReader
  requestihdsTestworksquery_requestfilename=aspire:\\samples
        \\poptabletags\\properties\\poptabledata
  
  #
  requestchildloopclass_requestclassname=lgenGenericTableHandler
  requestchildloopquery_requestclassname=comaidataRowFileReader
  requestchildloopquery_requestfilename=aspire:\\samples\\poptabletags
        \\properties\\poptableda
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28566.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.