2009-03-22 10 views
1

Ich habe eine statusfreie Bean, die für persistierende Entitäten in einer Datenbank verantwortlich ist. Diese statusfreie Bean wird von der onMessage-Methode einer Message Bean aufgerufen. Die verdrahtete Sache ist, dass bei der ersten Nachricht alles gut funktioniert, aber bei der nächsten Nachricht wird die für das Persistieren verantwortliche Methode außerhalb einer Transaktion aufgerufen, obwohl die Methode mit REQUIRES_NEW versehen ist.REQUIRES_NEW mit Anmerkungen versehene Methode wird ohne eine Transaktion ausgeführt?

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
public StateChange persistChange(long deviceId, ...) { 


    ... 

    StateChange change = new StateChange(...); 
    em.persist(change); 
    em.refresh(change); // To provoke the error 

    return change; 
} 

Aufruf Refresh löst die folgende Ausnahme:

Verursacht durch: javax.persistence.TransactionRequiredException: keine Transaktion im Gange ist

Irgendwelche Ideen? Ich bin ziemlich neu in JTA, also habe ich vielleicht etwas Wichtiges verpasst?

Antwort

0

Ich habe viel versucht, es zu lösen und nach etwa 16 Stunden oder so scheint es zu funktionieren. Ich bin mir nicht sicher, was genau der Trick war, aber es könnte das Upgrade auf Glassfish 2.1 sein.

Endlich in der Lage wieder in der Nacht schlafen!