目前對於J
EE應用中的Persistence Layer的解決方案很多
其中
最近從Apache Turbine中剝離處理的Torque是一個優秀的ORM(Object Relational Mapping
對象角色建模) 解決方案
主流的Persistence Layer解決方案
隨著基於J
EE應用的日益增加
出現了很多Persistence Layer的解決方案
目前主要的解決方案有以下幾種
◆ 自己編寫基於JDBC API的解決方案
◆ 采用ObjectRational Mapping(ORM)工具或者是采用面向對象的數據庫(ODBMS)
◆ J
EE/Entity Bean CMP (container
managed persistence)
◆ JDO
JDBC
在很多情況下
尤其是沒有采用良好的Persistence Layer解決方案的項目中
開發人員需要自己手動編寫SQL語句
同時還要考慮事務處理等問題
從而使得SQL語句散落在代碼中
可維護性很差
同時
由於每個項目都要重新編寫Persistence 相關的代碼
所以代碼可重用性差
另外要求開發人員對於SQL語法必須非常熟悉
否則調試也比較困難
使用JDBC的解決方案
數據必須存儲在關系型數據庫中
ORM或者ODBMS
為了將開發人員從SQL語句中解脫出來
產生了很多ORM的工具
這些工具都比較簡單
並且提供了API支持
由於ORM工具比較多
它們采用的技術標准都不盡相同
而且沒有統一的接口
因此
它們在為開發人員提供方便的同時
也增加了一定的束縛
ORM技術是比較成熟的
而且已經有很多產品了
而ODBMS是近幾年發展起來的
並不十分成熟
而且也沒有得到廣泛的應用
目前
眾多ODBMS廠商正在關注JDO標准並加以實施
它可能在不久的將可以得到一定的推廣
使用ORM或者ODBMS的解決方案
數據也必須存儲在關系或者面向對象數據庫中
EJB CMP
在J
EE的規范中
為EJB定義了兩種Persistence的解決方案
一種是BMP
另一種是CMP
其中CMP不需要將SQL語句加入到代碼中
目前
在采用J
EE的應用中
EJB CMP方式得到了廣泛應用
更加引人注意的是
隨著EJB規范的發展
CMP也包含了一些高級關系的內容
但是
CMP的使用比較復雜
對很多開發人員來說比較難以掌握
而且
不是在所有的情況下都適合在系統中采用EJB
EJB提供了除了關系型數據庫以外
更多的存儲支持
JDO
目前
有兩種類型的JDO實現
一種是Sun的JDO
另一種是Castor JDO
這兩者並不兼容
Sun JDO是Sun Java Community Process給出的規范和參照實現
盡管JDO還有些不成熟
但它很有發展前景
而且填補了數據庫編程領域的一大空白
對Java開發人員而言
JDO為對象持久性提供了第一個標准化的
完全面向對象的方法
與此領域中的其它技術相比
JDO的優點是使用起來十分簡單
而且對原始的Java源代碼打亂程度最小
同時
Sun JDO對數據存儲類型是透明的
而Castor JDO是一個開源項目
從
年開始開發
在開源的JDO項目中
它提供的功能是最強大的
盡管Castor JDO開發的比較早
但是
隨著Sun JDO的日益成熟
它的優勢越來越小
同時
Castor JDO只提供對RDMS的支持
從上面的分析我們可以看到
由於目前絕大多數應用系統的數據都是存儲在RDMS中
而且JDO目前還不十分完善
因此
在項目中還是應該采用成熟的ORM工具
Torque
Torque是一種ORM的工具
它最早是Apache Jakarta Turbine項目的一部分
現在已經從Turbine中剝離出來
可以獨立使用
目前
它的版本是
Torque的主要特性
Torque主要包含兩部分
一部分是Generator
它可以產生應用需要的所有數據庫資源
包括sql和java文件
另外
Torque還提供了一個運行環境來運行產生的類
下面主要討論Torque 的Generator
. 三個核心文件
要利用Torque的Generator
必須配置好以下三個文件(Torque的安裝路徑為$Torque_home)
◆ $Torque_home/build
properties 存儲數據庫系統的屬性
主要有項目名稱
數據庫類型
數據庫鏈接URL
Driver
用戶名
密碼及主機名等
Torque利用該文件的屬性
建立與數據庫系統的連接
◆ $Torque_home/schema/project
schema
xml
id
table
schema
xml 其中
project
schema
xml 存儲表結構信息
而id
table
schema
xml由Torque的IDBroker服務調用
◆ $Torque_home/Torque
properties 存儲應用執行時
由Torque生成的對象模型代碼使用的屬性值
在生成數據庫系統資源的時候不需要這個文件
核心任務
利用Torque提供的Generator
可以完成下面的主要任務
◆ sql 解析$Torque_home/schema/*
xml
生成對應的$Torque_home/src/sql/*
sql文件
◆ doc 解析$Torque_home/schema/*
xml
生成對應的$Torque_home/src/sql/l文件
描述數據庫結構
◆ create
db 生成不同平台上產生數據庫系統的腳本
◆ insert
sql 執行$Torque_home/schema/*
schema
sql文件到指定數據庫
◆ sql
xml 解析$Torque_home/schema/schema
sql文件
產生Torque對應的數據庫文件$Torque_home/schema/schema
xml
◆ id
table
init
sql 根據$Torque_home/schema/id
table
schema
xml文件產生id表的初始化腳本文件
上述任務需要ANT的支持
運行命令為$Torque_home/ant
f build
torque
xml $taskname
Peer
Peer是Torque使用的ORM工具
它比其它的工具(例如Castor
Osage等)的層次要低
開發人員需要手工編寫一些代碼
但是這從一定意義上增加了靈活性
Peer利用Torque數據庫Adaptor類來建立與數據庫的連接
因為它支持主流的數據庫系統
所以
開發人員一般情況下不需要為數據庫系統編寫Adaptor
在建立了項目數據庫系統的Schema文件後
運行
ant
f build
torque
xml
Torque為Schema 中的每個表的對象模型生成四個類
例如開發人員在project
schema
xml 中定義了Author表
則Torque生成的四個類為Author
AuthorPeer
BaseAuthor
BaseAuthorPeer等
其中Author和AuthorPeer分別是BaseAuthor和BaseAuthorPeer 的子類
這兩個基類(BaseAuthor
BaseAuthorPeer)包含了Torque的生成邏輯
在開發中不應該修改
因為Torque會在再次生成對象模型時覆蓋這些文件
所以系統中的業務邏輯應該放在Author和AuthorPeer類中
在Torque中
AuthorPeer和BaseAuthorPeer稱為對等類(Peer Classes)
而Author和BaseAuthor稱為數據對象(Data Objects)
對等類和數據對象之間的區別是
對等類
封裝數據表信息
並提供靜態方法對表進行增加
刪除
修改記錄的操作
數據對象
封裝表中的記錄信息
並對每個字段提供getters/mutators方法
Criteria
Criteria是一對SQL查詢標准的抽象對象
開發人員利用它來封裝特定的SQL語句
Criteria實際上是SQL語句中域名和值之間的映射
默認的Comparator是等於(=)
同時
它還提供基本的Comparator
以及Join
Order by
Distinct等
更多的方法及屬性
請查看org
apache
torque
util
Criteria
Criteria提供了一般意義上的SQL功能
如果仍然不能滿足開發的需要
開發人員仍然可以手寫SQL語句
Torque在J
EE中的應用
在Apache Jakarta的項目中
有很多Web 應用構架
其中Struts
Cocoon及Turbine是比較著名的幾個
Torque作為數據庫抽象的工具
雖然是從Turbine中剝離出來的
但是它可以與其它的構架很好地結合
成為Persistence層的優秀解決方案
應用步驟
在J
EE應用
使用Torque的步驟如下
. 系統分析和設計
直至Business Object
. 按照Business Object模型
形成數據庫腳本文件database
sql
. 編寫$Torque_home/build
properties
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25535.html