blanco Framework is code generation framework for Java. It include R/O mapping tool 'blancoDb', SQL editor plug-in 'BlancoSqlEditorPlugin'.
blancoDb Enterprise Edition (以降 blancoDb) は Java言語/JDBC用の R/Oマッピングツール実装の一つです。
※blancoDb Enterprise Editionは 主にEclipseプラグイン形式により配布されています。
[理念・思想]
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.中西保夫 (Saisse) : 初期バージョン(blancoDb)の開発
2.伊賀敏樹 (Tosiki Iga / いがぴょん): blancoDb Enterprise Editionにフォークした後の開発および維持メンテ担当
3.山本耕司 (Y-moto) : リリース判定担当
[ライセンス]
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.blancoCommons
概要: blanco Framework の構成要素のひとつ。共通ライブラリを担います。
ライセンス: GNU Lesser General Public License
3.blancoCodeGenerator
概要: ソースコード生成ライブラリ
ライセンス: GNU Lesser General Public License
2006.01.16 (1.4.1) バグフィックスリリース
SQL定義IDが「名前変形せずに」クラス名に利用されてしまっている不具合を修正。
2006.01.05 (1.4.0) 1.2.0からの主な変更点を示します。
(1)Excel様式を改善しました。「SQL定義書」へと名称が変わりました。
・Excel様式を「SQL定義書」と名前変更し、内容についても見直しを行いました。
・申し訳ありませんが、様式については 1.2.x系(旧バージョン)までとの互換性はありません。
(2)ストアドプロシージャ(CallableStatement)への対応を行いました。
・「呼出型」を選択するとストアドプロシージャが利用できます。
(3)単一表サポート関連
・単一表のSQL文についてダブルクオートエスケープを必要な場合にのみ付与するように変更しました。
この対応により MySQL対応が可能となりました。
一方で HSQLDBはこの変更により動作しなくなります。
ダブルクオートが無いと動作しない HSQLDBの仕様が特殊なものであると判断します。
・単一表アクセスのスクロール方向について見直しを実施しました。
デフォルトをインセンシティブとします。
プロパティでスクロール方向は変更が可能なようにしました。
・単一表の全行SELECTについて、1.2系では無効化されていましたが、これを復活させました。
・旧バージョンの互換性のために内部的にサポートしていた旧式のTableGatewayサポートを終了しました。
・単一表のテーブルにおいて 表名に$が含まれている場合には、処理をしないように仕様変更しました。
これは Oracle10gにおいて、削除テーブルなどが BIN$●●というテーブルとして格納される仕様への対応のためです。
(4)ロギングへの対応
Commons Loggingに対応しました。
(5)新たなデータベースへの対応
Oracle10gで動作確認しました。
MySQLで簡単な動作確認をしました。
(6)エラー時の処理
・主なエラーメッセージをリソースバンドル化しました。
・バインド忘れのパラメータがある場合に例外が発生するように変更しました。
また、SQL例外が なるべくそのまま伝わるように改善し、原因が究明しやすいようにしました。
(7)内部処理の改善
・名前変形の処理を抜本的に見直しました。
・プラグインの進捗バーの表示が不適切であったのを修正しました。
・プラグインのException, ErrorがEclipseのログに適切に出力されるように改善。
・その他、ソースコードの大幅な整理を実施しました。総ステップ数がかなり減りました。