blancoDb Enterprise Edition (以降 blancoDb) は Java言語/JDBC用の R/Oマッピングツール実装の一つです。 今回、blancoDb EE 正式版リリース (1.0.0) を行います。 [理念・思想] blancoDbは下記のような理念および思想を特徴としています。 * 低機能でありつづける JDBCドライバが提供する低水準APIの機能性・特徴を妨害・阻害することなく、そのままJava ソースコードにマッピングします。このことにより、リレーショナルデータベースの機能および性能を最大限引き出すことが出来ます。ツールとしては低機能であることにより、高性能に動作させることができ、またJDBCの機能を最大限利用することができます。もちろんスクロールカーソルやNULL許容列対応など最低限の機能は当然サポートします。 * 自由度の低さ リレーショナルデータベース上の型をJavaの特定のオブジェクト型に強制的にマッピングを行います。型マップに関しては極力自由度を排除しています。このことによりJDBCドライバの実装に起因したJDBCレベルでの型マッピングによる不具合発生を最小限にとどめることが出来ます。加えて自由度が低いために極めて少ない設定によりマッピングを自動生成することができます。原則として列名や型情報はJDBCドライバから得られるメタ情報を活用して自動的に決定します。自由度の低さゆえに非常に安全に動作させることもできます。型マップ済みのJavaクラスが提供されることにより、実行時エラーの可能性を激減させます。多くの場合 自由度の高さは設定を増やして不確実性を押し上げ、各種トラブルを誘発するのです。 * カスタマイズの容易さ (ただし現バージョンでは 未達部分が含まれる) カスタマイズの容易さを理念としています。基幹系・大規模開発で利用される際にはカスタマイズが発生することでしょう。生成されるソースコードにいろいろ手が加わるのはもちろんのこと、blancoDbのソースコードそのものにもカスタマイズが入ることを想定しています。そういったカスタマイズのしやすさを実現するための方法として、機能を増加させず自由度を増やさずblancoDbそのものの規模の肥大化を抑制している側面もあります。blancoDb の規模が小さいことはカスタマイズ実施後のテスト規模を抑制することも出来ます。 [特徴] * ごく普通のSQL文が そのまま利用できます。 ターゲットRDB向けに準備されたSQL文が そのまま利用できます。当然のことですが、複数表を結合した検索が可能です。ある程度複雑なサブクエリやUNION付きSQL文なども、あたりまえのことですが、ごく当然のものとして利用できます。SQL文という観点では blancoDbは極めて自由度が高くなるよう設計されています。 * ごく普通にJDBC APIをラッピングしています。 ごく普通の JDBCプログラミング・ソースコードが自動生成されます。このため既存のJDBCノウハウおよびスキルが転用でき、学習コストがとても低くなっています。 * Excelブック形式のSQL定義書に SQL文とSQL文の付加情報を記載することにより入力メタ情報を設定します。 Excelおよびその互換ソフトを用いるだけで入力メタ情報を設定できます。XMLファイルは利用しますが、単に中間ファイルとしてのみ利用しています。 * よくありがちなJDBCプログラミングにおけるバグを予防するための仕組みをもっています。 o 一意制約違反は特別な例外として扱うことにより、一意制約違反の処理忘れバグを予防できます。 o 検索・実行結果が1件であるSQL文について、実行結果が1件でない場合には例外を発生させることよにり処理忘れバグを予防できます。 o ステートメントのクローズ忘れについて、これを検知して警告を出すことによりクローズ忘れバグを予防できます。 o SQLインジェクションを発生させにくい構造になっています。blancoDbを導入することは SQLインジェクションの予防および対策として非常に有効です。 * リレーショナルデータベースのカーソルが利用できます。 * (リレーショナルデータベースがサポートしていれば) FOR UPDATEを伴った行ロックを伴った検索および行の更新が可能です。 * 実行時に特別なクラスライブラリを必要としません。生成したソースコードだけで完結して動作します。またソースコード自動生成時に 解決可能なものは最大限解決を済ませます。このことにより実行時コストを極小化することが実現できます。 * 基幹系システム開発に対応しています。 基幹系システム開発における一般的な開発プロセスに沿った形で設計および実装されています。 [R/Oマッピング定義 2005.05.10版] 下記の仕様をR/Oマッピングと呼ぶことと定義します。また R/Oマッピングツールとは下記の仕様を満たすものを指します。 * リレーショナルデータベース指向である。 o リレーショナルデータベース上の型を、強制的に特定のオブジェクト型にマッピングする。 o リレーショナルデータベースのカーソルが利用できる。 o リレーショナルデータベースが持つ機能・性能を阻害しない。 * ANSI SQL (ごくあたりまえのSQL文) を利用する。 o 各種ロックが適切に利用できる。(行ロック、更新用の検索) o NULL許容列を適切に扱うことができる。NULLはNULLとして入出力ができる。 * トランザクションが適切に扱える。 o トランザクションのコミットとロールバックを任意のタイミングで呼び出すことができる。 o トランザクション分離レベルを適切に扱うことができる。 * メモリ消費量が常識的であること。 o 処理件数が増えてもメモリ消費量が線形には増えないこと。 o StreamやReaderを適切に利用し、大きなデータや大量データを扱ってもメモリ上には展開しない。 * ストアドプロシージャ呼び出しに適切に対応する。 [ライセンス] 1.blancoDb Enterprise Edition は ライセンス として GNU Lesser General Public License を採用しています。 [依存するライブラリ] blancoDb Enterprise Editionは下記のライブラリを利用しています。 1.JExcelApi - Java Excel API - A Java API to read, write and modify Excel spreadsheets http://jexcelapi.sourceforge.net/ http://sourceforge.net/projects/jexcelapi/ http://www.andykhan.com/jexcelapi/ 概要: JavaからExcelブック形式を読み書きするためのライブラリです。 ライセンス: GNU Lesser General Public License 2.blancoIg 概要: blanco Framework の構成要素のひとつ。Javaソースコード生成を担います。 ライセンス: GNU Lesser General Public License