вторник, 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.

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

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