MS SQL Serverでデッドロックが発生する問題があります。 MySQLでは同じコードが問題なく実行されます。ROWLOCKをEJBで使用する方法
私の問題は、(デバイスに接続されている)ジョブを削除する要求を受け取り、その後、同じデバイスに対して新しいジョブを作成する要求を受け取ることです。ほとんどの場合、これは何の問題もなく動作しますが、デバイスの新しいジョブを作成する要求を受け取ったときに削除要求が完了しない場合、これがデッドロックを取得します。
アプリケーションはJBoss上で実行されており、メッセージキューから要求を受け取ります。
私は、おそらくrowlockキーワードを使用してMSSQLの問題を解決できることがわかりましたが、名前付きクエリを使用して同時にMySQLをサポートするにはどうすれば有効にできますか?
同じデバイスの次のリクエストを実行する前に、1つのリクエストが完了するように他の方法がありますか?
2009-08-11 10:03:22,621 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 1205, SQLState: 40001
2009-08-11 10:03:22,621 ERROR [org.hibernate.util.JDBCExceptionReporter] Transaction (Process ID 200) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
2009-08-11 10:03:22,621 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.LockAcquisitionException: could not delete: [dme.dm.device.Task#131]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:82)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
---cut cut cut---
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 200) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
---cut cut cut---