我正在使用hibernate,以及innodb和mysql。我在一個非常長的hibernate事務開始時獲得了悲觀鎖(在特定的錶行上)。有時候,當我運行啓動這個事務的程序,並在獨立應用程序模式下運行在eclipse中,並且強制停止應用程序(強制執行一個threaddeath)時,我有以下情形:mysql事務悲觀鎖已損壞
MySQL意識到交易被中止了。下一次運行我的應用程序時,即使MySQL應該意識到該行已解鎖,獲取悲觀鎖(在該長事務開始時)的函數也會被阻止。
讓事情重新開始的唯一方法是停止MySQL守護進程並重新啓動它,之後獲得悲觀鎖。
這真的讓我擔心。這意味着除了異常或乾淨關閉以外的任何VM退出都可能使MySQL處於斷開狀態,需要重新啓動MySQL守護進程。例如,正在使用正常的方式來關閉和重新啓動Tomcat,這在我的理解中涉及到一個線程死亡,就像使用eclipse來中止正在運行的應用程序一樣。
有其他人遇到此問題嗎?有沒有一種乾淨的方式來阻止不涉及threaddeath的tomcat?在獲得悲觀鎖的事務中選擇更新時,MySQL是否應該免於線程死鎖?
我停止Tomcat與$ CATALINA_HOME /斌/ shutdown.sh
安迪
你知道了嗎?有沒有辦法確定問題行並手動解鎖? (我想我們可能會看到類似的問題) – chrishomer 2011-02-28 22:25:26