Wrapperインターフェース

久しぶりに計算ライブラリのメンテナンス作業が入り、そのテストツールを修正しようと
プロジェクトを開いたところ、javax.sql.DataSourceインターフェースを実装したクラスが
エラーになっていた。
調べてみると、java.sql.WrapperというインターフェースがJava6から追加になっていて、
そのインターフェースをjavax.sql.DataSourceが継承していた。
このインターフェース、

boolean isWrapperFor(Class iface)
T unwrap(Class iface)

の2つのメソッドが定義されていた。引数のクラスでラップされているかどうかのチェックと、
そのクラスのラップをはずすメソッドのようだ。
DataSourceに限らず、ConnectionやStatementなど、DB接続関連の主要なインターフェースは
Java6からすべてこのインターフェースをつけている。
DB周りのクラスはトランザクション制御やロギングの為にラップされることが多いので、
そのラップを取り外す統一的な手段を用意したという事だろう。

個人的には、こんなメソッドよりもPreparedStatementにデータをセットした後に実際に発行される
SQLを取得するメソッドの方が欲しいと思ってしまう訳ですが。