トランザクション制御

Java World 2月号の記事で、


SessionBeanでCMTを使う場合、複数のSessionBeanを呼び出しを
またがるようなトランザクション制御は行えない。
なんて記事をみかけたので、コメントしときます。
記事に対する批判ではなく、もし誤解している人がいれば、
誤解がとければ良いなぁという気持ちです。
あるEJB(B)がRequiredのトランザクション属性だとします。
Requiredとは、トランザクションが開始されていなければ、
EJB Containerがトランザクションを開始し、
既にトランザクションが開始されていれば、
そのトランザクションを引き継ぐものです。
また、あるEJB(C)もRequiredのトランザクション属性だとします。
POJOからB,Cを呼び出すと、確かにB,Cのトランザクションは別の
ものになります。
でも、Requiredのトランザクション属性を持ったEJB(A)から
B,Cを呼び出した場合、B,CはAのトランザクションコンテキストで、
実行されます。
このようなきめのこまかいトランザクション制御が
できるのがEJBのメリットです。
このメリットをEJB Containerなしで得られるようにしたのが、
Seasar(Nazuna)の自動トランザクション制御です。
http://homepage3.nifty.com/seasar/nazuna-etc.html#AutoTransaction
S2、Springでも同様のことがPOJOで可能になります。
Springは、最近RequiresNewもサポートしたみたい。