Problème d'accès à un javascrit depuis une action planifiée
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-03-2012 05:38 AM
Bonjour et bonne année à tous,
J'essaie de lancer un javascript de manière planifiée. J'ai donc créé un webscript que je peux lancer manuellement avec le résultat attendu.
J'ai poursuivi en regardant le wiki (http://wiki.alfresco.com/wiki/Scheduled_Actions).
L'action se déclenche bien toutes les minutes (confirmé par les logs) mais j'ai rencontré le même message d'erreur que dans ce message : https://forums.alfresco.com/fr/viewtopic.php?f=25&t=2846#p13029
Voici le contenu du fichier Alfresco\tomcat\shared\classes\alfresco\extension\scheduled-action-services-context.xml :
Et le fichier javascript 'maxversion.get.js' se trouve dans le référentiel à cet endroit : /Espace racine/Dictionnaire de données/Scripts Web/org/example
J'ai fait de nombreux essais sur la syntaxe de la recherche Lucene (car je pense que le problème est là) mais j'avoue ne plus savoir quoi tenter pour résoudre mon problème.
J'espère que quelqu'un y verra plus clair que moi dans mon code.
Merci
Stéphane
PS : Version Alfresco 3.4d community sous Windows XP
J'essaie de lancer un javascript de manière planifiée. J'ai donc créé un webscript que je peux lancer manuellement avec le résultat attendu.
J'ai poursuivi en regardant le wiki (http://wiki.alfresco.com/wiki/Scheduled_Actions).
L'action se déclenche bien toutes les minutes (confirmé par les logs) mais j'ai rencontré le même message d'erreur que dans ce message : https://forums.alfresco.com/fr/viewtopic.php?f=25&t=2846#p13029
11:33:00,020 User:System ERROR [quartz.core.JobRunShell] Job jobGroup.jobD threw an unhandled Exception: java.lang.NullPointerException at org.alfresco.repo.action.scheduled.CronScheduledQueryBasedTemplateActionDefinition.getNodes(CronScheduledQueryBasedTemplateActionDefinition.java:223) at org.alfresco.repo.action.scheduled.AbstractScheduledAction$JobDefinition$1.doWork(AbstractScheduledAction.java:397) at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:508) at org.alfresco.repo.action.scheduled.AbstractScheduledAction$JobDefinition.execute(AbstractScheduledAction.java:392) at org.quartz.core.JobRunShell.run(JobRunShell.java:216) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)11:33:00,020 User:System ERROR [quartz.core.ErrorLogger] Job (jobGroup.jobD threw an exception.org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: java.lang.NullPointerException] at org.quartz.core.JobRunShell.run(JobRunShell.java:227) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)Caused by: java.lang.NullPointerException at org.alfresco.repo.action.scheduled.CronScheduledQueryBasedTemplateActionDefinition.getNodes(CronScheduledQueryBasedTemplateActionDefinition.java:223) at org.alfresco.repo.action.scheduled.AbstractScheduledAction$JobDefinition$1.doWork(AbstractScheduledAction.java:397) at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:508) at org.alfresco.repo.action.scheduled.AbstractScheduledAction$JobDefinition.execute(AbstractScheduledAction.java:392) at org.quartz.core.JobRunShell.run(JobRunShell.java:216) … 1 more
Voici le contenu du fichier Alfresco\tomcat\shared\classes\alfresco\extension\scheduled-action-services-context.xml :
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'><beans> <bean id="runScriptAction" class="org.alfresco.repo.action.scheduled.SimpleTemplateActionDefinition"> <property name="actionName"> <value>script</value> </property> <property name="parameterTemplates"> <map> <entry> <key> <value>script-ref</value> </key> <!– Note that as of Alfresco 4.0, due to a Spring upgrade, the FreeMarker ${foo} entries must be escaped –> <value>\$\{selectSingleNode('workspace://SpacesStore', 'lucene', 'PATH:"/app:company_home/app:dictionary/app:webscripts/app:org/app:examples/cm:maxversion.get.js"' )\}</value> </entry> </map> </property> <property name="dictionaryService"> <ref bean="DictionaryService"/> </property> <property name="actionService"> <ref bean="ActionService"/> </property> <property name="templateService"> <ref bean="TemplateService"/> </property> </bean> <!– Run the script every minute - select the single node company home that is not used … –> <bean id="runScript" class="org.alfresco.repo.action.scheduled.CronScheduledQueryBasedTemplateActionDefinition"> <property name="transactionMode"> <value>UNTIL_FIRST_FAILURE</value> </property> <property name="compensatingActionMode"> <value>IGNORE</value> </property> <property name="searchService"> <ref bean="SearchService"/> </property> <property name="templateService"> <ref bean="TemplateService"/> </property> <property name="queryLanguage"> <value>lucene</value> </property> <property name="stores"> <list> <value>workspace://SpacesStore</value> </list> </property> <property name="queryTemplate"> <value>PATH:"/app:company_home"</value> </property> <property name="cronExpression"> <value>0 0/1 * * * ?</value> </property> <property name="jobName"> <value>jobD</value> </property> <property name="jobGroup"> <value>jobGroup</value> </property> <property name="triggerName"> <value>triggerD</value> </property> <property name="triggerGroup"> <value>triggerGroup</value> </property> <property name="scheduler"> <ref bean="schedulerFactory"/> </property> <property name="actionService"> <ref bean="ActionService"/> </property> <property name="templateActionDefinition"> <ref bean="runScriptAction"/> <!– This is name of the action (bean) that gets run –> </property> <property name="transactionService"> <ref bean="TransactionService"/> </property> <property name="runAsUser"> <value>System</value> </property> </bean></beans>
Et le fichier javascript 'maxversion.get.js' se trouve dans le référentiel à cet endroit : /Espace racine/Dictionnaire de données/Scripts Web/org/example
J'ai fait de nombreux essais sur la syntaxe de la recherche Lucene (car je pense que le problème est là) mais j'avoue ne plus savoir quoi tenter pour résoudre mon problème.
J'espère que quelqu'un y verra plus clair que moi dans mon code.
Merci
Stéphane
PS : Version Alfresco 3.4d community sous Windows XP
Labels:
- Labels:
-
Archive
15 REPLIES 15
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-05-2012 09:23 AM
Bonjour,
Merci pour l'astuce. Toutefois cela ne fonctionne pas avec ce que j'ai installé.
Est-ce que cette portion de code est correcte ?
Je vais réinstaller une version minimale d'alfresco (juste avec Share).
Stéphanae
Merci pour l'astuce. Toutefois cela ne fonctionne pas avec ce que j'ai installé.
Est-ce que cette portion de code est correcte ?
<property name="queryTemplate"> <value>PATH:"/app:company_home"</value> </property>
Je vais réinstaller une version minimale d'alfresco (juste avec Share).
Stéphanae
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-05-2012 09:37 AM
Bonjour,
Qu'est ce qui ne fonctionne pas ?
Le script est-il bien exécuté et les résultats ne sont pas ceux attendus ? N'y a-t-il pas de résultats ? Quel est le code JS que vous appelez ?
Concernant le "queryTemplate", il ne va remonter que la racine du référentiel… pas sûr que ce soit vraiment ce que vous souhaitez.
Cordialement,
Charles Le Seac'h
Qu'est ce qui ne fonctionne pas ?
Le script est-il bien exécuté et les résultats ne sont pas ceux attendus ? N'y a-t-il pas de résultats ? Quel est le code JS que vous appelez ?
Concernant le "queryTemplate", il ne va remonter que la racine du référentiel… pas sûr que ce soit vraiment ce que vous souhaitez.
Cordialement,
Charles Le Seac'h
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-05-2012 10:44 AM
Bonjour,
Dans les logs, je ne vois aucune trace de l'exécution toutes les minutes (intervalle réduit pour des raisons de test) du script. Alors que lorsqu'il y a une erreur (comme les précédentes), je vois bien une éxécution toutes les minutes. Je ne vois pas non plus le résultat de son exécution qui est la suppression de l'historique des versions de tous les documents. Cette suppression est faite par l'appel au js suivant :
La classe Java existe et fonctionne correctement car j'ai testé l'ensemble en manuel avec le résultat attendu. C'est vraiment la planification du script qui me pose problème.
Vu que la requête lucène du js me ramène tous les documents du référentiel, je ne pense pas que le queryTemplate joue un grand rôle.
Stéphane
Dans les logs, je ne vois aucune trace de l'exécution toutes les minutes (intervalle réduit pour des raisons de test) du script. Alors que lorsqu'il y a une erreur (comme les précédentes), je vois bien une éxécution toutes les minutes. Je ne vois pas non plus le résultat de son exécution qui est la suppression de l'historique des versions de tous les documents. Cette suppression est faite par l'appel au js suivant :
var docs = search.luceneSearch("@cm\\:created:[MIN TO NOW]"); for (var i=0; i<docs.length; i++) { MaxVersions.setMaxVersion(docs[i].nodeRef,2); }
La classe Java existe et fonctionne correctement car j'ai testé l'ensemble en manuel avec le résultat attendu. C'est vraiment la planification du script qui me pose problème.
Vu que la requête lucène du js me ramène tous les documents du référentiel, je ne pense pas que le queryTemplate joue un grand rôle.
Stéphane
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-05-2012 12:39 PM
Bonjour,
Il faudrait activer les logs sur, par exemple, l'ActionService et le SearchService pour vérifier que les appels ont bien lieu.
Vous pouvez également vérifier l'exécution de votre script en activant le debugger JavaScript.
Cordialement,
Charles Le Seac'h
Il faudrait activer les logs sur, par exemple, l'ActionService et le SearchService pour vérifier que les appels ont bien lieu.
Vous pouvez également vérifier l'exécution de votre script en activant le debugger JavaScript.
Cordialement,
Charles Le Seac'h
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-06-2012 03:52 AM
Bonjour,
Je vais explorer ces pistes car j'ai trouvé une solution de contournement qui est très couteuse.
J'ai créé une action dans la partie Scheduled Actions du dictionnaire de données avec comme code le code JS qui appelle ma classe. Cela fonctionne correctement. Toutefois je n'ai aucun paramétrage disponible sur l'action. Elle s'exécute donc en permanence :?
Stéphane
Je vais explorer ces pistes car j'ai trouvé une solution de contournement qui est très couteuse.
J'ai créé une action dans la partie Scheduled Actions du dictionnaire de données avec comme code le code JS qui appelle ma classe. Cela fonctionne correctement. Toutefois je n'ai aucun paramétrage disponible sur l'action. Elle s'exécute donc en permanence :?
Stéphane
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-08-2013 09:47 AM
Je me permets de relancer le débat.
Je travaille sur une version Entreprise 4.0.2.9 et je dois exécuter en tâche de fond un script de nettoyage des espaces persos.
J'ai réalisé le script et testé unitairement, il effectue ce que j'attends de lui.
Je souhaite en réaliser une tâche automatique, j'ai fait exactement comme précisé ci dessus, mais mon script ne s'execute pas depuis la tâche planifiée.
Je cherche à activer les logs pour vérifier s'il passe dans mon script mais je n'arrive pas à connaître les logs à activer.
ScriptAction ou autre ?
D'avance merci pour vos retours
Hervé
Je travaille sur une version Entreprise 4.0.2.9 et je dois exécuter en tâche de fond un script de nettoyage des espaces persos.
J'ai réalisé le script et testé unitairement, il effectue ce que j'attends de lui.
Je souhaite en réaliser une tâche automatique, j'ai fait exactement comme précisé ci dessus, mais mon script ne s'execute pas depuis la tâche planifiée.
Je cherche à activer les logs pour vérifier s'il passe dans mon script mais je n'arrive pas à connaître les logs à activer.
ScriptAction ou autre ?
D'avance merci pour vos retours
Hervé