Дизайн моделювання зовнішніх інтеграційних розширень на інші реєстри
1. Призначення
При моделюванні та виконанні бізнес-процесів необхідно мати можливість читати дані з зовнішніх реєстрів через інтеграцію з системою електронної взаємодії державних електронних інформаційних ресурсів "Трембіта".
-
Користувач стартує бізнес-процес, далі відображається форма задачі, яка попередньо заповнена бізнес-даними з зовнішнього реєстру.
-
Користувач стартує бізнес-процес, який використовує дані з іншого реєстру для оркестрації самого процесу та виконання системних функцій.
-
Користувач стартує бізнес-процес, який використовує дані з іншого реєстру для валідації введених даних.
2. Базові принципи реалізації вимог
-
Мати можливість читати дані з зовнішніх реєстрів через інтеграцію з системою електронної взаємодії державних електронних інформаційних ресурсів "Трембіта".
-
Використання частини бізнес-даних з зовнішніх реєстрів для оркестрації бізнес-процесу - отримувати та маркувати змінні як "transient".
-
Використовувати делегати розширення для маскування деталей взаємодії з зовнішніми реєстрами.
4. Діаграма класів
Діаграма класів на прикладі інтеграції з ЄДР.
Генерація класів контракту на базі WSDL файлів відбувається за допомогою плагіна:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>${plugin.version}</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<generatePackage>${generate.package}</generatePackage>
<schemaDirectory>${project.basedir}/src/main/resources/wsdl</schemaDirectory>
<schemaIncludes>
<include>edp-registry.wsdl</include>
<include>bar-registry.wsdl</include>
....
</schemaIncludes>
</configuration>
</plugin>
Якщо при пасрсингу та генерації класів виникла помилка конфлікту імен, можна додати як русурс визначення зовнішнього прив’язувального(binding) XML, приклад(edr-binding.xjb): |
<jaxb:bindings
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:s="http://www.w3.org/2001/XMLSchema"
version="1.0">
<jaxb:bindings schemaLocation="file:edr-registry.wsdl" node=".//s:element[@name='<your-filed-name>']">
<jaxb:factoryMethod name="_<your-filed-name>"/>
</jaxb:bindings>
</jaxb:bindings>
${project.basedir}/src/main/resources/wsdl
5. Приклад делегата
Для кожного реєстру буде створено типові делегати. Приклад використаня делегата:
6. Діаграма послідовності
Приклад інтеграції при виконанні задачі бізнес процесу, який змодельовано таким чином, що при оркестрації процесу необхідно перевірити дані з іншого реєстру:
7. Необхідні параметри
Параметр | Тип | Необхідність | Опис |
---|---|---|---|
trembita-exchange-gateway.registries.<registry-name>.url |
string |
required |
Адреса до ШБО |
trembita-exchange-gateway.registries.<registry-name>.userId |
string |
required |
Ідентифікатор особи користувача, за ініціативою якого сформовано повідомлення-запит |
trembita-exchange-gateway.registries.<registry-name>.protocol-version |
string |
required |
Внутрішня версія протоколу обміну |
trembita-exchange-gateway.registries.<registry-name>.service.x-road-instance |
string |
required |
Ідентифікатор середовища СЕВДЕІР |
trembita-exchange-gateway.registries.<registry-name>.service.member-class |
string |
required |
Ідентифікатор класу учасника |
trembita-exchange-gateway.registries.<registry-name>.service.member-code |
string |
required |
Ідентифікатор учасника СЕВДЕІР |
trembita-exchange-gateway.registries.<registry-name>.service.subsystem-code |
string |
required |
Ідентифікатор інформаційної системи (підсистеми), яку представляє веб-сервіс, що отримує запит |
trembita-exchange-gateway.registries.<registry-name>.client.x-road-instance |
string |
required |
Ідентифікатор середовища СЕВДЕІР |
trembita-exchange-gateway.registries.<registry-name>.client.member-class |
string |
required |
Ідентифікатор класу учасника |
trembita-exchange-gateway.registries.<registry-name>.client.member-code |
string |
required |
Ідентифікатор учасника СЕВДЕІР |
trembita-exchange-gateway.registries.<registry-name>.client.subsystem-code |
string |
required |
Ідентифікатор інформаційної системи (підсистеми), яку представляє веб-клієнт, що виконує запит |
<registry-name> - назва реєстру, яка буде використовуватися spring для ін’єкції параметрів до клієнта реєстру. Наприклад: edr-registry
Приклад конфігурації в application.yml сервіса:
trembita-exchange-gateway:
registries:
edr-registry:
trembita-url: http://localhost:8080
user-id: MDTUDDM
protocol-version: 4.0
authorization-token: token #custom field
client:
x-road-instance: CLIENT-TEST
member-class: GOV
member-code: 666777666
subsystem-code: GOV_test
service:
x-road-instance: EDR-TEST
member-class: GOV
member-code: 11115888
subsystem-code: EDR_test
bar-registry:
....