2013-12-18 2 views
2

Я пытаюсь использовать последний плагин из кварца от Grails: quartz: 1.0.1.Ошибка плагина Grails Quartz с jdbcStore

Он работает, если я покинул jdbcStore = false, если я установил значение true. QuartzConfig.groovy:

quartz { 
     autoStartup = true 
     jdbcStore = true 
     waitForJobsToCompleteOnShutdown = true 
     exposeSchedulerInRepository = false 

    props { 
     scheduler.skipUpdateCheck = true 
    } 
    } 

Вот файл свойств:

org.quartz.scheduler.instanceName reporting_test 
    org.quartz.scheduler.instanceId AUTO 

    org.quartz.threadPool.class org.quartz.simpl.SimpleThreadPool 
    org.quartz.threadPool.threadCount 5 
    org.quartz.threadPool.threadPriority 5 

    org.quartz.jobStore.misfireThreshold 60000 

    org.quartz.jobStore.class org.quartz.impl.jdbcjobstore.JobStoreTX 
    org.quartz.jobStore.driverDelegateClass org.quartz.impl.jdbcjobstore.StdJDBCDelegate 

    org.quartz.jobStore.useProperties false 
    org.quartz.jobStore.tablePrefix QRTZ_ 
    org.quartz.jobStore.isClustered true 
    org.quartz.jobStore.clusterCheckinInterval 5000 

    org.quartz.plugin.shutdownhook.class org.quartz.plugins.management.ShutdownHookPlugin 
    org.quartz.plugin.shutdownhook.cleanShutdown true 

Я пытался экспериментировать с установкой Datasource как я предпочел бы использовать мой по умолчанию DS установлен в DataSource.groovy , Независимо от настроек для источника данных, я все равно получаю следующее сообщение об ошибке при запуске.

 2013-12-18 13:43:14,693 [localhost-startStop-1] ERROR context.GrailsContextLoader - Error initializing the application: org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: Line 1: FOR UPDATE clause allowed only for DECLARE CURSOR. [See nested exception: com.microsoft.sqlserver.jdbc.SQLServerException: Line 1: FOR UPDATE clause allowed only for DECLARE CURSOR.] 
     org.codehaus.groovy.runtime.InvokerInvocationException: org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: Line 1: FOR UPDATE clause allowed only for DECLARE CURSOR. [See nested exception: com.microsoft.sqlserver.jdbc.SQLServerException: Line 1: FOR UPDATE clause allowed only for DECLARE CURSOR.] 
      at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
      at java.lang.Thread.run(Thread.java:744) 
     Caused by: org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: Line 1: FOR UPDATE clause allowed only for DECLARE CURSOR. [See nested exception: com.microsoft.sqlserver.jdbc.SQLServerException: Line 1: FOR UPDATE clause allowed only for DECLARE CURSOR.] 
      at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:157) 
      at org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:113) 
      at org.quartz.impl.jdbcjobstore.JobStoreCMT.executeInLock(JobStoreCMT.java:238) 
      at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1086) 
      at org.quartz.core.QuartzScheduler.addJob(QuartzScheduler.java:969) 
      at org.quartz.core.QuartzScheduler.addJob(QuartzScheduler.java:958) 
      at org.quartz.impl.StdScheduler.addJob(StdScheduler.java:268) 
      at QuartzGrailsPlugin.scheduleJob(QuartzGrailsPlugin.groovy:268) 
      at QuartzGrailsPlugin$_closure5_closure23.doCall(QuartzGrailsPlugin.groovy:248) 
      at QuartzGrailsPlugin$_closure5.doCall(QuartzGrailsPlugin.groovy:247) 
      ... 4 more 
     Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Line 1: FOR UPDATE clause allowed only for DECLARE CURSOR. 
      at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) 
      at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) 
      at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:96) 
      ... 13 more 

Таблицы в моей базе данных. Я фактически использовал их с плагином quartz2 для grails, но по разным причинам решил попробовать этот плагин.

Любые идеи относительно того, что я настраиваю неправильно?

ответ

5

Найден ответ.

Существует запрос, который в настоящее время работает, чтобы заблокировать строки, в этом случае при неудачном это было:

SELECT * FROM QRTZ_LOCKS WHERE SCHED_NAME = 'reporting_test' AND LOCK_NAME = 'STATE_ACCESS' FOR UPDATE 

Команда FOR UPDATE не работает для MSSQL базы данных. Я обнаружил, что использовал неверный делегат. Я переключил свое имущество на:

org.quartz.jobStore.driverDelegateClass org.quartz.impl.jdbcjobstore.MSSQLDelegate 

Это сработало, надеюсь, что это поможет кому-то еще.

+0

Что значит «переключил мою собственность»? –

+0

@KorayTugay В конфигурационном файле для вашего проекта кварца у вас будут настройки, которые настраивают планировщик кварца. Он означает, что он изменил их, чтобы использовать 'MSSQLDelegate'. Я использую кварц в веб-проекте, поэтому свойство, которое мне нужно изменить, найдено в моем Web.config. – techvice

+0

@techvice Я вижу, спасибо. –

Смежные вопросы