понедельник, 8 февраля 2010 г.

Intalio: Шаг за шагом. Введение.

Как ранее упоминалось в анонсе блога ИТ блокнот /Николай Войнов/ начинаю писать цикл статей "Intalio: Шаг за Шагом". Думаю, что это будет достаточно полезно для практиков, а также для тех, кто еще в поиске системы автоматизации базнес-процессов.

В данных статьях будут рассматриваться примеры процессов. Также буду выложены сами процессы, которые Вы сможете запустить у себя локально. К процессам будет полное описание форм, маппинга. Также будут рассмотрены: использование сервиса LDAP, работа с MySQL, Интеграция с другими системами.

Для того, чтобы можно было использовать примеры выложенные у меня в блоге должны быть установлены:

  • Intalio|Server
  • Intalio|Designer
Желательно также установить:
  • Apache Directory (LDAP)
  • Mysql Server
Если не установить последние 2 пункта, то авторизация будет браться из XML-ника по-умолчанию, а в качестве СУБД будет использоваться Derby.
Ну что же - начало положено, теперь ждем в свет сами статьи.


Эту статью Вы можете прочитать на новом блоге

вторник, 22 декабря 2009 г.

Системные сервисы

http://localhost:8080/axis2/services/TokenService?wsdl (TokenService) -

http://localhost:8080/axis2/services/TaskManagementServices?wsdl (TaskManagementServices)

http://localhost:8080/ode/processes/TMP?wsdl (TMPService)

http://localhost:8080/ode/processes/completeTask?wsdl - (UIFWService) Работа сервиса аналогична нажатию кнопки "Complete"

http://localhost:8080/ode/processes/workflow/ib4p?wsdl (UserBusinessProcessService)

http://localhost:8080/axis2/services/RBACQueryService?wsdl - сервис работы с LDAP

http://localhost:8080/ode/processes/ProcessManagement?wsdl - работа с процессами, получение служебных данных

http://localhost:8080/ode/processes/InstanceManagement?wsdl - позволяет работать с Instances процессов (останов, удаление, ошибка...)


Запуск внешнего сервиса (созданного и задеплоинного с помощью Intalio)


Запуск отдеплоинного процесса через wsdl из другого процесса:
Отдеплоинные процессы находятся по адресу: http://localhost:8080/ode/axis2-admin/listService
чтобы скачать wsdl требуется выбрать нужный процесс, например EXTERNALSERVICE/external/ProcService/User/UserAndProcServiceForPortTypeProcessPlk и щелкнуть по нему левой клавишей мыши, в следствии этого мы переходим на wsdl процесса, затем правая калвиша мыши->исходный текст, затем сохраняем к себе на диск, затем импортируем (drag-and-drop), к себе в проект, и открывает его с помощью wsdl editor, затем правим пути, например вот так:
было:
EXTERNALSERVICE/external/ProcService/User/UserAndProcServiceForPortTypeProcessPlk
стало:
UserAndProcServiceForPortTypeProcessPlk
после этого берем *.xsd которые требуются для проекта, они указаны в нашем wsdl вот так:
EXTERNALSERVICE/external/ProcService/User/UserAndProcServiceForPortTypeProcessPlk?xsd=xsd0, на самом деле *.xsd находится по адресу:
http://localhost:8080/ode/processes/EXTERNALSERVICE/external/ProcService/User/UserAndProcServiceForPortTypeProcessPlk?xsd=xsd0, переходим по этой ссылке и открываем исходный текст, затем сохраняем рядом с нашим wsdl (чтобы не потерять ;)), так делаем везде где имеются ссылки на *.xsd. После выполнения этой процедуры копируем к себе в проект эти файлы (*.xsd). Теперь надо поменять пути *.xsd на имена наших файлов *.xsd, которые мы скопировали в проект. Теперь можно работать с этим wsdl.

Cleanup или чистка базы


Cleanup в Intalio предлагается только в Entrprise Edition. Причем дастаточно просто поставить галочки какие данные стоит чистить, а какие нет.
В Community Edition эта функция тоже присутствет, только «включать» ее надо в ручную. Для включения опций Cleaup требуется внести изменения в файле Имя_Проекта/build/Diagramm/имя_процесса.deploy.

