ステートフル EJB 自体からトランザクション メソッドを呼び出すことはできますか? より明確に話すには:
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@Stateless
public class MyService {
@Resource
SessionContext ctx;
public void myMethod() {
// do something...
// invoke method from the same class
// As expected - this doesn't work as it's a regular local-call,
// it's not aware of EJB nature of this call.
save();
// Doesn't work (although it worked with SLSB)
ctx.getBusinessObject(MyService.class).save();
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void save() {
// do something...
}
}
今私が達成したいのは、ユーザーが myMethod(); を呼び出せるようにすることです。このメソッドが JTA トランザクションなしで実行されることを確認したいと思います。この呼び出しの後、save(); を呼び出したいと思います。トランザクション内で実行されるメソッド。
ctx.getBusinessObject(-) メソッドを使用すると、次のようになります。
警告: EJB MyService メソッド public void com.test.MyService.save() の呼び出し中にシステム例外が発生しました javax.ejb.IllegalLoopbackException:不正な再入可能アクセス: メソッド 'public void com.test.MyService でループバック呼び出しを実行しようとしていますステートフル セッション Bean MyService の .save()
内部呼び出しは SFSB ではサポートされていませんか?
Glassfish 3.1.1 を実行しています。