Проблема с Quartz и SQL Server в Liferay EE

Вопрос или проблема

У меня проблема с 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.

Вот шаги, которые вам нужно выполнить:

  1. Откройте файл portal-ext.properties, который находится в каталоге вашего Liferay экземпляра.

  2. Добавьте следующую строку в конец файла:

    org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WITH (UPDLOCK) WHERE LOCK_NAME = ?
  3. Сохраните изменения в файле portal-ext.properties.

  4. Перезапустите ваш Liferay сервер, чтобы изменения вступили в силу.

В результате, после выполнения этих шагов Quartz будет использовать указанный вами SQL-запрос для получения блокировок, что должно устранить возникшую ошибку и обеспечить корректное управление кластерами в вашей системе.

Если после внесения изменений проблема все еще не решена, рекомендуется проверить логи на наличие других сопутствующих ошибок или внимательно изучить конфигурацию вашей базы данных и соответствие версий Liferay и SQL Server.

Оцените материал
Добавить комментарий

Капча загружается...