Пример deploy-файла с различными опциями Cleanup'а (выделено красным):
<?xml version='1.0' encoding='utf-8'?>
<dd:process xmlns:dd="http://www.apache.org/ode/schemas/dd/2007/03" xmlns:diag="http://example.com/Diagramm/Workers" xmlns:SmenaSrokovManager="http://example.com/Forms/SmenaSrokovManager/xform" xmlns:tns="http://www.example.org/SmenaSrokovManag" xmlns:PoolManager="http://example.com/Diagramm/Workers/PoolManager" xmlns:ProjectManagerManager="http://example.com/Diagramm/Workers/ProjectManagerManager" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:this="http://example.com/Diagramm/Workers/PoolSmenaSrokovManagers" xmlns:SmenaSrokovManager1="http://example.com/Forms/SmenaSrokovManager/xform/attachments" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="this:PoolSmenaSrokovManagers" fileName="Diagramm/Workers-PoolSmenaSrokovManagers.bpel">
<dd:property name="PATH">Diagramm/Workers
<dd:property name="SVG">Diagramm/Workers.svg
<dd:provide partnerLink="wFmagic_uFoG2GCtEd6u85fNa6AV5gPlkVar">
<dd:service name="this:WFmagic_uFoG2GCtEd6u85fNa6AV5gService" port="PoolSmenaSrokovManagers_for_ProjectManagerManagerForThePortTypeProcessPort"></dd:service>
</dd:provide>
<dd:invoke partnerLink="wFmagic_uFoG2GCtEd6u85fNa6AV5gPlkVar">
<dd:service name="SmenaSrokovManager:WorkflowSoapService" port="xformPort"/>
</dd:invoke>
<dd:provide partnerLink="poolSmenaSrokovManagersAndPoolManagerPlkVar">
<dd:service name="this:CanonicServiceForPoolManager" port="canonicPort"></dd:service>
</dd:provide>
<dd:invoke partnerLink="poolSmenaSrokovManagersAndPoolManagerPlkVar">
<dd:service name="PoolManager:CanonicServiceForPoolSmenaSrokovManagers" port="canonicPort"/>
1. Очистка по выполнению========================================================
<dd:cleanup on="success">
<dd:category>events (очистка таблицы событий)
<dd:category>messages (очистка сообщений)
<dd:category>instance (очистка Instance процессов)
<dd:category>variables (Очистка переменных процесса)
<dd:category>correlations (Очистка корреляций)
<dd:category>all (Очистка всех данных процесса)
</dd:cleanup>
2. Очистка по ошибке============================================================
<dd:cleanup on="failure">
<dd:category>events (очистка таблицы событий)
<dd:category>messages (очистка сообщений)
<dd:category>instance (очистка Instance процессов)
<dd:category>variables (Очистка переменных процесса)
<dd:category>correlations (Очистка корреляций)
<dd:category>all (Очистка всех данных процесса)
</dd:cleanup>
3. Очистка всегда===============================================================
<dd:cleanup on="always" />
</dd:process>

Если требуется очищать все данные, то следует оставить только All. Остальные параметры можно варьировать. Оставлять по завершению процесса (в случае хранения данных непосредственно в переменных процесса) желательно только Instances и Variables. Остальные требуется чистить, чтобы избежать разрастания базы данных.

Ограничение записи событий в базу Intalio


Для снижения записи событий требуется в файл Имя_Проекта/build/Diagramm/имя_процесса.deploy добавить следующие строки (выделены красным):

<?xml version='1.0' encoding='utf-8'?>
<dd:process xmlns:dd="http://www.apache.org/ode/schemas/dd/2007/03" xmlns:diag="http://example.com/Diagramm/Workers" xmlns:SmenaSrokovManager="http://example.com/Forms/SmenaSrokovManager/xform" xmlns:tns="http://www.example.org/SmenaSrokovManag" xmlns:PoolManager="http://example.com/Diagramm/Workers/PoolManager" xmlns:ProjectManagerManager="http://example.com/Diagramm/Workers/ProjectManagerManager" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:this="http://example.com/Diagramm/Workers/PoolSmenaSrokovManagers" xmlns:SmenaSrokovManager1="http://example.com/Forms/SmenaSrokovManager/xform/attachments" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="this:PoolSmenaSrokovManagers" fileName="Diagramm/Workers-PoolSmenaSrokovManagers.bpel">
<dd:property name="PATH">Diagramm/Workers
<dd:property name="SVG">Diagramm/Workers.svg
<dd:provide partnerLink="wFmagic_uFoG2GCtEd6u85fNa6AV5gPlkVar">
<dd:service name="this:WFmagic_uFoG2GCtEd6u85fNa6AV5gService" port="PoolSmenaSrokovManagers_for_ProjectManagerManagerForThePortTypeProcessPort"></dd:service>
</dd:provide>
<dd:invoke partnerLink="wFmagic_uFoG2GCtEd6u85fNa6AV5gPlkVar">
<dd:service name="SmenaSrokovManager:WorkflowSoapService" port="xformPort"/>
</dd:invoke>
<dd:provide partnerLink="poolSmenaSrokovManagersAndPoolManagerPlkVar">
<dd:service name="this:CanonicServiceForPoolManager" port="canonicPort"></dd:service>
</dd:provide>
<dd:invoke partnerLink="poolSmenaSrokovManagersAndPoolManagerPlkVar">
<dd:service name="PoolManager:CanonicServiceForPoolSmenaSrokovManagers" port="canonicPort"/>
</dd:invoke>
1.Избирательная запись собыий ==================================================
<dd:process-events>
//Данные по состоянию процесса (чтобы можно ло отледить в какой стадии сейчас нах-ся процесс)
<dd:enable-event>activityLifecycle
//событийные данные по изменению данных процесса (не нужно, оставил только первое)
<dd:enable-event>dataHandling
</dd:process-events>
2.Запись всех событий ==========================================================
//Писать все события
&lt;dd:process-events generate="all"/>
3.Отключить запись всех событый=========================================================================
//Не писать события вообще
<dd:process-events generate="none"/>
================================================================================
</dd:process>
Выше приведен пример deploy-файла с 3-я видами настроек (на практике требуется оставить только один) для записи событий.

