Debug методов в Documentum Process Builder’е

    Добрый день!
    По роду работы (Documentum developer) столкнулся с необходимостью отлаживать процессы, которые создаю в Process Builder. Нашёл простой способ это сделать. И вот этим знанием хотелось бы поделится с разработчиками Documentum, которые наверняка присутствуют на Хабре.

    Введение


    Рассмотрим процесс локальной отладки метод, вызываемых активностями в Process Builder’е (PB) в режиме в Debug. Причины этого очевидны – для отладки и проверки на минимальную работоспособность методов не нужно «заливать» их в Java Method Server (JMS) с его рестартом. И ладно если с ним работаешь только ты один, а если несколько человек одновременно разрабатывают свои методы?

    Что нужно?


    Process Builder версии 6.6 и выше (проверено и на 6.7). IDE с поддержкой удалённого debug’а.
    В строку запуска PB добавить параметры запуска для debug режима -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4444,server=y,suspend=n. Так как после это строка запуска стала слишком длинной и не вмещается в ярлыке (здесь говорим о Windows 7), то нужно создать bat-файл для запуска PB. Содержать он будет следующие строки:

    cd «C:\Program Files\Documentum\bpm\classes»
    «C:\Program Files\Documentum\jreForPB\bin\javaw.exe» -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4444,server=y,suspend=n -Xms128m -Xmx512m -Dfile.encoding=UTF-8 -Dawt.useSystemAAFontSettings=on -cp ".;lib\bpm.jar;..\..\dctm.jar;C:\Documentum\config" WorkflowEditor -locale en_US

    Все методы, которые будут запускать в режиме отладки PB (а не только те, которые буду отлаживать в IDE!) и которые используют сессию в DQL запросах, должны получать её не через метод workitem.getSession(), а полностью через подключение к контент серверу. Это связанно с тем, что объект DfQuery при выполнении DQL-запроса использует специфический класс ISession, который присутствует только в объекте DfSession. А PB при отладке использует свои реализации IDfSessionManager и IDfSession. В которых класс ISession отсутствует. В результате чего при использовании объекта сессии, полученного с помощью workitem.getSession(), в DfQuery происходит ошибка приведения классов (ClassCastException).
    Скопировать jar файлы с кодом отлаживаемых методов и зависимыми классами (естественно, кроме DFC) в директорию <ПУТЬ К ДИРЕКТОРИИ BPM> bpm\classes\custom\. (e.g. C:\Program Files\Documentum\bpm\classes\custom\)

    Используемые методы должны быть инсталлированы на контент-сервер. Т.е. нужно создать в Composer’е артефакт типа Method с корректным путём к классу метода и инсталлировать его на контент сервер.

    В PB создать процесс с автоматической активностью, которая будет выполнять отлаживаемый метод.

    Запуск


    Для, собственно, отладки нужно запустить PB с указанными выше параметрами. Присоединиться в IDE к порту debug’а. Поставить breakpoint на нужном методе. В PB запустить отлаживаемый процесс в режиме debug. (Кнопка Debug process) Как только в процессе на экране PB дойдёт выполнение до автоматической активности, которая запускает отлаживаемый метод (в котором есть breakpoint), в IDE запустится процесс отладки. Всё после этого можно отлаживать код как обычно.

    Ограничения


    Поведение как Java методов, так и активностей в режиме отладки в PB отличается от того, что происходит при «живом» выполнении на BPM и JMS. Это выражается не только специфической реализацией сессии. Так же мною была замечена невозможность выполнить активности для запуска дочернего процесса.

    Комментарии 1

      0
      Кстати, ClassCastException исправили. По крайней мере нам хотфикс высылали, думаю его в будущей патч включили.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое