少々思うところあって、S2JDBCをいじってみました。
これは、非常に良く出来たものです。
APIは直感的でわかりやすく、マニュアルがなくてもIDEのコード補完の力でそれこそ流れるようにプログラミングができます。
機能的にもシンプルで、多分あまり裏で余計なことをしていないので、プロジェクトに合わせて自分なりにもう一工夫、といったことも容易にできそうです。こういう風に、ひたすらAPIの使い方を覚えるだけでなく、どう使いこなしてやろうか、ということについてイマジネーションがどんどん広がるライブラリは好きです。
機会があれば実戦投入してみたいですね。
ちなみに、ただS2JDBCを動かしてみるだけではつまらないので、S2Containerではなく、LiQ Container上で動かしてみました。Containerをセットアップするコードは以下のようなイメージになります。
----
Container container = new Container();
S2Dbcp s2dbcp = new S2Dbcp();
S2Jdbc s2jdbc = new S2Jdbc();
s2dbcp.configure(container)
.driverClassName("org.h2.Driver")
.url("jdbc:h2:mem:db1")
.user("")
.password("");
s2jdbc.configure(container)
.dialect(HsqlDialect.class);
sentinel.configure(container);
JdbcManager jdbcManager = container.get(JdgcManager.class);
----
S2DbcpクラスとS2JdbcクラスはS2のコンポーネントをLiQから使えるようにするために自分で書いたクラスです。
S2DbcpクラスではコネクションプールとJTAに関連するコンポーネントを、
S2JdbcクラスではJdbcManagerをContainerにぶち込んでいます。
XMLで設定するのと違って、内部のコンポーネントの構造をきれいにカプセル化して、
設定可能なパラメータだけを外部に公開できるところが良いところです。
dialectの設定など、実装クラスのクラスオブジェクト自体を渡せるので、余計な間違いがおこりづらいはずです。
もちろんDbmsDialectの実装クラスでないクラスを渡そうとするとコンパイルエラーになります。
あと、コンテナの初期化が軽いのもメリットといえばメリットですね。