Почему процесс работает только до элемента таймера, а дальше нет?

Добрый день.
Столкнулись с таким странным поведением в bpm'online версии 7.2 - есть процесс, который запускается на изменение поля у объекта, потом кое-что меняется и запускается таймер для задержки, и после этого читается измененный объект и проверяем его поля, после чего выходим. И почему-то код отрабатывает только до таймера, а после этого ничего не происходит. Сужу по логам и по тому какой результат ожидаю.
При этом на другом сайте аналогичный процесс отрабатывает корректно.
Можете подсказать в чем может быть дело, куда копать, куда смотреть?
Схема процесса:

Нравится

12 комментариев

Здравствуйте!

Поищите причину в логах сервера. По умолчанию они хранятся в C://Windows/Temp/bpmonline.

Вам необходимы логи Quartz.

Как раз проблема в том, что в логах есть только что-то наподобие нижеуказанного, но про нужный процесс ничего.
Хотя как я понимаю должны быть строчки Execute - ProcessStart и Execute - ProcessFinish. Это есть, но для другого процесса.

2015-09-29 10:53:21,562 [15264] INFO  USER Quartz.Impl.AdoJobStore.JobStoreTX Instantiate - JobStoreTX initialized.
2015-09-29 10:53:21,578 [15264] INFO  USER Quartz.Core.QuartzScheduler Initialize - Scheduler meta-data: Quartz Scheduler (v2.1.2.400) 'BPMonlineQuartzScheduler' with instanceId 'auto'
  Scheduler class: 'Quartz.Core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'Quartz.Simpl.SimpleThreadPool' - with 3 threads.
  Using job-store 'Quartz.Impl.AdoJobStore.JobStoreTX' - which supports persistence. and is clustered.
 
2015-09-29 10:53:21,579 [15264] INFO  USER Quartz.Impl.StdSchedulerFactory Instantiate - Quartz scheduler 'BPMonlineQuartzScheduler' initialized
2015-09-29 10:53:21,579 [15264] INFO  USER Quartz.Impl.StdSchedulerFactory Instantiate - Quartz scheduler version: 2.1.2.400
2015-09-29 11:17:37,676 [8480] DEBUG USER Quartz.Impl.AdoJobStore.StdRowLockSemaphore ObtainLock - Lock 'TRIGGER_ACCESS' is desired by: 
2015-09-29 11:17:37,796 [8480] DEBUG USER Quartz.Impl.AdoJobStore.StdRowLockSemaphore ExecuteSQL - Lock 'TRIGGER_ACCESS' is being obtained: 
2015-09-29 11:17:37,799 [8480] DEBUG USER Quartz.Impl.AdoJobStore.StdRowLockSemaphore ExecuteSQL - Lock 'TRIGGER_ACCESS' is being obtained: 
2015-09-29 11:17:37,800 [8480] DEBUG USER Quartz.Impl.AdoJobStore.StdRowLockSemaphore ObtainLock - Lock 'TRIGGER_ACCESS' given to: 
2015-09-29 11:17:40,027 [8480] DEBUG USER Quartz.Impl.AdoJobStore.StdRowLockSemaphore ReleaseLock - Lock 'TRIGGER_ACCESS' returned by: 
2015-09-29 11:20:00,889 [BPMonlineQuartzScheduler_Worker-1] INFO  USER Terrasoft.Core.Scheduler.RunProcessJob Execute - ProcessStart [processSchemaName:ContactProcess, processElementUId , userName:USER, workspaceName:Default]
2015-09-29 11:21:03,648 [BPMonlineQuartzScheduler_Worker-1] INFO  USER Terrasoft.Core.Scheduler.RunProcessJob Execute - ProcessFinish [processSchemaName:ContactProcess, processElementUId , userName:USER, workspaceName:Default]
2015-09-29 11:21:51,604 [10724] DEBUG USER Quartz.Impl.AdoJobStore.StdRowLockSemaphore ObtainLock - Lock 'TRIGGER_ACCESS' is desired by: 
2015-09-29 11:21:51,606 [10724] DEBUG USER Quartz.Impl.AdoJobStore.StdRowLockSemaphore ExecuteSQL - Lock 'TRIGGER_ACCESS' is being obtained: 

Если про процесс ничего не указано в данной таблице, то необходимо проверить доходит ли процесс до элемента "Таймер".

В том-то и дело, что до таймера стоит блок сценария, в котором пишутся логи. Т.е. процесс запускается, но уже потом я не вижу, что он работает после таймера. Словно процесс и не попадает в очередь к quartz.
Если вы подскажите, в какой таблице можно посмотреть запланированные процессы к выполнению или подскажите где почитать про это, буду весьма признателен. Так как уже голову сломал, что собственно не так. И почему на одном сервере это работает, а на другом тоже самое нет.

