Пример конфигурации: создание удалённого обработчика событий

Автор: Виталий Шакуров
Компания: Janet systems

В приведенном примере мы создадим:

  1. janet-модуль содержащий удалённый обработчик события возникающего при выполнении бизнес-процесса
  2. описание бизнес-процесса содержащее локальный обработчик события который позволяет делегировать обработку события в любой janet-модуль
  3. клиентскиое приложение создающее экземпляр этого бизнес-процесса и инициирующее запуск созданого экземпляра процесса.

Требования к окружению

  1. JDK версии 1.5 или выше можно загрузить по адресу. Рекомендуем использовать последнюю доступную версию JDK. Далее для ссылок на место установки JDK будем использовать следующее обозначение $JAVA_HOME.
  2. ant версии 1.6 или выше доступен по адресу. Рекомендуем использовать последнюю доступную версию ant. Далее для ссылок на место установки ant будем использовать следующее обозначение $ANT_HOME.
  3. Последнюю версию iJaNet Server можно загрузить по адресу (ссылки вида janet-installer-5.x.x.jar). Процесс установки платформы iJaNet рассмотрен в п 3.3 Платформа iJaNet V5. Общее описание. Далее для ссылок на место установки платформы будем использовать следующее обозначение $JANET_HOME.
  4. Создать папку в которую будет помещены создаваемые janet-модули и описание бизнес-процесса. Далее ссылки на эту папку будем обозначать $JANET_PROJECTS.
  5. Последнюю версию 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

jws-module.xml (21.4 KB) Виталий Шакуров, 04/29/2010 07:38 pm

processimage.jpg (8.3 KB) Виталий Шакуров, 04/29/2010 07:38 pm

NodeActionHandler.java (748 Bytes) Виталий Шакуров, 04/30/2010 12:28 pm

Client.java (1.3 KB) Виталий Шакуров, 04/30/2010 12:28 pm

NodeActionHandlerRemote.java (553 Bytes) Виталий Шакуров, 04/30/2010 12:28 pm

Also available in: HTML TXT