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) : リリース判定。
4.久保征人 : 試験およびリリース判定。
[ライセンス]
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.05.01 (1.6.4)
BINARYおよびラージTEXTに対する単一表アクセス自動生成について、「一行制約」をOFFにするように仕様を変更。
→getInputStreamやgetReaderが getSingleRow内のnextメソッドの2度呼び出しによって閉じてしまう問題に対応するための変更。
(plugin)blancoEclipsePluginGen最新版に対応。
jarファイル類の更新。
2006.04.25 (1.6.3)
(Antタスク) Antタスクの出力先フォルダについて、blanco をデフォルト値として設定しました。
+安全のために、blanco作業用フォルダ(blanco)が未設定の場合に、適切なメッセージを伴って異常終了するように変更しました。(Antタスクのみ影響範囲)
2006.04.20 (1.6.2)
blancoValueObjectを更新しました。(toStringが自動生成される版となります)
その他、jarファイル類を更新。
blancoCodeGeneratorを第2世代へと置き換えました。
readme: クレジットを追記。
2006.04.06 (1.6.1) バグ修正版
InputStreamやReaderにマップされる、ひとつの列で扱わないとJDBCの仕様上問題がある
型について、Simpleの単一表自動生成で生成されないように修正しました。
2006.04.01 (1.6.0) 出荷候補版 (RC1)
1.4.1からの主な変更点を示します。
※2006.01.16 (1.4.1)から2006.04.01 (1.6.0)までの変更点
(1)デッドロックおよびタイムアウトへの対応
・特定のSQLStateが発生した場合には対応する例外クラスでラッピングするように機能追加しました。
・例外クラスとして DeadlockException、TimeoutExceptionを追加しました。
※なお、当面のあいだ デッドロックおよびタイムアウトの動作確認は 対SQL Serverにおいてのみ実施されます。
(2)Microsoft SQL Server 2005対応
・各々の接続文字列は下記の通りです。微妙に異なるので注意が必要です。
SQL Server 2005 : jdbcdriver="com.microsoft.sqlserver.jdbc.SQLServerDriver" jdbcurl="jdbc:sqlserver://localhost
SQL Server 2000 : jdbcdriver="com.microsoft.jdbc.sqlserver.SQLServerDriver" jdbcurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind;SelectMethod=cursor
(3)様式の改善
・SQL定義書に「SQL定義・詳細説明」を追加しました。
・英語版のSQL定義書を追加しました。
(4)その他の改善
・ランタイムパッケージの共通化機能を追加。
ランタイムパッケージの出力先について個別に設定できるようになりました。
・ジェネレーションギャップ・デザインパターンへの対応を強化しました。
データベースコネクション、ステートメント、結果セットをprotected化。
・JavaDocを見直し、修正すべき点は修正しました。
・prepareStatementの属性付きメソッドを削除。これはSQL定義書から与えられたもののみを使ってもらうためのものです。
・Callerのexecuteメソッドについて戻り値がbooleanになるように変更しました。
・例外処理の改善
生成後ソースコードにおける例外の変換について、これをメソッドとして共通化しました。
・(plugin)右クリックメニューを除去。(機能が減りました)
・(plugin)SQL定義一覧化処理の担当
ドキュメント一覧のための中間ファイル作成処理を処理の流れに追加しました。
(5)不具合修正
・SQL入力パラメータで項目番号のみ入力した際に、上の項目名が引き継がれて重複する項目名が生成されてしまうバグを修正しました。
・単一表においてプライマリキーが無い表に対する UPDATEとDELETEを生成しないように修正しました。
・マッピングにおいて、java.sql.Types.VARBINARY、case java.sql.Types.BOOLEAN
の記載が抜けていた箇所があったので、これを修正しました。
・メタ情報収集時のコネクションについて、自動コミットがONのままになっていたので、これをOFF設定へと修正しました。
・PostgreSQL 8.1 (8.1.405)において、表が一つも無い場合に単一表の情報収集時にnullポインタ例外が発生する不具合を修正しました。
・ひとつも列が処理されなかった場合の処理中断を整理しました。
・検索型SQL文の試し打ちのために従来はStringに対して 従来は "" をセットしていたのを、nullへと変更しました。
これは SQL Server 2005の uniqueidentifier列の場合には Stringでセットすると(バイナリへの)変換エラーが発生してしまうのを
回避するためです。なお、文字列以外については、0などの値を埋めた上で試し打ちしています。
2006.04.01 (1.6.0) 出荷候補版 (RC1)
blancoDbDotNet(.NET Framework)の変更点を精査。確認できた箇所について同期化を実施。
FieldFactory のcase java.sql.Types.VARBINARY:記述漏れを2点反映。