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を適切に利用し、大きなデータや大量データを扱ってもメモリ上には展開しない。 
  * ストアドプロシージャ呼び出しに適切に対応する。 


[blancoDbを動作させるにあたって]
 1.Eclipse 3.0上で動作させるためには zipファイルを解凍してください。
   その上で、libフォルダに JDBCドライバを入れる必要があります。
 2.Eclipse 3.1上で動作させるためには jarファイルを解凍してください。
   その上で libフォルダに JDBCドライバを入れる必要があります。
 3.JDBCドライバは下記のものを利用してください。
   PostgreSQL 8.0.x: postgresql-8.0-310.jdbc3.jar
 4.Eclipseから、
   新規(W) -> その他(O)
   blanco Framework -> blancoDb Enterprise Edition Wizard
   を実行することにより、blancoDbPluginの動作契機を得ることが出来ます。


[blancoDbが利用するフォルダ]
プロジェクトルートの下に下記のフォルダを作成して利用します。
 1.meta/dbというフォルダを作成して、その中にメタファイルを記述していきます。
 2.tmp/dbというフォルダがプロジェクト内に作成されます。
   このフォルダはテンポラリフォルダとして利用されます。
   ソースコード生成時にはtmp/dbフォルダは一旦削除されます。
   tmp以下のフォルダは基本的に編集などの操作を行わないようにしてください。
 3.blancoというフォルダがプロジェクト内に作成されます。
   このフォルダは生成後ソースコードの格納場所として利用されます。
   blanco/main以下のフォルダは基本的に編集などの操作を行わないでください。


[ライセンス]
 1.BlancoDbPlugin は ライセンス として GNU Lesser General Public License を採用しています。


[開発者]
 1.オリジナル版の著作権者: 伊賀敏樹
 2.最新版の主たる開発者: 伊賀敏樹


[依存するライブラリ]
BlancoDbPluginは下記のライブラリを利用しています。
 1.blancoDb Enterprise Edition
     概要: R/Oマッピングエンジンです。
     ライセンス: GNU Lesser General Public License
 2.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
 3.blancoIg
     概要: blanco Framework の構成要素のひとつ。Javaソースコード生成を担います。
     ライセンス: GNU Lesser General Public License
 4.blancoCommons
     概要: blanco Framework の構成要素のひとつ。共通ライブラリを担います。
     ライセンス: GNU Lesser General Public License

