Arjuna JTA-Transaktion wurde unerwartet zurückgesetzt

9

Wenn ich JBoss-Protokolle überprüfe, sehe ich viele dieser Fehler

%Vor%

Wenn ich dann versuche, eine JMS-Nachricht zu senden, sehe ich diesen Fehler:

%Vor%

Ich vermute, dass der Rollback eine Folge des vorherigen Fehlers ist. Habe ich recht ? Was könnte dazu führen, dass die Transaktion in einem abgebrochenen Zustand bleibt?

Ich habe diesen Post gefunden: Was verursacht Arjuna 1603 (Konnte keine neue XAResource für die Wiederherstellung nicht serialisierbarer XAResource finden) . Ich verstehe, dass ein Protokoll der Transaktion geführt wurde, aber das erklärt nicht, wie ich das Problem beheben kann, das ich jetzt habe.

    
Olivier.Roger 29.03.2012, 12:48
quelle

4 Antworten

1

Ich habe ähnliche Fehler auf JBoss 5.1 gesehen (mindestens die zweite, die sich auf ein Timeout bezieht)

Wir haben die eigentliche Ursache nicht gefunden, aber es ist sehr wahrscheinlich, dass sie durch eine lange laufende Transaktion verursacht wird, die "geerntet" wird

Der Grund, warum wir zu dieser Schlussfolgerung kamen, ist, dass wir dies in Zeiten hoher Belastung gesehen haben und dass einige Operationen sehr lange dauern.

Wir verwenden PostgreSQL und es gab viele Verbindungen, die "in der Transaktion warten", die nach dem Ernten gelöscht werden. Überprüfen Sie das Transaktionszeitlimit in Ihrer Konfiguration und legen Sie einen höheren Wert fest, um zu sehen, ob das Problem dadurch behoben wird.

Ссылка beschreibt, wie Sie diese Einstellung verwalten können.

    
drone.ah 31.10.2012 07:20
quelle
1

Im Allgemeinen wird jede RuntimeException, die von einem verwalteten Objekt ausgelöst wird (etwas injiziert, das mit einem JBoss-Proxy umschlossen ist) und nicht als @ApplicationException (rollback = false) gekennzeichnet ist, dazu führen, dass die Transaktion zurückgesetzt wird.

>

Diese Fälle sind normalerweise sehr leicht in den Protokolldateien zu sehen.

Timeouts auf der anderen Seite sind ein bisschen schwieriger. Sie werden in der Protokolldatei etwa Folgendes sehen: "Abbruch der Aktions-ID -3f57fd2d: e48e: 4cf8de0f: bc wird aufgerufen, während mehrere Threads darin aktiv sind."

Andere Aufrufe werden weiterhin ausgeführt und schlagen nur fehl, wenn sie versuchen, auf die Datenbankverbindung zuzugreifen und die Ausnahme "Transaktion ist für Rollback markiert" erhalten.

    
Doron Manor 10.03.2013 13:04
quelle
1

Wir erhielten einen ähnlichen Fehler und fanden später heraus, dass die Ursache damit zu tun hatte, wie wir unsere Entitäten erschaffen und handhaben. Wir hatten ein übergeordnetes Objekt mit einer Liste von untergeordneten Entitäten, und wir erstellten Kopien der übergeordneten Elemente und versuchten dann, neue untergeordnete Elemente zu den Listen hinzuzufügen. Das Problem war jedoch, dass diese untergeordneten Listen mit der Anmerkung zum verzögerten Laden markiert wurden:

@OneToMany (cascade = CascadeType.ALL, fetch = FetchType.LAZY ...

was dazu führte, dass der Ruhezustand fehlschlug. Um es zu beheben, mussten wir die Entity aufrufen, damit Hibernate nicht mehr versucht, die untergeordneten Elemente abzurufen, wenn wir Kopien des übergeordneten Elements erstellen.

((Session) entityManager.getDelegate ()). evict (zu entfernende Entität)

Dies ist vielleicht nicht die Lösung für Ihr spezielles Problem, aber hoffentlich hilft es jemandem!

    
Alex Schultz 05.03.2014 19:48
quelle
-2

Wir lösen das Problem, indem wir max_prepared_transactions in der Datei postgresql.conf auf 100 erhöhen.

    
user3838497 14.07.2014 20:49
quelle

Tags und Links