2 Stimmen

Aufrufen einer transaktionalen Methode innerhalb desselben SFSB

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X