@MaxLich
java developer

Почему у меня появляются ошибки, если в bpm-схеме после таймера идёт service task или script task (Alfresco's Activiti 6)?

Вопрос по Alfresco's Activiti 6. Если в схеме ставлю после таймера (intermediate timer catching event или boundary timer event) стоит блок service task или script task, то сыпятся ошибки, и процесс дальше не идёт. Если стоит блок service task, то такая ошибка возникает:

couldn't instantiate <полное_имя_класса>


где <полное_имя_класса> - имя класса, прописанное у блока service task в свойстве class.

Если script task - то такая:

Can't find scripting engine for 'groovy'


При этом класс для service task в classpathесть, и библиотека для движка groovyтоже подключена. Самое интересное, что эти ошибки сыпятся не всегда, и в 1 из 5-10 случаев всё срабатывает. Закономерность не нашёл.

ЗЫ Пробовал работать с таймерами иservice task и в своем рабочем проекте (с RESTи Spring Web Mvc), и в простеньком тестовом приложение, написанном на Swing. Ошибки возникают и там, и там.

Если описывать подробно, то для решения данной проблемы были попробовано следующее:

  • В тестовом приложении:
    - в директорию src/main/java помещён класс
    WEB-INF.classes.<пакеты_класса>.<короткое_имя_класса>
    (причём в файле самого класса в packageбыло прописано <пакеты_класса>) - не помогло
    - в директорию src/main/java помещена директория WEB-INF/classes/<пакеты_класса> со скомпилированным классов внутри (причём в файле самого класса в packageтакже было прописано <пакеты_класса>) - не помогло
  • в рабочем проекте в директорию src/main/java добавлен класс <пакеты_класса>. <короткое_имя_класса> (причём в файле самого класса в packageбыло прописано <пакеты_класса>) - не помогло


При этом в конечном архиве с приложением (jarили warкласс находился в директории WEB-INF/classes/<пакеты_класса>). При этом в рабочем проекте в зависимостях (и, значит, в директории WEB-INF/lib или в директории libсервера Tomcat) лежал джарник с данным классом, расположенным в нужном пакете, и это тоже не помогло.

ЗЫ Пример моего тестового определения процесса:

spoiler
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
  <process id="MaxShulTest_v20" name="MaxShulTest" isExecutable="true">
    <documentation>test process</documentation>
    <startEvent id="startEvent1"></startEvent>
    <userTask id="Task1" name="Task1"></userTask>
    <userTask id="Task4" name="Task4"></userTask>
    <userTask id="Task2" name="Task2"></userTask>
    <sequenceFlow id="sid-FEBA8018-5838-4AF2-8AE5-DED45EF36229" sourceRef="Task1" targetRef="Task2"></sequenceFlow>
    <sequenceFlow id="sid-A71A6EB8-293E-4EA7-A876-670C8E4ABF7C" sourceRef="Task2" targetRef="ExclusiveGateway1"></sequenceFlow>
    <sequenceFlow id="sid-1691D37B-9B00-452F-B031-124B3845912B" sourceRef="Task4" targetRef="ExclusiveGateway1"></sequenceFlow>
    <endEvent id="endEvent1"></endEvent>
    <sequenceFlow id="sid-EAC37DEB-9666-407E-8EE0-27C11CEC4302" sourceRef="ExclusiveGateway1" targetRef="endEvent1"></sequenceFlow>
    <exclusiveGateway id="ExclusiveGateway1"></exclusiveGateway>
    <boundaryEvent id="boundary_timer1" attachedToRef="Task1" cancelActivity="true">
      <timerEventDefinition>
        <timeDuration>PT1M</timeDuration>
      </timerEventDefinition>
    </boundaryEvent>
    <sequenceFlow id="sid-88CC1D13-0907-44CC-ACAE-6E2FC01C8A3F" sourceRef="startEvent1" targetRef="service_task_1"></sequenceFlow>
    <serviceTask id="service_task_1" name="service_task_1" activiti:class="ru.maxlich.app.test.activiti.model.service.LogDelegateService"></serviceTask>
    <sequenceFlow id="sid-B9705ABC-78B3-460A-80ED-613EE3147491" sourceRef="service_task_2" targetRef="Task1"></sequenceFlow>
    <intermediateCatchEvent id="timer_1" name="timer_1">
      <timerEventDefinition>
        <timeDuration>PT3M</timeDuration>
      </timerEventDefinition>
    </intermediateCatchEvent>
    <sequenceFlow id="sid-49554231-BC08-4237-8B48-6D5484289319" sourceRef="service_task_1" targetRef="timer_1"></sequenceFlow>
    <sequenceFlow id="sid-7C4E0E46-E680-45F2-847F-8C37FFB16C53" sourceRef="timer_1" targetRef="service_task_2"></sequenceFlow>
    <serviceTask id="service_task_2" name="service_task_2" activiti:class="ru.maxlich.app.test.activiti.model.service.LogDelegateService"></serviceTask>
    <sequenceFlow id="sid-727BA009-3FE2-48DE-B41E-693FCE3D2F53" sourceRef="boundary_timer1" targetRef="service_task_3"></sequenceFlow>
    <serviceTask id="service_task_3" name="service_task_3" activiti:class="ru.maxlich.app.test.activiti.model.service.LogDelegateService"></serviceTask>
    <sequenceFlow id="sid-7F9D801A-5C8F-4623-987E-2E3FC936126E" sourceRef="service_task_3" targetRef="Task4"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_MaxShulTest_v20">
 //остальные xml-теги
  </bpmndi:BPMNDiagram>
</definitions>
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
@MaxLich Автор вопроса
java developer
Нашёл причину ошибки. Параллельно был запущен Activiti Modeler, который использовал ту же базу. Я остановил это приложение, и всё начало срабатывать без ошибок.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы