FirstBeanとSecondBeanの 2 つの Bean があります。
FirstBeanにはREQUIRED トランザクション属性を持つメソッド method1 があり、SecondBeanにはNOT_SUPPORTED トランザクション属性を持つメソッドmethod2があります。method1 は method2 を呼び出します。
@Stateless
class FirstBean implement IFirstBean
{
ISecondBean secondBean;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
void method1()
{
//...
secondBean.method2()
//...
}
}
@Stateless
class SecondBean implement ISecondBean
{
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
void method2()
{
//....
}
}
そしてそれはうまくいきます。
しかし、method2が長時間(4〜5分以上)機能すると、JBoss 4サーバーで例外が発生します
Caused by: java.lang.IllegalStateException: [com.arjuna.ats.internal.jta.transaction.arjunacore.inactive] [com.arjuna.ats.internal.jta.transaction.arjunacore.inactive] The transaction is not active!
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1379)
at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135)
そして次はWebLogic 10.3
Caused By: org.hibernate.SessionException: Session is closed!
at org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:49)
at org.hibernate.impl.SessionImpl.clear(SessionImpl.java:253)
method1 が終了し、例外がスローされます