Здравствуйте, Александр. Процессы, запускающиеся по расписанию и содержащие таймер, записываются в таблицу qrtz_triggers.

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

2015-09-30 16:40:40,227 [BPMonlineQuartzScheduler_Worker-2] INFO  user Terrasoft.Core.Scheduler.RunProcessJob Execute - ProcessStart [processSchemaName:, processElementUId 743f3d6f-802f-4d9d-9fe5-3064f62a35ed, userName:userName, workspaceName:Default]
2015-09-30 16:40:44,816 [BPMonlineQuartzScheduler_Worker-2] INFO  user Terrasoft.Core.Scheduler.RunProcessJob Execute - ProcessFinish [processSchemaName:, processElementUId 743f3d6f-802f-4d9d-9fe5-3064f62a35ed, userName:userName, workspaceName:Default]

И в списке по запросу  select distinct TRIGGER_NAME from qrtz_triggers если судить из названий, то я не вижу своего процесса. Может быть есть какая-то иная таблица, или проблема в том, что судя по логу не установлено поле processSchemaName, но как его установить? Откуда его берет процесс?

Поставьте журналируемый элемент "Чтение данных" перед таймером. Запустите процесс повторно. Процесс дошел до чтения данных?

Не понял, что имеется ввиду под "журналируемый элемент "Чтение данных""?
Если речь о элементе загрузки объекта, то на мой взгляд это не корректно. Так как за время задержки по таймеру, объект может измениться. Замечу, что без таймера процесс отрабатывает и на сервере, где с тамером не работает. Т.е. вся проблема когда добавляем таймер.
Для проверки наличия джобов, сделал ветку в которой с задержкой по Sleep опрашивалась таблица qrtz_triggers, но своей джобы я там не увидел. Процесс выглядит так:
Что еще можно сделать, для понимая ситуации?

1) Добавьте "Чтение данных" перед таймером. У элемента "Чтение данных" должен быть установлен признак "Журналировать" (в свойствах элемента)
2) Запустите процесс
3) Сделайте скриншот диаграммы процесса в журнале процессов и опубликуйте его здесь, пожалуйста.

Сейчас сделаю, и .. возникла проблема. Журнал процессов не работает. При переходе на закладку в Инструментах - "Журнал процессов", выдается пустая страница с ошибкой "В работе приложения BPMonline возникла ошибка. Приносим извинения за неудобства."
В логах появляется следующая ошибка:

Exception Message: Элемент с идентификатором "0d4daf80-dbef-4fef-9c8d-2e942b0a9965" не найден
Exception Type: Terrasoft.Common.ItemNotFoundException
Exception Source: Terrasoft.Core
 
Exception Stack Trace:
   at Terrasoft.Core.ManagerItemCollection`1.GetByUId(Guid uid)
   at Terrasoft.Core.Manager`2.GetInstanceByUId(Guid uid)
   at Terrasoft.WebApp.MainPageEventsProcess`1.InitScriptTaskExecute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
   at Terrasoft.WebApp.MainPageEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.WebApp.MainPageEventsProcess`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
   at Terrasoft.Core.Process.ProcessFlowElement.OnExecuted(ProcessActivityAfterEventArgs e)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
   at Terrasoft.WebApp.MainPageEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.WebApp.MainPageEventsProcess`1.ThrowEvent(ProcessExecutingContext context, String message)
   at Terrasoft.UI.WebControls.PageSchemaUserControl.ThrowEvent(String message)
   at Terrasoft.UI.WebControls.Controls.PageContainer.LoadFromAssembly()
   at Terrasoft.UI.WebControls.Controls.PageContainer.LoadUserControl()
   at Terrasoft.UI.WebControls.Controls.PageContainer.OnInit(EventArgs e)
   at System.Web.UI.Control.InitRecursive(Control namingContainer)
   at System.Web.UI.Control.InitRecursive(Control namingContainer)
   at System.Web.UI.Control.InitRecursive(Control namingContainer)
   at System.Web.UI.Control.InitRecursive(Control namingContainer)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

И судя по всему эта страница вообще не работала изначально, просто раньше к ней как-то ни кто не обращался.
Может быть вы подскажите куда смотреть в базе, в какую таблицу? В таком случае смогли бы выгрузить диаграмму.

Александр, смотреть нужно в SysProcessLog. Очень сложно понять в чем проблема. Предлагаю Вам зарегистрировать обращение, оправив письмо по адресу support [at] terrasoft.ru, приложив логи сервера для более детального анализа.

Спасибо за ответы. К сожалению в таблице SysProcessLog никакой ценной информации не обнаружил :'(
И после обсуждения и обдумывания пришлось отказаться от таймера, и реализовать это через потоки с задержкой. По крайней мере, это работает. Жаль только, что приходится столько времени тратить на "борьбу" с bpm.

Показать все комментарии