2010-09-10 5 views
1

J'essaie d'utiliser le plugin Quartz pour Grails pour programmer un travail dans une application web sur laquelle je travaille. Utilisation de la Ramstore a bien fonctionné, mais je dois le travail à persister dans notre base de données SQLServer, ce qui a causé des problèmes ...Grails - Quartz

J'ai changé la variable jdbcStore dans QuartzConfig.groovy true, définissez la volatilité def = false dans le fichier de travail, et a utilisé le code SQL Server pour générer les tables requises dans la base de données, mais continuer à obtenir une erreur:

org.quartz.impl.jdbcjobstore.LockException: échec obtenir verrou de ligne db: ligne 1: FOR UPDATE clause autorisée uniquement pour DECLARE CURSOR. [Voir l'exception imbriquée: com.microsoft.sqlserver.jdbc.SQLServerException: Line 1: clause FOR UPDATE autorisée uniquement pour DECLARE CURSOR.]

Vous avez une idée que cela peut être dû au fait que le plug-in quartz n'est pas configuré pour un SQLServer base de données, , mais n'ont pas trouvé beaucoup sur le web à ce sujet (principalement la pleine mise en œuvre de java de quartz plutôt que des grails), et l'expérimentation avec des fichiers de configuration n'a pas aidé.

Est-ce que quelqu'un sait comment fonctionner? Et lequel des différents fichiers de configuration de Quartz utilise réellement?

Merci pour votre aide

+0

Quelle version du plug-in Quartz utilisez-vous? –

+0

Désolé Joshua, je ne travaille plus sur ce projet. Je ne me souviens pas de ce que je faisais. – WaZ

Répondre

0

J'utilise le quartz: 1.0.2 dans plusieurs projets.
Je ne persiste pas dans mes tâches, j'attribue à chaque tâche un nom unique. Ensuite, je persiste l'état de mon travail avec un domaine que je fais pour suivre l'état du travail. Par exemple, la section d'exécution de mon travail trouve son domaine de suivi d'état en utilisant jobName, qui est une valeur unique que je charge à partir d'un fichier de propriétés pour chacun de mes travaux. Ensuite, je passe l'instance FileImporter associée à ce travail à mon service qui exécute tous les états conditionnels du travail. Mon service n'est pas transactionnel, car je souhaite que l'état du travail soit immédiatement conservé. De cette façon, si je redémarre mon application, le dernier état du travail est connu, et je peux continuer à partir du point où il s'était arrêté.
Cependant, je réinitialise simplement l'état du travail pour le redémarrer depuis le début après un redémarrage du serveur Web.

Dans mon service que j'utilise

static transactional = false 

et persistent l'état immédiatement avec flush: true

fileImporter.save(failOnError: true, flush: true);