Вопрос или проблема
У меня проблема с Quartz, он выдает java.sql.SQLException
с такое сообщение об ошибке:
ОШИБКА [PortalJobStore:3799] ClusterManager: Ошибка управления кластером: Ошибка при получении блокировки строки в базе данных: Строка 1: клаузула FOR UPDATE разрешена только для DECLARE CURSOR.
Очевидно, что Quartz в Liferay Enterprise Edition
пытается использовать SQL, который не разрешен в MSSQL.
Что можно сделать, чтобы это исправить?
Вы можете указать Quartz, какой SQL использовать, добавив свойство org.quartz.jobStore.selectWithLockSQL
в файл portal-ext.properties
следующим образом:
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?
Ответ или решение
Проблема, с которой вы столкнулись, связана с использованием библиотеки Quartz в Liferay Enterprise Edition и ошибкой, возникающей при попытке управления кластерами. Ошибка java.sql.SQLException
с сообщением ERROR [PortalJobStore:3799] ClusterManager: Error managing cluster: Failure obtaining db row lock: Line 1: FOR UPDATE clause allowed only for DECLARE CURSOR
указывает на то, что Quartz пытается выполнить SQL-запрос, который не поддерживается в SQL Server.
Для решения этой проблемы вам необходимо изменить SQL-запрос, который Quartz использует для получения блокировок в базе данных SQL Server. Для этого вы можете задать свой собственный SQL-запрос с помощью свойства org.quartz.jobStore.selectWithLockSQL
в файле конфигурации portal-ext.properties
. Это позволит вам указать корректный SQL-запрос, который будет совместим с SQL Server.
Вот шаги, которые вам нужно выполнить:
-
Откройте файл
portal-ext.properties
, который находится в каталоге вашего Liferay экземпляра. -
Добавьте следующую строку в конец файла:
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WITH (UPDLOCK) WHERE LOCK_NAME = ?
-
Сохраните изменения в файле
portal-ext.properties
. -
Перезапустите ваш Liferay сервер, чтобы изменения вступили в силу.
В результате, после выполнения этих шагов Quartz будет использовать указанный вами SQL-запрос для получения блокировок, что должно устранить возникшую ошибку и обеспечить корректное управление кластерами в вашей системе.
Если после внесения изменений проблема все еще не решена, рекомендуется проверить логи на наличие других сопутствующих ошибок или внимательно изучить конфигурацию вашей базы данных и соответствие версий Liferay и SQL Server.