Запуск javascript-а по расписанию

Добрый день!

По мотивам данной темы пробую автоматически каждую минуту запускать тестовый джава скрипт.

Файл test.js, который просто создает директорию и в ней некий текстовый лог, загружен из-под админа через вэб-интерфейс альфрески в CompanyHome/Data Dictionary/Scripts

В scheduled-action-services-context.xml я указываю путь к скрипту:

\$\{selectSingleNode('workspace://SpacesStore', 'lucene', 'PATH:"/app:company_home/app:dictionary/app:scripts/cm:test.js"' )\}

К сожалению, скрипт не стартуется, выпадает ошибка: No nodes selected

The problematic instruction: ---------- ==> ${selectSingleNode('workspace://SpacesStore', 'lucene', 'PATH:"/app:company_home/app:dictionary/app:scripts/cm:test.js"' )} [on line 1, column 1 in string://fixed]

---------- Java backtrace for programmers: ---------- freemarker.template.TemplateModelException: No nodes selected "No nodes selected
The problematic instruction:
----------
==> ${selectSingleNode('workspace://SpacesStore', 'lucene', 'PATH:"/app:company_home/app:dictionary/app:scripts/cm:test.js"' )} [on line 1, column 1 in string://fixed]
----------

Java backtrace for programmers:
----------
freemarker.template.TemplateModelException: No nodes selected"

Не подскажите, из-за чего может произойти такая ошибка?

Комментарии

fufler аватар

 Никогда не пробовал настраивать Sheduled Actions, так что помочь не могу. Если нужно быстрое (пусть и не совсем хорошее) решение, то можно сделать зацикленный процесс с таймером и в transition поместить нужный js-код.

Angelina аватар

История у меня такая: один день в неделю должен подниматься мой java-backed вэб скрипт, собирающий всю историю заданий под документам в один файл в репозитории. Вот для этого я и начала изучать запуск по крону в альфреске.

Боюсь, что процесс не поможет, ибо процесс - это задание на юзера. Т е юзер, в данном случае явно админ, будет видеть этот процесс у себя на столе, что не очень удобно (а, кроме того, опасно тем, что процесс может быть вручную по-глупости отключен)  Да и судя по т ому, как развивается техзадание, хаки могут перестать помогать и надо кардинально еще и свои акшены создавать.

Самое "смешное", что у меня именно пример из документации не работает :(

Попробую снять экранирование символов, может, дело в этом...

fufler аватар

 Что вы имеете в виду под «один день в неделю должен подниматься мой java-backed вэб скрипт»? Процесс вполне с этим справится (насколько это решение верное, я сказать не могу). Делается примерно так. Задча назначается на пользователя (admin, к примеру), а потом в конфиге Share прячется из интерфейса. После этого единственный способ убить этот процесс — workflow console.

Angelina аватар

У меня есть java-backed web script. Он собирает историю прохождения документов и записывает в виде текстового файла в репозитории (новые АПИ позволяют вытаскивать completed tasks всех юзеров системы со всеми свойствами). Этот вэб скрипт работает из-под сервисов альфрески /alfresco/services/my/myscrpt

В CompanyHome/Data Dictionary/Scripts/ лежит java script, который вызывает вэб скрипт таким образом:

XMLHttpRequest
                .open("GET", "http://http://localhost:8080/alfresco/service/my/myscript",
                         false, "user", "pass");
    XMLHttpRequest.send("");
    xmlhttpresult = XMLHttpRequest.getResponseText();
    XMLHttpRequest.close();

Я хочу, чтобы альфреско каждую пятницу запускал этот java script

На данный момент я всего лишь пробую пример из документации. И он-то, паршивец, и не работает :) Нашла этот баг (https://issues.alfresco.com/jira/browse/ALF-9981)

Видимо, я все же попробую так, как Вы сказали. Спасибо за совет.

fufler аватар

 А зачем собирать через веб-скрипт? Я этот момент не понимаю. Может лучше написать свой root-scope object, при помощи которого из js выполнять все необъодимые операции?

Angelina аватар

О написании своего root-scope object-а даже и не подумала, если честно. Как-то уперлась в то, что стандартные JavaScript API позволяют собирать историю только по текущему юзеру, а не по всем.

В данном случае, я думаю, запускать сборщик так будет, действительно, удобнее. Правда, в конечном счете опять все упрется в запуск через шедулер, поскольку задача запускать скрипт по расписанию осталась, но хотя бы избавлюсь от дополнительных библиотек для вызова XMLHttpRequest-а

Насколько я понимаю, мне для моего задания нужно просто сконфигурировать Service Registry как Javascript Root Object (как здесь описано)? И в нем я просто опишу необходимые "геттеры". Я правильно понимаю?

fufler аватар

Не совсем так. Посмотрите на этот пример, а отсюда возьмите передачу (dependency injection) тех зависимостей, что вам нужны (serviceRegistry, к примеру).

Angelina аватар

Спасибо большое!