類似RDB/SQL系技術との対応関係。
類似RDB/SQL系技術との対応関係を以下に示します(順不同です)。
プロダクト 筆者視点の特徴
woolpack.sql 0.07 DBメタ情報の管理・クエリ生成・DB値バインド・DB値取得・トランザクション分離機構をテンプレート化しており、 これらをコンポジットとして組み立てます。
S2DAO 1.0.40 http://s2dao.seasar.org/ja/index.html スタティックフィールド、Tiger(Java5)アノテーションを使用してDBカラム-Beanプロパティの対応を定義することができます。 バインド変数コメント付きSQLで値のバインドや動的SQLを定義することができます。 Seasar2のバイトコード加工技術によるトランザクション制御機構を使用することができ、 XML定義ファイルを使用してトランザクション基点をAOPする位置を定義します。
iBatis 2.2.0 http://ibatis.apache.org/ DBカラム-Beanプロパティ対応表とSQLをXMLに記載します。 業務クラスからは文字列キーでDBアクセス用オブジェクトを取得します。 動的SQLをXMLをベースとするDSLで定義することができます。 独自のインタフェース(SqlMapTransactionManager)やクラス(DaoManager)を使用して クライアントソースにbefore-afterパターンを定義してトランザクションを制御します。 設定ファイルとDAO、DTOクラスファイルをGUIを操作して生成することができます。
ObjectRelationalBridge(OJB) 1.0.4 http://db.apache.org/ojb/ XDocletアノテーションを使用してDBカラム-Beanプロパティの対応を定義することができます。 検索条件を組み立てるためにビルダーパターンを使用することができます。 PersistenceBroker API、ODMG API、JDO、OTM(Object Transaction Manager)の各永続化APIを使用することができ、 クライアントソースにbefore-afterパターンを定義してトランザクションを制御します。
Commons DBUtils 1.1 http://jakarta.apache.org/commons/dbutils/ ResultSetHandlerはWoolpackのFnと同等の役割を持ちます。
DdlUtils 1.0-RC1 http://db.apache.org/ddlutils/ DatabaseMetaData(DDL)-XML-オブジェクトを相互変換します。 woolpack.sql.metaでもDBメタ情報を扱う簡易の部品を用意していて DdlUtils利用を検討しているのですが、依存ライブラリの数とexportedな参照制約に直接アクセスできないことからまだ検討中です。
dwarf 0.32 http://www.ne.jp/asahi/java/servlet/ マスタメンテナンス機能のサーブレットとクラスライブラリ。Woolpackでもサンプルアプリケーションでjava.sql.DatabaseMetaDataを利用した汎用CRUDウェブアプリケーションを試作しています。
Generic DAO (記事) Javaの汎用型機構とHibernateとSpring AOPを使用してDAOパターンをテンプレート化しています。 woolpack.sqlではメソッドをひとつに限定したGeneric DAOとみなすことができます。 http://www-06.ibm.com/jp/developerworks/java/060705/j_j-genericdao.shtml
Hibernate 3.2.2 http://www.hibernate.org/ XMLにテーブルとBeanクラスの対応関係を定義します。 特殊クエリ言語(HQL)を使用することができます。 独自のインタフェース(Session, Transaction)を使用してクライアントソースにbefore-afterパターンを定義してトランザクションを制御します。
Torque 3.3 http://db.apache.org/torque/ ソースコード自動生成技術を適用しています。 トランザクション制御は独自のクラスを使用するかjava.sql.Connectionをメソッドで渡すことにより行います (http://634.ayumu-baby.com/torque/index.html)。
Cayenne 3.0 http://cayenne.apache.org/ 設定ファイルとDAO、DTOクラスファイルをGUIを操作して生成することができます。 検索条件を組み立てるためにビルダーパターンを使用することができます。 独自のインタフェース(DataContext)を使用してクライアントソースにbefore-afterパターンを定義してトランザクションを制御します。
Spring 2.0.2 http://www.springframework.org/ Spring AOPによるバイトコード加工技術によるトランザクション制御機構を使用することができ、 XML定義ファイルを使用してトランザクション基点をAOPする位置を定義します。
LINQ http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx 型推論やラムダ式、Extension Methodsなどの言語機構を活用したクエリ機構です。 Woolpackでは関数型言語との類似性を検証しているので、ラムダ式を活用しているLINQ機構のメリットを検証する必要があると思います。
Voruta 1.0.1 http://voruta.sourceforge.net/ クエリーをアノテーションで定義します。
O/R Broker http://orbroker.sourceforge.net/ DBカラム-Beanプロパティ対応表とSQLをXMLに記載します。 独自のクラス(Transaction)を使用してクライアントソースにbefore-afterパターンを定義してトランザクションを制御します。
PriDE http://pride.sourceforge.net/ 調査中
Mr. Persister http://www.jenkov.dk/mrpersister/introduction.tmpl 調査中
参考資料
  1. http://www.thinkit.co.jp/cert/article/0606/13/1/3.htm
  2. http://www.atmarkit.co.jp/fdb/rensai/javadb02/javadb02_3.html


woolpack.sqlの特徴の詳細を以下に示します。
  1. DBメタ情報・クエリ生成・DB値バインド・DB値取得・トランザクション分離機構を Javaの汎用型でテンプレート部品化し、これらをコンポジット デザインパターンで組み立てます。
  2. クエリとバインド情報のペアをPreparedStatement情報としてまとめることにより、クエリ生成とクエリ実行の結合を疎に保ちます。
  3. 入力キーコレクションとテーブル定義メタ情報からCRUDクエリーのPreparedStatement情報を生成することができます。
  4. java.sql.DatabaseMetaData からテーブル定義メタ情報をロードすることができます。
  5. テーブル定義メタ情報からcreateクエリを生成することができます。
  6. トランザクションが管理されたDataSourceのプロキシを生成するビルダークラスを使用して、DataSourceを使用するDBアクセスクラスはそのままで業務ロジックからトランザクション処理を分離することができます。
  7. マーク可能な文字列生成クラス(MarkableStringBuilder)を使用して、Javaプログラムでクエリを生成することができます。
  8. バインド変数コメント付きクエリからPreparedStatement情報を生成することができます。
  9. 汎用CRUDのサンプルWebアプリケーションを用意しています。DBから参照制約の情報を取得して参照先テーブルへのボタンを生成するところが特徴的です。


履歴
  1. 20070204 新規作成。
トップに戻る
Copyright (C) 2006 Takahiro Nakamura. All rights reserved.