Deadlock в базе движка Intalio (MySql)

Из за интенсивной записи в базу MySql происходили Deadlock'и. Данную проблему получилось решить с помощью обновления MySql до версии 5.1.38-community.

Также пришлось подправить настройки MySql (my.cnf):
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer_size = 256M
max_allowed_packet = 150M
table_cache = 8192
sort_buffer_size = 32M
read_buffer_size = 32M
join_buffer_size = 32M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 64M
query_cache_limit=8M
tmp_table_size=512M
thread_concurrency = 8
table_cache = 8192
default-character-set=utf8
server-id = 1

innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:2000M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
innodb_buffer_pool_size = 1300M
innodb_additional_mem_pool_size = 64M
innodb_log_files_in_group = 3
innodb_log_file_size = 125M
innodb_thread_concurrency=8
innodb_log_buffer_size = 32M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
#Lock mode (самый быстрый режим блокировок)
innodb_autoinc_lock_mode = 2

[mysql]
default-character-set=utf8
no-auto-rehash

[mysqlhotcopy]
interactive-timeout

Красным цветом выделена именно та настройка, которая позволяет избавиться от блокировок, вызванных AUTO-INC

Эту статью Вы можете прочитать на новом блоге

пятница, 11 декабря 2009 г.

Настройка Intalio|Server 6.0 на MySQL

Пример данной настройки приведен для использования Intalio|BPMS 6.0 совместно с MySQL 5.x

В данном документе приведены настройки для следующих параметров БД
hostname: localhost
user name: jsmith
database name: bpmsdb
password: brandy
Database configuration

Для конфигурирования подключения к базе MySQL требуется отредактировать файл 'resources.properties', который располагается по адресу [IntalioServer]/conf
Пример файла 'resources.properties':

resource.ds2.className=bitronix.tm.resource.jdbc.lrc.LrcXADataSource
resource.ds2.uniqueName=jdbc/BPMSDB
resource.ds2.minPoolSize=0
resource.ds2.maxPoolSize=50
resource.ds2.allowLocalTransactions=true
resource.ds2.driverProperties.driverClassName=com.mysql.jdbc.Driver
resource.ds2.driverProperties.url=jdbc:mysql://localhost:3306/bpmsdb?useUnicode=true&characterEncoding=UTF-8
resource.ds2.driverProperties.user=jsmith
resource.ds2.driverProperties.password=brandy
Database Tables Creation

Теперь требуется создать базу данных bpmsdb, а затем залить в нее скриптом, находящемся по адресу [IntalioServer]/databases/MySQL таблицы.

mysql -u jsmith -p bpmsdb < bpms.sql

Редеплой процессов:

Перезагрузите Intalio|Server, если он загружен. Удалите файл 'TaskManager.deployed' располагающийся по адресу '/var/deploy', это необходимо для редеплоя процесса TaskManagerprocess. Если были задеплоины другие процессы на Intalio|Server, то удалите все '*.deployed' файлы в каталоге '/var/deploy' и '/var/processes'. После этих действи при загрузке Intalio|Server будут созданы записи в MySQL, необходимые для работы процессов. Теперь загрузите Intalio|Server.

Переводено с официального сайта Инталио.

Эту статью Вы можете прочитать на новом блоге

вторник, 1 сентября 2009 г.

Настройка Intalio|Server 5 CE на MySql

Пример настройки Intalio|Server 5 CE на MySql:
1. Для выбора базы данных необходимо изменить файл geronimo-ds.xml находящийся в папке [Intalio server]/databases/MySQL следующим образом:

<config-property-setting name="Driver">com.mysql.jdbc.Driver</config-property-setting>
<config-property-setting name="UserName">UserName</config-property-setting>
<config-property-setting name="Password">Password</config-property-setting>
<config-property-setting name="ConnectionURL">jdbc:mysql://localhost:3306/intalio</config-property-setting>

