Ist es möglich, eine transaktionale Methode aus einer Stateful EJB selbst aufzurufen? Um es deutlicher auszudrücken:
@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...
}
}
Nun möchte ich erreichen, dass der Benutzer myMethod() aufruft; ich möchte sicher sein, dass diese Methode ohne die JTA-Transaktion ausgeführt wird. Nach diesem Aufruf möchte ich eine save(); Methode aufrufen, die innerhalb einer Transaktion ausgeführt wird.
Wenn ich die Methode ctx.getBusinessObject(-) verwende, erhalte ich:
WARNUNG: Eine Systemausnahme ist während eines Aufrufs von EJB MyService Methode public void com.test.MyService.save() javax.ejb.IllegalLoopbackException: Unzulässiger abspringender Zugriff : Versuchen Sie einen Loopback-Aufruf auf die Methode 'public void' zu machen com.test.MyService.save() für zustandsbehaftete Session-Bean MyService
Werden die inneren Aufrufe für SFSBs nicht unterstützt?
Ich verwende Glassfish 3.1.1.