JtaTransactionManagerとnon-XA-awareのDataSource

JtaTransactionManagerでnon-XA-awareのDataSourceを使った場合でも、ConnectionのcloseはJTAのcommit/rollback前(ConnectionSynchronization#beforeCompletion())で実行されているようです。何か変な感じがしますがConnectionのautoCommitモードがtrueのままなので実質的にはConnectionのcloseでコミットされてしまいます。Connectionのclose後にJtaTransactionManagerの中でUserTransactionのcommit/rollbackが呼び出されるのですが、XAResourceが登録されているわけではないので何も行われません。

うーむ、DataSourceとJTAと何も連携していないからこうなるのですが、使い方まちがっているかも。

ところで、悪名高いDataSourceUtilsですが、DataSourceUtilsを内部的に使うTransactionAwareDataSourceProxyというDataSourceがSpring1.1から用意されているようですね。ConnectionのProxyを返してくれます。なんでProxyと思いましたが、メソッドが多くて委譲する処理書くのがめんどくさいからProxy使っているんでしょう、きっと。