2. Требуется создать БД например с именем Intalio, и выполнить следующий скрипт:
mysql -u User -p Password <>
Скрипт bpms.sql находится тут: [IntalioServer]/databases/MySQL-5
После выполнения скрипта - в БД Intalio будут созданы таблицы.


3. Затем выполнить команду:
% ./deploy.sh --offline redeploy ../repository/org/tranql/tranql-connector-ra/1.3/tranql-connector-ra-1.3.rar ../databases/MySQL/geronimo-ds.xml

4. После вышеприведенных действий требуется удалить все файлы *.deployed и презагрузить Intalio|Server, а затем запустить Intalio|Server. Intalio|Server автоматически после удаления передеплоит ваши процесы.

Файлы *.deployed находятся в следующих папках:
[Intalio|Server]/var/processes
[Intalio|Server]/var/deploy

После данных действий Ваш Intalio|Server начнет использовать MySql базу.
сылка на сайт:
http://bpms.intalio.com/reference-guides/intalio-bpms-server-installing-with-mysql-5.0-version-5.0.html

Эту статью Вы можете прочитать на новом блоге

Shutdown Intalio|Server 6.0

Как ни странно, но в предыдущей версии, когда Intalio|Server работал на Geronimo Shutdown проходил без каких-либо проблем. Теперь после того, как вышла 6.0 версиия, которая работает на Tomcat 5.5 появилась проблема при shutdown application сервера. Странно но факт. Это проблема проявляется и на локальном application сервере так и под Linux. Также это не зависит от того, какая используется БД - MySql или Derby по умолчанию.

Суть проблемы:
при shutdown сервера вываливает ошибку:
13:22:57,564 ERROR [org.intalio.deploy.deployment.impl.DeploymentServiceImpl] [Deployment Service Timer] Error while scanning deployment repository
org.intalio.deploy.deployment.impl.PersistenceException: java.sql.SQLException: bitronix.tm.resource.ResourceConfigurationException: cannot create JDBC datasource named jdbc/BPMSDB
at org.intalio.deploy.deployment.impl.Persistence.load(Persistence.java:283)
at org.intalio.deploy.deployment.impl.DeploymentServiceImpl.scan(DeploymentServiceImpl.java:573)
at org.intalio.deploy.deployment.impl.DeploymentServiceImpl$ScanTask.run(DeploymentServiceImpl.java:1258)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
Caused by: java.sql.SQLException: bitronix.tm.resource.ResourceConfigurationException: cannot create JDBC datasource named jdbc/BPMSDB
at org.intalio.deploy.deployment.impl.Persistence.getConnection(Persistence.java:330)
at org.intalio.deploy.deployment.impl.Persistence.load(Persistence.java:210)
... 4 more

Причем, если процес был запущен и выполнился успешно, то ошибка "крутится" по циклу и не корерктно дает завершить работу сервера. Поэтому приходится после shutdown делать kill процесса application сервера. По-идее никаких последствий это за собой не влечет. И надеюсь, что в следующей версии будет BugFix этой проблемы.

2-ой вариант развития событий при shutdown applacation сервера. Если процесс был запущен, но не завершился (например по какой-то ошибке в самом процессе), то сервер перед завершением своей работы один раз выдаст вышеприведенную ошибку и завершится.

Проблема конечно странная, ну а что делать.... Если есть какие-то решения, то был бы рад узнать о них.

Эту статью Вы можете прочитать на новом блоге

Изменение таймаута (Intalio|Server) ожидания ответа от сервиса.

На форуме Intalio было сказано, что информацию по изменению таймаута можно получить только если у вас куплена Enterprise Edition. Но это не так, информацию можно найти на сайте Apache ODE.
Для изменения таймаута требуется добавиь один параметр в каждый из трех нижеприведенных файлов:
[Intalio Server]\webapps\axis2\WEB-INF\conf\axis2.xml
[Intalio Server]\webapps\bpms-console\WEB-INF\conf\axis2.xml
[Intalio Server]\webapps\ose\WEB-INF\conf\axis2.xml

Для внесения изменений октрываем файл axis2.xml и находим:
<transportSender name="http"
class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
<parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
<parameter name="Transfer-Encoding" locked="false">chunked</parameter>
</transportsender>

Затем добавляем параметр:
<parameter name="SO_TIMEOUT" locked="false">180000</parameter>
(Это означает, что SoketTimeout будет равен 3 минутам)

В итоге должно получиться следующее:
<transportSender name="http"
class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
<parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
<parameter name="Transfer-Encoding" locked="false">chunked</parameter>
<parameter name="SO_TIMEOUT" locked="false">180000</parameter>
</transportsender>

Данные изменения необходимо внести во все 3 файла.

Эту статью Вы можете прочитать на новом блоге