Verbindung gehängt mit Transaktions-Suspendierung mit Websphere-dataquelle

Bei der Verwendung von websphere-dataquelle zum Verbinden der SQL-SERVER-Frühlings-Transaktion, die mit REQUIRES_NEW oder NOT_SUPPORTED-Weiterleitungen gehängt (gesperrt) wird.

Dies ist bei der Verwendung von BasicDataSource oder anderen nicht der Fall.

Bitte helfen Sie.

REQUIRES_NEW und NOT_SUPPORTED sind beide Transaktionsattribute, die das Ausführen des Vorgangs in der aktuellen Transaktion verhindern würden (was dann unterbrochen und anschließend wieder aufgenommen wird). Die WebSphere Application server-dataquelle ist bewusst von Container-verwalteten transactions und wird in ihnen eingehen. Ich bin mir nicht sicher, was BasicDataSource ist, aber wenn es nicht bewusst ist, Container-transactions, das könnte erklären, warum Sie einen Unterschied im Verhalten sehen.

Der Durchfluss, um einen Single-Thread-Deadlock zu verursachen, könnte so etwas sein:

  • Transaktion beginnt
  • SQL-Befehl, der die Zeile X sperrt
  • rufen Sie die Methode REQUIRES_NEW auf
  • impliziert die Transaktion aussetzen, neue Transaktion beginnt
  • SQL-Befehl, der versucht, die Zeile X <- Deadlock hier zu sperren

Wenn dies das ist, was du siehst, ist es wie entworfen, pro spec, und du solltest in Erwägung ziehen, ein anderes Transaktionsattribut wie SUPPORTS zu verwenden, wenn die Operation in derselben Transaktion ausgeführt werden soll.