Я использую спящий режим, innodb и mysql. У меня есть пессимистическая блокировка (на определенную строку таблицы), полученная в начале очень длинной транзакции гибернации. Иногда, когда я запускаю программу, которая запускает эту транзакцию и работает в eclipse в автономном режиме приложения, и выполняю жесткую остановку приложения (что вызывает смерть потока), у меня возникает следующий сценарий:
MySQL не понимает, что транзакция была прервана. В следующий раз, когда я запускаю свое приложение, функция, которая получает пессимистическую блокировку (в начале этой длинной транзакции), блокируется, даже если MySQL должен понять, что эта строка разблокирована.
Единственный способ заставить все снова работать - остановить демон MySQL и перезапустить его, после чего будет получена пессимистическая блокировка.
Это действительно беспокоит меня. Это означает, что любой выход из ВМ, кроме исключения или полного завершения работы, может оставить MySQL в неработоспособном состоянии, требующем перезапуска демона MySQL. например использует обычный способ выключения и перезапуска Tomcat, который, насколько я понимаю, включает смерть потока, точно так же, как использование eclipse для прерывания работающего приложения.
Сталкивались ли с этой проблемой другие люди? Есть ли чистый способ остановить tomcat, который не требует смерти потока? Разве MySQL не должен быть невосприимчив к смерти потока в середине транзакции, получившей пессимистическую блокировку (выбрать для обновления)?
Я останавливаю tomcat с помощью $CATALINA_HOME/bin/shutdown.sh
Энди