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

通過Aspire和Tomcat使用層次數據集

2013-11-23 20:17:18  來源: Java開源技術 

  Aspire是一個RAD工具提供使用者以標准的XML/XSLJEE及關聯式資料庫技術快速地創建網站Aspire可接受的資料來源包含存儲程序SQL語句EJBs及Java控件並使用Apache 的xerces/xalan作為轉換的處理器
  
  Aspire可使用於多種servlet引擎例如Apache/JServApache/Tomcat及WebSphere等
  
  目前發展中的功能包含Crystal reports及Oracle reports等報表工具的整合界面 Aspire優點如下
  
  何為層次數據集?為什麼要用層次數據集?
  層次數據集並不是一個新的名詞他們已經以客戶信息控制系統的事務數據目錄文件Java對象更接近於XML文件的格式存在了早在年的XML雜志上我就認為程序員可以從層次數據集的提取上得到好處盡管他們的數據源具有很強的數據相關性(像MySQL Oracle SQL Server DB等等之類的數據庫)NET思想和數據集概念也很相似盡管我所認為的層次數據集和傳統的微軟的數據集有很大的不同層次數據集具有的豐富的細節描述極大增強了關系型數據的提取
  
  本篇重在講述層次數據集的結構和與其相關的Java API並不像XML雜志兩年前所說的你現在就可以用一系列的可執行代碼來獲取層次數據集的優勢當然我們可以在Java裡編寫一定代碼來實現對各種各樣的數據源的訪問以及創建一個完整的層次數據集本篇中我們就將給出一可執行的代碼你可以利用這些代碼並結合一個簡單的預定義的關系型適配器就可以創建一些層次數據集啦這裡的關系型適配器包括文本閱讀器SQL 腳本 存儲過程等等
  
  現在你可能會問了這個層次數據集究竟有什麼好啊?當然層次數據集是不能和你的那些受到獎賞的同事得到的昂貴的Carbon帶來的實惠相抗衡在編程中層次數據集是非常有用的對一個啟動來說一個層次數據集就可以滿足整個HTML頁面上的所有的有價值的數據的需要在MVC(ModelViewControler)模型裡控制器的servlet可以提交一個層次數據集給JSP頁面後JSP頁面就可以顯示它而不需要任何的幫助也可以說通過控制器的servlet可直接將其轉換為XML格式返回給請求者從實用的角度來說數據集可以轉換成Excel格式的文件從新潮的角度來說層次數據集可以轉換為支持XML數據的報表或者圖表
  
  本篇主要焦點是服務於Java程序員的Java編程的API怎麼運用層次數據集實際上非Java程序員也可以通過有效地結合層次數據集和一個JEE的服務(比如Tomcat)從關系型數據庫或者別的數據庫中得到XMLHTML或者Excel格式文檔不要過於急躁我們先來研究研究層次數據集的結構和這些數據集是如何被提取的(現在可以稍微放松一下啦^_^)
  
   層次數據集的結構
  層次數據集可以表示為一個JavaAPI XML或者別的格式而用XML來表示將會更加形象:
  <AspireDataSet>
    <! A set of key value pairs at the root level >
    <key>val</key>
    <key>val</key>
    <! A set of named loops >
    <loop name=loop>
    </loop>
    <loop name=loop>
    </loop>
  </AspireDataSet>
  
  這是一系列的key/value對一個給定的key/value可以用在N個獨立的loops當中其實每一個loop 就是一個數據表loop可以說是table的同義詞了我沒有用table這個術語是為了防止人們會不由自主的聯想到關系型數據表已經說過了loop其實上是很多行記錄的集合現在讓我們在認真的看loop的結構:
  <loop name=loopname>
    <row>
      <! a set of key value pairs >
      <key>val</key>
      <key>val</key>
      <! a set of named loops >
      <loop name=loopname>
      </loop>
      <! a set of named loops >
      <loop name=loopname>
      </loop>
    </row>
    <row>
    </row>
  </loop>
  
  這裡唯一一個不成對的結構就是row結構了一個row結構可以是一些key/value對的集合這裡的row不僅包含了一些key/value對並且還包括了多個獨立的loop結構的遞歸集這種擴展可以生成一定深度的樹結構
  
  Java當中的層次數據的結構
  當我把層次數據集以XML的形式展示的時候你可能會把層次數據集理解為字面上的XML因此你會先到DOM接著你甚至會想這樣豈不是會占用很大的JVM內存不必慌張層次數據集有自己的的Java API二不需要DOM來描述下面就是一個層次數據集的Java API代碼:
  package lgen;
  import comaidata*;
  /**
   * Represents a Hierarchical Data Set
   * An hds is a collection of rows
   * You can step through the rows using ILoopForwardIterator
   * You can find out about the columns via IMetaData
   * An hds is also a collection loops originated using the current row
   */
  public interface ihds extends ILoopForwardIterator
  {
    /**
     * Returns the parent if available
     * Returns null if there is no parent
     */
    public ihds getParent() throws DataException;
    /**
     * For the current row return a set of
     * child loop names ILoopForwardIteraor determines
     * what the current row is   *
     * @see ILoopForwardIterator
     */
    public IIterator getChildNames() throws DataException;
    /**
     * Given a child name return the child Java object
     * represented by ihds again
     */
    public ihds getChild(String childName) throws DataException;
    /**
     * returns a column that is similar to SUM AVG etc of a
     * set of rows that are children to this row
     */
    public String getAggregatevalue(String keyname) throws DataException;
    /**
     * Returns the column names of this loop or table
     * @see IMetaData
     */
    public IMetaData getMetaData() throws DataException;
    /**
     * Releases any resources that may be held by this loop of data
     * or table
     */
    public void close() throws DataException;
  }
  
  簡單的說來上面的ihds接口就是一個層次數據集的接口這個API使你可以遞歸的訪問你的loop結構這個接口裡有一些遍歷loop結構是需要的一些選項它也能假定是前序遍歷或者隨機遍歷現在我來介紹的是這個API用到的兩個附加的接口: ILoopForwardIterator和IMetaData:
  如何在IHDS裡遍歷行記錄的接口: ILoopForwardIterator
  package lgen;
  import comaidata*;
  public interface ILoopForwardIterator
  {
    /**
    * getvalue from the current row matching the key
    */
    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文件當你用像Tomcat這樣的app服務器的時候它是你的Java程序的一個補充再Aspire的核心是一系列的配置文件在這些文件裡你可以聲明你的根據Java類的數據訪問機制和這些Java類的評論Aspire將執行這些Java類並返回期待的結果對象層次數據集是沒有異常的
  
  一個早期的標志性的對Aspire的評論參見: For Tomcat Developers Aspire Comes in a JAR配置了初始化一個Aspire就像你定義數據庫調用SQL語句或者存儲過程一樣
  為你的層次數據集創建定義文件:
  一個層次數據集的定義實例:
  ###################################
  # ihdsTest data definition: section
  ###################################
  requestihdsTestclassName=lgenDBHashTableFormHandler
  requestihdsTestloopNames=works
  #section
  requestihdsTestworksclass_requestclassName=lgenGenericTableHandler
  r
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28233.html
  • 上一篇文章:

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