JaCoCo Java Code Coverage Library

http://www.eclemma.org/jacoco/


EclEmmaで使っているカバレッジ測定用ライブラリ(というかエンジン?)。EclEmmaはEclipseプラグインだけど、JaCoCoはライブラリなのでAntやMavenからも利用できる。


カバレッジ測定といえばCoberturaが有名どころなんで「何も今さら」な気もするけど、JaCoCoはon the flyでカバレッジの測定ができるのがうれしい(instrumentメンドイんだもの)。on the flyと言えばEMMAでもできるのだけど、用意してあるantのタスクはJaCoCoのほうが使いやすかった。


詳しくは公式ドキュメントを参照するか、githubにサンプルプロジェクト作ったので、そっちを見て欲しい。
GitHub - masanobuimai/ant-sample-project at 2f1300b1134fa097c7cc6c7dbd400d5918d2e8ce


強いて難点を言えば、Jenkinsに公式のプラグインが無いので、JaCoCoのレポートをEMMA形式に変換して、EMMAプラグインに読ませるしかない事。んで、その変換が細かくないのでJenkinsからはサマリしか見えない(仕方ないので普通にJaCoCoでレポート作って、DocLinksプラグインでそいつにリンク貼るとかしてる。


そうは言っても、on the flyで使えるのはホントに楽ちん。:-)

Clione-SQL is Line and Indent Oriented, Nested-structured, 2WaySQL library

http://code.google.com/p/clione-sql/


偶然見つけたJavaのDBアクセスライブラリ(Apache CommonsのDbUtilsMirage風といったおもむき。
2Way SQLの仕様がとてもユニーク。

ClioneSQL works on 4 simple rules.

Rule 1. ClioneSQLは1行単位で処理をする。これを以下ではLineUnitと呼ぶ。
Rule 2. LineUnitはインデントにより下記のように入れ子構造の親子関係が定義される。

  WHERE -- parent
    ROW1 = /* $key1 */'value1'     -- child1
    AND ROW2 = /* $key2 */'value2' -- child2
    AND (                          -- child3
      ROW3_1 = /* $key3_1 */'value3_1'         -- child of child3
      OR ROW3_2 =/* $key3_2 */'value3_2'       -- child of child3
    )

Rule 3. LineUnitが持つ子が全て除去されたら、そのLineUnitも除去される。上の例では、key3_1, key3_2の両方がnullなら、child3も除去される。key1, key2もnullなら、parentごと除去される。
Rule 4. 親LineUnitの後に来る最初の子LineUnitの先頭にセパレータ(AND/OR/,)があるとき、それは除去される。上の例では、key3_1がnullで除去された場合には下のkey3_2の先頭の「,」が除去される。key1がnullで除去された場合には、その下のkey2の先頭の「AND」が除去される。

このように、SQLファイルのインデントを調整すれば、サブクエリーなどを持つ複雑なSQL文であっても、動的にな操作が簡単かつ安全に実現できる。

http://code.google.com/p/clione-sql/#How_it_works?


Javadocコメントが無いので使ってみるは、ちょっとハードル高いけど、staticインポートをうまく活用してたり、なかなか意欲的なライブラリだった。なにより、2Way SQLが良くできてる。まさに「その発想はなかった」って感じ。:-)


イマドキだったらJPAなのかもしれないけど、DBアクセスはSQLが使えて、シンプルなのがいいよね?と思うと、どうしても、この手の独自実装系に辿り着いてしまいますねと。DBアクセスまわりがいつまで経っても標準仕様と独自仕様の狭間で揺れ動いてて正直ウンザリな気持ちもしますが、こうゆう刺激的なライブラリを見つけるとやっぱり楽しくなりますね。


ps.
もともとは「2Way SQLのパーサ *だけ* って無いのかな?」と思って探したら偶然見つけた。なので、本当に欲しかったのは「2Way SQLのパーサ」。案外無いので、clione-sqlとかmirages2jdbcのソース読んで勉強するしかないかなと思ってる。

dbdeploy - Java tools to manage agile database development

http://code.google.com/p/dbdeploy/


なんでここ(dbdeploy.com)に辿り着いたのかは忘れちゃったのだけど、JavaというかAntでdb migrateするツール(継続的デリバリーに載ってたんだっけかな?


Javaでこの手(db migrate)のツールと言えば、Liquibseが有名?だけど、なんか大げさすぎて使えたためしがないのだけど、こっちのdbdeployはシンプルで使えそうな感じ。実際、Liquibseより簡単に使えた。


でも、なんでかDB含めた継続的インテグレーションって馴染みが無いんだよねー。DBAとプログラマが別チームという編成に影響してんのか、どうもアプリとDBは別って意識があって、この世界まで至れずにいるのであった。
それと、実際のところ alter table でDBの構造を累積してくってメンドくさくないのかな...(DBAにはイヤがられそう。