トランザクションの分離

EJBJTAトランザクションのネストをサポートしていない。したがって、トランザクションを分離するためには、EJB(CMT)の RequiresNew 属性を使う必要がある。では、EJBを使いたくない場合はどうするのか。

http://www.springframework.org/docs/api/org/springframework/transaction/jta/JtaTransactionManager.html

RequiresNew属性相当の機能をEJB無しで実現するためには、JTAのTransactionManagerを使う必要がある。しかし、多くのアプリケーションサーバーがサポートしているとはいえ、J2EEの仕様では、TransactionManagerのサポートは必須ではない。つまり、ポータブルな方法は存在しないということ。

SpringでJTAを使う場合、TransactionManagerのsuspend()、resume()を使って、これらの機能を実現している。AbstractPlatformTransactionManager.javaのgetTransaction()、JtaTransactionManager.javaのdoSuspend()あたり。

仕様書を読んで確認しないとな。