DBFlute 0.9.7.8 Released

Happy New Year!
DBFlute-0.9.7.8 was released.

DBFlute Top
Change Log
Migration Point

二点ほど意識すべきポイントがあります。
(DBFLUTE-784)のバグに関して、以下の状況に当てはまる場合は、
本日リリースの 0.9.7.8 にアップグレードすることをお奨めします。

o 一つ前のバージョン、DBFlute-0.9.7.7 にて
 -> 0.9.7.6 以前では発生しない

o 本番環境でもSQLログを出力している
 -> SQLログは通常 DEBUG レベルであるが、INFOに変更してるか、
    もしくは、ピンポイントで明示的に出力しているような場合。

o バッチ更新で1万件などの大量データを扱っている
 -> 一時的なメモリ量が膨張するが残り(リーク)はしない

※不覚というところです。誠に申し訳ございません。

これに関連して、(DBFLUTE-786)を対応しました。
開発時のみのSQLログであれば、別にSQLログの出力コストで
処理が遅くなっても問題になりませんが、本番環境でもSQLログを
出力しているような場合に、例えば 10 万件のバッチ更新をすると、
Log4j へのSQLログの出力コストだけで結構時間を食います。
どうしてもSQLログを残されなければならないという規約がある
のであれば仕方ないですが(その場合SQLログも業務処理と考えて)、
妥協ができるのであれば、先頭の100件だけをログ出力して後は省略。
いざってときのデバッグもそれだけで十分なことが多いですし、
どうしても必要ならアプリ側でトレースできるような工夫は幾らでも
できます。それよりも、1分でも2分でも速い方がうれしいという
ような場合に有効です。
(DBFLUTE-785)の改善に関して、必ず移行ポイントをご覧下さい。
そもそも全件削除を業務的に実行することは少ないと思われますが、
(するにしても truncate を使うことの方が多いと想定される)
テストケースで利用しているということはあるかもしれません。
その他着目するところとしては二つ。

CheckInvalidQuery
を TwoEdgedSword 機能から通常の機能へ昇格しました。
「あっ、ちょっとここは堅くしておこうかな」と思ったところで
使ってみて下さい。(1000万件のテーブルとかの検索などで)

PK以外のカラム用のシーケンス取得メソッドも生成できる
ようにしました。Entityへの自動設定はしないですが、
(自動設定するってことはそれってもう PK だよって感じで)
今までのようにわざわざ外だしSQLを書く必要もありません。
AutoIncrement - PK以外のカラムのシーケンス
# 
# to 一部の方
# 年賀状のリリース通知が 0.9.7.9 になってましたが、
# 0.9.7.8 の間違いです。。。
#

2011年の始まり

さて、2011年になりました。
2010年の振り返りに関しては、既に書いています。

// 2010年の振り返り | jfluteの日記
http://d.hatena.ne.jp/jflute/20101218

DBFluteも 0.9.7.8 にもなり、
さて今年はどうなっていくのでしょう!?
時間軸を無視したグランドスケジュールを見てみましょう。
まず、1.0 リリースに向けた準備をする。
o Behaviorのドキュメントを揃える
o 現場フィットのドキュメントを揃える
o ライセンス周りなどOSSとしての体裁を整理整頓
o もう少し JavaDoc コメントを精査
o もう少し内部的なクラス(ロジック)を精査
o DBFlute自体の安定化 (日々のメンテ)
o DBFluteの残課題の実装
  -> queryInsert(), プロシージャのオーバーロード対応
o Java7 での動作確認・対応

1.0 が無事リリースできたら、
o 残りの非機能ドキュメントを粛々と書いていく
o EMechaのさらなる進化
o 英語ドキュメントの整備(着手) ※ひとまず最低限のものだけ
o Java8 のクロージャ対応版を作成(着手)
o DBFlute.NET の 0.9.x 版の作成(着手)
  -> ランタイム(DLL)を導入し、Java版とほぼ同等品質に

英語ドキュメント、Java8 のクロージャ対応版ができたら、
英語圏ディベロッパーへのアプローチも進めて行く。
(つまり、英語圏への展開は Java8 のクロージャ対応版から)

Java版が本当に安定したら、DBFlute.NET も Java版と
ほぼ同等品質に仕上げて(要は移植)、1.0 とする。

本当にやることなくなったら、Scala 版を作る。
(世の中のニーズが強くなれば、もっと早く着手する可能性はあり)
果たして2011年でどこまでできるか!?

とりあえず概算ですが 1.0 のリリースが目標になるかなと。
どうひっくり返っても Java8 のクロージャは今年には出ませんし、
1.0 リリース自体の作業量がかなり多いことを想像できます。
というか、そもそも 1.0 のリリースもこの一年でやり遂げられる
かどうか!? かなり難しいのではないかという目算もあります。

オープンソースなので、状況もできるだけオープンに。
全ては jflute の生活に掛かっていると言えるでしょう。
昨年は恐らく通常の社会人の感覚では考えられない行動に出ました。
今年もそれを続けることはさすがにできません。
でも、DBFluteを少しでも続けていきたいという気持ちもあり。
なんとか活路を見出す必要があるでしょう。

でも、一月はちょっと休みます。ここ 3, 4 年で体力は相当減りました。
昨年の食生活の改善でかなり良くなりましたが、その分実装に費やして
いますので実際は現状維持というところ。(現状維持ができただけでも
食生活改善は本当に効果があった。これはずっと続けるつもりです)
とはいえ、皆様はフィードバックがあれば遠慮なく言って下さい。
それでフィードバックが自分の耳に入ってこないともったいない。

二月、三月あたりから何か動きがあるかもしれません。
良い方向に向かうと良いですね。DBFluteにどれだけ時間を
費やせる生活になるかどうか、頑張り次第というところで。
幾つかの独立した作業しやすい課題は、有志の方を募ってお願い
するかもしれません。DBFlute本体のメンテはかなり重いので、
やはり jflute 自身がやった方がいいだろうと思いますが、
例えば、以下のようなものであれば。

o EMechaの改善 (Eclipse の Plugin 実装)
o ライセンス関連の調査・情報収集
o Java7 での動作確認
o DBFlute.NETランタイムの作成 (Javaからの移植作業)

いつの日か正式に通知を出して募集するかもしれません。
(今すぐ「やる!」って手を挙げるいう方がいればもちろん大歓迎)
ちなみに可視化されているDBFluteの機能的な残り課題。

o queryInsert(cb)
  -> CBを使った一括登録 (insert into ... select)

o プロシージャのオーバーロード対応
  -> Oracleでは、パッケージプロシージャだとオーバーロードが可能

実はこの二つだけです。
これが終わったら、1.0 における機能セットは揃ったと考えます。
もちろん、フィードバック次第でまだ色々と増える可能性はあります。
もし、「これはあった方がいい」と思う機能があればお早めに。
(1.0 に近づくと、優先度の低い新機能追加は打ち切る可能性があります)
プライベートでは、またベジフェスにも参加したいし、
もっとベジタリアン(ヴィーガン)の世界にアプローチしたいと。
(スムージー作りの腕ももっと磨きたい)

さて、どうなっていくやら 2011年。
なんとも不安定な年のはじまりはじまりー