Пример конфигурации: создание удалённого обработчика событий¶
Автор: Виталий Шакуров
Компания: Janet systems
В приведенном примере мы создадим:
- janet-модуль содержащий удалённый обработчик события возникающего при выполнении бизнес-процесса
- описание бизнес-процесса содержащее локальный обработчик события который позволяет делегировать обработку события в любой janet-модуль
- клиентскиое приложение создающее экземпляр этого бизнес-процесса и инициирующее запуск созданого экземпляра процесса.
- Пример конфигурации: создание удалённого обработчика событий
- Требования к окружению
- Подготовка к работе
- Создание и конфигурирование модуля содержащего _удалённый обработчик события_
- Создание и конфигурирование _описания бизнес-процесса_
- Создание клиентского приложения
- Запуск клиентского приложения и результаты работы
Требования к окружению¶
- JDK версии 1.5 или выше можно загрузить по адресу. Рекомендуем использовать последнюю доступную версию JDK. Далее для ссылок на место установки JDK будем использовать следующее обозначение
$JAVA_HOME. - ant версии 1.6 или выше доступен по адресу. Рекомендуем использовать последнюю доступную версию ant. Далее для ссылок на место установки ant будем использовать следующее обозначение
$ANT_HOME. - Последнюю версию iJaNet Server можно загрузить по адресу (ссылки вида
janet-installer-5.x.x.jar). Процесс установки платформы iJaNet рассмотрен в п 3.3 Платформа iJaNet V5. Общее описание. Далее для ссылок на место установки платформы будем использовать следующее обозначение$JANET_HOME. - Создать папку в которую будет помещены создаваемые janet-модули и описание бизнес-процесса. Далее ссылки на эту папку будем обозначать
$JANET_PROJECTS. - Последнюю версию iJaNet SDK for java можно загрузить по адресу (ссылки вида janet-sdk-5.x.x.zip).
Подготовка к работе¶
Перейдите в папку $JANET_PROJECTS
cd $JANET_PROJECTS
Распакуйте содержимое архива SDK в текущую папку.
unzip -o janet-sdk-5.x.x.zip
В результате операции внутри папки $JANET_PROJECTS будет создано следующее дерево каталогов:
$JANET_PROJECTS | +--[doc] | +--[pdtemplate] | +--[template] | ---LICENSE | ---README | ---janet.ear
Создание и конфигурирование модуля содержащего удалённый обработчик события¶
Перейдите в папку $JANET_PROJECTS/template/src
cd $JANET_PROJECTS/template/src
и создайте в ней папку actions
mkdir actions
Скопируйте файл NodeActionHandlerRemote.java в созданую папку. Затем отредактируйте файл $JANET_PROJECTS/template/build.xml. Найдите в нём строку:
<target name="build-deploy" depends="build-ear" if="server.deploydir">
и перед ней вставьте
<property name="server.deploydir" value="$JANET_HOME/Server/server/janet/deploy" />
Замечание: здесь и далее все ссылки в конфигурационных файлах на переменные окружения вида
$JANET_HOMEнужно заменять значениями этих переменных. Так в примере выше значение атрибутаvalue="/path/to/janet/Server/server/janet/deploy"
Далее необходимо сконфигурировать сервис позволяющий делегировать обработку события возникающего при выполнении бизнес-процесса обработчику находящемуся внутри создаваемого модуля. Для этого в файле $JANET_PROJECTS/template/resources/jws-module.xml внутри блока <local-services> нужно добавить следущее описание службы:
1 <service name="remotebpm" publish="true">
2 <factory-class>jws.core.services.GenericServiceFactory</factory-class>
3 <service-interface>janet.services.bpm.IJBPMRemoteHandler</service-interface>
4 <parameters>
5 <param name="impl.class" type="string">janet.services.bpm.impl.JBPMRemoteHandlerService</param>
6 </parameters>
7 </service>
Это единственная служба которая необходима для работы модуля, поэтому из блока <local-services> нужно удалить описание службы remoting, которое имеет следующий вид
1 <service name="remoting" publish="true">
2 ..
3 </service>
также из файла нужно полностью удалить блоки <remote-module-ref> и <scheduled-jobs> и изменить значение параметров из секции <module-properties>
1 <param name="transport.compress" type="boolean">false</param>
2 <param name="transport.encrypt" type="boolean">false</param>
на противоположные значения
1 <param name="transport.compress" type="boolean">true</param>
2 <param name="transport.encrypt" type="boolean">true</param>
после чего можно приступать к сборке и развёртыванию модуля, для этого перейдите в папку $JANET_PROJECTS/template
cd $JANET_PROJECTS/template@
и выполните ant без параметров
$ANT_HOME/bin/ant
Создание и конфигурирование описания бизнес-процесса¶
Перейдите в папку $JANET_PROJECTS/pdtemplate/src
cd $JANET_PROJECTS/pdtemplate/src
и создайте в ней папку actions
mkdir actions
Скопируйте файл NodeActionHandler.java в созданую папку. Затем отредактируйте файл $JANET_PROJECTS/pdtemplate/src-jpdl/processdefinition.xml. Внутри блока <process-definition> вставьте следующий код:
1 <start-state name="start-state1">
2 <transition to="node1" name="to_node1"></transition>
3 </start-state>
4
5 <node name="node1">
6 <action class="actions.NodeActionHandler" config-type="bean">
7 <remoteName>
8 remotebpm
9 </remoteName>
10 <localName>
11 remotebpm.local
12 </localName>
13 <serviceInterface>
14 janet.services.bpm.IJBPMRemoteHandler
15 </serviceInterface>
16 <transportHttpUrl>
17 http://localhost:8080/module/service
18 </transportHttpUrl>
19 </action>
20 <transition to="end-state1" name="to_end-state1"></transition>
21 </node>
22
23 <end-state name="end-state1"></end-state>
которому соответсвует следующая схема процесса
Выполните сборку созданого описания процесса для чего перейдите в папку $JANET_PROJECTS/pdtemplate
cd $JANET_PROJECTS/pdtemplate@
и выполните ant без параметров
$ANT_HOME/bin/ant
Полученый архив с описанием процесса pdtemplate.par необходимо развернуть через интерфейс системы управления бизнес-процессами. Подробнее о работе с интерфейсом системы управления бизнес-процессами см. Руководство пользователя системы управления бизнес-процессами.
Создание клиентского приложения¶
Перейдите в папку $JANET_PROJECTS
cd $JANET_PROJECTS
и создайте в ней папку client
mkdir client
Скопируйте файлы Client.java и jws-module.xml в созданую папку. Последний содержит только секцию <remote-module-ref> cледующего вида
1 <remote-module-ref>
2 <transport>
3 <transport-name>http</transport-name>
4 <parameters>
5 <param name="transport.http.url" type="string">http://localhost:8080/janet/service</param>
6 <param name="transport.http.timeout" type="int">5000</param>
7 </parameters>
8 </transport>
9
10 <service-proxy remote-name="bpm" local-name="bpm">
11 <service-interface>janet.services.bpm.IJBPMService</service-interface>
12 </service-proxy>
13 </remote-module-ref>
Секция содержит ссылку на системный модуль bpm с интерфейсом janet.services.bpm.IJBPMService который позволяет создавать экземпляры процессов и инициировать их запуск.
Перейдите в папку $JANET_PROJECTS/client
cd $JANET_PROJECTS/client
и выполните сборку клиентского приложения командой
$JAVA_HOME/bin/javac -cp ../template/application/janet-core.jar:../template/application/jws-core.jar Client.java
Запуск клиентского приложения и результаты работы¶
Перед запуском клиента запустите сервер приложений JBoss в отдельном окне терминала
$JANET_HOME/bin/run.sh
Для того чтобы запустить клиентское приложение нужно перейти в папку $JANET_PROJECTS/client
cd $JANET_PROJECTS/client
и выполнить
$JAVA_HOME/bin/java -cp ./:../template/application/janet-core.jar:../template/application/jws-core.jar Client pdtemplate
по завершении работы клиента в консоли должны появиться следующие сообщения
BPM Client. Creates and executes process instance from process definition with given id. [Thu Oct 01 13:12:45 MSD 2009] Client started [Thu Oct 01 13:12:45 MSD 2009] Creating and starting process instance for process definition: pdtemplate [Thu Oct 01 13:12:46 MSD 2009] Execution of process instance ended [Thu Oct 01 13:12:46 MSD 2009] Client ended [Thu Oct 01 13:12:46 MSD 2009] Bye!
в консоли сервера
13:44:37,021 INFO [AbstractActionHandler] Entered node1 13:44:37,021 INFO [NodeActionHandler] Starting local handler 13:44:37,021 INFO [NodeActionHandler] Trying to invoke remote handler 13:44:37,150 INFO [NodeActionHandlerRemote] Hello from remote handler 13:44:37,216 INFO [NodeActionHandler] Local handler ended 13:44:37,217 INFO [AbstractActionHandler] Exiting node1 13:44:37,217 INFO [AbstractActionHandler] Propagating process execution