ENTAXY-480 release version 1.8.3
| @@ -1,141 +0,0 @@ | ||||
| ## Docker compose для сборки и запуска Entaxy. | ||||
|  | ||||
| Запуск локального окружения с несколькими docker контейнерами:  | ||||
| * Караф | ||||
| * Брокер | ||||
| * СУБД | ||||
| * Менеджер артефактов | ||||
|  | ||||
| Для начала клонируем репозиторий и переходим в корень проекта:  | ||||
| ```bash | ||||
| git clone <entaxy-framework-repository> | ||||
| cd entaxy-framework | ||||
| ``` | ||||
| Далее у нас есть разные варианты хранения необходимых для установки Entaxy артефактов. | ||||
| ### 1. Самый простой способ: локальный репозиторий артефактов включаеться в образ карафа. | ||||
| В корневом POM находится профиль для деплоя артефактов в образ карафа: | ||||
| ```xml | ||||
| <profile> | ||||
|     <id>docker.file.repo</id> | ||||
|     <distributionManagement> | ||||
|         <snapshotRepository> | ||||
|             <id>entaxy-maven-repo-file</id> | ||||
|             <url>file:./distribution/entaxy-docker/karaf/repo</url> | ||||
|         </snapshotRepository> | ||||
|     </distributionManagement> | ||||
| </profile> | ||||
| ``` | ||||
| Запускаем мевен деплой из корня проекта с этим профилем:  | ||||
| ```bash | ||||
| mvn deploy -P docker.file.repo | ||||
| ```  | ||||
| И после успешной сборки запускаем контейнеры из директории проекта, в которой находится docker-compose.yml: | ||||
| ```bash | ||||
| cd ./distribution/entaxy-docker | ||||
| docker-compose up | ||||
| ```  | ||||
| Или `docker compose up` для новых версий docker. | ||||
| После запуска комманды мы будем видеть прогресс сборки образов, запуска контейнеров и логи запущенных приложений. Для остановки контейнеров достаточно нажать сочетание клавиш Ctrl+C или через команды запущенные из другого окна/вкладки терминала. | ||||
| ```bash | ||||
| docker-compose stop | ||||
| docker-compose start | ||||
| ``` | ||||
| После запуска контейнеров открываем новый терминал и заходим в караф: | ||||
| ```bash | ||||
| docker-compose exec karaf /opt/apache-karaf/bin/client | ||||
| ``` | ||||
| или ssh клиент с дальнейшим вводом пароля (karaf) | ||||
| ```bash | ||||
| ssh -p 8101 karaf@localhost | ||||
| ```  | ||||
|  | ||||
| И в консоли карафа запускаем скрипт с установкой необходимых фич: | ||||
| ```bash  | ||||
| shell:source ./install.karaf | ||||
| ``` | ||||
| Ждём окончания деплоя в караф. | ||||
| (Не всегда полная установка проходит с первой попытки и тогда помогает повторный запуск `source install.karaf`) | ||||
|  | ||||
| ### 2. Reposilite: легковесный http репозиторий артефактов запускается в отдельном контейнере. | ||||
| Комментируем в файле install.karaf строку начинающуюся с:  | ||||
| ```bash | ||||
| config:property-set -p org.ops4j.pax.url.mvn org.ops4j.pax.url.mvn.repositories file:/opt/apache-karaf/repo | ||||
| ``` | ||||
| И убираем комментарий в строке начинающейся:  | ||||
| ```bash | ||||
| #config:property-set -p org.ops4j.pax.url.mvn org.ops4j.pax.url.mvn.repositories http://maven-repo/snapshots | ||||
| ``` | ||||
|  | ||||
| Запускаем контейнеры из директории проекта, в которой находится docker-compose.yml: | ||||
| ```bash | ||||
| cd ./distribution/entaxy-docker | ||||
| docker-compose up | ||||
| ```  | ||||
| Или `docker compose up` для новых версий docker. | ||||
| После запуска комманды мы будем видеть прогресс сборки образов, запуска контейнеров и логи запущенных приложений. Для остановки контейнеров достаточно нажать сочетание клавиш Ctrl+C или через команды запущенные из другого окна/вкладки терминала. | ||||
| ```bash | ||||
| docker-compose stop | ||||
| docker-compose start | ||||
| ``` | ||||
|  | ||||
| Для деплоя в reposilite добавляем учётные данные в конфигурацию мавена (`~/.m2/settings.xml`): | ||||
| ```xml | ||||
| <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" | ||||
|           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|           xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> | ||||
|     <servers> | ||||
|         <server> | ||||
|             <id>entaxy-maven-repo</id> | ||||
|             <username>admin</username> | ||||
|             <password>aW7frfS9NPGrOnuNBMf9gyO0eXNRaCoOGtXHTcLU5akDFJ9ACiUJhgmZxlOKnLC5</password> | ||||
|         </server> | ||||
|     </servers> | ||||
| </settings> | ||||
| ``` | ||||
| В корневом POM находится профиль для деплоя артефактов на сервер reposilite: | ||||
| ```xml | ||||
| <profile> | ||||
|     <id>docker.reposilite</id> | ||||
|     <distributionManagement> | ||||
|         <snapshotRepository> | ||||
|             <id>entaxy-maven-repo</id> | ||||
|             <url>http://127.0.0.1:8081/snapshots</url> | ||||
|         </snapshotRepository> | ||||
|     </distributionManagement> | ||||
| </profile> | ||||
| ``` | ||||
| Запускаем мевен деплой из корня проекта с этим профилем: | ||||
| ```bash | ||||
| mvn deploy -P docker.reposilite | ||||
| ```  | ||||
| После успешной сборки открываем новый терминал и заходим в караф: | ||||
| ```bash | ||||
| docker-compose exec karaf /opt/apache-karaf/bin/client | ||||
| ``` | ||||
| или ssh клиент с дальнейшим вводом пароля (karaf) | ||||
| ```bash | ||||
| ssh -p 8101 karaf@localhost | ||||
| ```  | ||||
|  | ||||
| И в консоли карафа запускаем скрипт с установкой необходимых фич: | ||||
| ```bash  | ||||
| shell:source ./install.karaf | ||||
| ``` | ||||
| Ждём окончания деплоя в караф. | ||||
| (Не всегда полная установка проходит с первой попытки и тогда помогает повторный запуск `source install.karaf`) | ||||
|  | ||||
|  | ||||
|  | ||||
| Также есть вариант с nexus | ||||
| После старта получаем пароль для admin через команду:  | ||||
| `docker-compose exec nexus cat /nexus-data/admin.password`. | ||||
| Через админку нужно разрешить анонимный деплой или настроить доступы. | ||||
| Урл для install.karaf | ||||
| `http://nexus:8081/repository/maven-snapshots/@id=local-nexus@snapshots@noreleases` | ||||
|  | ||||
|  | ||||
|  | ||||
| Остановить все контейнеры | ||||
| `docker-compose down` | ||||
| Остановить и удалить хранилища с БД и репой | ||||
| `docker-compose down -v` | ||||
| @@ -1,78 +0,0 @@ | ||||
| version: '3' | ||||
| services: | ||||
|   broker: | ||||
|     container_name: broker | ||||
|     image: vromero/activemq-artemis | ||||
|     restart: unless-stopped | ||||
|     environment: | ||||
|       - ARTEMIS_USERNAME=entaxy | ||||
|       - ARTEMIS_PASSWORD=entaxy | ||||
|     ports: | ||||
|       - 8161:8161 | ||||
|       - 61616:61616 | ||||
|  | ||||
|   db-postgres: | ||||
|     container_name: db-postgres | ||||
| #    image: postgres | ||||
|     build: ./postgres | ||||
|     restart: unless-stopped | ||||
|     volumes: | ||||
|       - db-vol:/var/lib/postgresql/data | ||||
|     #   - /etc/localtime:/etc/localtime:ro | ||||
|     environment: | ||||
|       - POSTGRES_USER=entaxy | ||||
|       - POSTGRES_PASSWORD=entaxy | ||||
|       - POSTGRES_DB=cache | ||||
|     ports: | ||||
|       - 5432:5432 | ||||
|  | ||||
|   # db-mssql: | ||||
|   #   container_name: db-mssql | ||||
|   #   image: mcr.microsoft.com/mssql/server:2017-CU8-ubuntu | ||||
|   #   restart: unless-stopped | ||||
|   #   environment: | ||||
|   #     - SA_PASSWORD=123mssql | ||||
|   #     - ACCEPT_EULA=Y | ||||
|   #     - POSTGRES_DB=cache | ||||
|   #   ports: | ||||
|   #     - 1433:1433 | ||||
|  | ||||
| #  nexus: | ||||
| #    container_name: nexus | ||||
| #    image: sonatype/nexus3 | ||||
| #    restart: unless-stopped | ||||
| #    volumes: | ||||
| #      - nexus-data:/nexus-data | ||||
| #    environment: | ||||
| #      - INSTALL4J_ADD_VM_PARAMS=-Xms2g -Xmx2g -XX:MaxDirectMemorySize=3g | ||||
| #    ports: | ||||
| #      - 8081:8081 | ||||
|   maven-repo: | ||||
|     container_name: maven-repo | ||||
|     build: ./reposilite | ||||
| #    image: dzikoysk/reposilite | ||||
|     restart: unless-stopped | ||||
|     volumes: | ||||
|       - nexus-data:/app/data | ||||
|     ports: | ||||
|       - 8081:80 | ||||
|  | ||||
|   karaf: | ||||
| #    image: apache/karaf:4.2.9 | ||||
|     build: | ||||
|       context: karaf/ | ||||
|     container_name: karaf | ||||
| #    environment: | ||||
| #      - ESB_ENTAXY_VERSION=1.8.0 | ||||
| #      - ESB_ENTAXY_MAVEN_REPO=http://nexus:8081/repository/maven-snapshots/@id=local-nexus@snapshots@noreleases | ||||
|     restart: unless-stopped | ||||
|     ports: | ||||
|       - 8101:8101 | ||||
|       - 8181:8181 | ||||
|       - 8080:8080 | ||||
|  | ||||
| volumes: | ||||
|   db-vol: | ||||
|     driver: local | ||||
|   nexus-data: | ||||
|     driver: local | ||||
| @@ -1,13 +0,0 @@ | ||||
| FROM apache/karaf:4.2.9 | ||||
|  | ||||
| COPY repo /opt/apache-karaf/repo | ||||
| COPY init /opt/apache-karaf/etc/init | ||||
|  | ||||
| COPY jre.properties /opt/apache-karaf/etc/ | ||||
| COPY org.apache.karaf.cellar.groups.cfg /opt/apache-karaf/etc/ | ||||
| COPY org.ops4j.datasource-entaxy.esb.cache.cfg /opt/apache-karaf/etc/ | ||||
| COPY org.ops4j.datasource-entaxy.esb.db_connector.cfg /opt/apache-karaf/etc/ | ||||
| COPY org.ops4j.datasource-entaxy.esb.storage.cfg /opt/apache-karaf/etc/ | ||||
| COPY ru.entaxy.esb.cfg /opt/apache-karaf/etc/ | ||||
| COPY ru.entaxy.esb.system.bridge.cfg /opt/apache-karaf/etc/ | ||||
| COPY install.karaf /opt/apache-karaf/ | ||||
| @@ -1,54 +0,0 @@ | ||||
| { | ||||
|   "connections": [ | ||||
|     { | ||||
|       "nodeType": "connection", | ||||
|       "uuid": "connection-uuid-1", | ||||
|       "name": "entaxy-file", | ||||
|       "adapterName": "fileAdapter", | ||||
|       "platform": true, | ||||
|       "pathParameter": "data/shared", | ||||
|       "properties": {}, | ||||
|       "options": { | ||||
|         "noop": true, | ||||
|         "fileName": "default.txt", | ||||
|         "allowNullBody": "true" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "nodeType": "connection", | ||||
|       "uuid": "connection-uuid-2", | ||||
|       "name": "entaxy-broker", | ||||
|       "adapterName": "artemisAdapter", | ||||
|       "platform": true, | ||||
|       "pathParameter": "queue:entaxy.default", | ||||
|       "properties": { | ||||
|         "url": "(tcp://broker:61616)", | ||||
|         "username": "entaxy", | ||||
|         "password": "entaxy", | ||||
|         "maxConnections": "20", | ||||
|         "maxSessionsPerConnection": "100" | ||||
|       }, | ||||
|       "options": {} | ||||
|     }, | ||||
|     { | ||||
|       "nodeType": "connection", | ||||
|       "uuid": "connection-uuid-3", | ||||
|       "name": "entaxy-db-storage", | ||||
|       "adapterName": "postgresqlAdapter", | ||||
|       "platform": true, | ||||
|       "pathParameter": "entaxy.esb.storage", | ||||
|       "properties": {}, | ||||
|       "options": {} | ||||
|     }, | ||||
|     { | ||||
|       "nodeType": "connection", | ||||
|       "uuid": "connection-uuid-4", | ||||
|       "name": "entaxy-db-cache", | ||||
|       "adapterName": "postgresqlAdapter", | ||||
|       "platform": true, | ||||
|       "pathParameter": "entaxy.esb.cache", | ||||
|       "properties": {}, | ||||
|       "options": {} | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| @@ -1,21 +0,0 @@ | ||||
| ESB_ENTAXY_VERSION=1.8.0 | ||||
|  | ||||
| echo "Maven repo=$ESB_ENTAXY_MAVEN_REPO, Version=$ESB_ENTAXY_VERSION" | ||||
|  | ||||
| # docker.file.repo | ||||
| config:property-set -p org.ops4j.pax.url.mvn org.ops4j.pax.url.mvn.repositories file:/opt/apache-karaf/repo@id=local-repo@snapshots@noreleases,https://repo1.maven.org/maven2@id=central,https://repository.apache.org/content/groups/snapshots-group@id=apache@snapshots@noreleases,https://oss.sonatype.org/content/repositories/ops4j-snapshots@id=ops4j.sonatype.snapshots.deploy@snapshots@noreleases | ||||
| # docker.reposilite | ||||
| #config:property-set -p org.ops4j.pax.url.mvn org.ops4j.pax.url.mvn.repositories http://maven-repo/releases@id=local-releases@update=always,http://maven-repo/snapshots@id=local-snapshots@snapshots@noreleases@update=always,https://repo1.maven.org/maven2@id=central,https://repository.apache.org/content/groups/snapshots-group@id=apache@snapshots@noreleases,https://oss.sonatype.org/content/repositories/ops4j-snapshots@id=ops4j.sonatype.snapshots.deploy@snapshots@noreleases | ||||
|  | ||||
| feature:repo-add mvn:ru.entaxy.esb/karaf-features/$ESB_ENTAXY_VERSION/xml/features | ||||
| echo "feature:install entaxy-all" | ||||
| feature:install entaxy-all | ||||
| feature:repo-add mvn:ru.entaxy.esb.platform.runtime/base/$ESB_ENTAXY_VERSION/xml/features | ||||
| echo "feature:install base" | ||||
| feature:install base | ||||
| feature:repo-add mvn:ru.entaxy.esb.platform.runtime/core/$ESB_ENTAXY_VERSION/xml/features | ||||
| echo "feature:install core" | ||||
| feature:install core | ||||
| feature:repo-add mvn:ru.entaxy.esb.platform.runtime.modules/uniform-service/$ESB_ENTAXY_VERSION/xml/features | ||||
| echo "feature:install entaxy-uniform-service" | ||||
| feature:install entaxy-uniform-service | ||||
| @@ -1,725 +0,0 @@ | ||||
| ################################################################################ | ||||
| # | ||||
| #    Licensed to the Apache Software Foundation (ASF) under one or more | ||||
| #    contributor license agreements.  See the NOTICE file distributed with | ||||
| #    this work for additional information regarding copyright ownership. | ||||
| #    The ASF licenses this file to You under the Apache License, Version 2.0 | ||||
| #    (the "License"); you may not use this file except in compliance with | ||||
| #    the License.  You may obtain a copy of the License at | ||||
| # | ||||
| #       http://www.apache.org/licenses/LICENSE-2.0 | ||||
| # | ||||
| #    Unless required by applicable law or agreed to in writing, software | ||||
| #    distributed under the License is distributed on an "AS IS" BASIS, | ||||
| #    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| #    See the License for the specific language governing permissions and | ||||
| #    limitations under the License. | ||||
| # | ||||
| ################################################################################ | ||||
| # | ||||
| # Java platform package export properties. | ||||
| # | ||||
| # Standard package set.  Note that: | ||||
| #   - javax.transaction* is exported with a mandatory attribute | ||||
| jre-1.6=\ | ||||
|  javax.accessibility, \ | ||||
|  javax.activation;version="1.1", \ | ||||
|  javax.activity, \ | ||||
|  javax.annotation;version="1.0", \ | ||||
|  javax.annotation.processing;version="1.0", \ | ||||
|  javax.crypto, \ | ||||
|  javax.crypto.interfaces, \ | ||||
|  javax.crypto.spec, \ | ||||
|  javax.imageio, \ | ||||
|  javax.imageio.event, \ | ||||
|  javax.imageio.metadata, \ | ||||
|  javax.imageio.plugins.bmp, \ | ||||
|  javax.imageio.plugins.jpeg, \ | ||||
|  javax.imageio.spi, \ | ||||
|  javax.imageio.stream, \ | ||||
|  javax.jws, \ | ||||
|  javax.jws.soap, \ | ||||
|  javax.lang.model, \ | ||||
|  javax.lang.model.element, \ | ||||
|  javax.lang.model.type, \ | ||||
|  javax.lang.model.util, \ | ||||
|  javax.management, \ | ||||
|  javax.management.loading, \ | ||||
|  javax.management.modelmbean, \ | ||||
|  javax.management.monitor, \ | ||||
|  javax.management.openmbean, \ | ||||
|  javax.management.relation, \ | ||||
|  javax.management.remote, \ | ||||
|  javax.management.remote.rmi, \ | ||||
|  javax.management.timer, \ | ||||
|  javax.naming, \ | ||||
|  javax.naming.directory, \ | ||||
|  javax.naming.event, \ | ||||
|  javax.naming.ldap, \ | ||||
|  javax.naming.spi, \ | ||||
|  javax.net, \ | ||||
|  javax.net.ssl, \ | ||||
|  javax.print, \ | ||||
|  javax.print.attribute, \ | ||||
|  javax.print.attribute.standard, \ | ||||
|  javax.print.event, \ | ||||
|  javax.rmi, \ | ||||
|  javax.rmi.CORBA, \ | ||||
|  javax.rmi.ssl, \ | ||||
|  javax.script, \ | ||||
|  javax.security.auth, \ | ||||
|  javax.security.auth.callback, \ | ||||
|  javax.security.auth.kerberos, \ | ||||
|  javax.security.auth.login, \ | ||||
|  javax.security.auth.spi, \ | ||||
|  javax.security.auth.x500, \ | ||||
|  javax.security.cert, \ | ||||
|  javax.security.sasl, \ | ||||
|  javax.sound.midi, \ | ||||
|  javax.sound.midi.spi, \ | ||||
|  javax.sound.sampled, \ | ||||
|  javax.sound.sampled.spi, \ | ||||
|  javax.sql, \ | ||||
|  javax.sql.rowset, \ | ||||
|  javax.sql.rowset.serial, \ | ||||
|  javax.sql.rowset.spi, \ | ||||
|  javax.swing, \ | ||||
|  javax.swing.border, \ | ||||
|  javax.swing.colorchooser, \ | ||||
|  javax.swing.event, \ | ||||
|  javax.swing.filechooser, \ | ||||
|  javax.swing.plaf, \ | ||||
|  javax.swing.plaf.basic, \ | ||||
|  javax.swing.plaf.metal, \ | ||||
|  javax.swing.plaf.multi, \ | ||||
|  javax.swing.plaf.synth, \ | ||||
|  javax.swing.table, \ | ||||
|  javax.swing.text, \ | ||||
|  javax.swing.text.html, \ | ||||
|  javax.swing.text.html.parser, \ | ||||
|  javax.swing.text.rtf, \ | ||||
|  javax.swing.tree, \ | ||||
|  javax.swing.undo, \ | ||||
|  javax.tools, \ | ||||
|  javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \ | ||||
|  javax.xml, \ | ||||
|  javax.xml.bind;version="2.2.1", \ | ||||
|  javax.xml.bind.annotation;version="2.2.1", \ | ||||
|  javax.xml.bind.annotation.adapters;version="2.2.1", \ | ||||
|  javax.xml.bind.attachment;version="2.2.1", \ | ||||
|  javax.xml.bind.helpers;version="2.2.1", \ | ||||
|  javax.xml.bind.util;version="2.2.1", \ | ||||
|  javax.xml.crypto, \ | ||||
|  javax.xml.crypto.dom, \ | ||||
|  javax.xml.crypto.dsig, \ | ||||
|  javax.xml.crypto.dsig.dom, \ | ||||
|  javax.xml.crypto.dsig.keyinfo, \ | ||||
|  javax.xml.crypto.dsig.spec, \ | ||||
|  javax.xml.datatype, \ | ||||
|  javax.xml.namespace, \ | ||||
|  javax.xml.parsers, \ | ||||
|  javax.xml.soap;version="1.3", \ | ||||
|  javax.xml.stream;version="1.2", \ | ||||
|  javax.xml.stream.events;version="1.2", \ | ||||
|  javax.xml.stream.util;version="1.2", \ | ||||
|  javax.xml.transform, \ | ||||
|  javax.xml.transform.dom, \ | ||||
|  javax.xml.transform.sax, \ | ||||
|  javax.xml.transform.stax, \ | ||||
|  javax.xml.transform.stream, \ | ||||
|  javax.xml.validation, \ | ||||
|  javax.xml.ws;version="2.2", \ | ||||
|  javax.xml.ws.handler;version="2.2", \ | ||||
|  javax.xml.ws.handler.soap;version="2.2", \ | ||||
|  javax.xml.ws.http;version="2.2", \ | ||||
|  javax.xml.ws.soap;version="2.2", \ | ||||
|  javax.xml.ws.spi;version="2.2", \ | ||||
|  javax.xml.ws.wsaddressing;version="2.2", \ | ||||
|  javax.xml.ws.spi.http;version="2.2", \ | ||||
|  javax.xml.xpath, \ | ||||
|  org.ietf.jgss, \ | ||||
|  org.omg.CORBA, \ | ||||
|  org.omg.CORBA_2_3, \ | ||||
|  org.omg.CORBA_2_3.portable, \ | ||||
|  org.omg.CORBA.DynAnyPackage, \ | ||||
|  org.omg.CORBA.ORBPackage, \ | ||||
|  org.omg.CORBA.portable, \ | ||||
|  org.omg.CORBA.TypeCodePackage, \ | ||||
|  org.omg.CosNaming, \ | ||||
|  org.omg.CosNaming.NamingContextExtPackage, \ | ||||
|  org.omg.CosNaming.NamingContextPackage, \ | ||||
|  org.omg.Dynamic, \ | ||||
|  org.omg.DynamicAny, \ | ||||
|  org.omg.DynamicAny.DynAnyFactoryPackage, \ | ||||
|  org.omg.DynamicAny.DynAnyPackage, \ | ||||
|  org.omg.IOP, \ | ||||
|  org.omg.IOP.CodecFactoryPackage, \ | ||||
|  org.omg.IOP.CodecPackage, \ | ||||
|  org.omg.Messaging, \ | ||||
|  org.omg.PortableInterceptor, \ | ||||
|  org.omg.PortableInterceptor.ORBInitInfoPackage, \ | ||||
|  org.omg.PortableServer, \ | ||||
|  org.omg.PortableServer.CurrentPackage, \ | ||||
|  org.omg.PortableServer.POAManagerPackage, \ | ||||
|  org.omg.PortableServer.POAPackage, \ | ||||
|  org.omg.PortableServer.portable, \ | ||||
|  org.omg.PortableServer.ServantLocatorPackage, \ | ||||
|  org.omg.SendingContext, \ | ||||
|  org.omg.stub.java.rmi, \ | ||||
|  org.omg.stub.javax.management.remote.rmi, \ | ||||
|  org.w3c.dom, \ | ||||
|  org.w3c.dom.bootstrap, \ | ||||
|  org.w3c.dom.css, \ | ||||
|  org.w3c.dom.events, \ | ||||
|  org.w3c.dom.html, \ | ||||
|  org.w3c.dom.ls, \ | ||||
|  org.w3c.dom.ranges, \ | ||||
|  org.w3c.dom.stylesheets, \ | ||||
|  org.w3c.dom.traversal, \ | ||||
|  org.w3c.dom.views, \ | ||||
|  org.w3c.dom.xpath, \ | ||||
|  org.xml.sax, \ | ||||
|  org.xml.sax.ext, \ | ||||
|  org.xml.sax.helpers | ||||
| # Standard package set.  Note that: | ||||
| #   - javax.transaction* is exported with a mandatory attribute | ||||
| jre-1.7=\ | ||||
|  javax.accessibility, \ | ||||
|  javax.activation;version="1.1", \ | ||||
|  javax.activity, \ | ||||
|  javax.annotation;version="1.0", \ | ||||
|  javax.annotation.processing;version="1.0", \ | ||||
|  javax.crypto, \ | ||||
|  javax.crypto.interfaces, \ | ||||
|  javax.crypto.spec, \ | ||||
|  javax.imageio, \ | ||||
|  javax.imageio.event, \ | ||||
|  javax.imageio.metadata, \ | ||||
|  javax.imageio.plugins.bmp, \ | ||||
|  javax.imageio.plugins.jpeg, \ | ||||
|  javax.imageio.spi, \ | ||||
|  javax.imageio.stream, \ | ||||
|  javax.jws, \ | ||||
|  javax.jws.soap, \ | ||||
|  javax.lang.model, \ | ||||
|  javax.lang.model.element, \ | ||||
|  javax.lang.model.type, \ | ||||
|  javax.lang.model.util, \ | ||||
|  javax.management, \ | ||||
|  javax.management.loading, \ | ||||
|  javax.management.modelmbean, \ | ||||
|  javax.management.monitor, \ | ||||
|  javax.management.openmbean, \ | ||||
|  javax.management.relation, \ | ||||
|  javax.management.remote, \ | ||||
|  javax.management.remote.rmi, \ | ||||
|  javax.management.timer, \ | ||||
|  javax.naming, \ | ||||
|  javax.naming.directory, \ | ||||
|  javax.naming.event, \ | ||||
|  javax.naming.ldap, \ | ||||
|  javax.naming.spi, \ | ||||
|  javax.net, \ | ||||
|  javax.net.ssl, \ | ||||
|  javax.print, \ | ||||
|  javax.print.attribute, \ | ||||
|  javax.print.attribute.standard, \ | ||||
|  javax.print.event, \ | ||||
|  javax.rmi, \ | ||||
|  javax.rmi.CORBA, \ | ||||
|  javax.rmi.ssl, \ | ||||
|  javax.script, \ | ||||
|  javax.security.auth, \ | ||||
|  javax.security.auth.callback, \ | ||||
|  javax.security.auth.kerberos, \ | ||||
|  javax.security.auth.login, \ | ||||
|  javax.security.auth.spi, \ | ||||
|  javax.security.auth.x500, \ | ||||
|  javax.security.cert, \ | ||||
|  javax.security.sasl, \ | ||||
|  javax.sound.midi, \ | ||||
|  javax.sound.midi.spi, \ | ||||
|  javax.sound.sampled, \ | ||||
|  javax.sound.sampled.spi, \ | ||||
|  javax.sql, \ | ||||
|  javax.sql.rowset, \ | ||||
|  javax.sql.rowset.serial, \ | ||||
|  javax.sql.rowset.spi, \ | ||||
|  javax.swing, \ | ||||
|  javax.swing.border, \ | ||||
|  javax.swing.colorchooser, \ | ||||
|  javax.swing.event, \ | ||||
|  javax.swing.filechooser, \ | ||||
|  javax.swing.plaf, \ | ||||
|  javax.swing.plaf.basic, \ | ||||
|  javax.swing.plaf.metal, \ | ||||
|  javax.swing.plaf.multi, \ | ||||
|  javax.swing.plaf.synth, \ | ||||
|  javax.swing.table, \ | ||||
|  javax.swing.text, \ | ||||
|  javax.swing.text.html, \ | ||||
|  javax.swing.text.html.parser, \ | ||||
|  javax.swing.text.rtf, \ | ||||
|  javax.swing.tree, \ | ||||
|  javax.swing.undo, \ | ||||
|  javax.tools, \ | ||||
|  javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \ | ||||
|  javax.xml, \ | ||||
|  javax.xml.bind;version="2.2.1", \ | ||||
|  javax.xml.bind.annotation;version="2.2.1", \ | ||||
|  javax.xml.bind.annotation.adapters;version="2.2.1", \ | ||||
|  javax.xml.bind.attachment;version="2.2.1", \ | ||||
|  javax.xml.bind.helpers;version="2.2.1", \ | ||||
|  javax.xml.bind.util;version="2.2.1", \ | ||||
|  javax.xml.crypto, \ | ||||
|  javax.xml.crypto.dom, \ | ||||
|  javax.xml.crypto.dsig, \ | ||||
|  javax.xml.crypto.dsig.dom, \ | ||||
|  javax.xml.crypto.dsig.keyinfo, \ | ||||
|  javax.xml.crypto.dsig.spec, \ | ||||
|  javax.xml.datatype, \ | ||||
|  javax.xml.namespace, \ | ||||
|  javax.xml.parsers, \ | ||||
|  javax.xml.soap;version="1.3", \ | ||||
|  javax.xml.stream;version="1.2", \ | ||||
|  javax.xml.stream.events;version="1.2", \ | ||||
|  javax.xml.stream.util;version="1.2", \ | ||||
|  javax.xml.transform, \ | ||||
|  javax.xml.transform.dom, \ | ||||
|  javax.xml.transform.sax, \ | ||||
|  javax.xml.transform.stax, \ | ||||
|  javax.xml.transform.stream, \ | ||||
|  javax.xml.validation, \ | ||||
|  javax.xml.xpath, \ | ||||
|  org.ietf.jgss, \ | ||||
|  org.omg.CORBA, \ | ||||
|  org.omg.CORBA_2_3, \ | ||||
|  org.omg.CORBA_2_3.portable, \ | ||||
|  org.omg.CORBA.DynAnyPackage, \ | ||||
|  org.omg.CORBA.ORBPackage, \ | ||||
|  org.omg.CORBA.portable, \ | ||||
|  org.omg.CORBA.TypeCodePackage, \ | ||||
|  org.omg.CosNaming, \ | ||||
|  org.omg.CosNaming.NamingContextExtPackage, \ | ||||
|  org.omg.CosNaming.NamingContextPackage, \ | ||||
|  org.omg.Dynamic, \ | ||||
|  org.omg.DynamicAny, \ | ||||
|  org.omg.DynamicAny.DynAnyFactoryPackage, \ | ||||
|  org.omg.DynamicAny.DynAnyPackage, \ | ||||
|  org.omg.IOP, \ | ||||
|  org.omg.IOP.CodecFactoryPackage, \ | ||||
|  org.omg.IOP.CodecPackage, \ | ||||
|  org.omg.Messaging, \ | ||||
|  org.omg.PortableInterceptor, \ | ||||
|  org.omg.PortableInterceptor.ORBInitInfoPackage, \ | ||||
|  org.omg.PortableServer, \ | ||||
|  org.omg.PortableServer.CurrentPackage, \ | ||||
|  org.omg.PortableServer.POAManagerPackage, \ | ||||
|  org.omg.PortableServer.POAPackage, \ | ||||
|  org.omg.PortableServer.portable, \ | ||||
|  org.omg.PortableServer.ServantLocatorPackage, \ | ||||
|  org.omg.SendingContext, \ | ||||
|  org.omg.stub.java.rmi, \ | ||||
|  org.omg.stub.javax.management.remote.rmi, \ | ||||
|  org.w3c.dom, \ | ||||
|  org.w3c.dom.bootstrap, \ | ||||
|  org.w3c.dom.css, \ | ||||
|  org.w3c.dom.events, \ | ||||
|  org.w3c.dom.html, \ | ||||
|  org.w3c.dom.ls, \ | ||||
|  org.w3c.dom.ranges, \ | ||||
|  org.w3c.dom.stylesheets, \ | ||||
|  org.w3c.dom.traversal, \ | ||||
|  org.w3c.dom.views, \ | ||||
|  org.w3c.dom.xpath, \ | ||||
|  org.xml.sax, \ | ||||
|  org.xml.sax.ext, \ | ||||
|  org.xml.sax.helpers, \ | ||||
|  com.sun.nio.sctp | ||||
| jre-1.8=\ | ||||
|  javax.accessibility, \ | ||||
|  javax.activity, \ | ||||
|  javax.annotation;version="1.0", \ | ||||
|  javax.annotation.processing;version="1.0", \ | ||||
|  javax.crypto, \ | ||||
|  javax.crypto.interfaces, \ | ||||
|  javax.crypto.spec, \ | ||||
|  javax.imageio, \ | ||||
|  javax.imageio.event, \ | ||||
|  javax.imageio.metadata, \ | ||||
|  javax.imageio.plugins.bmp, \ | ||||
|  javax.imageio.plugins.jpeg, \ | ||||
|  javax.imageio.spi, \ | ||||
|  javax.imageio.stream, \ | ||||
|  javax.jws, \ | ||||
|  javax.jws.soap, \ | ||||
|  javax.lang.model, \ | ||||
|  javax.lang.model.element, \ | ||||
|  javax.lang.model.type, \ | ||||
|  javax.lang.model.util, \ | ||||
|  javax.management, \ | ||||
|  javax.management.loading, \ | ||||
|  javax.management.modelmbean, \ | ||||
|  javax.management.monitor, \ | ||||
|  javax.management.openmbean, \ | ||||
|  javax.management.relation, \ | ||||
|  javax.management.remote, \ | ||||
|  javax.management.remote.rmi, \ | ||||
|  javax.management.timer, \ | ||||
|  javax.naming, \ | ||||
|  javax.naming.directory, \ | ||||
|  javax.naming.event, \ | ||||
|  javax.naming.ldap, \ | ||||
|  javax.naming.spi, \ | ||||
|  javax.net, \ | ||||
|  javax.net.ssl, \ | ||||
|  javax.print, \ | ||||
|  javax.print.attribute, \ | ||||
|  javax.print.attribute.standard, \ | ||||
|  javax.print.event, \ | ||||
|  javax.rmi, \ | ||||
|  javax.rmi.CORBA, \ | ||||
|  javax.rmi.ssl, \ | ||||
|  javax.script, \ | ||||
|  javax.security.auth, \ | ||||
|  javax.security.auth.callback, \ | ||||
|  javax.security.auth.kerberos, \ | ||||
|  javax.security.auth.login, \ | ||||
|  javax.security.auth.spi, \ | ||||
|  javax.security.auth.x500, \ | ||||
|  javax.security.cert, \ | ||||
|  javax.security.sasl, \ | ||||
|  javax.sound.midi, \ | ||||
|  javax.sound.midi.spi, \ | ||||
|  javax.sound.sampled, \ | ||||
|  javax.sound.sampled.spi, \ | ||||
|  javax.sql, \ | ||||
|  javax.sql.rowset, \ | ||||
|  javax.sql.rowset.serial, \ | ||||
|  javax.sql.rowset.spi, \ | ||||
|  javax.swing, \ | ||||
|  javax.swing.border, \ | ||||
|  javax.swing.colorchooser, \ | ||||
|  javax.swing.event, \ | ||||
|  javax.swing.filechooser, \ | ||||
|  javax.swing.plaf, \ | ||||
|  javax.swing.plaf.basic, \ | ||||
|  javax.swing.plaf.metal, \ | ||||
|  javax.swing.plaf.multi, \ | ||||
|  javax.swing.plaf.synth, \ | ||||
|  javax.swing.table, \ | ||||
|  javax.swing.text, \ | ||||
|  javax.swing.text.html, \ | ||||
|  javax.swing.text.html.parser, \ | ||||
|  javax.swing.text.rtf, \ | ||||
|  javax.swing.tree, \ | ||||
|  javax.swing.undo, \ | ||||
|  javax.tools, \ | ||||
|  javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \ | ||||
|  javax.xml, \ | ||||
|  javax.xml.bind;version="2.2.8", \ | ||||
|  javax.xml.bind.annotation;version="2.2.8", \ | ||||
|  javax.xml.bind.annotation.adapters;version="2.2.8", \ | ||||
|  javax.xml.bind.attachment;version="2.2.8", \ | ||||
|  javax.xml.bind.helpers;version="2.2.8", \ | ||||
|  javax.xml.bind.util;version="2.2.8", \ | ||||
|  javax.xml.crypto, \ | ||||
|  javax.xml.crypto.dom, \ | ||||
|  javax.xml.crypto.dsig, \ | ||||
|  javax.xml.crypto.dsig.dom, \ | ||||
|  javax.xml.crypto.dsig.keyinfo, \ | ||||
|  javax.xml.crypto.dsig.spec, \ | ||||
|  javax.xml.datatype, \ | ||||
|  javax.xml.namespace, \ | ||||
|  javax.xml.parsers, \ | ||||
|  javax.xml.stream;version="1.2", \ | ||||
|  javax.xml.stream.events;version="1.2", \ | ||||
|  javax.xml.stream.util;version="1.2", \ | ||||
|  javax.xml.transform, \ | ||||
|  javax.xml.transform.dom, \ | ||||
|  javax.xml.transform.sax, \ | ||||
|  javax.xml.transform.stax, \ | ||||
|  javax.xml.transform.stream, \ | ||||
|  javax.xml.validation, \ | ||||
|  javax.xml.ws;version="2.2", \ | ||||
|  javax.xml.ws.handler;version="2.2", \ | ||||
|  javax.xml.ws.handler.soap;version="2.2", \ | ||||
|  javax.xml.ws.http;version="2.2", \ | ||||
|  javax.xml.ws.soap;version="2.2", \ | ||||
|  javax.xml.ws.spi;version="2.2", \ | ||||
|  javax.xml.ws.wsaddressing;version="2.2", \ | ||||
|  javax.xml.ws.spi.http;version="2.2", \ | ||||
|  javax.xml.xpath, \ | ||||
|  javafx.animation, \ | ||||
|  javafx.application, \ | ||||
|  javafx.beans, \ | ||||
|  javafx.beans.binding, \ | ||||
|  javafx.beans.property, \ | ||||
|  javafx.beans.property.adapter, \ | ||||
|  javafx.beans.value, \ | ||||
|  javafx.collections, \ | ||||
|  javafx.collections.transform, \ | ||||
|  javafx.concurrent, \ | ||||
|  javafx.css, \ | ||||
|  javafx.embed.swing, \ | ||||
|  javafx.embed.swt, \ | ||||
|  javafx.event, \ | ||||
|  javafx.fxml, \ | ||||
|  javafx.geometry, \ | ||||
|  javafx.print, \ | ||||
|  javafx.scene, \ | ||||
|  javafx.scene.canvas, \ | ||||
|  javafx.scene.chart, \ | ||||
|  javafx.scene.control, \ | ||||
|  javafx.scene.control.cell, \ | ||||
|  javafx.scene.effect, \ | ||||
|  javafx.scene.image, \ | ||||
|  javafx.scene.input, \ | ||||
|  javafx.scene.layout, \ | ||||
|  javafx.scene.media, \ | ||||
|  javafx.scene.paint, \ | ||||
|  javafx.scene.shape, \ | ||||
|  javafx.scene.text, \ | ||||
|  javafx.scene.transform, \ | ||||
|  javafx.scene.web, \ | ||||
|  javafx.stage, \ | ||||
|  javafx.util, \ | ||||
|  javafx.util.converter, \ | ||||
|  netscape.javascript, \ | ||||
|  org.ietf.jgss, \ | ||||
|  org.omg.CORBA, \ | ||||
|  org.omg.CORBA_2_3, \ | ||||
|  org.omg.CORBA_2_3.portable, \ | ||||
|  org.omg.CORBA.DynAnyPackage, \ | ||||
|  org.omg.CORBA.ORBPackage, \ | ||||
|  org.omg.CORBA.portable, \ | ||||
|  org.omg.CORBA.TypeCodePackage, \ | ||||
|  org.omg.CosNaming, \ | ||||
|  org.omg.CosNaming.NamingContextExtPackage, \ | ||||
|  org.omg.CosNaming.NamingContextPackage, \ | ||||
|  org.omg.Dynamic, \ | ||||
|  org.omg.DynamicAny, \ | ||||
|  org.omg.DynamicAny.DynAnyFactoryPackage, \ | ||||
|  org.omg.DynamicAny.DynAnyPackage, \ | ||||
|  org.omg.IOP, \ | ||||
|  org.omg.IOP.CodecFactoryPackage, \ | ||||
|  org.omg.IOP.CodecPackage, \ | ||||
|  org.omg.Messaging, \ | ||||
|  org.omg.PortableInterceptor, \ | ||||
|  org.omg.PortableInterceptor.ORBInitInfoPackage, \ | ||||
|  org.omg.PortableServer, \ | ||||
|  org.omg.PortableServer.CurrentPackage, \ | ||||
|  org.omg.PortableServer.POAManagerPackage, \ | ||||
|  org.omg.PortableServer.POAPackage, \ | ||||
|  org.omg.PortableServer.portable, \ | ||||
|  org.omg.PortableServer.ServantLocatorPackage, \ | ||||
|  org.omg.SendingContext, \ | ||||
|  org.omg.stub.java.rmi, \ | ||||
|  org.omg.stub.javax.management.remote.rmi, \ | ||||
|  org.w3c.dom, \ | ||||
|  org.w3c.dom.bootstrap, \ | ||||
|  org.w3c.dom.css, \ | ||||
|  org.w3c.dom.events, \ | ||||
|  org.w3c.dom.html, \ | ||||
|  org.w3c.dom.ls, \ | ||||
|  org.w3c.dom.ranges, \ | ||||
|  org.w3c.dom.stylesheets, \ | ||||
|  org.w3c.dom.traversal, \ | ||||
|  org.w3c.dom.views, \ | ||||
|  org.w3c.dom.xpath, \ | ||||
|  org.xml.sax, \ | ||||
|  org.xml.sax.ext, \ | ||||
|  org.xml.sax.helpers, \ | ||||
|  com.sun.nio.sctp, \ | ||||
|  sun.nio.ch, \ | ||||
|  com.sun.management | ||||
| jre-9=\ | ||||
|  javax.accessibility, \ | ||||
|  javax.activation;version="1.2", \ | ||||
|  javax.activity, \ | ||||
|  javax.annotation;version="1.0", \ | ||||
|  javax.annotation.processing;version="1.0", \ | ||||
|  javax.crypto, \ | ||||
|  javax.crypto.interfaces, \ | ||||
|  javax.crypto.spec, \ | ||||
|  javax.imageio, \ | ||||
|  javax.imageio.event, \ | ||||
|  javax.imageio.metadata, \ | ||||
|  javax.imageio.plugins.bmp, \ | ||||
|  javax.imageio.plugins.jpeg, \ | ||||
|  javax.imageio.spi, \ | ||||
|  javax.imageio.stream, \ | ||||
|  javax.lang.model, \ | ||||
|  javax.lang.model.element, \ | ||||
|  javax.lang.model.type, \ | ||||
|  javax.lang.model.util, \ | ||||
|  javax.management, \ | ||||
|  javax.management.loading, \ | ||||
|  javax.management.modelmbean, \ | ||||
|  javax.management.monitor, \ | ||||
|  javax.management.openmbean, \ | ||||
|  javax.management.relation, \ | ||||
|  javax.management.remote, \ | ||||
|  javax.management.remote.rmi, \ | ||||
|  javax.management.timer, \ | ||||
|  javax.naming, \ | ||||
|  javax.naming.directory, \ | ||||
|  javax.naming.event, \ | ||||
|  javax.naming.ldap, \ | ||||
|  javax.naming.spi, \ | ||||
|  javax.net, \ | ||||
|  javax.net.ssl, \ | ||||
|  javax.print, \ | ||||
|  javax.print.attribute, \ | ||||
|  javax.print.attribute.standard, \ | ||||
|  javax.print.event, \ | ||||
|  javax.rmi, \ | ||||
|  javax.rmi.CORBA, \ | ||||
|  javax.rmi.ssl, \ | ||||
|  javax.script, \ | ||||
|  javax.security.auth, \ | ||||
|  javax.security.auth.callback, \ | ||||
|  javax.security.auth.kerberos, \ | ||||
|  javax.security.auth.login, \ | ||||
|  javax.security.auth.spi, \ | ||||
|  javax.security.auth.x500, \ | ||||
|  javax.security.cert, \ | ||||
|  javax.security.sasl, \ | ||||
|  javax.sound.midi, \ | ||||
|  javax.sound.midi.spi, \ | ||||
|  javax.sound.sampled, \ | ||||
|  javax.sound.sampled.spi, \ | ||||
|  javax.sql, \ | ||||
|  javax.sql.rowset, \ | ||||
|  javax.sql.rowset.serial, \ | ||||
|  javax.sql.rowset.spi, \ | ||||
|  javax.swing, \ | ||||
|  javax.swing.border, \ | ||||
|  javax.swing.colorchooser, \ | ||||
|  javax.swing.event, \ | ||||
|  javax.swing.filechooser, \ | ||||
|  javax.swing.plaf, \ | ||||
|  javax.swing.plaf.basic, \ | ||||
|  javax.swing.plaf.metal, \ | ||||
|  javax.swing.plaf.multi, \ | ||||
|  javax.swing.plaf.synth, \ | ||||
|  javax.swing.table, \ | ||||
|  javax.swing.text, \ | ||||
|  javax.swing.text.html, \ | ||||
|  javax.swing.text.html.parser, \ | ||||
|  javax.swing.text.rtf, \ | ||||
|  javax.swing.tree, \ | ||||
|  javax.swing.undo, \ | ||||
|  javax.tools, \ | ||||
|  javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \ | ||||
|  javax.xml, \ | ||||
|  javax.xml.bind;version="2.3.0", \ | ||||
|  javax.xml.bind.annotation;version="2.3.0", \ | ||||
|  javax.xml.bind.annotation.adapters;version="2.3.0", \ | ||||
|  javax.xml.bind.attachment;version="2.3.0", \ | ||||
|  javax.xml.bind.helpers;version="2.3.0", \ | ||||
|  javax.xml.bind.util;version="2.3.0", \ | ||||
|  javax.xml.crypto, \ | ||||
|  javax.xml.crypto.dom, \ | ||||
|  javax.xml.crypto.dsig, \ | ||||
|  javax.xml.crypto.dsig.dom, \ | ||||
|  javax.xml.crypto.dsig.keyinfo, \ | ||||
|  javax.xml.crypto.dsig.spec, \ | ||||
|  javax.xml.datatype, \ | ||||
|  javax.xml.namespace, \ | ||||
|  javax.xml.parsers, \ | ||||
|  javax.xml.stream;version="1.2", \ | ||||
|  javax.xml.stream.events;version="1.2", \ | ||||
|  javax.xml.stream.util;version="1.2", \ | ||||
|  javax.xml.transform, \ | ||||
|  javax.xml.transform.dom, \ | ||||
|  javax.xml.transform.sax, \ | ||||
|  javax.xml.transform.stax, \ | ||||
|  javax.xml.transform.stream, \ | ||||
|  javax.xml.validation, \ | ||||
|  javax.xml.xpath, \ | ||||
|  javafx.animation, \ | ||||
|  javafx.application, \ | ||||
|  javafx.beans, \ | ||||
|  javafx.beans.binding, \ | ||||
|  javafx.beans.property, \ | ||||
|  javafx.beans.property.adapter, \ | ||||
|  javafx.beans.value, \ | ||||
|  javafx.collections, \ | ||||
|  javafx.collections.transformation, \ | ||||
|  javafx.concurrent, \ | ||||
|  javafx.css, \ | ||||
|  javafx.embed.swing, \ | ||||
|  javafx.embed.swt, \ | ||||
|  javafx.event, \ | ||||
|  javafx.fxml, \ | ||||
|  javafx.geometry, \ | ||||
|  javafx.print, \ | ||||
|  javafx.scene, \ | ||||
|  javafx.scene.canvas, \ | ||||
|  javafx.scene.chart, \ | ||||
|  javafx.scene.control, \ | ||||
|  javafx.scene.control.cell, \ | ||||
|  javafx.scene.effect, \ | ||||
|  javafx.scene.image, \ | ||||
|  javafx.scene.input, \ | ||||
|  javafx.scene.layout, \ | ||||
|  javafx.scene.media, \ | ||||
|  javafx.scene.paint, \ | ||||
|  javafx.scene.shape, \ | ||||
|  javafx.scene.text, \ | ||||
|  javafx.scene.transform, \ | ||||
|  javafx.scene.web, \ | ||||
|  javafx.stage, \ | ||||
|  javafx.util, \ | ||||
|  javafx.util.converter, \ | ||||
|  netscape.javascript, \ | ||||
|  org.ietf.jgss, \ | ||||
|  org.omg.CORBA, \ | ||||
|  org.omg.CORBA_2_3, \ | ||||
|  org.omg.CORBA_2_3.portable, \ | ||||
|  org.omg.CORBA.DynAnyPackage, \ | ||||
|  org.omg.CORBA.ORBPackage, \ | ||||
|  org.omg.CORBA.portable, \ | ||||
|  org.omg.CORBA.TypeCodePackage, \ | ||||
|  org.omg.CosNaming, \ | ||||
|  org.omg.CosNaming.NamingContextExtPackage, \ | ||||
|  org.omg.CosNaming.NamingContextPackage, \ | ||||
|  org.omg.Dynamic, \ | ||||
|  org.omg.DynamicAny, \ | ||||
|  org.omg.DynamicAny.DynAnyFactoryPackage, \ | ||||
|  org.omg.DynamicAny.DynAnyPackage, \ | ||||
|  org.omg.IOP, \ | ||||
|  org.omg.IOP.CodecFactoryPackage, \ | ||||
|  org.omg.IOP.CodecPackage, \ | ||||
|  org.omg.Messaging, \ | ||||
|  org.omg.PortableInterceptor, \ | ||||
|  org.omg.PortableInterceptor.ORBInitInfoPackage, \ | ||||
|  org.omg.PortableServer, \ | ||||
|  org.omg.PortableServer.CurrentPackage, \ | ||||
|  org.omg.PortableServer.POAManagerPackage, \ | ||||
|  org.omg.PortableServer.POAPackage, \ | ||||
|  org.omg.PortableServer.portable, \ | ||||
|  org.omg.PortableServer.ServantLocatorPackage, \ | ||||
|  org.omg.SendingContext, \ | ||||
|  org.omg.stub.java.rmi, \ | ||||
|  org.omg.stub.javax.management.remote.rmi, \ | ||||
|  org.w3c.dom, \ | ||||
|  org.w3c.dom.bootstrap, \ | ||||
|  org.w3c.dom.css, \ | ||||
|  org.w3c.dom.events, \ | ||||
|  org.w3c.dom.html, \ | ||||
|  org.w3c.dom.ls, \ | ||||
|  org.w3c.dom.ranges, \ | ||||
|  org.w3c.dom.stylesheets, \ | ||||
|  org.w3c.dom.traversal, \ | ||||
|  org.w3c.dom.views, \ | ||||
|  org.w3c.dom.xpath, \ | ||||
|  org.xml.sax, \ | ||||
|  org.xml.sax.ext, \ | ||||
|  org.xml.sax.helpers, \ | ||||
|  com.sun.nio.sctp, \ | ||||
|  sun.nio.ch, \ | ||||
|  com.sun.management | ||||
| jre-10=${jre-9} | ||||
| jre-11=${jre-10} | ||||
| @@ -1,68 +0,0 @@ | ||||
| # | ||||
| # This property stores the cluster groups for which the local node is member | ||||
| # | ||||
| groups = default | ||||
|  | ||||
| # | ||||
| # Filtering of the bundles in the default cluster group | ||||
| # | ||||
| default.bundle.whitelist.inbound=* | ||||
| default.bundle.whitelist.outbound=* | ||||
| default.bundle.blacklist.inbound=none | ||||
| default.bundle.blacklist.outbound=none | ||||
|  | ||||
| # | ||||
| # Filtering of the configurations in the default cluster group | ||||
| # | ||||
| default.config.whitelist.inbound=* | ||||
| default.config.whitelist.outbound=* | ||||
| default.config.blacklist.inbound=org.apache.felix.fileinstall*, \ | ||||
|                                    org.apache.karaf.management, \ | ||||
|                                    org.apache.karaf.shell, \ | ||||
|                                    org.ops4j.pax.web, \ | ||||
|                                    org.apache.aries.transaction, \ | ||||
|                                    org.ops4j.pax.logging, \ | ||||
|                                    org.apache.karaf.cellar.node, \ | ||||
|                                    org.apache.karaf.cellar.groups.cfg | ||||
| default.config.blacklist.outbound=org.apache.felix.fileinstall*, \ | ||||
|                                     org.apache.karaf.management, \ | ||||
|                                     org.apache.karaf.shell, \ | ||||
|                                     org.ops4j.pax.web, \ | ||||
|                                     org.apache.aries.transaction, \ | ||||
|                                     org.ops4j.pax.logging, \ | ||||
|                                     org.apache.karaf.cellar.node, \ | ||||
|                                     org.apache.karaf.cellar.groups.cfg | ||||
|  | ||||
|  | ||||
| # | ||||
| # Filtering of the features in the default cluster group | ||||
| # | ||||
| default.feature.whitelist.inbound=* | ||||
| default.feature.whitelist.outbound=* | ||||
| default.feature.blacklist.inbound=none | ||||
| default.feature.blacklist.outbound=none | ||||
|  | ||||
| # | ||||
| # The following properties define the behavior to use when the node joins the cluster (the usage of the bootstrap | ||||
| # synchronizer), per cluster group and per resource. | ||||
| # The following values are accepted: | ||||
| # disabled: means that the synchronizer doesn't sync cluster group and node states | ||||
| # cluster: the synchronizer retrieves the state from the cluster group first (pull first), and push the node the state | ||||
| #          to the cluster group after (push after) | ||||
| # node: the synchronizer push the node state to the cluster group (push first), and pull the state from the cluster group | ||||
| #        after (pull after) | ||||
| # clusterOnly: the cluster is the "master", the node only retrieves and applies the cluster group state, nothing is | ||||
| #              pushed to the cluster group | ||||
| # nodeOnly: the node is the "master", the node pushes his state to the cluster group, nothing is pulled from the | ||||
| #           cluster group | ||||
| # | ||||
| default.bundle.sync = disabled | ||||
| default.config.sync = disabled | ||||
| default.feature.sync = disabled | ||||
| default.obr.urls.sync = disabled | ||||
| default.balanced.servlet.sync = disabled | ||||
|  | ||||
| default.event.blacklist.inbound = none | ||||
| default.event.blacklist.outbound = none | ||||
| default.event.whitelist.inbound = subscription | ||||
| default.event.whitelist.outbound = subscription | ||||
| @@ -1,10 +0,0 @@ | ||||
| dataSourceName=entaxy.esb.cache | ||||
| osgi.jdbc.driver.name=PostgreSQL JDBC Driver | ||||
| serverName=db-postgres | ||||
| portNumber=5432 | ||||
| databaseName=cache | ||||
| user=entaxy | ||||
| password=entaxy | ||||
| pool=dbcp2 | ||||
| xa=true | ||||
| jdbc.pool.maxTotal=100 | ||||
| @@ -1,10 +0,0 @@ | ||||
| dataSourceName=entaxy.esb.db_connector | ||||
| osgi.jdbc.driver.name=PostgreSQL JDBC Driver | ||||
| serverName=db-postgres | ||||
| portNumber=5432 | ||||
| databaseName=db_connector_test | ||||
| user=entaxy | ||||
| password=entaxy | ||||
| pool=dbcp2 | ||||
| xa=true | ||||
| jdbc.pool.maxTotal=100 | ||||
| @@ -1,10 +0,0 @@ | ||||
| dataSourceName=entaxy.esb.storage | ||||
| osgi.jdbc.driver.name=PostgreSQL JDBC Driver | ||||
| serverName=db-postgres | ||||
| portNumber=5432 | ||||
| databaseName=esb_entaxy | ||||
| user=entaxy | ||||
| password=entaxy | ||||
| pool=dbcp2 | ||||
| xa=true | ||||
| jdbc.pool.maxTotal=100 | ||||
| @@ -1,20 +0,0 @@ | ||||
| # адреса кластера брокеров сообщений, задаются: | ||||
| # если tcp в скобках и через запятую: (tcp://192.168.122.81:61616,tcp://192.168.122.82:61616) | ||||
| # если amqp с failover и в скобках через запятую: failover:(amqp://192.168.122.81:5672,amqp://192.168.122.82:5672) | ||||
| common.jms.url=(tcp://broker:61616) | ||||
| # логин для аутентификации в брокере сообщений | ||||
| common.jms.username=entaxy | ||||
| # пароль для аутентификации в брокере сообщений | ||||
| common.jms.password=entaxy | ||||
| # максимальное количество соединений | ||||
| # подробнее можно почитать здесь: https://github.com/messaginghub/pooled-jms/blob/master/pooled-jms-docs/Configuration.md | ||||
| common.jms.maxConnections=20 | ||||
| # максимальное количество сессий для каждого соединения | ||||
| # подробнее можно почитать здесь: https://github.com/messaginghub/pooled-jms/blob/master/pooled-jms-docs/Configuration.md | ||||
| common.jms.maxSessionsPerConnection=100 | ||||
|  | ||||
| # наименование драйвера для инициализации фабрики планировщика quartz | ||||
| org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate | ||||
|  | ||||
| # название очереди, через которую ходят большие пакеты и файлы | ||||
| common.bridge.file.queue.name=file.queue | ||||
| @@ -1,58 +0,0 @@ | ||||
| # имя локальной шины(<node_name>) | ||||
| jms.local=test1 | ||||
| # значение true - мост текущего узла работает в пассивном режиме, | ||||
| # т.е. сообщения для соответствующего удалённого узла складываются в очередь на локальном брокере, | ||||
| # из которой уже читает подключаемый узел (локальный брокер должен быть доступен для соединения) | ||||
| # По умолчанию false - активный режим, запись сообщения идёт сразу в очередь на удалённом брокере, | ||||
| # подключаемого узла (брокеры по обе стороны моста должны быть доступны) | ||||
| jms.local.master=false | ||||
| # имена удаленных шин, задается через запятую(<node_name>,<node_name>) | ||||
| jms.remote.list=test2 | ||||
|  | ||||
| # адреса брокера, задаются чеерез запятую(jms.url.<node_name>) | ||||
| jms.url.test1=broker:61616 | ||||
| # логин для подключения к брокеру(jms.username.<node_name>) | ||||
| jms.username.test1=entaxy | ||||
| # пароль для подключения к брокеру(jms.password.<node_name>) | ||||
| jms.password.test1=entaxy | ||||
| # протокол для передачи сообщений внутри шины(jms.protocol.inner.esb.<node_name>) | ||||
| # для корректной работы синхронного режима передачи сообщений: необходимо следить | ||||
| # за одинаковым значением данного параметра в мосту и в самой шине(ru.entaxy.esb.cfg) | ||||
| # возможные значения tcp, amqp | ||||
| jms.protocol.inner.esb.test1=tcp | ||||
| # протокол для передачи сообщений между шинами(jms.protocol.bridge.esb.<node_name>) | ||||
| # для корректной работы синхронного режима передачи сообщений: необходимо следить | ||||
| # за одинаковым значением данного параметра во всех подключенных шинах | ||||
| # возможные значения tcp, amqp | ||||
| jms.protocol.bridge.test1=amqp | ||||
|  | ||||
| # адреса брокера, задаются чеерез запятую(jms.url.<node_name>) | ||||
| jms.url.test2=broker:61616 | ||||
| # логин для подключения к брокеру(jms.username.<node_name>) | ||||
| jms.username.test2=entaxy | ||||
| # пароль для подключения к брокеру(jms.password.<node_name>) | ||||
| jms.password.test2=entaxy | ||||
| # jms.master.<node_name> - выставляем в true, когда соответствующий узел настроен в пассивный режим, | ||||
| # т.е. для него jms.local.master = true (брокер должен быть доступен для соединения) | ||||
| jms.master.test2=true | ||||
| # протокол для передачи сообщений внутри шины(jms.protocol.inner.esb.<node_name>) | ||||
| # для корректной работы синхронного режима передачи сообщений: необходимо следить | ||||
| # за одинаковым значением данного параметра в мосту и в самой шине(ru.entaxy.esb.cfg) | ||||
| # возможные значения tcp, amqp | ||||
| jms.protocol.inner.esb.test2=tcp | ||||
| # протокол для передачи сообщений между шинами(jms.protocol.bridge.esb.<node_name>) | ||||
| # для корректной работы синхронного режима передачи сообщений: необходимо следить | ||||
| # за одинаковым значением данного параметра во всех подключенных шинах | ||||
| # возможные значения tcp, amqp | ||||
| jms.protocol.bridge.test2=amqp | ||||
|  | ||||
| # максимальное колчичество попыток отправить сообщение в очередь | ||||
| # почитать подробнее можно в https://camel.apache.org/components/latest/eips/dead-letter-channel.html#deadLetterChannel-Redelivery | ||||
| redelivery.maximumRedeliveries=-1 | ||||
| # время между попытками отправить сообщение в очередь | ||||
| redelivery.redeliveryDelay=5000 | ||||
| # экспоненциальный рост времени между попытками отпрвки сообщений в очередь | ||||
| redelivery.useExponentialBackOff=true | ||||
|  | ||||
| queue.sender.concurrentConsumers=1 | ||||
| queue.receiver.concurrentConsumers=1 | ||||
| @@ -1,3 +0,0 @@ | ||||
| FROM postgres | ||||
|  | ||||
| COPY create-db.sql /docker-entrypoint-initdb.d/ | ||||
| @@ -1,4 +0,0 @@ | ||||
| CREATE DATABASE esb_entaxy; | ||||
| GRANT ALL PRIVILEGES ON DATABASE esb_entaxy TO entaxy; | ||||
| CREATE DATABASE db_connector_test; | ||||
| GRANT ALL PRIVILEGES ON DATABASE db_connector_test TO entaxy; | ||||
| @@ -1,3 +0,0 @@ | ||||
| FROM dzikoysk/reposilite:2.9.23 | ||||
|  | ||||
| COPY tokens.dat /app/data | ||||
| @@ -1,6 +0,0 @@ | ||||
| !!org.panda_lang.reposilite.auth.TokenCollection | ||||
| "tokens": | ||||
| - "alias": "admin" | ||||
|   "path": "/" | ||||
|   "permissions": "m" | ||||
|   "token": "$2a$10$Xrurah6y4IOijq9EtFlAIe2wlhlUScggEBS88DriZDM9MCrAGwqdS" | ||||
| Before Width: | Height: | Size: 51 KiB | 
							
								
								
									
										5
									
								
								documentation/_styles/font-awesome.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						| Before Width: | Height: | Size: 60 KiB | 
| @@ -1,203 +0,0 @@ | ||||
| = План создания коннектора | ||||
|  | ||||
| Для создания полноценного коннектора необходимо создать bundle с такой структурой: | ||||
|  | ||||
| . _src/main/resource/template/<название endpoint>-in-connector.ftl_ | ||||
| . _src/main/resource/template/<название endpoint>-out-connector.ftl_ | ||||
| . _src/main/resource/OSGI-INF/blueprint/camel-context.xml_ | ||||
| . _pom.xml_ | ||||
|  | ||||
| == Создание шаблона входного коннектора(in-connector) | ||||
|  | ||||
| _Входной коннектор_ - это коннектор, который получает сообщения из вне Entaxy. | ||||
|  | ||||
| _Шаблон входного коннектора_ - ftl файл, на основе которого шина будет создавать индивидуальные входные коннекторы для каждой системы, с помощью подстановки параметров, полученных от пользователя. | ||||
|  | ||||
| Пример созданного шаблона, где название endpoint - _example_: | ||||
| _src/main/resource/template/example-in-connector.ftl_ | ||||
| [source,xml] | ||||
| ---- | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" | ||||
|            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|            xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> | ||||
|  | ||||
|     <bean id="inConnector" class="ru.entaxy.esb.system.profile.commons.connectors.in.DirectVMInConnectorImpl"> | ||||
|         <property name="endpointName" value="example"/> | ||||
|         <property name="systemName" value="[=systemName]"/> | ||||
|     </bean> | ||||
|     <service ref="inConnector" auto-export="interfaces"> | ||||
|         <service-properties> | ||||
|             <entry key="endpointName" value="example"/> | ||||
|             <entry key="systemName" value="[=systemName]"/> | ||||
|         </service-properties> | ||||
|     </service> | ||||
|  | ||||
|     <camelContext id="example-in-connector-[=systemName]-context" xmlns="http://camel.apache.org/schema/blueprint"> | ||||
|         <route id="example-[=systemName]-connector"> | ||||
|             <from uri="direct-vm:example-in-connector-[=systemName]"/> | ||||
|             <setHeader name="ESB.Endpoint.Name"> | ||||
|                 <constant>example</constant> | ||||
|             </setHeader> | ||||
|             <to uri="direct-vm:profile-[=systemName]-exit-dispatcher"/> | ||||
|         </route> | ||||
|     </camelContext> | ||||
|  | ||||
| </blueprint> | ||||
| ---- | ||||
|  | ||||
| Создание и публикация бина: для связи коннектора с профилем, возможности получить весь список коннекторов определенного типа. | ||||
| [source, xml] | ||||
| ---- | ||||
| <bean id="inConnector" class="ru.entaxy.esb.system.profile.commons.connectors.in.DirectVMInConnectorImpl"> | ||||
|     <property name="endpointName" value="example"/> | ||||
|     <property name="systemName" value="[=systemName]"/> | ||||
| </bean> | ||||
| <service ref="inConnector" auto-export="interfaces"> | ||||
|     <service-properties> | ||||
|         <entry key="endpointName" value="example"/> | ||||
|         <entry key="systemName" value="[=systemName]"/> | ||||
|     </service-properties> | ||||
| </service> | ||||
| ---- | ||||
|  | ||||
| Маршрут коннектора, который полученные сообщения отправляет на выходную точку профиля, к которой прикрепляется сгенерированный пользователем route. | ||||
| [source, xml] | ||||
| ---- | ||||
| <route id="example-[=systemName]-in-connector"> | ||||
|     <from uri="direct-vm:example-in-connector-[=systemName]"/> | ||||
|     <setHeader name="ESB.Endpoint.Name"> | ||||
|         <constant>example</constant> | ||||
|     </setHeader> | ||||
|     <to uri="direct-vm:profile-[=systemName]-exit-dispatcher"/> | ||||
| </route> | ||||
| ---- | ||||
|  | ||||
| Начало маршрута входного коннектора может начинаться не с _"direct-vm:example-in-connector-[=systemName]"_, а получать сообщения, например, через определенную папку на диске. | ||||
|  | ||||
| Для того чтобы отправить сообщение в коннектор необходимо, получить все коннекторы определенного типа (example): | ||||
| [source,xml] | ||||
| ---- | ||||
| <bean id="inConnectorRegistry" class="ru.entaxy.esb.system.profile.commons.ConnectorRegistry" activation="eager"/> | ||||
|  | ||||
| <reference-list id="inConnector" interface="ru.entaxy.esb.system.profile.commons.connectors.in.InConnector" | ||||
|                 filter="(endpointName=example)" availability="optional"> | ||||
|     <reference-listener ref="inConnectorRegistry" | ||||
|                         bind-method="register" unbind-method="unregister"/> | ||||
| </reference-list> | ||||
| ---- | ||||
|  | ||||
| И отправлять сообщения с помощью: | ||||
| [source,xml] | ||||
| ---- | ||||
| <bean ref="inConnectorRegistry" method="send"/> | ||||
| ---- | ||||
|  | ||||
| == Создание шаблона выходного коннектора(out-connector) | ||||
|  | ||||
| _Выходной коннектор_ - это коннектор, который отправляет сообщения из Entaxy в систему (вне Entaxy). | ||||
|  | ||||
| _Шаблон выходного коннектора_ - ftl файл, на основе которого шина будет создавать индивидуальные выходные коннекторы для каждой системы, с помощью подстановки параметров, полученных от пользователя. | ||||
|  | ||||
| Пример созданного шаблона, где название endpoint - _example_: | ||||
| _src/main/resource/template/example-out-connector.ftl_ | ||||
| [source,xml] | ||||
| ---- | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" | ||||
|            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|            xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> | ||||
|  | ||||
|     <reference id="pooledConnectionFactory" interface="javax.jms.ConnectionFactory"/> | ||||
|     <bean id="jms" class="org.apache.camel.component.jms.JmsComponent"> | ||||
|         <property name="connectionFactory" ref="pooledConnectionFactory"/> | ||||
|     </bean> | ||||
|  | ||||
|     <bean id="exampleConnector" class="ru.entaxy.esb.system.profile.commons.connectors.out.DirectVMOutConnectorImpl"> | ||||
|         <property name="endpointName" value="example"/> | ||||
|         <property name="systemName" value="[=systemName]"/> | ||||
|     </bean> | ||||
|     <service ref="exampleConnector" auto-export="interfaces"> | ||||
|         <service-properties> | ||||
|             <entry key="endpointName" value="example"/> | ||||
|             <entry key="systemName" value="[=systemName]"/> | ||||
|         </service-properties> | ||||
|     </service> | ||||
|  | ||||
|     <camelContext id="example-out-connector-[=systemName]-context" xmlns="http://camel.apache.org/schema/blueprint" | ||||
|                   errorHandlerRef="commonErrorHandler"> | ||||
|  | ||||
|         <errorHandler id="commonErrorHandler" redeliveryPolicyRef="noRedelivery" | ||||
|                       type="DeadLetterChannel" deadLetterUri="direct-vm:commonErrorEndpoint"/> | ||||
|         <redeliveryPolicyProfile id="noRedelivery" disableRedelivery="true"/> | ||||
|  | ||||
|         <route id="example-out-connector"> | ||||
|             <from uri="direct-vm:example-out-connector-[=systemName]"/> | ||||
|             <log message="Message ${headers} send to system" loggingLevel="TRACE"/> | ||||
|             <toD uri="jms:queue:example-[=systemName]?exchangePattern=InOnly&priority=${headers.SOAPJMS_HEADER_priority}"/> | ||||
|         </route> | ||||
|     </camelContext> | ||||
|  | ||||
| </blueprint> | ||||
| ---- | ||||
|  | ||||
| Создание и публикация бина: для связи коннектора с профилем, возможности получить весь список коннекторов определенного типа. | ||||
| [source, xml] | ||||
| ---- | ||||
| <bean id="exampleOutConnector" class="ru.entaxy.esb.system.profile.commons.connectors.out.DirectVMOutConnectorImpl"> | ||||
|     <property name="endpointName" value="example"/> | ||||
|     <property name="systemName" value="[=systemName]"/> | ||||
| </bean> | ||||
| <service ref="exampleOutConnector" auto-export="interfaces"> | ||||
|     <service-properties> | ||||
|         <entry key="endpointName" value="example"/> | ||||
|         <entry key="systemName" value="[=systemName]"/> | ||||
|     </service-properties> | ||||
| </service> | ||||
| ---- | ||||
|  | ||||
| Маршрут выходного коннектора *должен* стартовать с: | ||||
| [source,xml] | ||||
| ---- | ||||
| <from uri="direct-vm:example-out-connector-[=systemName]"/> | ||||
| ---- | ||||
|  | ||||
| == Публикация созданных шаблонов | ||||
|  | ||||
| Необходимо опубликовать osgi сервис с информацией об созданных шаблонах для того, чтобы механизм создания коннекторов увидел их. | ||||
|  | ||||
| _src/main/resource/OSGI-INF/blueprint/camel-context.xml_ | ||||
| [source,xml] | ||||
| ---- | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" | ||||
|            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|            xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> | ||||
|  | ||||
|     <!--template in connector--> | ||||
|     <bean id="inTemplate" class="ru.entaxy.esb.system.core.template.TemplateImpl"> | ||||
|         <property name="bundleContext" ref="blueprintBundleContext"/> | ||||
|         <property name="templateName" value="example-in-connector"/> | ||||
|         <property name="params"> | ||||
|             <map> | ||||
|                 <entry key="param" value="false"/> | ||||
|             </map> | ||||
|         </property> | ||||
|     </bean> | ||||
|     <service interface="ru.entaxy.esb.system.core.template.Template" ref="inTemplate"/> | ||||
|  | ||||
|     <!--template out connector--> | ||||
|     <bean id="outTemplate" class="ru.entaxy.esb.system.core.template.TemplateImpl"> | ||||
|         <property name="bundleContext" ref="blueprintBundleContext"/> | ||||
|         <property name="templateName" value="example-out-connector"/> | ||||
|         <property name="params"> | ||||
|             <map> | ||||
|                 <entry key="param" value="false"/> | ||||
|             </map> | ||||
|         </property> | ||||
|     </bean> | ||||
|     <service interface="ru.entaxy.esb.system.core.template.Template" ref="outTemplate"/> | ||||
| </blueprint> | ||||
| ---- | ||||
|  | ||||
| xref:../core/system-managment/Users-manual-System-management.adoc[Информация о создании коннекторов со стороны пользователя] | ||||
| Before Width: | Height: | Size: 169 KiB | 
| @@ -1,86 +0,0 @@ | ||||
| = Используемые служебные заголовки Entaxy | ||||
|  | ||||
| ENTAXY_ - глобальный формат заголовков, который используется не только в рамках коннектора. Используется во всём процессе прохождения пакета, так же может быть принят извне. | ||||
|  | ||||
| NTX_ - внутренний формат заголовков в конкретном коннекторе, носит служебный характер. | ||||
| Например _NTX_Origin_ - служит для идентификации имени контура шины при прохождении пакета через мост. | ||||
|  | ||||
| |=== | ||||
| |Имя заголовка |Описание |Возможные значения |Обязательность | ||||
|  | ||||
| |X-ForwardedUser | ||||
| |логин аккаунта, проставляется с помощью _nginx_ | ||||
| | | ||||
| |true | ||||
|  | ||||
| |X-ForwardedUserId | ||||
| |внутренний id аккаунта, проставляется с помощью _ru.entaxy.esb.system.auth.basic.interceptor.SystemInterceptor_ | ||||
| | | ||||
| |true | ||||
|  | ||||
| |X-SystemName | ||||
| |имя системы, полученное при авторизации с помощью _ru.entaxy.esb.system.auth.basic.interceptor.SystemInterceptor_ | ||||
| | | ||||
| |true | ||||
|  | ||||
| |X-SystemUuid | ||||
| |uuid системы, полученное при авторизации с помощью _ru.entaxy.esb.system.auth.basic.interceptor.SystemInterceptor_ | ||||
| | | ||||
| |true | ||||
|  | ||||
| |X-SystemId | ||||
| |внутренний id системы, полученное при авторизации с помощью _ru.entaxy.esb.system.auth.basic.interceptor.SystemInterceptor_ | ||||
| | | ||||
| |true | ||||
|  | ||||
| |ENTAXY_EndpointName | ||||
| |Имя коннектора, через который было получено сообщение | ||||
| |US-SOAP, US-File, US-JMS, .... | ||||
| |true | ||||
|  | ||||
| |ENTAXY_ConnectorType | ||||
| |Тип коннектора, через который было получено сообщение | ||||
| |uniform-service | ||||
| |true | ||||
|  | ||||
| |ENTAXY_ConnectorName | ||||
| |Имя коннектора, через который было получено сообщение | ||||
| | | ||||
| |true | ||||
|  | ||||
| |ENTAXY_Source | ||||
| |Имя отправителя | ||||
| | | ||||
| |true | ||||
|  | ||||
| |ENTAXY_SourceType | ||||
| |Tип отправителя | ||||
| |system.name, system-group.name, queue.name, topic.name | ||||
| |false | ||||
|  | ||||
| |ENTAXY_Destination | ||||
| |Имя получателя | ||||
| | | ||||
| |false | ||||
|  | ||||
| |ENTAXY_DestinationType | ||||
| |Tип получателя | ||||
| |system.name, system-group.name, queue.name, topic.name | ||||
| |false | ||||
|  | ||||
| |ENTAXY_Priority | ||||
| |Приоритет сообщения | ||||
| |0-9 | ||||
| |false | ||||
|  | ||||
| |ENTAXY_ContentType | ||||
| |Тип сообщения | ||||
| |application/xml, message/external-body | ||||
| |false | ||||
|  | ||||
| |ENTAXY_EmptyContent | ||||
| |Является ли сообщение пустым | ||||
| |true; false | ||||
| |false | ||||
| |=== | ||||
|  | ||||
| Before Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 44 KiB | 
| @@ -1,76 +0,0 @@ | ||||
| = Активный режим коннектора | ||||
|  | ||||
| image::US-active.png[] | ||||
|  | ||||
| == Сервис для отладки активного коннектора | ||||
|  | ||||
| Поднимается на endpoint _/active_connector_test_consumer_ | ||||
| при выставленной настройке _active.mode.dev=true_ в файле конфигураций  _uniform.service.support.cfg_ | ||||
|  | ||||
|  | ||||
| == Requests Examples | ||||
|  | ||||
|     POST http://192.168.122.83:8181/cxf/uniform-exchange | ||||
|  | ||||
| ==== SEND MESSAGE: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.entaxy.ru/ExchangeTypes/1.0"> | ||||
|    <soapenv:Header/> | ||||
|    <soapenv:Body> | ||||
|       <ns:packets> | ||||
|          <ns:packet> | ||||
|             <ns:header> | ||||
|                <ns:messageUUID>b7e6aab7-8f02-443c-8f67-e2d638dd4da0</ns:messageUUID> | ||||
|                <ns:source> | ||||
|                   <ns:id>s1</ns:id> | ||||
|                </ns:source> | ||||
|                <ns:destination> | ||||
|                   <ns:id>s2</ns:id> | ||||
|                </ns:destination> | ||||
|             </ns:header> | ||||
|             <ns:content> | ||||
|                 <test> | ||||
|                     <hello_world/> | ||||
|                 </test> | ||||
|             </ns:content> | ||||
|          </ns:packet> | ||||
|       </ns:packets> | ||||
|    </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| ==== GET MESSAGE: | ||||
|  | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.entaxy.ru/ExchangeTypes/1.0"> | ||||
| <soapenv:Header/> | ||||
| <soapenv:Body> | ||||
|   <ns:request> | ||||
|      <ns:destination> | ||||
|         <ns:id>s2</ns:id> | ||||
|         <ns:type>system.name</ns:type> | ||||
|      </ns:destination> | ||||
|      <ns:limitCount>1</ns:limitCount> | ||||
|      <ns:limitSize>0</ns:limitSize> | ||||
|   </ns:request> | ||||
| </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| ==== ACK MESSAGE: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.entaxy.ru/ExchangeTypes/1.0"> | ||||
|    <soapenv:Header/> | ||||
|    <soapenv:Body> | ||||
|       <ns:uuids> | ||||
|          <ns:uuid>{{message_uuid}}</ns:uuid> | ||||
|       </ns:uuids> | ||||
|    </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
| @@ -1,35 +0,0 @@ | ||||
| = IGNITE | ||||
|  | ||||
| IgniteAggregationRepository сделано на основе JdbsAggregationRepository | ||||
| документация https://help.talend.com/reader/Uc2IlRuFVfGrjaFPdRI7kA/fBdqK2kf6iIkLHQf9nLh6g | ||||
|  | ||||
| Есть некоторые внутренние баги karaf, которые не позволяют установить некоторые ignite фичи в караф | ||||
| https://github.com/apache/ignite/blob/fd921a233d35408883695419b6f9979ac674d1b9/modules/osgi-karaf/src/main/resources/features.xml#L87 | ||||
|  | ||||
| В карафе поднимается ignite, с рабочей директорией, прописанной в ru.entaxy.esb.ignite.cfg, | ||||
| в параметре ignite.work.directory.path. Это место, где игнайт | ||||
| создает для себя все, что нужно, и будет хранить данные. | ||||
|  | ||||
| Ignite настроен с сохранением персисетнтности данных(сохранением их на диск) и | ||||
| созданием реплицации(бэкапов) на других узлах кластера.(при потере одной ноды, | ||||
| другие восстановят данные, которе хранились на текущем узле) | ||||
|  | ||||
| IGNITE_QUIET=false - параметр необходимый для того, чтобы игнайт не писал информацию о себе в лог, | ||||
| для того что бы параметр применился, необходимо выставить setGridLogger, | ||||
| смогла установить в караф только JclLogger. | ||||
|  | ||||
| **AggregationProcessor** | ||||
|  | ||||
| AggregationProcessor стандартный, не расчитан на работу в кластере из-за чего пришлось вытаскивать исходники | ||||
| и редактировать сам процессор.(AggregationProcessorWithRestoreTimeout) | ||||
| Т к теперь AggregationProcessor вызывается как bean, а не как стандартный камеловский процессор, | ||||
| то процесс старта и остановки происходит в отличном порядке. | ||||
|  | ||||
| Для работы к кластере: | ||||
| - добавлен механизм восстановления работы таймаутов на других нодах, | ||||
| - отредактирован механизм удаления сообщения из репозитория(возникало состояние гонки и появлялись дубликаты), | ||||
| - исправлен механизм продолжения работы с "застрявшими" сообщениями (recoverTask из таблицы _completed) | ||||
| - добавлен безопасный механизм забора сообщений из очереди(восстановление сообщения в очереди, если не пришло подтверждение) | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -1,35 +0,0 @@ | ||||
| == Работа с artemis, проверка сообщений | ||||
|  | ||||
| Консоль управления artemis расположена на _http://localhost:8161/console/login_ | ||||
|  | ||||
| * Необходимо аутентифицироваться в artemis(где логин и пароль по умолчанию entaxy/entaxy) | ||||
|  | ||||
| image::img/image_2021-09-13_21-39-23.png[] | ||||
|  | ||||
| * После успешного прохождения аутентификации, консоль artemis будет выглядеть так: | ||||
|  | ||||
| image::img/image_2021-09-13_21-40-11.png[] | ||||
|  | ||||
| * В левой части интерфейса находятся созданные очереди artemis, где необходимо выбрать очередь, как и показано на скрине: | ||||
|  | ||||
| image::img/image_2021-09-13_21-40-38.png[] | ||||
|  | ||||
| * В верхней части artemis необходимо выбрать раздел _Browse_, который отображает находящиеся в очереди сообщения: | ||||
|  | ||||
| image::img/image_2021-09-13_21-41-56.png[] | ||||
|  | ||||
| * Выбрав сообщение, отобразится информация о сообщении: | ||||
|  | ||||
| а) тело сообщения | ||||
|  | ||||
| image::img/image_2021-09-13_21-42-24.png[] | ||||
|  | ||||
| б) заголовки сообщения | ||||
|  | ||||
| image::img/image_2021-09-13_21-42-53.png[] | ||||
|  | ||||
| * После того как сообщение было прочитано из entaxy, и если оно было там одно, то очередь автоматически удалится из artemis. Иначе сообщение будет забрано из очереди. | ||||
|  | ||||
| image::img/image_2021-09-13_21-43-15.png[] | ||||
|  | ||||
|  | ||||
| Before Width: | Height: | Size: 273 KiB | 
| Before Width: | Height: | Size: 129 KiB | 
| Before Width: | Height: | Size: 155 KiB | 
| Before Width: | Height: | Size: 124 KiB | 
| Before Width: | Height: | Size: 94 KiB | 
| Before Width: | Height: | Size: 192 KiB | 
| Before Width: | Height: | Size: 128 KiB | 
| Before Width: | Height: | Size: 53 KiB | 
| Before Width: | Height: | Size: 30 KiB | 
| Before Width: | Height: | Size: 29 KiB | 
| Before Width: | Height: | Size: 28 KiB | 
| Before Width: | Height: | Size: 37 KiB | 
| Before Width: | Height: | Size: 51 KiB | 
| Before Width: | Height: | Size: 50 KiB | 
| Before Width: | Height: | Size: 78 KiB | 
| Before Width: | Height: | Size: 81 KiB | 
| Before Width: | Height: | Size: 64 KiB | 
| Before Width: | Height: | Size: 56 KiB | 
| Before Width: | Height: | Size: 57 KiB | 
| Before Width: | Height: | Size: 78 KiB | 
| @@ -1,89 +0,0 @@ | ||||
| = Инструкция для работы с шиной через универсальный коннектор | ||||
|  | ||||
| === Преднастройка окружения | ||||
|  | ||||
| . Скачать и установить postman(https://www.postman.com/downloads/). | ||||
| . Импортировать коллекцию запросов и окружение в postman | ||||
|  | ||||
| Далее показано как импортироваться коллекцию запросов и окружение в postman Version 8.11.1, если стоит другая версия и возникли сложности с инструкцией, то обратитесь к документации postman(https://learning.postman.com/docs/getting-started/importing-and-exporting-data/). | ||||
|  | ||||
| === Импорт коллекции запросов и окружения в postman | ||||
|  | ||||
| * Если вы на домашней странице postman, то нажмите _Import file_, как показано ниже на скрине. | ||||
|  | ||||
| image::img/photo5298499320133302025.jpg[] | ||||
|  | ||||
| * Если вы не на домашней странице postman, то нажмите _File_, _Import..._, как показано ниже на скрине. | ||||
|  | ||||
| image::img/photo5298499320133302031.jpg[] | ||||
|  | ||||
| * Далее откроется окно с импортом файла, где нужно нажать на _Upload Files_ и импортировать файлы, по одному или сразу оба(xref:postman/uniform-connector.postman_environment.json[Окружение], xref:postman/uniform-connector.postman_collection.json[Коллекция запросов]) | ||||
|  | ||||
| image::img/photo5298499320133302028.jpg[] | ||||
|  | ||||
| * Или можно импортировать сразу всю папку с файлами(xref:postman/uniform-connector.postman_environment.json[Окружение], xref:postman/uniform-connector.postman_collection.json[Коллекция запросов]) | ||||
|  | ||||
| image::img/photo5298499320133302034.jpg[] | ||||
|  | ||||
| image::img/photo5298499320133302035.jpg[] | ||||
|  | ||||
| * Далее мы увидим импортированную коллекцию запросов слева и необходимо выбрать импортированное ранее окружение | ||||
|  | ||||
| image::img/photo5298499320133302038.jpg[] | ||||
| image::img/photo5298499320133302039.jpg[] | ||||
|  | ||||
| * Есть возможность настраивать параметры запросов, документация на данную тему(https://learning.postman.com/docs/sending-requests/managing-environments/) | ||||
|  | ||||
| image::img/photo5298499320133302041.jpg[] | ||||
|  | ||||
| * Коллекция запросов и окружение были успешно импортированы в postman и готовы к использованию, можно запустить все запросы в автоматическом режиме или запускать их в ручную по очереди | ||||
|  | ||||
| === Запуск всех запросов в автоматическом режиме | ||||
|  | ||||
| * Необходимо нажать на _Run Collection_ в меню коллекции, как показано ниже | ||||
|  | ||||
| image::img/photo5298499320133302042.jpg[] | ||||
| image::img/photo5298499320133302043.jpg[] | ||||
|  | ||||
| * Можно увидеть успешное прохождение коллекции. При успешном прохождении коллекции тестов шина будет очищена. Если не подразумевалось данное поведение, то необходимо снять выделение с запросов(_Remove profile system1_, _Remove profile system2_, _Remove Account system1_, _Remove Account system2_) | ||||
|  | ||||
| image::img/photo5298499320133302044.jpg[] | ||||
| image::img/photo5298499320133302046.jpg[] | ||||
|  | ||||
| === Запуск запросов в ручную по очереди | ||||
|  | ||||
| * Для запуска конкретного запроса нужно нажать на него в меню слева, затем откроется меню редактирования запроса, где можно посмотреть все параметры запроса и настроить его как необходимо и нажимая на кнопку _Send_ запрос отправляется на шину | ||||
|  | ||||
| image::img/photo5298499320133302047.jpg[] | ||||
|  | ||||
| === Описание окружения | ||||
|  | ||||
| ... _base_url_ - если запросы будут запускаться с машины находящейся с шиной, то данный параметр не нужно менять(http://localhost:8181/cxf), иначе заменить localhost:8181 на необходимый | ||||
| ... _system1_id_ - имя/идентификатор системы, то как будет представлена система в шине(по умолчанию s1) | ||||
| ... _system1Login_ - логин системы, то как будет аутентифицироваться система в шине(по умолчанию s1) | ||||
| ... _system1Password_ - пароль системы, то как будет аутентифицироваться система в шине(по умолчанию s1) | ||||
| ... _system2_id_ - имя/идентификатор системы, то как будет представлена система в шине(по умолчанию s1) | ||||
| ... _system2Login_ - логин системы, то как будет аутентифицироваться система в шине(по умолчанию s1) | ||||
| ... _system2Password_ - пароль системы, то как будет аутентифицироваться система в шине(по умолчанию s1) | ||||
| ... _adminLogin_ - админская учетная запись, для произведения настроек в шине(по умолчанию admin) | ||||
| ... _adminPassword_ - админская учетная запись, для произведения настроек в шине(по умолчанию admin) | ||||
|  | ||||
| === Содержимое тестов | ||||
| . Коллекция запросов содержит следующие шаги: | ||||
| .. _Create profile system1_ - создание профиля системы 1, которая будет отправлять сообщения в шину | ||||
| .. _Create profile system2_ - создание профиля системы 2 | ||||
| .. _Add Account system1_ - создание учетной записи для системы 1 | ||||
| .. _Add Account system2_ - создание учетной записи для системы 2 | ||||
| .. _Create uniform-service-in-connector_ - создание входящего коннектора к универсальному сервису для системы 1 | ||||
| .. _Create uniform-service-out-connector_ - создание исходящего коннектора к универсальному сервису для системы 1 | ||||
| .. _Create uniform-service-in-connector_ - создание входящего коннектора к универсальному сервису для системы 2 | ||||
| .. _Get profile system1_ - запросы для проверки на корректное создания профиля системы1 и коннекторов к нему(uniform-service-in-connector) | ||||
| .. _Get profile system2_ - запросы для проверки на корректное создания профиля системы1 и коннекторов к нему(uniform-service-in-connector, uniform-service-out-connector) | ||||
| .. _Create permission_ - создание разрешения для отправки сообщений из системы 1 в систему 2 | ||||
| .. _SEND_ - отправка тестового сообщения из системы 1 в систему 2 (если необходимо, то можно посмотреть как сообщение появилось в xref:artemis.adoc[artemis]) | ||||
| .. _GET_ - получение тестового сообщения из системы 1 системой 2(если необходимо, то можно посмотреть как сообщение было получено из xref:artemis.adoc[artemis]) | ||||
| .. _ACK_ - отправка подтверждения получения сообщения системы 2(иначе сообщение будет восстановлено) | ||||
| .. _Remove profile system1_ - удаление из шины профиля системы 1 и всех связанных с ней коннекторов | ||||
| .. _Remove profile system2_ - удаление из шины профиля системы 2 и всех связанных с ней коннекторов | ||||
| .. _Remove Account system1_ - удаление учетной записи системы 1 из шины | ||||
| .. _Remove Account system2_ - удаление учетной записи системы 2 из шины | ||||
| @@ -1,54 +0,0 @@ | ||||
| { | ||||
| 	"id": "527e5257-25b4-4246-ac5a-26b88e06eec8", | ||||
| 	"name": "uniform-connector", | ||||
| 	"values": [ | ||||
| 		{ | ||||
| 			"key": "base_url", | ||||
| 			"value": "http://localhost:8181/cxf", | ||||
| 			"enabled": true | ||||
| 		}, | ||||
| 		{ | ||||
| 			"key": "system1_id", | ||||
| 			"value": "s1", | ||||
| 			"enabled": true | ||||
| 		}, | ||||
| 		{ | ||||
| 			"key": "system2_id", | ||||
| 			"value": "s2", | ||||
| 			"enabled": true | ||||
| 		}, | ||||
| 		{ | ||||
| 			"key": "adminLogin", | ||||
| 			"value": "admin", | ||||
| 			"enabled": true | ||||
| 		}, | ||||
| 		{ | ||||
| 			"key": "adminPassword", | ||||
| 			"value": "admin", | ||||
| 			"enabled": true | ||||
| 		}, | ||||
| 		{ | ||||
| 			"key": "system1Login", | ||||
| 			"value": "s1", | ||||
| 			"enabled": true | ||||
| 		}, | ||||
| 		{ | ||||
| 			"key": "system1Password", | ||||
| 			"value": "s1", | ||||
| 			"enabled": true | ||||
| 		}, | ||||
| 		{ | ||||
| 			"key": "system2Login", | ||||
| 			"value": "s2", | ||||
| 			"enabled": true | ||||
| 		}, | ||||
| 		{ | ||||
| 			"key": "system2Password", | ||||
| 			"value": "s2", | ||||
| 			"enabled": true | ||||
| 		} | ||||
| 	], | ||||
| 	"_postman_variable_scope": "environment", | ||||
| 	"_postman_exported_at": "2021-08-24T14:43:46.375Z", | ||||
| 	"_postman_exported_using": "Postman/7.36.5" | ||||
| } | ||||
| @@ -1,38 +0,0 @@ | ||||
| = Универсальный сервис(US) | ||||
|  | ||||
| Универсальный сервис разработан для корректного и единообразного взаимодействия с _Entaxy_ из _1С интеграции_. | ||||
|  | ||||
| image::US.png[] | ||||
|  | ||||
| === US endpoint | ||||
|  | ||||
| Универсальный сервис выставлен с помощью soap (может быть заменен на любой другой способ обмена сообщения, например rest, с сохранением схемы), в котором 3 метода _sendPackets_, _getPackets_ и _confirmPackets_. US endpoint включает в себя: выставленный soap сервис, проверку на существование коннектора и отправку в коннектор(что верно и для uniform-service-service-endpoint) | ||||
|  | ||||
| === US connector | ||||
|  | ||||
| Коннектор занимается обработкой полученного пакета. | ||||
|  | ||||
| - _sendPackets_ - шина анализирует пакет, создавая служебную информацию(такую как имя системы отправителя, имя и тип получателя и т д) и отправляет в выходную точку профиля. | ||||
|  | ||||
| - _getPackets_ - шина делает проверку служебной информации(такую как имя системы отправителя, имя и тип получателя и т д) и забирает сообщение из очереди, дополнительно отправляя его в агрегатор. Агрегатор необходим для гарантированной доставки пакета, если в течение заданного таймаута (по умолчанию - 10 минут) не придет подтверждение, то пакет будет считаться не доставленным и будет восстановлен в очереди. | ||||
|  | ||||
| - _confirmPackets_ - шина делает проверку служебной информации(такую как имя системы отправителя, имя и тип получателя и т д), достает пакет из соответствующего источника (если оно есть) и отдает его системе, дополнительно отправляя в агрегатор, который если собирает пару(пакет и подтверждение) считает его доставленным и удаляет из шины. | ||||
|  | ||||
| _Агрегатор_ может хранить сообщения в ignite и базе данных, для переключения режима работы агрегатора необходимо установить необходимый параметр acknowledge.aggregation.repository (по умолчанию - jdbcAggregationRepository) в uniform.service.support.cfg | ||||
|  | ||||
| https://help.talend.com/r/Bejd_\~iSyuyc~nF9XIgDIw/fBdqK2kf6iIkLHQf9nLh6g[Информация по jdbcAggregationRepository] | ||||
|  | ||||
| xref:ignite.adoc[Информация по igniteAggregationRepository] | ||||
|  | ||||
| === US support | ||||
|  | ||||
| Необходим как вспомогательный элемент. Содержит в себе: настройку агрегатора, маршруты работы агрегатора, маршрут связанный с отправкой в систему в активном режиме коннектора. | ||||
|  | ||||
| == Режимы универсального сервиса: | ||||
|  | ||||
| - _Пассивный_ выражен в поднятом на стороне шины сервисе, который "пассивно" ждет запроса от системы. | ||||
|  | ||||
| - _Активный_ выражен в поднятом на стороне системы сервисе, который с некоторой периодичностью (настраивается при создании коннектора, по умолчанию 1m) опрашивает шина на предмет подготовленных сообщений, и, отправляет полученные сообщения в систему как только они пришли. | ||||
|  | ||||
| xref:active-mode.adoc#_активный_режим_коннектора[Информация по активному режиму работы универсального сервиса] | ||||
|  | ||||
| @@ -1,219 +0,0 @@ | ||||
| = Общее описание Entaxy | ||||
|  | ||||
| === Entaxy обеспечивает следующую функциональность: | ||||
|  | ||||
| . обеспечение доступа внешних систем к шине через опубликованные сервисы (SOAP, REST, прочее) | ||||
| . поддержка синхронного и асинхронного способа вызова служб; | ||||
| . использование защищённой шины, с гарантированной доставкой сообщений, поддерживающего транзакционную модель; | ||||
| . статическая и алгоритмическая (условная, опирающаяся на значение передаваемых данных) маршрутизация сообщений; | ||||
| . доступ к данным из сторонних информационных систем с помощью готовых или специально разработанных адаптеров; | ||||
| . обработка и преобразование сообщений; | ||||
| . отказоустойчивая конфигурация; | ||||
| . разнообразные механизмы контроля и управления (аудиты, протоколирование); | ||||
| . мониторинг данных и бизнес-процессов | ||||
|  | ||||
| === Entaxy решает следующие задачи: | ||||
|  | ||||
| . обмен сообщениями/данными между приложениями и ИС | ||||
| . организация точек доступа к услугам (сервисам) и данным | ||||
| . унификация взаимодействия с внешними ИС | ||||
| . мониторинг данных и бизнес-процессов | ||||
| . снижение трудоемкости процесса сбора и агрегации информации | ||||
| . повышение оперативности подготовки отчетов | ||||
| . обеспечение автоматизированной проверки данных, используемых в процессе деятельности | ||||
|  | ||||
| === Entaxy реализована на следующем наборе ПО: | ||||
|  | ||||
| - ОС: _Astra Linux 1.6 смоленск_ ? | ||||
| - Программная платформа: _Java 11 (librca)_ | ||||
| - СУБД (предоставляется заказчиком): _MS SQL Server_ | ||||
| - СУБД (может использоваться): _PostgreSQL JDBC Driver_ | ||||
| - Платформа исполнения: _Apache Karaf 4.2.9_ | ||||
| - Платформа интеграции: _Apache Camel 3.4.4_ | ||||
| - Каркас реализации веб-сервисов: _Apache CXF 3.4.0_ | ||||
| - Брокер сообщений: _ActiveMQ Artemis 2.15_ | ||||
| - Система мониторинга (предоставляется заказчиком): _Zabbix, Grafana_ | ||||
| - Система управления журналами (предоставляется заказчиком): _стек ELK_ | ||||
|  | ||||
| === Схема развертывания | ||||
|  | ||||
| Ниже представлена схема развертывания основных компонентов шины, содержащая следующие элементы: | ||||
|  | ||||
| . кластер _NGINX_ - два узла, обеспечивающих отказоустойчивый балансировщик нагрузки, с одним виртуальным IP-адресом | ||||
| . кластер _Karaf_ - в начальной конфигурации используется 2 узла, в дальнейшем схема масштабируется горизонтально. Наличие кластера обеспечивает отказоустойчивость и производительность, так как нагрузка распределяется между всеми активными узлами | ||||
| . кластер брокера сообщений _ActiveMQ Artemis_ - отказоустойчивая конфигурация "активный - пассивный", в которой все транзакции активного брокера реплицируются на пассивный. При выходе из строя активного брокера, активным становится пассивный. Все вызовы брокера сообщений осуществляются по схеме failover, которая гарантирует переадресацию запроса в случае недоступности основного узла. | ||||
| . отказоустойчивый кластер СУБД - предоставляется заказчиком | ||||
| . _NFS Share_ - подключаемое сетевое файловое хранилище, предоставляется заказчиком | ||||
| . _ELK_ - узел сбора и обработки логов стеком продуктов ELK (ElasticSearch, Logstash, Kibana) | ||||
| . узел сбора и обработки метрик с установленными продуктами Zabbix и Grafana | ||||
|  | ||||
| image::clustering.png[] | ||||
|  | ||||
| Ниже представлена схема деплоя профилей/коннекторов в шине: | ||||
|  | ||||
| image::System-management.png[] | ||||
|  | ||||
| === Список и характеристики узлов предпродуктивного контура | ||||
|  | ||||
|  | ||||
| |=== | ||||
| |Имя сервера |Ресурсы |Назначение |Операционная система |Софт | ||||
|  | ||||
| | PREPRD_NGINX1 | ||||
| | 2xCPU, 4Gb RAM, 40 Gb Local | ||||
| | Балансировщик | ||||
| | AstraLinux SE 1.6 | ||||
| | Nginx | ||||
|  | ||||
| | PREPRD_NGINX2 | ||||
| | 2xCPU, 4Gb RAM, 40 Gb Local | ||||
| | Балансировщик | ||||
| | AstraLinux SE 1.6 | ||||
| | Nginx | ||||
|  | ||||
| | PREPRD_KRF1 | ||||
| | 8xCPU, 12 Gb RAM, 60 Gb Local | ||||
| | Платформа запуска интеграционных маршрутов | ||||
| | AstraLinux SE 1.6 | ||||
| | Apache Karaf, Cellar, java-1.8.0-openjdk | ||||
|  | ||||
| | PREPRD_KRF2 | ||||
| | 8xCPU, 12 Gb RAM, 60 Gb Local | ||||
| | Платформа запуска интеграционных маршрутов | ||||
| | AstraLinux SE 1.6 | ||||
| | Apache Karaf, Cellar, java-1.8.0-openjdk | ||||
|  | ||||
| | PREPRD_NEXUS | ||||
| | 4xCPU, 12 Gb RAM, 60 Gb Local | ||||
| | Хранение артефактов | ||||
| | AstraLinux SE 1.6 | ||||
| | Nexus | ||||
|  | ||||
| | PREPRD_AMQ1 | ||||
| | 4xCPU, 16 Gb RAM, 60 Gb Local | ||||
| | Брокер сообщений | ||||
| | AstraLinux SE 1.6 | ||||
| | Java, ActiveMQ Artemis | ||||
|  | ||||
| | PREPRD_AMQ2 | ||||
| | 4xCPU, 16 Gb RAM, 60 Gb Local | ||||
| | Брокер сообщений | ||||
| | AstraLinux SE 1.6 | ||||
| | Java, ActiveMQ Artemis | ||||
| |=== | ||||
|  | ||||
| === Схема прохождения пакета _Система1_ - _Система2_ | ||||
|  | ||||
| Ниже представлена схема прохождения пакета на примере обмена данными между двумя экземплярами системами. | ||||
|  | ||||
| Экземпляры систем соединяются с шиной через _Коннектор_, который взаимодействует с сервисом SOAP, Универсальный коннектор, (контекст/cxf/uniform-exchange), предоставляемым шиной. | ||||
|  | ||||
| Укрупненно маршрут выглядит следующим образом: | ||||
|  | ||||
| . доставка сообщения до очереди получателя: CXF-сервис -> маршрут Camel send-to-jms -> очередь в Artemis | ||||
| . получение сообщения: CXF-сервис -> очередь в Artemis | ||||
| . подтверждение получения: CXF-сервис -> маршрут Camel receive-acknowledge | ||||
|  | ||||
| image::route_packet.png[] | ||||
|  | ||||
| === Средства мониторинга и отладки | ||||
|  | ||||
| Для мониторинга работы и отладки шины для сценария прохождения пакета могут быть использованы следующие инструменты. | ||||
|  | ||||
| ==== Журнал (лог) Nginx | ||||
|  | ||||
| Логи Nginx’a располагаются в папке по пути “/var/log/nginx”. | ||||
|  | ||||
| В папке с логами Nginx’a располагаются 2 типа логов: | ||||
|  | ||||
| . Access - отображает все процессы, которые проходят через Nginx. | ||||
| В случае когда запрос отработал успешно, сервер возвращает код 200 в access.log и записывает строку с URL запроса, кодом, размером ответа и временем получения ответа. | ||||
| . Error - отображает процессы, в которых возникли ошибки | ||||
| В случае когда запрос отработал с ошибкой, сервер возвращает код 400 (например) в error.log и записывает строку с URL запроса, кодом, кратким описанием ошибки, размером ответа, временем получения ответа и юзер-агентом (HTTP-заголовок, который показывает из какого браузера или иного софта был отправлен запрос). | ||||
|  | ||||
| ==== Трассировка маршрутов Camel | ||||
|  | ||||
| _Apache Сamel_ - это платформа для запуска интеграционных маршрутов (процессов), которые в самой платформе называются “route”. Основными функциями Apache Camel являются подключения по различным протоколам, маршрутизация запросов и сообщений, а также преобразование данных. | ||||
|  | ||||
| Работа с маршрутами в Apache Camel и самой платформой осуществляется из hawtio. Hawtio - это графическая консоль управления. Hawtio доступна по следующим ссылкам: | ||||
|  | ||||
| Karaf-1 - http://<<+host+>>:8181/hawtio/ | ||||
|  | ||||
| image::screenshots/screenshot_hawtio_1.png[] | ||||
|  | ||||
| Трассировка маршрутов в hawtio производится на вкладке “Camel”, путем выбора маршрута (папка route) в левой области экрана и перехода на вкладку “Trace”. | ||||
|  | ||||
| image::screenshots/screenshot_hawtio_2.png[] | ||||
| image::screenshots/screenshot_hawtio_3.png[] | ||||
|  | ||||
| После перехода необходимо нажать на кнопку “Start tracing”, платформа запустит трассировку маршрута и выведет на экран схему процесса трассировки. | ||||
|  | ||||
| image::screenshots/screenshot_hawtio_4.png[] | ||||
|  | ||||
| В связи с тем что в 3й версии Camel, используемой нами, трассировка по умолчанию отключена  потребуется подготовить отлаживаемый контекст. Для этого необходимо включить параметры _backlogTrace_ и _useBreadcrumb_. | ||||
|  | ||||
| Пример: | ||||
| [source,xml] | ||||
| ---- | ||||
| <camelContext id="passive-common-connector-context" xmlns="http://camel.apache.org/schema/blueprint" errorHandlerRef="commonErrorHandler" backlogTrace="true" useBreadcrumb="true"> | ||||
| ---- | ||||
|  | ||||
| Так же для удобства работы можно включить отображение потоков в текстовом формате. | ||||
| Для этого в Настройках(Preferences) hawtio нужно включить флаг Include trace/debug streams | ||||
|  | ||||
| image::screenshots/screenshot_hawtio_5.png[] | ||||
|  | ||||
| В веб-консоли hawtio, помимо работы с маршрутами, есть возможность установки бандлов, плагинов (вкладка OSGI) | ||||
| Возможность просмотра логов и прочее. | ||||
|  | ||||
| image::screenshots/screenshot_hawtio_6.png[] | ||||
| image::screenshots/screenshot_hawtio_7.png[] | ||||
|  | ||||
| === Веб-консоль брокера сообщений | ||||
|  | ||||
| Добавить описание, урлы (для обоих брокеров) и скриншоты на примере любой очереди. Показать, где содержимое, где рейт и прочее. | ||||
|  | ||||
| Apache ActiveMQ - это брокер сообщений, основной функцией которого является отправка и получение сообщений. | ||||
|  | ||||
| Работа с брокером сообщений производится через веб-консоль, перейти на которые можно по следующим ссылкам: | ||||
|  | ||||
| ActiveMQ-1 - http://<<+host+>>:8161/console/ | ||||
|  | ||||
| image::screenshots/screenshot_artemis_1.png[] | ||||
|  | ||||
| В веб-консоли можно просматривать очереди сообщений на вкладке “Queues”. | ||||
|  | ||||
| image::screenshots/screenshot_artemis_2.png[] | ||||
|  | ||||
| На этой же вкладке можно просмотреть название очереди, адрес очереди. | ||||
|  | ||||
| image::screenshots/screenshot_artemis_3.png[] | ||||
|  | ||||
| Посмотреть скорость обмена сообщениями (столбец “Rate”), количество сообщений в очереди. | ||||
|  | ||||
| image::screenshots/screenshot_artemis_4.png[] | ||||
|  | ||||
| На вкладке “Producer” можно посмотреть данные об отправленных сообщениях (id сообщений, название адресов, на которые были отправлены сообщения). | ||||
|  | ||||
| image::screenshots/screenshot_artemis_5.png[] | ||||
|  | ||||
| На вкладке “Consumers” можно посмотреть данные о полученных сообщениях (id сообщений, из какой очереди пришли сообщения, название адресов, с которых были получены сообщения). | ||||
|  | ||||
| image::screenshots/screenshot_artemis_6.png[] | ||||
|  | ||||
| В левой области экрана можно выбрать в списке нужную очередь и посмотреть количество сообщений в ней. | ||||
|  | ||||
| image::screenshots/screenshot_artemis_7.png[] | ||||
|  | ||||
| При выборе очереди, автоматически открывается вкладка “Browse”, на которой отображаются все сообщения из выбранной очереди. При нажатии на id сообщения, появится диалоговое окно с сообщением. | ||||
|  | ||||
| image::screenshots/screenshot_artemis_8.png[] | ||||
|  | ||||
| При необходимости сообщение можно переместить в другую очередь (кнопка “Move”) или удалить (кнопка “Delete”). | ||||
|  | ||||
| image::screenshots/screenshot_artemis_9.png[] | ||||
|  | ||||
| Также в консоли имеется возможность полностью очистить очередь от сообщений или полностью удалить очередь из брокера сообщений, выбрав очередь в левой области экрана и перейдя на вкладку “Delete”. | ||||
|  | ||||
| image::screenshots/screenshot_artemis_10.png[] | ||||
|  | ||||
| Before Width: | Height: | Size: 107 KiB | 
| Before Width: | Height: | Size: 104 KiB | 
| Before Width: | Height: | Size: 80 KiB | 
| @@ -1,169 +0,0 @@ | ||||
| =  Общие положения | ||||
|  | ||||
| При передаче сообщения от внешней системы в шину происходит процесс аутентификации внешней системы в шине. Т.е. при передаче сообщения шине с помощью сервера _nginX_ по протоколу _basic_ аутентификации сверяет присвоенные сообщению логин и пароль системы, от которой передается сообщение с ее логином, зарегистрированным в шине. При совпадении логина и пароля сообщение проходит от внешней системы через шину к другой системе. Если же пара логин – пароль не совпадает, то система блокирует сообщение. | ||||
|  | ||||
| image::Authentication.png[Аутентификация с помощью nginx] | ||||
|  | ||||
| Обновление учетных записей на _nginx_ по данным от сервиса _basic-auth-management_ проходит каждую минуту. | ||||
|  | ||||
| Для компактной установки шины без _nginx_ модуль реализует интерцептор для basic аутентификации при обращении к сервисам. Включить встроенную аутентификацию можно в конфигурационном файле ru.entaxy.esb.system.basic_auth.cfg -> свойство internal.authentication.enabled. | ||||
|  | ||||
| Сервис _basic-auth-management_  служит для работы с учетными записями (аккаунтами) через протокол _SOAP_. | ||||
|  | ||||
| В сервисе существуют три вида запросов: | ||||
|  | ||||
| * Добавление аккаунтов; | ||||
| * Обновление аккаунтов; | ||||
| * Удаление неактуальных аккаунтов. | ||||
| * Выдача прав аккаунту | ||||
| * Удаление прав аккаунта | ||||
|  | ||||
| ===  Добавление аккаунта | ||||
|  | ||||
| Метод для добавления учетных записей _(addAccount)_ разработан для добавления новых пользователей в систему. | ||||
|  | ||||
| Запрос на добавление аккаунта выглядит следующим образом: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bas="http://www.entaxy.ru/basic-auth-service/"> | ||||
|    <soapenv:Header/> | ||||
|    <soapenv:Body> | ||||
|       <bas:accountList> | ||||
|          <!--1 or more repetitions:--> | ||||
|          <bas:account> | ||||
|             <bas:login>system1login</bas:login> | ||||
|             <bas:password>system1pass</bas:password> | ||||
|             <!--Optional:--> | ||||
|             <bas:systemUUID>system1uuid</bas:systemUUID> | ||||
|          </bas:account> | ||||
|       </bas:accountList> | ||||
|    </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
|  | ||||
| В теле содержится список аккаунтов – это повторение элементов _account_ неограниченное число раз. Также в теле содержатся обязательные поля _<login>_ (логин) и _<password>_ (пароль). Поле _<systemUUID>_ (идентефикатор системы) является необязательным. | ||||
|  | ||||
| Пароль принимается в прямом виде и шифруется непосредственно перед сохранением, чтобы он не хранился в открытом виде. | ||||
|  | ||||
| === Обновление аккаунта | ||||
|  | ||||
| Метод для обновления учетной записи _(updateAccount)_ разработан для обновления следующей информации: | ||||
|  | ||||
| * новый пароль системы; | ||||
| * присвоение учетной записи к другой системе. | ||||
|  | ||||
| Запрос на обновление аккаунта выглядит следующим образом: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bas="http://www.entaxy.ru/basic-auth-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <bas:accountList> | ||||
|             <!--1 or more repetitions:--> | ||||
|             <bas:account> | ||||
|                 <bas:login>system1login</bas:login> | ||||
|                 <bas:password>system1pass</bas:password> | ||||
|                 <!--Optional:--> | ||||
|                 <bas:systemUUID>system1uuid</bas:systemUUID> | ||||
|             </bas:account> | ||||
|             <bas:account> | ||||
|                 <bas:login>system2login</bas:login> | ||||
|                 <bas:password>system2pass</bas:password> | ||||
|             </bas:account> | ||||
|         </bas:accountList> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| В теле содержится список аккаунтов, который содержит информацию аналогичную из п.2. | ||||
|  | ||||
| === Удаление аккаунта | ||||
|  | ||||
| Метод для удаления аккаунта _(removeAccount)_ служит для удаления аккаунта из системы. | ||||
|  | ||||
| Запрос на удаление аккаунта выглядит следующим образом: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bas="http://www.entaxy.ru/basic-auth-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <bas:loginList> | ||||
|             <!--1 or more repetitions:--> | ||||
|             <bas:login>system1login</bas:login> | ||||
|             <bas:login>system2login</bas:login> | ||||
|         </bas:loginList> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| В теле содержится неограниченный список логинов _(loginList)_, которые будут удалены из системы. | ||||
|  | ||||
| === Выдача прав аккаунту | ||||
|  | ||||
| Метод выдачи прав аккаунту _(addAccountPermission)_ служит для создания _permission_ связанных с переданным аккаунтом. | ||||
|  | ||||
| Запрос на создание права выглядит следующим образом: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bas="http://www.entaxy.ru/basic-auth-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <bas:permissionList> | ||||
|         <!--1 or more repetitions:--> | ||||
|             <bas:permission> | ||||
|                 <bas:login>dog</bas:login> | ||||
|                 <bas:subject>topic-management</bas:subject> | ||||
|                 <bas:subjectType>service</bas:subjectType> | ||||
|                 <!--Optional:--> | ||||
|                 <bas:action></bas:action> | ||||
|             </bas:permission> | ||||
|             <bas:permission> | ||||
|                 <bas:login>dog</bas:login> | ||||
|                 <bas:subject>system-management</bas:subject> | ||||
|                 <bas:subjectType>service</bas:subjectType> | ||||
|                 <!--Optional:--> | ||||
|                 <bas:action></bas:action> | ||||
|             </bas:permission> | ||||
|         </bas:permissionList> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
|  | ||||
| Если параметр action пустой либо отсутствует в сервисе _permission_ по умолчанию подставляется _default_. | ||||
|  | ||||
|  | ||||
| === Удаление прав аккаунта | ||||
|  | ||||
| Метод удаления прав аккаунта _(removeAccountPermission)_ служит для удаления _permission_ связанных с переданным аккаунтом. | ||||
|  | ||||
| Запрос на создание права выглядит следующим образом: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bas="http://www.entaxy.ru/basic-auth-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <bas:permissionList> | ||||
|         <!--1 or more repetitions:--> | ||||
|             <bas:permission> | ||||
|                 <bas:login>dog</bas:login> | ||||
|                 <bas:subject>topic-management</bas:subject> | ||||
|                 <bas:subjectType>service</bas:subjectType> | ||||
|                 <!--Optional:--> | ||||
|                 <bas:action></bas:action> | ||||
|             </bas:permission> | ||||
|             <bas:permission> | ||||
|                 <bas:login>dog</bas:login> | ||||
|                 <bas:subject>system-management</bas:subject> | ||||
|                 <bas:subjectType>service</bas:subjectType> | ||||
|                 <!--Optional:--> | ||||
|                 <bas:action></bas:action> | ||||
|             </bas:permission> | ||||
|         </bas:permissionList> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
|  | ||||
| Если параметр _action_ пустой либо отсутствует в сервисе permission по умолчанию подставляется _default_. | ||||
| @@ -1,79 +0,0 @@ | ||||
| Связь между двумя независимыми брокерами осуществляется с помощью моста. Карафы подключенные к одному брокеру далее будут именоваться шиной. | ||||
|  | ||||
| image::Route-in-different-esb.png[Прохождение пакета через группу и мост] | ||||
|  | ||||
| == Установка и настройка | ||||
|  | ||||
| Установка модуля происходит через фичу: | ||||
|  | ||||
| * _feature:install bridge_ | ||||
|  | ||||
| Фича включена в общий установочный скрипт и будет устанавливаться вместе с остальными модулями. Во время установки фичи в караф копируются файлы конфигурации: | ||||
|  | ||||
| * _ru.entaxy.esb.system.bridge.cfg (основная конфигурация)_ | ||||
|  | ||||
| === ru.entaxy.esb.system.bridge.cfg (основная конфигурация) | ||||
| [source,properties] | ||||
| ---- | ||||
| # имя локальной шины(<node_name>) | ||||
| jms.local=test1 | ||||
| # значение true - мост текущего узла работает в пассивном режиме, | ||||
| # т.е. сообщения для соответствующего удалённого узла складываются в очередь на локальном брокере, | ||||
| # из которой уже читает подключаемый узел (локальный брокер должен быть доступен для соединения) | ||||
| # По умолчанию false - активный режим, запись сообщения идёт сразу в очередь на удалённом брокере, | ||||
| # подключаемого узла (брокеры по обе стороны моста должны быть доступны) | ||||
| jms.local.master=false | ||||
| # имена удаленных шин, задается через запятую(<node_name>,<node_name>) | ||||
| jms.remote.list=test2 | ||||
|  | ||||
| # адреса брокера, задаются чеерез запятую(jms.url.<node_name>) | ||||
| jms.url.test1=192.168.122.81:61616,192.168.122.82:61616 | ||||
| # логин для подключения к брокеру(jms.username.<node_name>) | ||||
| jms.username.test1=input | ||||
| # пароль для подключения к брокеру(jms.password.<node_name>) | ||||
| jms.password.test1=input | ||||
| # протокол для передачи сообщений внутри шины(jms.protocol.inner.esb.<node_name>) | ||||
| # для корректной работы синхронного режима передачи сообщений: необходимо следить | ||||
| # за одинаковым значением данного параметра в мосту и в самой шине(ru.entaxy.esb.cfg) | ||||
| # возможные значения tcp, amqp | ||||
| jms.protocol.inner.esb.test1=tcp | ||||
| # протокол для передачи сообщений между шинами(jms.protocol.bridge.esb.<node_name>) | ||||
| # для корректной работы синхронного режима передачи сообщений: необходимо следить | ||||
| # за одинаковым значением данного параметра во всех подключенных шинах | ||||
| # возможные значения tcp, amqp | ||||
| jms.protocol.bridge.test1=amqp | ||||
|  | ||||
| # адреса брокера, задаются чеерез запятую(jms.url.<node_name>) | ||||
| jms.url.test2=localhost:61616 | ||||
| # логин для подключения к брокеру(jms.username.<node_name>) | ||||
| jms.username.test2=input | ||||
| # пароль для подключения к брокеру(jms.password.<node_name>) | ||||
| jms.password.test2=input | ||||
| # jms.master.<node_name> - выставляем в true, когда соответствующий узел настроен в пассивный режим, | ||||
| # т.е. для него jms.local.master = true (брокер должен быть доступен для соединения) | ||||
| jms.master.test2=true | ||||
| # протокол для передачи сообщений внутри шины(jms.protocol.inner.esb.<node_name>) | ||||
| # для корректной работы синхронного режима передачи сообщений: необходимо следить | ||||
| # за одинаковым значением данного параметра в мосту и в самой шине(ru.entaxy.esb.cfg) | ||||
| # возможные значения tcp, amqp | ||||
| jms.protocol.inner.esb.test2=tcp | ||||
| # протокол для передачи сообщений между шинами(jms.protocol.bridge.esb.<node_name>) | ||||
| # для корректной работы синхронного режима передачи сообщений: необходимо следить | ||||
| # за одинаковым значением данного параметра во всех подключенных шинах | ||||
| # возможные значения tcp, amqp | ||||
| jms.protocol.bridge.test2=amqp | ||||
|  | ||||
| # максимальное колчичество попыток отправить сообщение в очередь | ||||
| # почитать подробнее можно в https://camel.apache.org/components/latest/eips/dead-letter-channel.html#deadLetterChannel-Redelivery | ||||
| redelivery.maximumRedeliveries=-1 | ||||
| # время между попытками отправить сообщение в очередь | ||||
| redelivery.redeliveryDelay=5000 | ||||
| # экспоненциальный рост времени между попытками отпрвки сообщений в очередь | ||||
| redelivery.useExponentialBackOff=true | ||||
|  | ||||
| queue.sender.concurrentConsumers=1 | ||||
| queue.receiver.concurrentConsumers=1 | ||||
| ---- | ||||
|  | ||||
|  | ||||
|  | ||||
| Before Width: | Height: | Size: 46 KiB | 
| Before Width: | Height: | Size: 125 KiB | 
| @@ -1,44 +0,0 @@ | ||||
| = Файловые репозитории  | ||||
|  | ||||
| *Nexus* | ||||
| 	представлен бандлом SYSTEM :: ENTAXY :: NEXUS :: DEPLOYER, реализует взаимодействие с репозиторием Sonatype Nexus.  | ||||
| 	Конфигурация ru.entaxy.esb.deployer.nexus.cfg | ||||
| [source] | ||||
| ---- | ||||
| # все смены адреса расположения nexus и изменение наименования репозитория, необходимо фиксировать в файле | ||||
| # org.ops4j.pax.url.mvn.cfg параметр: org.ops4j.pax.url.mvn.repositories | ||||
|  | ||||
| # url расположения nexus | ||||
| nexus.deployer.url=http://nexusHost | ||||
| # название репозитория в nexus, необходимого для конфигурирования шины из вне(создание профилей, коннекторов и т д) | ||||
| nexus.deployer.repository=entaxy | ||||
| # логин для авторизации в nexus | ||||
| nexus.deployer.username=deployer | ||||
| # пароль для авторизации в nexus | ||||
| nexus.deployer.password=deployer | ||||
| ---- | ||||
| 	 | ||||
| *File-system* | ||||
| 	представлен бандлом SYSTEM :: ENTAXY :: FILE SYSTEM :: DEPLOYER, реализует взаимодействие с файловой системой, т.е. сохраняет переданные файлы в настроенной папке. | ||||
| 	Конфигурация ru.entaxy.esb.deployer.file.system.cfg | ||||
| [source] | ||||
| ---- | ||||
| #Корневая папка репозитория | ||||
| folder.root=/opt/bundle-repository | ||||
| ---- | ||||
|  | ||||
|  | ||||
| === Настройка системы | ||||
|  | ||||
| По умолчанию деплоятся оба бандла и система использует репозиторий File-system. | ||||
|  | ||||
| Для включения нужного репозитория необходимо оставить включённым бандл того репозитория, который требуется использовать. | ||||
|  | ||||
| _Пример:_ | ||||
| 	По умолчанию включён репозиторий File-system, для включения репозитория Nexus отключаем/удаляем бандл SYSTEM :: ENTAXY :: FILE SYSTEM :: DEPLOYER | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -1,144 +0,0 @@ | ||||
| Централизованный обработчик ошибок для формирования кодов ошибок, их синхронного возврата клиенту и для асинхронного дублирования более подробного описания ошибки для клиента и для Центральной Базы Интеграции. | ||||
|  | ||||
| image::Error-handling-Scheme.jpg[] | ||||
|  | ||||
| = Установка и настройка | ||||
|  | ||||
| Установка модуля происходит через фичу: | ||||
|  | ||||
| * _feature:install error-handler_ | ||||
|  | ||||
| Фича включена в общий установочный скрипт и будет устанавливаться вместе с остальными модулями. Во время установки фичи в караф копируются файлы конфигурации: | ||||
|  | ||||
| * _ru.entaxy.esb.error.cfg (основная конфигурация)_ | ||||
| * _ru.entaxy.esb.error.code.cfg (справочник исключений с маппингом на коды ошибок)_ | ||||
| * _ru.entaxy.esb.error.text.cfg (справочник кодов ошибок с маппингом на текстовые сообщения)_ | ||||
|  | ||||
| Есть возможность настройки маппинга уровней журналирования через файл конфигурации ru.entaxy.esb.error.severity.cfg. | ||||
|  | ||||
| * _ru.entaxy.esb.error.cfg (основная конфигурация)_ | ||||
|  | ||||
| [source,properties] | ||||
| ---- | ||||
| # асинхронный пакет с ошибкой отправляется от имени: | ||||
| # false - системы, вызвавшей ошибку в шине | ||||
| # true  - шины (система с идентификатором "-1") | ||||
| ru.entaxy.esb.error.bus.always_at_source=false | ||||
|  | ||||
| # асинхронный пакет с ошибкой в поле description содержит: | ||||
| # false - сообщение из маппинга в файле ru.entaxy.esb.error.text.cfg | ||||
| # true  - содержит сообщение, сохранённое в исключении | ||||
| ru.entaxy.esb.error.description.exception_message=true | ||||
|  | ||||
| # имя очереди для отправки пакета с ошибкой при недоступности системы, указанной в свойстве ru.entaxy.esb.error.system.name | ||||
| ru.entaxy.esb.error.queue.name=error | ||||
|  | ||||
| # имя системы для отправки пакета с ошибкой, подразумевается система ЦБИ | ||||
| ru.entaxy.esb.error.system.name=error | ||||
|  | ||||
| # true - включает в пакет с ошибкой весь stacktrace исключения | ||||
| ru.entaxy.esb.error.stacktrace.show=true | ||||
|  | ||||
| # свойство автоматического запуска тестового маршрута, который при старте модуля бросает исключение java.lang.IllegalArgumentException: Test exception thrown | ||||
| ru.entaxy.esb.error.test-route.startup=false | ||||
| ---- | ||||
|  | ||||
| * _ru.entaxy.esb.error.code.cfg (справочник исключений с маппингом на коды ошибок)_ | ||||
|  | ||||
| Справочник содержит соответствие имён классов исключений и _http_ кодов ошибок. И будет наполняться по мере использования шины в разных ситуациях. Для исключения, имя которого ещё не указано в этом файле, будет возвращаться _http_ код _520 (Unknown Error)._ | ||||
|  | ||||
| [source,properties] | ||||
| ---- | ||||
| DefaultException=520 | ||||
| com.ctc.wstx.exc.WstxParsingException=400 | ||||
| java.security.AccessControlException=403 | ||||
| javax.ws.rs.ForbiddenException=403 | ||||
| ru.onec.esb.system.common.exception.ConnectorNotFound=424 | ||||
| ru.onec.esb.system.common.exception.DefaultException=520 | ||||
| ru.onec.esb.system.common.exception.ProfileNotFound=424 | ||||
| # и т.д. | ||||
| ---- | ||||
|  | ||||
| * _ru.entaxy.esb.error.text.cfg (справочник кодов ошибок с маппингом на текстовые сообщения)_ | ||||
|  | ||||
| Если в основной конфигурации свойство _ru.entaxy.esb.error.description.exception_message_ установлено в _false_, то описание ошибки отправляется из этого файла в соответствие с кодом _http_ ошибки. | ||||
|  | ||||
| [source,properties] | ||||
| ---- | ||||
| # 1xx: Informational | ||||
| # 2xx: Success | ||||
| 200=OK | ||||
|  | ||||
| # 3xx: Redirection | ||||
| # 4xx: Client Error | ||||
| 400=Bad Request | ||||
| 403=Forbidden | ||||
| 424=Failed Dependency | ||||
|  | ||||
| # 5xx: Server Error | ||||
| 520=Unknown Error | ||||
| # и т.д. | ||||
| ---- | ||||
|  | ||||
| === Подключение обработчика ошибок | ||||
|  | ||||
| Для подключения обработчика ошибок к маршрутам какого-либо модуля необходимо выполнить следующие шаги: | ||||
|  | ||||
| . Добавить в модуль обработки ошибок в директорию _src/main/resources/xslt/operation_ новый _xslt_ для формирования ответа с ошибкой. Файл должен называться по имени операции, для которой будет формироваться ответ. Например _sendToJMS.xsl_. | ||||
| . Добавить в _camelContext_ аттрибут _errorHandlerRef="commonErrorHandler"_ и внутри зарегистрировать обработчик и политику повторной доставки: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <camelContext id="soap-service-endpoints-camel-context" | ||||
| xmlns="http://camel.apache.org/schema/blueprint" | ||||
| errorHandlerRef="commonErrorHandler" handleFault="true"> | ||||
|  | ||||
|     <errorHandler id="commonErrorHandler" redeliveryPolicyRef="noRedelivery" | ||||
|                   type="DeadLetterChannel" deadLetterUri="direct-vm:commonErrorEndpoint"/> | ||||
|     <redeliveryPolicyProfile id="noRedelivery" disableRedelivery="true" /> | ||||
|     <!-- any content --> | ||||
| </camelContext> | ||||
| ---- | ||||
|  | ||||
| Для контекстов, содержащих конечные точки _cxf_, необходимо: | ||||
|  | ||||
| через _pom.xml_ импортировать интерцептор для перехвата ошибок (_SoapFault_) | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <bundle.osgi.import.pkg> | ||||
|     ru.onec.esb.system.core.common.error.handler.interceptor, | ||||
|     ... | ||||
| </bundle.osgi.import.pkg> | ||||
| ---- | ||||
|  | ||||
| добавить интерцептор в _cxfEndpoint_ и _bean_ с указанием в первом аргументе идентификатора _camelContext_ | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
|     <camelcxf:cxfEndpoint id="soap-proxy" ...> | ||||
|         <!-- any properties and interceptors --> | ||||
|         <camelcxf:outFaultInterceptors> | ||||
|             <ref component-id="handleOutFaultInterceptor"/> | ||||
|         </camelcxf:outFaultInterceptors> | ||||
|     </camelcxf:cxfEndpoint> | ||||
|  | ||||
|     <bean id="handleOutFaultInterceptor" class="ru.onec.esb.system.core.common.error.handler.interceptor.HandleOutFaultInterceptor"> | ||||
|         <argument ref="soap-service-endpoints-camel-context"/> | ||||
|         <argument value="direct:error_from_cxf"/> | ||||
|     </bean> | ||||
| ---- | ||||
|  | ||||
| в _camelContext_ добавить маршрут | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <route id="error_from_cxf"> | ||||
|     <from uri="direct:error_from_cxf"/> | ||||
|     <log message="cxf message: ${body}" loggingLevel="DEBUG"/> | ||||
|     <log message="headers: ${headers}\n" loggingLevel="DEBUG"/> | ||||
|     <to uri="direct-vm:cxfErrorEndpoint"/> | ||||
| </route> | ||||
| ---- | ||||
|  | ||||
|  | ||||
| @@ -1,31 +0,0 @@ | ||||
| = Использование обработчика ошибок | ||||
|  | ||||
| Для централизованной обработки ошибок будем использовать “процессор” зарегистрированный через _<camelContext errorHandlerRef="...”>_. В частных случаях допустимо использование _try … catch … finally_. | ||||
| _(https://camel.apache.org/manual/latest/error-handler.html)_ | ||||
|  | ||||
| Кроме возврата ошибок вызывающей стороне, необходимо дублировать ошибки в JMS очередь с возможностью их просмотра из веб-консоли Артемиса. | ||||
|  | ||||
| === Классификация ошибок | ||||
|  | ||||
| _Бизнесовые ошибки:_ отсутствие обязательных полей, превышение длины поля и другие нарушения ожиданий принимающей стороны. | ||||
|  | ||||
| _Серверные ошибки:_ NPE и другие ошибки времени выполнения. | ||||
|  | ||||
| _Сервис не доступен:_ конечная точка не отвечает и не принимает входящие соединения. | ||||
|  | ||||
| При этом ошибки могут быть “восстанавливаемыми” - с возможностью успешной обработки повторного запроса, использующего изменённые данные или другие точки доступа,  и “не восстанавливаемыми” - у клиента нет возможности обойти причины ошибки для выбранного сервиса. | ||||
|  | ||||
| === Обёртка для ошибок | ||||
|  | ||||
| Ошибки удобно обрабатывать используя дополнительную информацию, которую необходимо передавать вместе с ошибкой: | ||||
|  | ||||
| * _Timestamp_: время возникновения ошибки; | ||||
| * _Error Code_: код ошибки для удобства автоматизированной обработки ошибок; | ||||
| * _Error Text_: описание возникающей ошибки, допустимо выводить вместе со стектрейсом; | ||||
| * _Severity Level_: уровень журналирования ошибки; | ||||
| * _Notification_: в случае необходимости уведомлений об ошибке поле должно содержать адрес или список адресов систем/пользователей для оповещения; | ||||
| * _Retry_: информация о возможности повторной отправки сообщения; | ||||
|  | ||||
| _Uuid_ и _id_ сообщения | ||||
|  | ||||
|  | ||||
| Before Width: | Height: | Size: 82 KiB | 
| @@ -1,318 +0,0 @@ | ||||
| = SOAP сервис Permission-management | ||||
|  | ||||
| === Permission - сущность для описания и хранения прав. | ||||
|  | ||||
| Поля _Permission_: | ||||
|  | ||||
| . _permissionId_ (long) - идентификатор объекта permission | ||||
| . _objectId_ (long) - идентификатор объекта, для которого проверяются права | ||||
| . _objectType_ (String) - тип объекта, данный параметр соответствует проектной терминалогии: _system_, _system-group_ | ||||
| . _subjectId_ (String) - идентификатор предмета применяемого права | ||||
| . _subjectType_ (String) - тип предмета | ||||
| . _action_ (String)- тип действия, по умолчанию проставляется значение _default_ | ||||
|  | ||||
| === SOAP Сервис Permission управляет созданием и проверкой объекта Permission. | ||||
|  | ||||
| Типы объектов в системе ESB. | ||||
|  | ||||
| - _system_ - система | ||||
| - _system-group_ - группа систем | ||||
| - _service_ - сервис | ||||
| - _account_ - аккаунт | ||||
| - _event-topic_ - топик | ||||
|  | ||||
| === Методы сервиса | ||||
|  | ||||
| _Check_ - проверяет описанное право | ||||
|  | ||||
| Принимает параметры | ||||
|  | ||||
| - _objectId_ (long) - идентификатор объекта, для которого проверяются права | ||||
| - _objectType_ (String) - тип объекта | ||||
| - _subjectId_ (String) - идентификатор предмета применяемого права | ||||
| - _subjectType_ (String) - тип предмета | ||||
| - _action_ (String) - тип действия, необязательный по умолчанию проставляется значение _default_ | ||||
|  | ||||
| Пример запроса: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:per="http://www.entaxy.ru/permission/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <per:permissionCommon> | ||||
|             <per:objectId>1</per:objectId> | ||||
|             <per:objectType>system</per:objectType> | ||||
|             <per:subjectId>2</per:subjectId> | ||||
|             <per:subjectType>system</per:subjectType> | ||||
|             <!--Optional:--> | ||||
|             <per:action>default</per:action> | ||||
|         </per:permissionCommon> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Пример ответа: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/permission/">false</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
|  | ||||
| === Get - получает запись Permission | ||||
|  | ||||
| Принимает параметры | ||||
|  | ||||
| _permissionId_ (long) - идентификатор объекта _permission_ | ||||
|  | ||||
| Пример запроса: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:per="http://www.entaxy.ru/permission/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <per:permissionId>24</per:permissionId> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Пример ответа: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <tns:permission xmlns:tns="http://www.entaxy.ru/permission/"> | ||||
|             <tns:permissionId>24</tns:permissionId> | ||||
|             <tns:objectId>7</tns:objectId> | ||||
|             <tns:objectType>system</tns:objectType> | ||||
|             <tns:subjectId>8</tns:subjectId> | ||||
|             <tns:subjectType>system</tns:subjectType> | ||||
|             <tns:action>connect</tns:action> | ||||
|         </tns:permission> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
|  | ||||
| === GetByAllParams - получает запись Permission | ||||
|  | ||||
| Принимает параметры | ||||
|  | ||||
| - _objectId_ (long) - идентификатор объекта, для которого проверяются права | ||||
| - _objectType_ (String) - тип объекта | ||||
| - _subjectId_ (String) - идентификатор предмета применяемого права | ||||
| - _subjectType_ (String) - тип предмета | ||||
| - _action_ (String) - тип действия, необязательный по умолчанию проставляется значение _default_ | ||||
|  | ||||
| Пример запроса: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:per="http://www.entaxy.ru/permission/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <per:permissionCommon> | ||||
|             <per:objectId>7</per:objectId> | ||||
|             <per:objectType>system</per:objectType> | ||||
|             <per:subjectId>8</per:subjectId> | ||||
|             <per:subjectType>system</per:subjectType> | ||||
|             <!--Optional:--> | ||||
|             <per:action>connect</per:action> | ||||
|         </per:permissionCommon> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Пример ответа: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <tns:permission xmlns:tns="http://www.entaxy.ru/permission/"> | ||||
|             <tns:permissionId>24</tns:permissionId> | ||||
|             <tns:objectId>7</tns:objectId> | ||||
|             <tns:objectType>system</tns:objectType> | ||||
|             <tns:subjectId>8</tns:subjectId> | ||||
|             <tns:subjectType>system</tns:subjectType> | ||||
|             <tns:action>connect</tns:action> | ||||
|         </tns:permission> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
|  | ||||
| === Create - создаёт запись Permission | ||||
|  | ||||
| Принимает параметры | ||||
|  | ||||
| - _objectId_ (long) - идентификатор объекта, для которого проверяются права | ||||
| - _objectType_ (String) - тип объекта | ||||
| - _subjectId_ (String) - идентификатор предмета применяемого права | ||||
| - _subjectType_ (String) - тип предмета | ||||
| - _action_ (String) - тип действия, необязательный по умолчанию проставляется значение _default_ | ||||
|  | ||||
| Пример запроса: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:per="http://www.entaxy.ru/permission/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <per:permissionCommon> | ||||
|             <per:objectId>7</per:objectId> | ||||
|             <per:objectType>account</per:objectType> | ||||
|             <per:subjectId>1234</per:subjectId> | ||||
|             <per:subjectType>system-group</per:subjectType> | ||||
|             <!--Optional:--> | ||||
|             <per:action>send</per:action> | ||||
|         </per:permissionCommon> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Пример ответа: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <tns:permission xmlns:tns="http://www.entaxy.ru/permission/"> | ||||
|             <tns:permissionId>25</tns:permissionId> | ||||
|             <tns:objectId>7</tns:objectId> | ||||
|             <tns:objectType>account</tns:objectType> | ||||
|             <tns:subjectId>1234</tns:subjectId> | ||||
|             <tns:subjectType>system-group</tns:subjectType> | ||||
|             <tns:action>send</tns:action> | ||||
|         </tns:permission> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| В случае если запись уже создана возвращается ошибка | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <soap:Fault> | ||||
|             <faultcode>soap:Server</faultcode> | ||||
|             <faultstring>org.hibernate.exception.ConstraintViolationException: could not execute statement</faultstring> | ||||
|         </soap:Fault> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| === Update - изменяет запись Permission | ||||
|  | ||||
| Принимает параметры | ||||
|  | ||||
| - _permissionId_ (long) - идентификатор объекта permission | ||||
| - _objectId_ (long) - идентификатор объекта, для которого проверяются права | ||||
| - _objectType_ (String) - тип объекта, данный параметр соответствует проектной терминалогии: system, system-group | ||||
| - _subjectId_ (String) - идентификатор предмета применяемого права | ||||
| - _subjectType_ (String) - тип предмета | ||||
| - _action_ (String) - тип действия, необязательный по умолчанию проставляется значение _default_ | ||||
|  | ||||
| Пример запроса: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:per="http://www.entaxy.ru/permission/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <per:permission> | ||||
|             <per:permissionId>23</per:permissionId> | ||||
|             <per:objectId>8</per:objectId> | ||||
|             <per:objectType>account</per:objectType> | ||||
|             <per:subjectId>1234</per:subjectId> | ||||
|             <per:subjectType>system-group</per:subjectType> | ||||
|             <!--Optional:--> | ||||
|             <per:action>send</per:action> | ||||
|         </per:permission> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
|  | ||||
| Пример ответа: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <tns:permission xmlns:tns="http://www.entaxy.ru/permission/"> | ||||
|             <tns:permissionId>23</tns:permissionId> | ||||
|             <tns:objectId>8</tns:objectId> | ||||
|             <tns:objectType>account</tns:objectType> | ||||
|             <tns:subjectId>1234</tns:subjectId> | ||||
|             <tns:subjectType>system-group</tns:subjectType> | ||||
|             <tns:action>send</tns:action> | ||||
|         </tns:permission> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| В случае если запись не найдена возвращается ошибка | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <soap:Fault> | ||||
|             <faultcode>soap:Server</faultcode> | ||||
|             <faultstring>No entity found for query</faultstring> | ||||
|         </soap:Fault> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
|  | ||||
| === _Delete_ - удаляет запись _Permission_ | ||||
|  | ||||
| Принимает параметры | ||||
|  | ||||
| - _objectId_ (long) - идентификатор объекта, для которого проверяются права | ||||
| - _objectType_ (String) - тип объекта | ||||
| - _subjectId_ (String) - идентификатор предмета применяемого права | ||||
| - _subjectType_ (String) - тип предмета | ||||
| - _action_ (String) - тип действия, необязательный по умолчанию проставляется значение _default_ | ||||
|  | ||||
| Пример запроса: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:per="http://www.entaxy.ru/permission/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <per:permissionCommon> | ||||
|             <per:objectId>7</per:objectId> | ||||
|             <per:objectType>account</per:objectType> | ||||
|             <per:subjectId>1234</per:subjectId> | ||||
|             <per:subjectType>system-group</per:subjectType> | ||||
|             <!--Optional:--> | ||||
|             <per:action>send</per:action> | ||||
|         </per:permissionCommon> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Пример ответа: | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/permission/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| В случае если запись не найдена возвращается ошибка | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <soap:Fault> | ||||
|             <faultcode>soap:Server</faultcode> | ||||
|             <faultstring>No entity found for query</faultstring> | ||||
|         </soap:Fault> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| Before Width: | Height: | Size: 184 KiB | 
| @@ -1,462 +0,0 @@ | ||||
| = Sсhema | ||||
|  | ||||
| Есть три типа ресурсов, которые можно загружать в шину и использовать в маршрутах: | ||||
|  | ||||
| . Валидационные типы ресурсов (нпрм xsd). Необходимы для валидации сообщения на соответствие той или иной схеме. | ||||
| . Трансформационные типы ресурсов (нпрм xslt, amd). Необходимы для трасформации сообщений из одной схемы в другую. | ||||
| . Ресурсы используемые для генерации сервисов (нпрм wsdl). Необходимы для поднятия сервиса на шине. | ||||
|  | ||||
| Для загрузки трансформационных ресурсов необходимо указывать, является ли данный трансформатор конвертором и схему-источник и схему-результат для неявного преобразования сообщения(конвертор может быть один и только один для пары: схема источник, схема результат) | ||||
| Схему-источник и схему-результат необходимо указывать только для конверторов, используемых в неявных преобразованиях | ||||
|  | ||||
| Желательно указывать или определять схему для коннектора, если предполагается использовать функционал неявных преобразований. Неявное преобразование будет работать, если: | ||||
|  | ||||
| - в заголовке указана схема-источник | ||||
| - в заголовке указана схема-приемник | ||||
| - в реестре есть конвертор для этой пары схем | ||||
|  | ||||
| Указание схемы может попадать в заголовок неявно (из свойств коннектора или из тела сообщения) или явно через медиатор. | ||||
|  | ||||
| == Схема работы с ресурсами. | ||||
|  | ||||
| Сначала загружаем сам ресурс в шину, который мы будем использовать в маршрутах. | ||||
|  | ||||
| Загружаем ресурс и получаем id, с помощью которого можно и _нужно_ добавить служебную информацию! | ||||
| Также можно перезагрузить данный ресурс и удалять его из шины. | ||||
|  | ||||
| Также можно загружать служебную информацию, такую как название ресурса, его расширение и т д. | ||||
| Выгружать весь список ресурсов, и по отдельности выкачивать сам ресурс для анализа. | ||||
| Также использовать различные сортировки для поиска определенного типа ресурс. | ||||
|  | ||||
| == Руководство по загрузке ресурсов в шину. | ||||
|  | ||||
| *LoadResource.* | ||||
|  | ||||
| Для загрузки ресурса в шину нужно использовать метод loadResource. | ||||
|  | ||||
| параметры: | ||||
|  | ||||
| - resourceValue - сам ресурс, в формате base64 | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:reg="http://www.entaxy.ru/registry-schema-service/"> | ||||
|    <soapenv:Body> | ||||
|       <reg:loadResourceRequest> | ||||
|          <reg:resourceValue></reg:resourceValue> | ||||
|       </reg:loadResourceRequest> | ||||
|    </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| ответ | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/registry-schema-service/">1</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *GetResource.* | ||||
|  | ||||
| Для выгрузки заранее загруженного ресурса в шину нужно использовать метод getResource. | ||||
|  | ||||
| параметры: | ||||
|  | ||||
| - getResourceRequest - id ресурса, который вернулся при вызове метода LoadResource | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:reg="http://www.entaxy.ru/registry-schema-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <reg:getResourceRequest>1</reg:getResourceRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| ответ | ||||
|  | ||||
| параметры: | ||||
|  | ||||
| - id - это id ресурса | ||||
| - createdDate - дата создания ресурса | ||||
| - createdBy - логин, загрузивший ресурс в шину | ||||
| - editedDate - дата перезагрузки ресурса | ||||
| - editedBy - логин, перезагрузивший ресурс в шине | ||||
| - resourceValue - сам ресурс, в формате base64 | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <FullResourceType xmlns="http://www.entaxy.ru/registry-schema-service/"> | ||||
|             <id>1</id> | ||||
|             <createdDate>12/15/20, 1:11 AM</createdDate> | ||||
|             <createdBy>12/15/20, 1:11 AM</createdBy> | ||||
|             <editedDate>12/15/20, 1:18 AM</editedDate> | ||||
|             <editedBy>12/15/20, 1:18 AM</editedBy> | ||||
|             <resourceValue></resourceValue> | ||||
|         </FullResourceType> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *ReloadResource.* | ||||
|  | ||||
| Для перезагрузки ресурса в шину есть метод reloadResource. | ||||
|  | ||||
| параметры: | ||||
|  | ||||
| - id - id ресурса, который вернулся при вызове метода LoadResource | ||||
| - resourceValue - сам ресурс, в формате base64 | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:reg="http://www.entaxy.ru/registry-schema-service/"> | ||||
|    <soapenv:Body> | ||||
|       <reg:ResourceType> | ||||
|          <reg:id>1</reg:id> | ||||
|          <reg:resourceValue></reg:resourceValue> | ||||
|       </reg:ResourceType> | ||||
|    </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| ответ | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/registry-schema-service/">1</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *RemoveResource.* | ||||
|  | ||||
| Для удаления ресурса в шине есть метод removeResource. | ||||
|  | ||||
| параметры: | ||||
|  | ||||
| - id - id ресурса, который вернулся при вызове метода LoadResource | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:reg="http://www.entaxy.ru/registry-schema-service/"> | ||||
|    <soapenv:Header/> | ||||
|    <soapenv:Body> | ||||
|       <reg:removeResourceRequest>1</reg:removeResourceRequest> | ||||
|    </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| ответ | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/registry-schema-service/">1</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *LoadResourceInfo.* | ||||
|  | ||||
| Для загрузки мета информации ресурса в шине есть метод loadResourceInfo. | ||||
|  | ||||
| параметры: | ||||
|  | ||||
| - idResource - id ресурса, который вернулся при вызове метода LoadResource | ||||
| - name - имя ресурса вместе с расширением | ||||
| - version - версия ресурса | ||||
| - description - описание ресурса | ||||
| - convertor - является ли ресурс конвертором из одной схемы в другую | ||||
| - namespace - входное пространство имен | ||||
| - namespaceOut - выходное пространство имен, используется для трансформаций из одной схемы в другую | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:reg="http://www.entaxy.ru/registry-schema-service/"> | ||||
|    <soapenv:Body> | ||||
|       <reg:loadResourceInfoRequest> | ||||
|          <reg:name>lama.xsd</reg:name> | ||||
|          <reg:idResource>1</reg:idResource> | ||||
|          <reg:version>1.0</reg:version> | ||||
|          <reg:description>lama test</reg:description> | ||||
|          <reg:convertor>false</reg:convertor> | ||||
|          <reg:namespace>http:lama.xsd</reg:namespace> | ||||
|          <reg:namespaceOut>l</reg:namespaceOut> | ||||
|       </reg:loadResourceInfoRequest> | ||||
|    </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| ответ | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/registry-schema-service/">1</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *GetResourceInfo.* | ||||
|  | ||||
| Для получения мета информации ресурса в шине есть метод getResourceInfo. | ||||
|  | ||||
| параметры: | ||||
|  | ||||
| - getResourceInfoRequest - id мета информации ресурса, который вернулся при вызове метода LoadResourceInfo | ||||
|  | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:reg="http://www.entaxy.ru/registry-schema-service/"> | ||||
|    <soapenv:Header/> | ||||
|    <soapenv:Body> | ||||
|       <reg:getResourceInfoRequest>1</reg:getResourceInfoRequest> | ||||
|    </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| ответ | ||||
|  | ||||
| параметры: | ||||
|  | ||||
| - id - id мета информации ресурса, который вернулся при вызове метода LoadResourceInfo | ||||
| - idResource - id ресурса, который вернулся при вызове метода LoadResource | ||||
| - name - имя ресурса вместе с расширением | ||||
| - version - версия ресурса | ||||
| - description - описание ресурса | ||||
| - convertor - является ли ресурс конвертором из одной схемы в другую | ||||
| - namespace - входное пространство имен | ||||
| - namespaceOut - выходное пространство имен, используется для трансформаций из одной схемы в другую | ||||
| - createdDate - дата создания мета информации ресурса | ||||
| - createdBy - логин, загрузивший мета информацию ресурса в шину | ||||
| - editedDate - дата перезагрузки мета информации ресурса | ||||
| - editedBy - логин, перезагрузивший мета информацию ресурса в шине | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <getResourceInfoResponse xmlns="http://www.entaxy.ru/registry-schema-service/"> | ||||
|             <id>14</id> | ||||
|             <name>lama.xsd</name> | ||||
|             <idResource>14</idResource> | ||||
|             <version>1.0</version> | ||||
|             <description>lama test</description> | ||||
|             <convertor>false</convertor> | ||||
|             <namespace>http:lama.xsd</namespace> | ||||
|             <namespaceOut>false</namespaceOut> | ||||
|             <createdBy>?</createdBy> | ||||
|             <createdDate>12/15/20, 1:33 AM</createdDate> | ||||
|             <editedBy>?</editedBy> | ||||
|             <editedDate>12/15/20, 1:35 AM</editedDate> | ||||
|         </getResourceInfoResponse> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *EditResourceInfo.* | ||||
|  | ||||
| Для корректирования мета информации ресурса в шине есть метод еditResourceInfo. | ||||
|  | ||||
| параметры: | ||||
|  | ||||
| - id - id мета информации ресурса, который вернулся при вызове метода LoadResourceInfo | ||||
| - idResource - id ресурса, который вернулся при вызове метода LoadResource | ||||
| - name - имя ресурса вместе с расширением | ||||
| - version - версия ресурса | ||||
| - description - описание ресурса | ||||
| - convertor - является ли ресурс конвертором из одной схемы в другую | ||||
| - namespace - входное пространство имен | ||||
| - namespaceOut - выходное пространство имен, используется для трансформаций из одной схемы в другую | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:reg="http://www.entaxy.ru/registry-schema-service/"> | ||||
|    <soapenv:Body> | ||||
|       <reg:editResourceInfoRequest> | ||||
|          <reg:id>1</reg:id> | ||||
|          <reg:name>lama.xsd</reg:name> | ||||
|          <reg:idResource>1</reg:idResource> | ||||
|          <reg:version>1.0</reg:version> | ||||
|          <reg:description>lama test</reg:description> | ||||
|          <reg:convertor>false</reg:convertor> | ||||
|          <reg:namespace>http:lama.xsd</reg:namespace> | ||||
|          <reg:namespaceOut>l</reg:namespaceOut> | ||||
|       </reg:editResourceInfoRequest> | ||||
|    </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| ответ | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/registry-schema-service/">14</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *RemoveResourceInfo.* | ||||
|  | ||||
| Для удаления мета информации ресурса в шине есть метод removeResourceInfo. | ||||
|  | ||||
| параметры: | ||||
|  | ||||
| - id - id мета информации ресурса, который вернулся при вызове метода LoadResourceInfo | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:reg="http://www.entaxy.ru/registry-schema-service/"> | ||||
|    <soapenv:Header/> | ||||
|    <soapenv:Body> | ||||
|       <reg:removeResourceInfoRequest>1</reg:removeResourceInfoRequest> | ||||
|    </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| ответ | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/registry-schema-service/">1</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *GetResourceInfoList.* | ||||
|  | ||||
| Для получения списка мета информации ресурсов в шине есть метод getResourceInfoList. | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:reg="http://www.entaxy.ru/registry-schema-service/"> | ||||
|    <soapenv:Header/> | ||||
|    <soapenv:Body> | ||||
|       <reg:getResourceInfoListRequest/> | ||||
|    </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| ответ | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <getResourceInfoListResponse xmlns="http://www.entaxy.ru/registry-schema-service/"> | ||||
|             <ResourceInfoFullType> | ||||
|                 <id>1</id> | ||||
|                 <name>lama.xsd</name> | ||||
|                 <idResource>1</idResource> | ||||
|                 <version>1.0</version> | ||||
|                 <description>lama test</description> | ||||
|                 <convertor>false</convertor> | ||||
|                 <namespace>http:lama.xsd</namespace> | ||||
|                 <namespaceOut>l</namespaceOut> | ||||
|                 <createdBy>?</createdBy> | ||||
|                 <createdDate>12/14/20, 10:00 PM</createdDate> | ||||
|             </ResourceInfoFullType> | ||||
|         </getResourceInfoListResponse> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *GetResourceInfoListByName.* | ||||
|  | ||||
| Для получения списка мета информации ресурсов по имени ресурса в шине есть метод getResourceInfoListByName. | ||||
|  | ||||
| параметры: | ||||
|  | ||||
| - name - часть имени мета информации ресурса | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:reg="http://www.entaxy.ru/registry-schema-service/"> | ||||
|    <soapenv:Header/> | ||||
|    <soapenv:Body> | ||||
|       <reg:getResourceInfoListByNameRequest> | ||||
|          <reg:name>.xsd</reg:name> | ||||
|       </reg:getResourceInfoListByNameRequest> | ||||
|    </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| ответ | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <getResourceInfoListResponse xmlns="http://www.entaxy.ru/registry-schema-service/"> | ||||
|             <ResourceInfoFullType> | ||||
|                 <id>1</id> | ||||
|                 <name>lama.xsd</name> | ||||
|                 <idResource>1</idResource> | ||||
|                 <version>1.0</version> | ||||
|                 <description>lama test</description> | ||||
|                 <convertor>false</convertor> | ||||
|                 <namespace>http:lama.xsd</namespace> | ||||
|                 <namespaceOut>l</namespaceOut> | ||||
|                 <createdBy>?</createdBy> | ||||
|                 <createdDate>12/14/20, 10:00 PM</createdDate> | ||||
|             </ResourceInfoFullType> | ||||
|         </getResourceInfoListResponse> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *GetResourceInfoListByNamespace.* | ||||
|  | ||||
| Для получения списка мета информации ресурсов по namespace ресурса в шине есть метод getResourceInfoListByNamespace. | ||||
|  | ||||
| параметры: | ||||
|  | ||||
| - namespace - часть namespace мета информации ресурса | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:reg="http://www.entaxy.ru/registry-schema-service/"> | ||||
|    <soapenv:Header/> | ||||
|    <soapenv:Body> | ||||
|       <reg:getResourceInfoListByNamespaceRequest> | ||||
|          <reg:namespace>lama</reg:namespace> | ||||
|       </reg:getResourceInfoListByNamespaceRequest> | ||||
|    </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| ответ | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <getResourceInfoListResponse xmlns="http://www.entaxy.ru/registry-schema-service/"> | ||||
|             <ResourceInfoFullType> | ||||
|                 <id>1</id> | ||||
|                 <name>lama.xsd</name> | ||||
|                 <idResource>1</idResource> | ||||
|                 <version>1.0</version> | ||||
|                 <description>lama test</description> | ||||
|                 <convertor>false</convertor> | ||||
|                 <namespace>http:lama.xsd</namespace> | ||||
|                 <namespaceOut>l</namespaceOut> | ||||
|                 <createdBy>?</createdBy> | ||||
|                 <createdDate>12/14/20, 10:00 PM</createdDate> | ||||
|             </ResourceInfoFullType> | ||||
|         </getResourceInfoListResponse> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
| Before Width: | Height: | Size: 166 KiB | 
| Before Width: | Height: | Size: 181 KiB | 
| Before Width: | Height: | Size: 288 KiB | 
| Before Width: | Height: | Size: 288 KiB | 
| Before Width: | Height: | Size: 288 KiB | 
| Before Width: | Height: | Size: 407 KiB | 
| Before Width: | Height: | Size: 452 KiB | 
| Before Width: | Height: | Size: 232 KiB | 
| Before Width: | Height: | Size: 367 KiB | 
| Before Width: | Height: | Size: 365 KiB | 
| Before Width: | Height: | Size: 155 KiB | 
| Before Width: | Height: | Size: 261 KiB | 
| Before Width: | Height: | Size: 207 KiB | 
| Before Width: | Height: | Size: 170 KiB | 
| Before Width: | Height: | Size: 170 KiB | 
| Before Width: | Height: | Size: 213 KiB | 
| Before Width: | Height: | Size: 338 KiB | 
| @@ -1,836 +0,0 @@ | ||||
| = Руководство по управлению коннекторами и профилями в шине. | ||||
|  | ||||
| _Профиль(profile)_ - это описание внешней системы в шине.(Например s1). | ||||
|  | ||||
| _Мостовой профиль(bridge-profile)_ - это профиль на другой стороне шины, ведущий через мост в профиль. | ||||
| (Например s1) | ||||
|  | ||||
| _Коннектор(connector)_ - это связь между интерфейсом, через который может работать система, и профилем.(Например uniform-service, nsi) | ||||
|  | ||||
| _Доступ(permission)_ - это разрешение на взаимодействие двух систем.(Например для того чтобы система s1 смогла отправить сообщение s2)(/permission-management) | ||||
|  | ||||
| _Учетная запись(account)_ - это учетная запись системы для взаимодействия с шиной. | ||||
| Для каждой системы должна быть учетная запись для возможности отправления сообщений в шину. | ||||
| Также есть учетные записи для возможности взаимодействия с управленческим слоем(т. е. для того чтобы управлять коннекторами/профилями/учетными записями/топиками нужна учетная запись с соответствующими правами)(/basic-auth-management) | ||||
|  | ||||
| Коннекторы делятся на входящие и исходящие(in, out), которые отвечают за отправку сообщения в определенный интерфейс и на получение ответа из определенного интерфейса соответственно. | ||||
| Например, для того чтобы иметь возможность отправить сообщение в soap нужно создать коннектор uniform-service-in-connector, а для того чтобы получить сообщение из soap нужно создать коннектор uniform-service-out-connector. | ||||
|  | ||||
| По адресу _/system-management-service_ находится сам сервис управления коннекторами и профилями в шине. | ||||
|  | ||||
| Для работы внешней системы в шине нужно сначала создать профиль данной системы в шине, потом добавлять к нему необходимые коннекторы и пробрасывать его в необходимые шины. | ||||
|  | ||||
| === Управление профилями | ||||
|  | ||||
| *СreateProfile.* | ||||
|  | ||||
| Для создания профиля системы нужно вызвать метод createProfile, где вместо “system_uuid” нужно подставить uuid системы, вместо “system_name” - имя системы, “description” описание системы: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:createProfileRequest> | ||||
|             <sys:profileName>{{system_uuid}}</sys:profileName> | ||||
|             <sys:uuid>{{system_uuid}}</sys:uuid> | ||||
|             <!--Optional:--> | ||||
|             <sys:description>{{description}}</sys:description> | ||||
|         </sys:createProfileRequest> | ||||
|     </soapenv:Body> | ||||
|  | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если профиль успешно создался, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *GetProfile.* | ||||
|  | ||||
| Проверить созданный профиль можно с помощью метода getProfile, где вместо “system_uuid” нужно подставить uuid системы: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:getProfileRequest> | ||||
|             <sys:uuid>{{system_uuid}}</sys:uuid> | ||||
|         </sys:getProfileRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (профиль со всеми зависимостями, либо ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <fullProfileType xmlns="http://www.entaxy.ru/system-management-service/"> | ||||
|             <profileName>w6</profileName> | ||||
|             <uuid>w6</uuid> | ||||
|             <description>description</description> | ||||
|             <createDate>2020-01-22+03:00</createDate> | ||||
|             <createdBy>System</createdBy> | ||||
|             <type>false</type> | ||||
|             <status>ACTIVE</status> | ||||
|             <connectorList/> | ||||
|             <esbNames/> | ||||
|         </fullProfileType> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *GetProfiles* | ||||
|  | ||||
| Получить список профилей, зарегистрированных в шине, можно с помощью метода getProfiles: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:listProfileRequest/> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (список профилей со всеми зависимостями, либо ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <listProfile xmlns="http://www.entaxy.ru/system-management-service/"> | ||||
|             <fullProfileType> | ||||
|                 <profileName>w6</profileName> | ||||
|                 <uuid>w6</uuid> | ||||
|                 <description>description</description> | ||||
|                 <createDate>2020-01-22+03:00</createDate> | ||||
|                 <createdBy>System</createdBy> | ||||
|                 <type>false</type> | ||||
|                 <status>ACTIVE</status> | ||||
|                 <connectorList/> | ||||
|                 <esbNames/> | ||||
|             </fullProfileType> | ||||
|         </listProfile> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *StopProfile* | ||||
|  | ||||
| Остановить профиль и все его зависимости можно с помощью метода stopProfile, где вместо “system_uuid” нужно подставить uuid системы: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:stopProfileRequest> | ||||
|             <sys:uuid>{{system_uuid}}</sys:uuid> | ||||
|         </sys:stopProfileRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если профиль и его зависимости успешно остановились, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *StartProfile* | ||||
|  | ||||
| Запустить профиль и все его зависимости можно с помощью метода startProfile, где вместо “system_uuid” нужно подставить uuid системы: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:stopProfileRequest> | ||||
|             <sys:uuid>{{system_uuid}}</sys:uuid> | ||||
|         </sys:stopProfileRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если профиль успешно запустился, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *RemoveProfile* | ||||
|  | ||||
| Удалить профиль и все его зависимости можно с помощью метода removeProfile, где вместо “system_uuid” нужно подставить uuid системы(ВНИМАНИЕ! | ||||
| При удалении профиля также удаляются все связанные с ним коннекторы): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:stopProfileRequest> | ||||
|             <sys:uuid>{{system_uuid}}</sys:uuid> | ||||
|         </sys:stopProfileRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если профиль и его зависимости успешно удалился, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| === Управление коннекторами | ||||
|  | ||||
| *GetTemplates* | ||||
|  | ||||
| Для создания коннектора в шине нужно получить список шаблонов(требуются для создания коннекторов) методом getTemplates: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:listTemplateRequest/> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (список шаблонов с параметрами): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <listTemplate xmlns="http://www.entaxy.ru/system-management-service/"> | ||||
|             <template> | ||||
|                 <templateName>file-out-connector</templateName> | ||||
|                 <paramList> | ||||
|                     <param> | ||||
|                         <name>directionTo</name> | ||||
|                         <value>file-to</value> | ||||
|                     </param> | ||||
|                 </paramList> | ||||
|             </template> | ||||
|             <template> | ||||
|                 <templateName>nsi-in-connector</templateName> | ||||
|                 <paramList/> | ||||
|             </template> | ||||
|             <template> | ||||
|                 <templateName>uniform-service-in-connector</templateName> | ||||
|                 <paramList/> | ||||
|             </template> | ||||
|             <template> | ||||
|                 <templateName>uniform-service-out-connector</templateName> | ||||
|                 <paramList> | ||||
|                     <param> | ||||
|                         <name>isActive</name> | ||||
|                         <value>false</value> | ||||
|                     </param> | ||||
|                     <param> | ||||
|                         <name>queue</name> | ||||
|                         <value>soap-root-default</value> | ||||
|                     </param> | ||||
|                 </paramList> | ||||
|             </template> | ||||
|         </listTemplate> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *GetTemplate* | ||||
|  | ||||
| Для создания коннектора в шине нужно получить список шаблонов(требуются для создания коннекторов) методом getTemplate, где “template_name” имя шаблона по которому будет сделан коннектор: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:getTemplateRequest> | ||||
|             <sys:templateName>{{template_name}}</sys:templateName> | ||||
|         </sys:getTemplateRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (шаблон с параметрами): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <template xmlns="http://www.entaxy.ru/system-management-service/"> | ||||
|             <templateName>nsi-in-connector</templateName> | ||||
|             <paramList/> | ||||
|         </template> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *СreateConnector* | ||||
|  | ||||
| Для создания коннектора в шине нужно вызвать метод createConnector, где templateName - это имя шаблона, полученное из метода getTemplates, system_uuid - это uuid профиля, зарегистрированного в системе ранее, также нужно заполнить список параметров необходимый для создания коннектора(ВНИМАНИЕ! если не заполнить список параметров, то установятся значения по умолчанию) : | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:createConnectorRequest> | ||||
|             <sys:templateName>{{template_name}}</sys:templateName> | ||||
|             <sys:profileUuid>{{system_uuid}}</sys:profileUuid> | ||||
|             <sys:paramList> | ||||
|             <!--Zero or more repetitions:--> | ||||
|             </sys:paramList> | ||||
|         </sys:createConnectorRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если коннектор успешно создался, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *GetConnectors* | ||||
|  | ||||
| Можно просматривать список подключенных коннекторов в шине методом getConnectors: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:listConnectorRequest/> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (список коннкторов с параметрами): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <listConnector xmlns="http://www.entaxy.ru/system-management-service/"> | ||||
|             <connector> | ||||
|             <name>nsi-in-connector-w6</name> | ||||
|             <status>ACTIVE</status> | ||||
|             <paramList/> | ||||
|             </connector> | ||||
|         </listConnector> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *StartConnector* | ||||
|  | ||||
| Запустить коннектор можно с помощью метода startConnector, где вместо “system_uuid” нужно подставить uuid системы, “template_name” это имя шаблона: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:startConnectorRequest> | ||||
|             <sys:templateName>{{template_name}}</sys:templateName> | ||||
|             <sys:profileUuid>{{system_uuid}}</sys:profileUuid> | ||||
|         </sys:startConnectorRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если коннектор успешно запустился, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *StopConnector* | ||||
|  | ||||
| Остановить коннектор можно с помощью метода stopConnector, где вместо “system_uuid” нужно подставить uuid системы, “template_name” это имя шаблона: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:stopConnectorRequest> | ||||
|             <sys:templateName>{{template_name}}</sys:templateName> | ||||
|             <sys:profileUuid>{{system_uuid}}</sys:profileUuid> | ||||
|         </sys:stopConnectorRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если коннектор успешно остановилась, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *RemoveConnector* | ||||
|  | ||||
| Удалить коннектор можно с помощью метода removeConnector, где вместо “system_uuid” нужно подставить uuid системы, “template_name” это имя шаблона: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:removeConnectorRequest> | ||||
|             <sys:templateName>{{template_name}}</sys:templateName> | ||||
|             <sys:profileUuid>{{system_uuid}}</sys:profileUuid> | ||||
|         </sys:removeConnectorRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если коннектор успешно удалился, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| === Управление мостовыми профилями | ||||
|  | ||||
| *GetListEsb* | ||||
|  | ||||
| Для получения списка подключенных шин можно с помощью метода getListEsb: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:listEsbRequest/> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (список подключенных шин, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <listEsb xmlns="http://www.entaxy.ru/system-management-service/"> | ||||
|             <esbName>test1</esbName> | ||||
|         </listEsb> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *CreateBridgeProfile* | ||||
|  | ||||
| Создать профиль, ведущий на мост, можно с помощью метода createBridgeProfile, где “system_uuid” uuid системы, “esb_name” имя подключенной шины: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:createBridgeProfileRequest> | ||||
|             <sys:profileUuid>{{system_uuid}}</sys:profileUuid> | ||||
|             <sys:profileName>{{system_uuid}}</sys:profileName> | ||||
|             <sys:esbName>{{esb_name}}</sys:esbName> | ||||
|         </sys:createBridgeProfileRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если профиль, ведущий на мост, успешно создался, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *StopBridgeProfile* | ||||
|  | ||||
| Остановить профиль, ведущий на мост, можно с помощью метода stopBridgeProfile, где “system_uuid” uuid системы, “esb_name” имя подключенной шины: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:stopBridgeProfileRequest> | ||||
|             <sys:profileUuid>{{system_uuid}}</sys:profileUuid> | ||||
|             <sys:profileName>{{system_uuid}}</sys:profileName> | ||||
|             <sys:esbName>{{esb_name}}</sys:esbName> | ||||
|         </sys:stopBridgeProfileRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если профиль, ведущий на мост, успешно остановился, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *StartBridgeProfile* | ||||
|  | ||||
| Запустить профиль, ведущий на мост, можно с помощью метода startBridgeProfile, где “system_uuid” uuid системы, “esb_name” имя подключенной шины: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:startBridgeProfileRequest> | ||||
|             <sys:profileUuid>{{system_uuid}}</sys:profileUuid> | ||||
|             <sys:profileName>{{system_uuid}}</sys:profileName> | ||||
|             <sys:esbName>{{esb_name}}</sys:esbName> | ||||
|         </sys:startBridgeProfileRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если профиль, ведущий на мост, успешно запустился, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *GetBridgeProfile* | ||||
|  | ||||
| Получить профиль, ведущий на мост, можно с помощью метода getBridgeProfile, где “system_uuid” uuid системы, “esb_name” имя подключенной шины: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:getBridgeProfileRequest> | ||||
|             <sys:profileUuid>{{system_uuid}}</sys:profileUuid> | ||||
|             <sys:profileName>{{system_uuid}}</sys:profileName> | ||||
|             <sys:esbName>{{esb_name}}</sys:esbName> | ||||
|         </sys:getBridgeProfileRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (профиль, ведущий на мост, пустой ответ): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <fullBridgeProfileType xmlns="http://www.entaxy.ru/system-management-service/"> | ||||
|             <profileName>w6</profileName> | ||||
|             <status>ACTIVE</status> | ||||
|             <esbName>test1</esbName> | ||||
|         </fullBridgeProfileType> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *RemoveBridgeProfile* | ||||
|  | ||||
| Удалить профиль, ведущий на мост, можно с помощью метода removeBridgeProfile, где “system_uuid” uuid системы, “esb_name” имя подключенной шины: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:removeBridgeProfileRequest> | ||||
|             <sys:profileUuid>{{system_uuid}}</sys:profileUuid> | ||||
|             <sys:profileName>{{system_uuid}}</sys:profileName> | ||||
|             <sys:esbName>{{esb_name}}</sys:esbName> | ||||
|         </sys:removeBridgeProfileRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если профиль, ведущий на мост, успешно удален, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *GetBridgeProfiles* | ||||
|  | ||||
| Для получения списка профилей, ведущих на мост, можно использовать метод getBridgeProfiles:(ВНИМАНИЕ! запрос покажет список проброшенных профилей на ТЕКУЩЕЙ шине) | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:getBridgeProfilesRequest/> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (список профиль, ведущих на мост, пустой ответ): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <getBridgeProfilesResponse xmlns="http://www.entaxy.ru/system-management-service/"> | ||||
|             <fullBridgeProfileType> | ||||
|             <profileName>w6</profileName> | ||||
|             <status>ACTIVE</status> | ||||
|             <esbName>test1</esbName> | ||||
|             </fullBridgeProfileType> | ||||
|         </getBridgeProfilesResponse> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| === Управление доступами | ||||
|  | ||||
| *CreatePermission* | ||||
|  | ||||
| Создать доступ одной системы к другой, можно с помощью метода createPermission, где “objectUuid” uuid системы, которой нужно дать доступ, “subjectUuid” - uuid системы, к которой нужно дать доступ: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:createPermissionRequest> | ||||
|             <sys:objectUuid>{{objectUuid}}</sys:objectUuid> | ||||
|             <sys:subjectUuid>{{subjectUuid}}</sys:subjectUuid> | ||||
|         </sys:createPermissionRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если доступ, успешно создался, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *RemovePermission* | ||||
|  | ||||
| Удалить доступ одной системы к другой, можно с помощью метода removePermission, где “objectUuid” uuid системы, которой нужно дать доступ, “subjectUuid” - uuid системы, к которой нужно дать доступ: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:removePermissionRequest> | ||||
|             <sys:objectUuid>{{objectUuid}}</sys:objectUuid> | ||||
|             <sys:subjectUuid>{{subjectUuid}}</sys:subjectUuid> | ||||
|         </sys:removePermissionRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если доступ, успешно удалился, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *GetPermissionsByObject* | ||||
|  | ||||
| Получить список систем, доступ к которым от данной системы разрешен, можно с помощью метода getPermissionByObject, где “objectUuid” uuid системы: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:getPermissionsByObjectRequest> | ||||
|             <sys:uuid>{{objectUuid}}</sys:uuid> | ||||
|         </sys:getPermissionsByObjectRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (список систем, которым данная система может отправлять сообщения, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <getPermissionsByObjectResponse xmlns="http://www.entaxy.ru/system-management-service/"> | ||||
|             <profileType> | ||||
|                 <uuid>r2</uuid> | ||||
|             </profileType> | ||||
|             <profileType> | ||||
|                 <uuid>active</uuid> | ||||
|             </profileType> | ||||
|         </getPermissionsByObjectResponse> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *GetPermissionsBySubject* | ||||
|  | ||||
| Получить список систем, доступ которым разрешен к данной системе, можно с помощью метода getPermissionBySubject, где “subjectUuid” uuid системы: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:getPermissionsBySubjectRequest> | ||||
|             <sys:uuid>{{subjectUuid}}</sys:uuid> | ||||
|         </sys:getPermissionsBySubjectRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (список систем, для которых данная система доступна для отправки сообщений, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <getPermissionsBySubjectResponse xmlns="http://www.entaxy.ru/system-management-service/"> | ||||
|             <profileType> | ||||
|                 <uuid>r2</uuid> | ||||
|             </profileType> | ||||
|         </getPermissionsBySubjectResponse> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *CreatePermissionForObjectRequest* | ||||
|  | ||||
| Создать сразу несколько доступов, которым разрешено отправлять сообщения от данной системы, можно с помощью метода сreatePermissionForObjectRequest, где “objectUuid” это uuid системы, от которой буду исходить сообщения, ‘“subjectUuid1”, “subjectUuid2” и т д, это uuid систем, которым будут отправлять сообщения: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:createPermissionForObjectRequest> | ||||
|             <sys:objectUuid>{{objectUuid}}</sys:objectUuid> | ||||
|             <!--Zero or more repetitions:--> | ||||
|             <sys:subjectUuid>{{subjectUuid1}}</sys:subjectUuid> | ||||
|             <sys:subjectUuid>{{subjectUuid2}}</sys:subjectUuid> | ||||
|         </sys:createPermissionForObjectRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если доступа, успешно создались, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
|  | ||||
| *CreatePermissionForSubjectRequest* | ||||
|  | ||||
| Создать сразу несколько доступов, которым разрешено отправлять сообщения в данную систему, можно с помощью метода сreatePermissionForSubjectRequest, где “objectUuid1”, “objectUuid2” и т д - это uuid систем, от которых буду исходить сообщения, ‘“subjectUuid” - это uuid системы, которой будут отправлять сообщения: | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/"> | ||||
|     <soapenv:Header/> | ||||
|     <soapenv:Body> | ||||
|         <sys:createPermissionForSubjectRequest> | ||||
|             <!--Zero or more repetitions:--> | ||||
|             <sys:objectUuid>{{objectUuid1}}</sys:objectUuid> | ||||
|             <sys:objectUuid>{{objectUuid2}}</sys:objectUuid> | ||||
|             <sys:subjectUuid>{{subjectUuid}}</sys:subjectUuid> | ||||
|         </sys:createPermissionForSubjectRequest> | ||||
|     </soapenv:Body> | ||||
| </soapenv:Envelope> | ||||
| ---- | ||||
|  | ||||
| Где ответом будет (“true” - если доступа, успешно создались, ошибка и ее описание): | ||||
|  | ||||
| [source,xml] | ||||
| ---- | ||||
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||||
|     <soap:Body> | ||||
|         <response xmlns="http://www.entaxy.ru/system-management-service/">true</response> | ||||
|     </soap:Body> | ||||
| </soap:Envelope> | ||||
| ---- | ||||
| Before Width: | Height: | Size: 69 KiB | 
| @@ -1,555 +0,0 @@ | ||||
| = Rest сервис Topic-management | ||||
|  | ||||
| === Rest сервис для работы с топиками. | ||||
|  | ||||
| Сервис состоит из 2-х контекстов: | ||||
|  | ||||
| - _topic-management_ - управление топиками (создание/изменение/удаление) | ||||
| - _topic-subscription_ - клиентский сервис подписки и публикации сообщения | ||||
|  | ||||
| При смене контекста в конфигурационных файлах требуется перераздать права на данный сервис. | ||||
|  | ||||
| Схема работы подписок | ||||
|  | ||||
| image::Topic_publish_diagram.png[] | ||||
|  | ||||
| Схема работы нотификаций | ||||
|  | ||||
| image::Scheme_of_work_notifications(events).png[] | ||||
|  | ||||
| === Права | ||||
|  | ||||
| Право доступа в сервис _topic-management_ | ||||
|  | ||||
| Для доступа к сервису _topic-management_ у аккаунта должно быть право доступа в данный сервис. | ||||
|  | ||||
| По умолчанию право на доступ к сервису есть у пользователя _admin_. | ||||
|  | ||||
| Используя данного пользователя в сервисе _permission-management_ можно раздать права на аккаунты систем. | ||||
|  | ||||
| Параметры для выдачи аккаунту прав на сервис: | ||||
|  | ||||
| - _objectId_: идентификатор учётной записи | ||||
| - _objectType_: account | ||||
| - _subjectId_: topic-management | ||||
| - _subjectType_: service | ||||
|  | ||||
| Право manage сервиса _topic-subscription_ | ||||
|  | ||||
| Для доступа к менеджерским функциям сервиса _topic-subscription_ у аккаунта должно быть право manage - данное право открывает доступ к управлению подписками. | ||||
|  | ||||
| Функционал управления подписками реализован в методах _subscribe_ и _unsubscribe_, пример использования приведён в подпунктах “Массовая обработка при наличии права manage для данного сервиса”. | ||||
|  | ||||
| Параметры для выдачи аккаунту права _manage_: | ||||
|  | ||||
| - _objectId_: идентификатор учётной записи | ||||
| - _objectType_: account | ||||
| - _subjectId_: topic-subscription | ||||
| - _subjectType_: service | ||||
| - _action_: manage | ||||
|  | ||||
| === Конфигурационные файлы | ||||
|  | ||||
| Конфигурационные файлы по умолчанию хранятся  в папке сервера <karaf_home>\etc\ | ||||
|  | ||||
| - _ru.entaxy.esb.system.event.handler.cfg_ | ||||
|  | ||||
| [source,properties] | ||||
| ---- | ||||
| # максимальное колчичество попыток отправить сообщение в очередь | ||||
| # почитать подробнее можно в https://camel.apache.org/components/latest/eips/dead-letter-channel.html#deadLetterChannel-Redelivery | ||||
| redelivery.maximumRedeliveries=-1 | ||||
| # время между попытками отправить сообщение в очередь | ||||
| redelivery.redeliveryDelay=5000 | ||||
|  | ||||
| #cron - по умолчанию запускается каждые 00:00:00, | ||||
| #cron выражение использует знак "+" как разделитель для модуля quartz2l | ||||
| quartz.job.clean.cron=0+0+0+*+*+?+* | ||||
| ---- | ||||
|  | ||||
| - _ru.entaxy.esb.system.event.rest.cfg_ | ||||
|  | ||||
| [source,properties] | ||||
| ---- | ||||
| service.host=http://0.0.0.0 | ||||
|  | ||||
| service.port.management=9090 | ||||
| #Рутовый контекст управляющего сервиса, при изменении требуется перераздать права для данного сервиса | ||||
| service.root.path.management=/topic-management | ||||
|  | ||||
| service.port.subscription=9092 | ||||
| #Рутовый контекст клиентского сервиса, при изменении требуется перераздать права для данного сервиса | ||||
| service.root.path.subscription=/topic-subscription | ||||
| ---- | ||||
|  | ||||
| === Методы topic-management: | ||||
|  | ||||
| - _create_ - создать топик | ||||
| При создании и изменении топика, есть возможность передать списки систем, которым доступна подписка или публикация в данном топике. | ||||
|  | ||||
| Запрос: | ||||
|  | ||||
| _POST server:9090/topic-management/create_ | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "topicName": "boomNews", | ||||
|     "possibleSubscribers" : ["systemUuid1", "systemUuid2"], | ||||
|     "possiblePublishers" : ["systemUuid3", "systemUuid4"] | ||||
| } | ||||
| ---- | ||||
|  | ||||
| Ответ: | ||||
|  | ||||
| Статус 201 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "title": "Topic created", | ||||
|     "topicName": "<topic_name>", | ||||
|     "subscriberErrors": { | ||||
|         "systemNotFound": [ | ||||
|             "<system_uuid>" | ||||
|         ] | ||||
|     }, | ||||
|     "publisherErrors": { | ||||
|         "systemNotFound": [] | ||||
|     } | ||||
| } | ||||
| ---- | ||||
|  | ||||
| - update - изменить топик (название не меняется, так как на него завязана сама очередь в брокере) | ||||
|  | ||||
| Запрос: | ||||
|  | ||||
| _POST server:9090/topic-management/update_ | ||||
|  | ||||
| Тело | ||||
|  | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "topicName": "boomNews", | ||||
|     "possibleSubscribers" : ["systemUuid1", "systemUuid2"], | ||||
|     "possiblePublishers" : ["systemUuid3", "systemUuid4"] | ||||
| } | ||||
| ---- | ||||
|  | ||||
| Ответ: | ||||
|  | ||||
| Статус 201 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "title": "Topic updated", | ||||
|     "topicName": "<topic_name>", | ||||
|     "subscriberErrors": { | ||||
|         "systemNotFound": [ | ||||
|             "<system_uuid>" | ||||
|         ] | ||||
|     }, | ||||
|     "publisherErrors": { | ||||
|     "systemNotFound": [] | ||||
|     } | ||||
| } | ||||
| ---- | ||||
|  | ||||
| - delete - топик помечается как удалённый | ||||
|  | ||||
| Запрос: | ||||
|  | ||||
| _POST server:9090/topic-management/delete_ | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "topicName": "boomNews" | ||||
| } | ||||
| ---- | ||||
|  | ||||
| Ответ: | ||||
|  | ||||
| Статус 200 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "title": "Topic deleted", | ||||
|     "topicName": "<topic_name>" | ||||
| } | ||||
| ---- | ||||
|  | ||||
|  | ||||
| - clean - очистка хранилища топиков | ||||
|  | ||||
| Окончательное удаление топиков, помеченных как удалённые. | ||||
|  | ||||
| Запрос: | ||||
|  | ||||
| _POST server:9090/topic-management/clean_ | ||||
|  | ||||
| Ответ: | ||||
|  | ||||
| Статус 200 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "title": "Cleaned", | ||||
|     "topicDeleted": "<count_of_deleted_topics>" | ||||
| } | ||||
| ---- | ||||
|  | ||||
|  | ||||
| === Методы topic-subscription: | ||||
|  | ||||
| - _subscribe_ - подписаться на топик | ||||
|  | ||||
| Запрос: | ||||
|  | ||||
| _POST server:9090/topic-subscription/subscribe_ | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "topicName": "boomNews", | ||||
|     "subscriptionType": "PUSH" | ||||
| } | ||||
| ---- | ||||
|  | ||||
| Ответ: | ||||
|  | ||||
| Статус 201 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "title": "Subscription created", | ||||
|     "topicName": "<topic_name>", | ||||
|     "systemName": "<system_name>", | ||||
|     "subscriptionType": "<subscription_type>" | ||||
| } | ||||
| ---- | ||||
|  | ||||
| === 		Массовая обработка при наличии права manage для данного сервиса. | ||||
|  | ||||
| - _subscribe_ - подписаться на топик | ||||
|  | ||||
| Запрос: | ||||
|  | ||||
| _POST server:9092/topic-subscription/subscribe_ | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "topicName": "boomNews", | ||||
|     "systemUuids": [ | ||||
|         { | ||||
|             "systemUuid": "NNNNNNNN-NNNN-NNNN-NNNN-NNNNNNNNNNNN", | ||||
|             "subscriptionType": "PUSH" | ||||
|         }, | ||||
|         { | ||||
|             "systemUuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", | ||||
|             "subscriptionType": "PULL" | ||||
|         }, | ||||
|         { | ||||
|             "systemUuid": "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY", | ||||
|             "subscriptionType": "PULL" | ||||
|         } | ||||
|     ] | ||||
| } | ||||
| ---- | ||||
|  | ||||
| Ответ: | ||||
|  | ||||
| Статус 200 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| [ | ||||
|     { | ||||
|         "title": "Internal Server Error", | ||||
|         "detail": "System not found NNNNNNNN-NNNN-NNNN-NNNN-NNNNNNNNNNNN", | ||||
|         "reason": "javax.persistence.NoResultException: No entity found for query" | ||||
|     }, | ||||
|     { | ||||
|         "title": "Subscription created", | ||||
|         "topicName": "ooooo111-ff6e-4219-a878-bff120c495f1", | ||||
|         "systemUUID": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", | ||||
|         "subscriptionType": "PULL" | ||||
|     }, | ||||
|     { | ||||
|         "title": "Forbidden", | ||||
|         "detail": "No permission to subscribe for system YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY" | ||||
|     } | ||||
| ] | ||||
| ---- | ||||
|  | ||||
|  | ||||
| - _unsubscribe_ - отписаться от топика | ||||
|  | ||||
| Запрос: | ||||
|  | ||||
| _POST server:9090/topic-subscription/unsubscribe_ | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "topicName": "boomNews" | ||||
| } | ||||
| ---- | ||||
|  | ||||
| Ответ: | ||||
|  | ||||
| Статус 200 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "title": "Subscription deleted", | ||||
|     "topicName": "<topic_name>", | ||||
|     "systemName": "<system_name>" | ||||
| } | ||||
| ---- | ||||
|  | ||||
| ===	Массовая обработка при наличии права manage для данного сервиса. | ||||
|  | ||||
| Запрос: | ||||
|  | ||||
| _POST server:9092/topic-subscription/unsubscribe_ | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "topicName": "boomNews", | ||||
|     "systemUuids": [ | ||||
|         { | ||||
|             "systemUuid":"NNNNNNNN-NNNN-NNNN-NNNN-NNNNNNNNNNNN", | ||||
|             "subscriptionType": "PUSH" | ||||
|         }, | ||||
|         { | ||||
|             "systemUuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", | ||||
|             "subscriptionType": "PULL" | ||||
|         }, | ||||
|         { | ||||
|             "systemUuid": "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY", | ||||
|             "subscriptionType": "PULL" | ||||
|         } | ||||
|     ] | ||||
| } | ||||
| ---- | ||||
|  | ||||
| Ответ: | ||||
|  | ||||
| Статус 200 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| [ | ||||
|     { | ||||
|         "title": "Internal Server Error", | ||||
|         "detail": "System not found NNNNNNNN-NNNN-NNNN-NNNN-NNNNNNNNNNNN", | ||||
|         "reason": "javax.persistence.NoResultException: No entity found for query" | ||||
|     }, | ||||
|     { | ||||
|         "title": "Subscription deleted", | ||||
|         "topicName": "ooooo111-ff6e-4219-a878-bff120c495f1", | ||||
|         "systemUUID": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" | ||||
|     }, | ||||
|     { | ||||
|         "title": "Subscription not found", | ||||
|         "topicName": "ooooo111-ff6e-4219-a878-bff120c495f1", | ||||
|         "systemUUID": "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY" | ||||
|     } | ||||
| ] | ||||
| ---- | ||||
|  | ||||
| - _publish_ - опубликовать событие | ||||
|  | ||||
| Запрос: | ||||
|  | ||||
| _POST server:9090/topic-subscription/publish_ | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "topicName": "boomNews", "message": "messageText2" | ||||
| } | ||||
| ---- | ||||
|  | ||||
| 		Ответ: | ||||
| 			Статус 200 | ||||
| 			Тело | ||||
| 				{ | ||||
| 					"title": "Message published", | ||||
| 					"topicName": "<topic_name>" | ||||
| 				} | ||||
|  | ||||
| === Примеры ответов при ошибке | ||||
|  | ||||
| - _Передан некорректный JSON или логин не определён_ | ||||
|  | ||||
| Статус 400 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "title": "Incorrect input parameters", | ||||
|     "detail": "Cannot parse incoming JSON or login/system not defined" | ||||
| } | ||||
| ---- | ||||
|  | ||||
| - _Подписка не найдена_ | ||||
|  | ||||
| Статус 404 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "title": "Subscription not found", | ||||
|     "topicName": "${exchangeProperty.topicName}", | ||||
|     "systemUUID": "${header.X-SystemUuid}" | ||||
| } | ||||
| ---- | ||||
|  | ||||
| - _Топик не зарегистрирован_ | ||||
|  | ||||
| Статус 400 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "title": "Topic not registered", | ||||
|     "topicName": "${exchangeProperty.topicName}" | ||||
| } | ||||
| ---- | ||||
|  | ||||
| - _Система не найдена_ | ||||
|  | ||||
| Статус 500 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "title": "Internal Server Error", | ||||
|     "detail": "System not found ${header.X-SystemUuid}", | ||||
|     "reason": "${exception.stacktrace}" | ||||
| } | ||||
| ---- | ||||
|  | ||||
| - _Неизвестный тип подписки_ | ||||
|  | ||||
| Статус 500 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "title": "Internal Server Error", | ||||
|     "detail": "Unknown subscription type ${exchangeProperty.subscriptionType}", | ||||
|     "reason": "${exception.stacktrace}" | ||||
| } | ||||
| ---- | ||||
|  | ||||
| - _Нет прав на выполнение запрошенной операции_ | ||||
|  | ||||
| Статус 403 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "title": "Forbidden", | ||||
|     "detail": "No permission to subscribe" | ||||
| } | ||||
| ---- | ||||
|  | ||||
| - _Неизвестная ошибка_ | ||||
|  | ||||
| Статус 500 | ||||
|  | ||||
| Тело | ||||
| [source,json] | ||||
| ---- | ||||
| { | ||||
|     "title": "Internal Server Error", | ||||
|     "detail": "Unknown exception", | ||||
|     "reason": "${exception.stacktrace}" | ||||
| } | ||||
| ---- | ||||
|  | ||||
| == Работа модуля топиков в кластере | ||||
|  | ||||
| === Подписки | ||||
|  | ||||
| *PULL подписки не реализованы!* | ||||
|  | ||||
| Для реализации подписки используются _durable shareable_ подписчики _Apache Artemis_ топиков, а для доставки сообщений из топиков создаются специальные маршруты отправляющие сообщения в подписанную систему(PUSH-подписка). При работе в кластере системой создаются дублирующие маршруты на каждом узле, которые работают в конкурентном режиме, т.е. при падении одного из узлов доставка сообщений будет производиться оставшимися узлами. | ||||
|  | ||||
| Работа в кластере обеспечивается через компоненты _Apache Felix Event Admin_, реализующий рассылку служебных событий по топикам внутри узла, | ||||
| и _Apache Karaf Cellar_ с интеграцией с _Event Admin_, реализующий рассылку данного события по всем узлам кластера. При создании/удалении подписки система создаёт соответствующее событие и отправляет в специальный топик _subscription_, далее подписчики на всех узлах, входящих в кластер, получают и обрабатывают данное событие. | ||||
|  | ||||
| === Настройки | ||||
|  | ||||
| Настройки производятся на любом узле либо на мастер узле, в зависимости от настроек кластера. | ||||
|  | ||||
| Для синхронизации топика _subscription_ в конфигурационном файле  _org.apache.karaf.cellar.groups.cfg_, нужно добавить строки: | ||||
|  | ||||
| [source,properties] | ||||
| ---- | ||||
|     default.event.blacklist.inbound = none | ||||
|     default.event.blacklist.outbound = none | ||||
|     default.event.whitelist.inbound = subscription | ||||
|     default.event.whitelist.outbound = subscription | ||||
| ---- | ||||
|  | ||||
| Далее если _Apache Karaf Cellar_ настроен правильно, то конфигурационные файлы _org.apache.karaf.cellar.groups.cfg_ должны синхронизироваться и строки, представленные выше, появятся на всех узлах. | ||||
|  | ||||
| Если синхронизация конфигурационных файлов не проходит, можно проверить статус _cellar_ продюсера командой: | ||||
|  | ||||
|     cluster:producer-status | ||||
|  | ||||
| если выключен, то можно включить командой: | ||||
|  | ||||
|     cluster:producer-start | ||||
|  | ||||
| === Удаление топиков | ||||
|  | ||||
| Удаление топиков происходит в 2 этапа | ||||
|  | ||||
| - При вызове метода _delete_ топик помечается в БД, как удалённый | ||||
|  | ||||
| - По расписанию запускается задача (по умолчанию раз в сутки в 00:00), которая удаляет топик окончательно вместе с подписками, правами и консьюмерами. | ||||
| Либо очистка запускается вручную вызовом метода _clean_ сервиса _topic-management_ | ||||
|  | ||||
| Если до очистки системы изменить топик помеченный как удалённый или попытаться создать его заново, то восстановится старый топик | ||||
|  | ||||
| === Плановая задача по очистке топиков | ||||
|  | ||||
| Т.к. удаление топиков происходит в 2 этапа, с помощью планировщика _Quartz2_, работающего в кластере, запускается задача по очистке. Запуск происходит в конкурентном режиме, узел первый запустивший задачу получает приоритет, на остальных узлах задача останавливается до следующего запуска. | ||||
|  | ||||
| Частота запуска задачи настраивается в конфигурационном файле  _ru.entaxy.esb.system.event.handler.cfg_ в свойстве quartz.job.clean.cron=0+0+0+*+*+?+* | ||||
| с помощью cron выражения. Особенность cron выражения для quartz в том что “++” используется, как разделитель. | ||||
|  | ||||
| Before Width: | Height: | Size: 44 KiB | 
| @@ -1,171 +0,0 @@ | ||||
| = Хранилище данных EAV | ||||
|  | ||||
| == Описание модуля EXTRAS :: ENTAXY :: EAV (Entity, Attribute, Value) | ||||
|  | ||||
| Хранилище данных EAV реализует модель _Сущность-Атрибут-Значение_ - это модель данных, предназначенная для описания сущностей, в которых количество атрибутов (свойств, параметров) не ограничено или не известно заранее. | ||||
|   | ||||
|  | ||||
| == Объекты модуля ЕАV | ||||
|  | ||||
| image::eav_objects.png[] | ||||
|  | ||||
| *Внешняя сущность*(External Entity) - любая внешняя сущность относительно модуля EAV. | ||||
|  | ||||
| *Сущность EAV*(Entity EAV) - именованная сущность, связывающая аттрибуты с внешней сущностью. | ||||
| 	Модуль предоставляет возможность объединять сущности EAV в одноуровневую иерархию. | ||||
| 	 | ||||
| *Атрибут*(Attribute) - именованный атрибут сущности EAV, содержит значение и его тип. | ||||
|  | ||||
| *Типы значений:* | ||||
|  | ||||
| * DOUBLE | ||||
| * LONG | ||||
| * TEXT | ||||
| * JSON | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| == Использование хранилища EAV | ||||
|  | ||||
| В BLUEPRINT подключаем OSGI-сервис EAVProcessor | ||||
| [source] | ||||
| ---- | ||||
| <reference id="eavProcessor" interface="ru.entaxy.eav.service.EAVProcessor"/> | ||||
| ---- | ||||
|  | ||||
| в маршрутах или java коде осуществляем необходимые вызовы для создания/получения/изменения значений. | ||||
|  | ||||
| *Примеры вызовов из маршрута Apache Camel XMLDSL* | ||||
|  | ||||
| Создание атрибута для внешней сущности | ||||
| [source] | ||||
| ---- | ||||
| <bean ref="eavProcessor" method="createPrimitive('externalIdTest', 'externalTypeTest', 'entityNameTest', 'attributeNameTest', 'textValue', 'testLogin')"/> | ||||
| ---- | ||||
| 	 | ||||
| Получить все значения сохранённой сущности | ||||
| [source] | ||||
| ---- | ||||
| <bean ref="eavProcessor" method="getEntityWithValues('externalIdTest', 'externalTypeTest', 'entityNameTest')"/> | ||||
| ---- | ||||
| 	 | ||||
| Удалить сохранённые значения | ||||
| [source] | ||||
| ---- | ||||
| <bean ref="eavProcessor" method="deleteExternalEntity('externalIdTest', 'externalTypeTest')"/> | ||||
| ---- | ||||
|  | ||||
| 	 | ||||
|  | ||||
| == OSGI-сервис EAVProcessor. | ||||
| Сервис, выставляющий api для работы с EAV хранилищем. | ||||
|  | ||||
|  | ||||
|  | ||||
| *Методы:* | ||||
|  | ||||
| * _createPrimitive_ - простой метод сохранения примитивного значения(числового, строкового) | ||||
| * _createComplex_ - простой метод сохранения комплексного значения(JSON) | ||||
| * _getEntityWithValues_ - получение значений сущности EAV по имени | ||||
| * _fetchEntityWithValues_ - получение значений сущности EAV по имени либо null, без исключений | ||||
| * _getEntityNamedAttributes_ - получение значений с определённым именем для сущности EAV  | ||||
| * _getEntityByNameAndAttributeValue_ - получение сущности EAV по атрибуту | ||||
| * _getParentEntity_ - получение родительской сущности EAV для внешней связанной сущности | ||||
| * _getChildEntities_ - получение дочерних сущностей EAV для внешней связанной сущности с именем сущности EAV по умолчанию(PARENT) | ||||
| * _getChildEntitiesByName_ - получение дочерних сущностей EAV для внешней связанной сущности с указанным именем сущности EAV | ||||
| * _getByExternalEntity_ - получение всех сущностей EAV для внешней связанной сущности | ||||
| * _getByAttributeSet_ - получение сущностей EAV по множественным наборов параметров, каждый набор составляется из значений элементов с одним порядковым номером всех списков  | ||||
| * _updateAttribute_ - метод для изменения значения аттрибута | ||||
| * _deleteExternalEntity_ - удаление всех записей связанных с внешней сущностью | ||||
| * _deleteEntity_ - удаление именованной сущности EAV | ||||
| * _deleteAllEntityAttributes_ - удаление атрибутов именованной сущности EAV | ||||
| * _deleteAllEntityAttributesByName_ - удаление аттрибута сущности EAV с определённым наименованием  | ||||
| * _combineEntities_ - метод для объединения внешних сущностей под 1 родителем | ||||
|  | ||||
|  | ||||
|  | ||||
| == Схема базы данных(БД). | ||||
|  | ||||
| Схема БД при таком подходе остаётся неизменной независимо от состава и структуры хранимых данных. | ||||
| Бандл eav-storage разворачивает структуру из 2 таблиц: | ||||
|  | ||||
| *Таблица eav_entity* | ||||
| |=== | ||||
| |Слолбец	|Параметры    |Описание   | ||||
| //---------------------- | ||||
| |id    | ||||
| |bigint, not null    | ||||
| |идентификатор сущности модуля EAV | ||||
|  | ||||
| |external_id    | ||||
| |text, not null   | ||||
| |внешний идентификатор связываемой сущности | ||||
|  | ||||
| |external_type    | ||||
| |text, not null    | ||||
| |тип связываемой сущности | ||||
|  | ||||
| |name    | ||||
| |text    | ||||
| |наименование сущности модуля EAV | ||||
|  | ||||
| |parent_id    | ||||
| |bigint, not null, default 0    | ||||
| |идентификатор(поле id) родительской сущности модуля EAV | ||||
|  | ||||
| |create_date    | ||||
| |timestamp, not null   | ||||
| |служебное поле, дата создания | ||||
|  | ||||
| |edit_date    | ||||
| |timestamp | ||||
| |служебное поле, дата изменения | ||||
|  | ||||
| |created_by    | ||||
| |text, not null    | ||||
| |служебное поле, логин автора записи | ||||
|  | ||||
| |external_type    | ||||
| |text    | ||||
| |служебное поле, логин последнего изменившего сущность | ||||
| |=== | ||||
|  | ||||
|  | ||||
| *Таблица eav_attribute* | ||||
| |=== | ||||
| |Слолбец	|Параметры    |Описание   | ||||
| //---------------------- | ||||
| |id    | ||||
| |bigint, not null   | ||||
| |идентификатор атрибута | ||||
|  | ||||
| |entity_id    | ||||
| |text, not null   | ||||
| |идентификатор сущности eav_entity | ||||
|  | ||||
| |name    | ||||
| |text, not null    | ||||
| |наименование аттрибута | ||||
|  | ||||
| |type    | ||||
| |text    | ||||
| |тип аттрибута | ||||
|  | ||||
| |double    | ||||
| |double   | ||||
| |служебное поле для хранения значения | ||||
|  | ||||
| |long    | ||||
| |bigint  | ||||
| |служебное поле для хранения значения | ||||
|  | ||||
| |text    | ||||
| |text   | ||||
| |служебное поле для хранения значения | ||||
|  | ||||
| |text2    | ||||
| |text    | ||||
| |служебное поле для хранения значения | ||||
|  | ||||
| |=== | ||||
| Before Width: | Height: | Size: 21 KiB | 
| @@ -1,177 +0,0 @@ | ||||
| = Entaxy | ||||
| :imagesdir: . | ||||
| :hardbreaks: | ||||
|  | ||||
| Entaxy - шина, которую можно конфигурировать извне с помощью графического интерфейса или API, состоящая из модулей: | ||||
|  | ||||
| image::Entaxy.png[] | ||||
|  | ||||
| == *Управленческий слой(core):* | ||||
|  | ||||
| === basic-auth | ||||
|  | ||||
| модуль, отвечающий за аутентификацию в шине. Tак же занимается хранением, созданием, редактированием и удалением учетных записей. | ||||
|  | ||||
| xref:core/auth/Authorization.adoc[Более полную информации о basic-auth найдете по этой ссылке] | ||||
|  | ||||
| _Для разработчиков: | ||||
| -имеет Api, который занимается Crud операциями, | ||||
| -хранит учетные записи в базе данных, | ||||
| -предоставляет файл с актуальной информацией для nginx, | ||||
| -выставляет interceptor для аутентификации в других сервисах, | ||||
| -выставляет interceptor для определения принадлежности аккаунта определённой системе._ | ||||
|  | ||||
|  | ||||
| === permission | ||||
|  | ||||
| модуль, отвечающий за управление правами доступа. | ||||
|  | ||||
| xref:core/permission/SOAP-service-Permission-management.adoc[Более полную информации о permission найдете по этой ссылке] | ||||
|  | ||||
| _Для разработчиков: | ||||
| -имеет Api, который занимается Crud операциями | ||||
| - хранит права в базе данных, | ||||
| -(camel)компонент, который используется в маршрутах, для проверки возможности отправки из системы a в систему b. | ||||
| -выставляет interceptor для авторизации в служебных сервисах._ | ||||
|  | ||||
|  | ||||
| === system-management-api | ||||
|  | ||||
| модуль, отвечающий за создание систем и разнообразных коннекторов. (коннекторы бывают разных типов, будет описано далее) | ||||
|  | ||||
| xref:core/system-managment/Users-manual-System-management.adoc[Более полную информации о system-management найдете по этой ссылке] | ||||
|  | ||||
| __Для разработчиков: | ||||
| -имеет Api, который занимается Crud операциями | ||||
| -хранит параметры в базе данных, | ||||
| -генерирует профиля и коннекторы на основе переданных через Api параметров и деплоит их через репозиторий nexus или файловую систему и cellar (блок Deployer) в шину. | ||||
| -также имеет возможность Crud прав доступа над учетными записями систем. | ||||
| __ | ||||
|  | ||||
| === system-registry | ||||
|  | ||||
| модуль, осуществляющий поддержку динамического управления профилями систем(профиль - это отражение параметров системы в шине) | ||||
|  | ||||
| __Для разработчиков: | ||||
| -хранит информацию о системах в базе данных, | ||||
| -(camel)компонент, который используется в маршрутах для определения нужной системы и коннектора для отправки сообщения в нее. | ||||
| __ | ||||
|  | ||||
| === system-group-registry | ||||
|  | ||||
| модуль, осуществляющий поддержку динамического управления группами систем, которые определяют логику отправки в необходимую систему в определенной группе. | ||||
|  | ||||
| __Для разработчиков: | ||||
| -хранит информацию о группах в базе данных, | ||||
| -(camel)компонент, который используется в маршрутах для определения нужной системы из группы. | ||||
| __ | ||||
|  | ||||
| === events | ||||
|  | ||||
| модуль, для работы с топиками(по схеме Publisher (издатель)-Subscriber (подписчик)) для систем. | ||||
|  | ||||
| xref:core/topic/Topic-management-Rest-service.adoc[Более полную информации о events найдете по этой ссылке] | ||||
|  | ||||
| __Для разработчиков: | ||||
| -хранит информацию о топиках в базе данных, | ||||
| -имеет Api(Rest), который занимается Crud операциями | ||||
| __ | ||||
|  | ||||
| === schema | ||||
|  | ||||
| модуль, осуществляющий хранение всех схем, через которые делаются преобразования сообщений, валидация, поднятие сервиса в шине. | ||||
|  | ||||
| xref:core/schema/Schema.adoc[Более полную информации о schema найдете по этой ссылке] | ||||
|  | ||||
| __Для разработчиков: | ||||
| -имеет Api, который занимается Crud операциями | ||||
| -хранит информацию о загруженных схемах в базе данных, | ||||
| -(camel)компонент, который используется в маршрутах для валидации xml через xsd, которую загрузили в бд. | ||||
| -service, который подключается к xslt компоненту для подгрузки xsl из бд | ||||
| -service, который подключается к cxf компоненту для подгрузки xsd и wsdl из бд | ||||
| __ | ||||
|  | ||||
| === bridge | ||||
|  | ||||
| модуль, осуществляющий передачу сообщений в другую шину. | ||||
|  | ||||
| xref:core/bridge/Bridge-Description-and-Configuration.adoc[Более полную информации о bridge найдете по этой ссылке] | ||||
|  | ||||
| __Для разработчиков: | ||||
| -знает о всех подключенных шинах и их именах в рамках всей системы | ||||
| -осуществляет передачу сообщений через artemis, также получает сообщения из другой шины. | ||||
| -в перспективе будет создан компонент который по названию будет определять в какую шину отправить, а не напрямую через очереди, как это сделано сейчас. | ||||
| __ | ||||
|  | ||||
| === Error Handler | ||||
|  | ||||
| модуль, осуществляющий за обработку ошибок в шине. | ||||
|  | ||||
| Централизованный обработчик ошибок для формирования кодов ошибок, их синхронного возврата клиенту и для асинхронного дублирования более подробного описания ошибки (для клиента и для Центральной Базы Интеграции). | ||||
|  | ||||
| xref:core/exception/Centralized-error-handler.adoc[Более полную информации о централизованном обработчике ошибок найдете по этой ссылке] | ||||
|  | ||||
| xref:core/exception/Error-description.adoc[Более полную информации о классификации ошибок найдете по этой ссылке] | ||||
|  | ||||
| __Для разработчиков: | ||||
| -знает о всех подключенных шинах и их именах в рамках всей системы | ||||
| -осуществляет передачу сообщений через artemis, также получает сообщения из другой шины. | ||||
| -в перспективе будет создан компонент, который по названию будет определять в какую шину отправить, а не напрямую через очереди, как это сделано сейчас. | ||||
| __ | ||||
|  | ||||
| === Deployer | ||||
|  | ||||
| набор модулей осуществляющих работу с бандлами | ||||
|  | ||||
| xref:core/deployer/deployer-common.adoc[Более полную информации о Deployer найдете по этой ссылке] | ||||
|  | ||||
| __Для разработчиков: | ||||
| -deployer-api - интерфейс репозитория для хранения артефактов | ||||
| -file-system-deployer - реализация репозитория в папке | ||||
| -nexus-deployer - реализация репозитория в Sonartype Nexus | ||||
| -cellar-deployer - система управления бандлами через Apache Cellar | ||||
| __ | ||||
|  | ||||
| == Также как вспомогательные инструменты используется следующие модули: | ||||
|  | ||||
| _сellar_ - модуль для загрузки сгенерированных blueprint в шину(в несколько карафов). | ||||
| _ignite_ - модуль для создания распределенного хранилища ключ-значение.(используется для более быстрой работы некоторых компонентов, которым нужно хранилище) | ||||
| _liquibase_ - модуль для поддержки актуальной схемы бд. | ||||
|  | ||||
| == Клиентский слой | ||||
|  | ||||
| _US_ - универсальный коннектор, через который можно отправлять сообщения в другие системы. | ||||
| _(делится на обычный и служебный)_ | ||||
| xref:connectors/uniform-exchange-service/uniform-exchange-service.adoc[Универсальный сервис] | ||||
|  | ||||
| _file-connector_ - коннектор, который сообщения для определенной системы отправляет с помощью файла(получая сообщение, проводит необходимые преобразования, нпрм архивацию, и складывает в определенную папку). | ||||
|  | ||||
| _db-connector_ - коннектор, который осуществляет обмен сообщениями с системой через бд. (сообщение полученное из другой системы конвертируется в запись в бд, и для отправки сообщения в шину необходимо сделать запись в бд) | ||||
|  | ||||
| xref:connectors/create_new_connectors.adoc[Информация о создании новых коннекторов] | ||||
|  | ||||
| image::connectors/db-connector/deployment_schema.png[] | ||||
|  | ||||
| _nsi_ - soap коннектор, который был поднят с помощью клиентской wsdl и работает по специальной схеме, определенной клиентом с помощью бд. | ||||
| _big-packets-connector_ - soap коннектор, через который можно отправлять сообщения в другие системы, предназначенный для отправки больших сообщений, которые отправляются по частям. | ||||
|  | ||||
| === Необходимые для шины внешние модули | ||||
|  | ||||
| nginx(опционально) - балансировщик нагрузки, также занимается предварительной аутентификацией. | ||||
| nexus(опционально) - необходим для хранения и динамической развертки блюпринтов. | ||||
| db(поддерживается mssql и postgresql) esb_entaxy - необходима для хранения служебных данных(связанных с настройкой маршрутов в шине). | ||||
| db(поддерживается mssql и postgresql) cache - необходима для хранения временных данных, связанных с определенным сообщением. | ||||
| artemis - брокер сообщений. | ||||
| file-storage(nfs) - необходим для работы сервиса больших пакетов, nginx и тд. | ||||
|  | ||||
| === Схема прохождения пакета | ||||
|  | ||||
| Для разработчиков: | ||||
|  | ||||
| image::connectors/Message.png[] | ||||
|  | ||||
| _Все сообщения отправляемые в шину будут отправляться из входного коннектора в выходную точку профиля._ | ||||
|  | ||||
| Общее описание Entaxy: | ||||
|  | ||||
| xref:core/Common-description-of-the-transport-layer.adoc[Общее описание Entaxy] | ||||
| Before Width: | Height: | Size: 168 KiB | 
| @@ -1,633 +0,0 @@ | ||||
| = Руководство по установке Entaxy | ||||
| :nofooter: | ||||
| :toc: left | ||||
| :toc-title: Содержание | ||||
| :sectnums: | ||||
| :icons: font | ||||
| :title-page: | ||||
| :revnumber: 1.0 | ||||
|  | ||||
| <<< | ||||
|  | ||||
| == Цель руководства | ||||
|  | ||||
| Данное руководство описывает процесс установки системы Entaxy (далее Система) на сервер или рабочую станцию в демонстрационных целях. | ||||
|  | ||||
| <<< | ||||
|  | ||||
| == Требования и замечания | ||||
|  | ||||
| Для установки Системы требуется: | ||||
|  | ||||
| - Установленная на сервер или рабочую станцию операционная система LTS: AstraLinux 2.12 (Orel), RHEL (CentOS), Ubuntu с настроенными репозиториями для установки программного обеспечения, входящего в состав поставки ОС | ||||
| - Созданный в системе пользователь с правами sudo. Под этим пользователем будет производиться установка Системы. Далее по инструкции имя пользователя обозначено как `<username>`. Вместо `<username>` нужно подставить имя пользователя, который будет производить установку. | ||||
| - Опыт работы с Debian/Ubuntu/AstraLinux системами | ||||
|  | ||||
| <<< | ||||
|  | ||||
| == Дистрибутивы программных продуктов | ||||
|  | ||||
| Вместе с инструкцией поставляются все дистрибутивы, необходимые для установки Системы. Их распространение разрешено лицензиями. | ||||
|  | ||||
| Дистрибутивы доступны в каталоге `distrib`. Перед установкой Системы нужно скопировать этот каталог на сервер или рабочую станцию, куда будет производиться установка в каталог `/home/<username>`.  | ||||
|  | ||||
| Вся дальнейшая установка Системы будет производиться из файлов, скопированных в `/home/<username>/distrib` | ||||
|  | ||||
| <<< | ||||
|  | ||||
| == Установка PostgresPro 11 Standard Edition | ||||
|  | ||||
| Система использует СУБД PostgresPro 11 Standard для хранения конфигураций, справочников и т.д. Указанная СУБД входит в Реестр программных продуктов. | ||||
|  | ||||
| Для установки PostgresPro 11 Standard Edition необходимо перейти в каталог с дистрибутивом PostgresPro 11 Standard Edition, и установить пакеты в следующей последовательности: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| cd /home/<username>/distrib/postgrespro-std-11 | ||||
| sudo apt install ./postgrespro-std-11-libs_11.12.1-1.orel_amd64.deb | ||||
| sudo apt install ./postgrespro-std-11-client_11.12.1-1.orel_amd64.deb | ||||
| sudo apt install ./postgrespro-std-11-server_11.12.1-1.orel_amd64.deb | ||||
| sudo apt install ./postgrespro-std-11-contrib_11.12.1-1.orel_amd64.deb | ||||
| sudo apt install ./postgrespro-std-11_11.12.1-1.orel_amd64.deb | ||||
| ---- | ||||
|  | ||||
| При установке последнего пакета производится автоматическая инициализация кластера СУБД, поэтому никаких действий по начальной инициализации PostgresPro 11 Standard Edition производить не требуется. | ||||
|  | ||||
| <<< | ||||
|  | ||||
| == Подготовка СУБД для работы с Entaxy | ||||
|  | ||||
| Перед установкой Системы нужно подготовить СУБД для работы с ней.  | ||||
|  | ||||
| Подготовка заключается в создании пользователя СУБД и создании баз данных. | ||||
|  | ||||
| Для работы с СУБД используется инструмент `psql` с правами администратора. Для запуска инструмента выполнить следующие команды: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo su - postgres | ||||
| psql | ||||
| ---- | ||||
|  | ||||
| После запуска иструмента выполняются следующие действия: | ||||
|  | ||||
| . Создание пользователя: | ||||
| + | ||||
| [source,sql] | ||||
| ---- | ||||
| CREATE USER entaxy WITH ENCRYPTED PASSWORD 'entaxy';  | ||||
| ---- | ||||
| + | ||||
| . Создание баз данных | ||||
| + | ||||
| [source,sql] | ||||
| ---- | ||||
| CREATE DATABASE cache; | ||||
| CREATE DATABASE storage; | ||||
| ---- | ||||
| + | ||||
| . Назначение прав пользователю `entaxy` на только что созданные базы `cache` и `storage`: | ||||
| + | ||||
| [source,sql] | ||||
| ---- | ||||
| GRANT ALL ON DATABASE cache TO entaxy; | ||||
| GRANT ALL ON DATABASE storage TO entaxy; | ||||
| ---- | ||||
|  | ||||
| После создания пользователя и БД выйти из инструмента `psql` с помощью ввода команды `\q` | ||||
|  | ||||
| После выхода из инструмента для работы с PostgresPro 11 Standard Edition `psql` требуется выйти из консоли пользователя `postgres`. Для этого выполнить команду: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| exit | ||||
| ---- | ||||
|  | ||||
| <<< | ||||
|  | ||||
| == Установка OpenJDK 11 | ||||
|  | ||||
| Установка OpenJDK 11 производится в каталог `/opt/openjdk` | ||||
|  | ||||
| Для установки OpenJDK 11 нужно перейти в каталог `/home/<username>/distrib/openjdk`, распаковать дистрибутив OpenJDK 11 в каталог установки и назначить на распакованные файлы права пользователя `root`: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| cd /home/<username>/distrib/openjdk | ||||
| sudo mkdir -p /opt/openjdk | ||||
| sudo tar xvf bellsoft-jdk11.0.11+9-linux-amd64.tar.gz -C /opt/openjdk | ||||
| sudo chown -R root:root /opt/openjdk | ||||
| sudo chmod 755 /opt/openjdk/jdk-11.0.11 | ||||
| ---- | ||||
|  | ||||
| <<< | ||||
|  | ||||
| == Установка и настройка nginx | ||||
|  | ||||
| Для аутентификации пользователей и маршрутизации запросов в Системе используется `nginx`, работающий как реверсивный прокси. | ||||
| Перед настройкой конфигурации `nginx` необходимо его установить командой: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo apt install nginx | ||||
| ---- | ||||
|  | ||||
| Затем удалить конфигурацию nginx по-умолчанию, скопировать предварительно настроенный файл конфигурации `nginx` из каталога `/home/<username>/distrib/nginx/sites-available` в `/etc/nginx/sites-available`, создать символьную ссылку на конфигурацию в каталоге разрешённых конфигураций:  | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo rm -rf /etc/nginx/sites-enabled/default | ||||
| sudo cp /home/<username>/distrib/nginx/sites-available/entaxy.conf /etc/nginx/sites-available | ||||
| sudo ln -s /etc/nginx/sites-available/entaxy.conf /etc/nginx/sites-enabled/entaxy.conf | ||||
| ---- | ||||
|  | ||||
| После установки новой конфигурации и её разрешения, необходимо перезагрузить конфигурацию `nginx` командой: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo nginx -t <1> | ||||
| sudo systemctl reload nginx <2> | ||||
| ---- | ||||
| <1> - валидация конфигурации nginx (если команда вернёт строку `syntax is ok`, то конфигурация валидна) | ||||
| <2> - перезагрузка конфигурации nginx | ||||
|  | ||||
| Затем необходимо создать файл паролей Basic аутентификации `htpasswd` в каталоге `/opt/nginx` | ||||
|  | ||||
| === Управление сервисом nginx | ||||
|  | ||||
| Запуск `nginx` выполняется командой: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo systemctl start nginx | ||||
| ---- | ||||
|  | ||||
| Остановка `nginx` выполняется командой: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo systemctl stop nginx | ||||
| ---- | ||||
|  | ||||
| Перезапуск `nginx` выполняется командой: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo systemctl restart nginx | ||||
| ---- | ||||
|  | ||||
| Перезагрузка конфигурации `nginx` выполняется командой: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo systemctl reload nginx | ||||
| ---- | ||||
|  | ||||
| <<< | ||||
|  | ||||
| == Установка Apache Artemis | ||||
|  | ||||
| Установка Apache Artemis производится в каталог `/opt/artemis` | ||||
|  | ||||
| Для установки Apache Artemis необходимо выполнить следующие шаги: | ||||
|  | ||||
| . Создать пользователя `artemis`, под которым будет работать Artemis. При создании пользователя создаётся домашний каталог пользователя `/opt/artemis`, в котором будет установлен сам Artemis: | ||||
| + | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo useradd -d /opt/artemis -m -r artemis -s /usr/sbin/nologin | ||||
| ---- | ||||
| + | ||||
| . Распаковать дистрибутив Artemis в домашний каталог Artemis и назначить распакованным файлам права пользователя `artemis`: | ||||
| + | ||||
| [source,bash] | ||||
| ---- | ||||
| cd /home/<username>/distrib/artemis | ||||
| sudo tar xvf apache-artemis-2.17.0-bin.tar.gz -C /opt/artemis | ||||
| sudo cp -a /opt/artemis/apache-artemis-2.17.0/. /opt/artemis/ | ||||
| sudo rm -rf /opt/artemis/apache-artemis-2.17.0 | ||||
| sudo chown -R artemis:artemis /opt/artemis | ||||
| ---- | ||||
| + | ||||
| . Создать каталог для брокера: | ||||
| + | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo mkdir -p /opt/artemis/brokers | ||||
| sudo chown artemis:artemis /opt/artemis/brokers | ||||
| ---- | ||||
| + | ||||
| . Создать брокер: | ||||
| + | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo su -s /bin/sh -c \ | ||||
|     "export JAVACMD=/opt/openjdk/jdk-11.0.11/bin/java; \ | ||||
|     export ARTEMIS_HOME=/opt/artemis; \ | ||||
|     /opt/artemis/bin/artemis create \ | ||||
|     --name entaxy-broker \ | ||||
|     --user artemis \ | ||||
|     --password artemis \ | ||||
|     --require-login \ | ||||
|     /opt/artemis/brokers/entaxy-broker" \ | ||||
|     artemis | ||||
| ---- | ||||
| + | ||||
| После выполнения команды создаётся новый брокер в каталоге `/opt/artemis/brokers/entaxy-broker` с именем `entaxy-broker`. Имя брокера задаётся в параметре `--name`. | ||||
| Имя пользователя и пароль для входа в Web консоль брокера задаётся в параметрах `--user` и `--password` соответственно. | ||||
| + | ||||
| . Создать файл сервиса `/etc/systemd/system/entaxy@artemis.service`: | ||||
| + | ||||
| .entaxy-broker@artemis.service | ||||
| [source,bash] | ||||
| ---- | ||||
| [Unit] | ||||
| Description=Artemis ActiveMQ Message Broker | ||||
| After=syslog.target network.target | ||||
|  | ||||
| [Service] | ||||
| Type=forking | ||||
| ExecStart=/opt/artemis/brokers/entaxy-broker/bin/artemis-service start | ||||
| ExecStop=/opt/artemis/brokers/entaxy-broker/bin/artemis-service stop | ||||
|  | ||||
| User=artemis | ||||
| Group=artemis | ||||
|  | ||||
| [Install] | ||||
| WantedBy=multi-user.target | ||||
| ---- | ||||
| + | ||||
| . Отредактировать переменную окружения `JAVA_HOME` для сервиса брокера: | ||||
| + | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo systemctl edit entaxy@artemis.service | ||||
| ---- | ||||
| + | ||||
| При выполнении предыдущей команды откроется текстовый редактор, в который надо добавить следующее содержимое, после чего сохранить файл: | ||||
| + | ||||
| [source,bash] | ||||
| ---- | ||||
| [Service] | ||||
| Environment="JAVA_HOME=/opt/openjdk/jdk-11.0.11" | ||||
| ---- | ||||
|  | ||||
| После создания файла сервиса и определения переменных окружения, выполнить команду | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo systemctl daemon-reload | ||||
| ---- | ||||
|  | ||||
| Выполнение команды перезагрузит конфигурацию `systemd`, и сервис для запуска Artemis станет доступен | ||||
|  | ||||
| Включить автозапуск сервиса Artemis при старте системы: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo systemctl enable entaxy@artemis.service | ||||
| ---- | ||||
|  | ||||
| Запустить брокер Entaxy | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo systemctl start entaxy@artemis.service | ||||
| ---- | ||||
|  | ||||
| === Управление сервисом Apache Artemis | ||||
|  | ||||
| Запуск сервиса брокера `entaxy` выполняется командой: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo systemctl start entaxy@artemis.service | ||||
| ---- | ||||
|  | ||||
| Остановка сервиса брокера `entaxy` выполняется командой: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo systemctl stop entaxy@artemis.service | ||||
| ---- | ||||
|  | ||||
| <<< | ||||
|  | ||||
| == Установка Apache Karaf | ||||
|  | ||||
| Установка Apache Karaf производится в каталог `/opt/karaf` | ||||
|  | ||||
| Для установки Apache Karaf необходимо выполнить следующие шаги: | ||||
|  | ||||
| . Создать пользователя `karaf`, под которым будет работать Karaf. При создании пользователя создаётся домашний каталог пользователя `/opt/karaf`, в котором будет установлен сам Karaf: | ||||
| + | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo useradd -d /opt/karaf -m -r karaf -s /usr/sbin/nologin | ||||
| ---- | ||||
| + | ||||
| . Распаковать дистрибутив Karaf в домашний каталог, и назначить распакованным файлам права пользователя `karaf`: | ||||
| + | ||||
| [source,bash] | ||||
| ---- | ||||
| cd /home/<username>/distrib/karaf | ||||
| sudo tar xvf apache-karaf-4.2.9.tar.gz -C /opt/karaf | ||||
| sudo cp -a /opt/karaf/apache-karaf-4.2.9/. /opt/karaf | ||||
| sudo rm -rf /opt/karaf/apache-karaf-4.2.9 | ||||
| sudo cp /home/<username>/distrib/karaf/jre.properties /opt/karaf/etc/jre.properties | ||||
| sudo chown -R karaf:karaf /opt/karaf | ||||
| ---- | ||||
| + | ||||
| . Отредактировать переменную окружения `JAVA_HOME` для Karaf: | ||||
| + | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo sed -i 's/# export JAVA_HOME/export JAVA_HOME=\/opt\/openjdk\/jdk-11.0.11/g' /opt/karaf/bin/setenv | ||||
| ---- | ||||
| + | ||||
| . Отредактировать переменную окружения `EXTRA_JAVA_OPTS` для Karaf, чтобы устранить возможность эксплуатацию критической уязвимости Log4j CVE-2021-44228: | ||||
| + | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo sed -i 's/# export EXTRA_JAVA_OPTS/export EXTRA_JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true/g' /opt/karaf/bin/setenv | ||||
| ---- | ||||
| + | ||||
| . Создать файл сервиса `/etc/systemd/system/karaf.service` со следующим содержимым: | ||||
| + | ||||
| .karaf.service | ||||
| [source,bash] | ||||
| ---- | ||||
| [Unit] | ||||
| Description=Entaxy Karaf | ||||
| After=syslog.target network.target | ||||
|  | ||||
| [Service] | ||||
| ExecStart=/opt/karaf/bin/karaf start | ||||
| ExecStop=/opt/karaf/bin/karaf stop | ||||
|  | ||||
| User=karaf | ||||
| Group=karaf | ||||
|  | ||||
| SuccessExitStatus=0 143 | ||||
| RestartSec=15 | ||||
| Restart=on-failure | ||||
|  | ||||
| LimitNOFILE=102642 | ||||
|  | ||||
| [Install] | ||||
| WantedBy=multi-user.target | ||||
| ---- | ||||
| + | ||||
| . После создания файла сервиса и определения переменных окружения, выполнить команду: | ||||
| + | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo systemctl daemon-reload | ||||
| ---- | ||||
|  | ||||
| Выполнение команды перезагрузит конфигурацию `systemd`, и сервис для запуска Karaf станет доступен | ||||
|  | ||||
| Включить автозапуск сервиса Karaf при старте системы: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo systemctl enable karaf.service | ||||
| ---- | ||||
|  | ||||
| === Управление сервисом Apache Karaf | ||||
|  | ||||
| Запуск сервиса `karaf` выполняется командой: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo systemctl start karaf.service | ||||
| ---- | ||||
|  | ||||
| Остановка сервиса `karaf` выполняется командой: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo systemctl stop karaf.service | ||||
| ---- | ||||
|  | ||||
| <<< | ||||
|  | ||||
| == Настройка Apache Karaf | ||||
|  | ||||
| Скопируйте файлы конфигурации Entaxy из `/home/<username>/distrib/entaxy/etc` в каталог `/opt/karaf/etc`. Все файлы предварительно настроены для работы всех компонентов на одной машине: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo cp -a /home/<username>/distrib/entaxy/etc/. /opt/karaf/etc | ||||
| sudo chown -R karaf:karaf /opt/karaf/etc | ||||
| ---- | ||||
|  | ||||
| Установочные файлы Системы хранятся в локальном репозитории артефактов. Перед установкой Системы необходимо скопировать локальный репозиторий из каталога `/home/<username>/distrib/entaxy/.m2` в `/opt/karaf`: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo cp /home/<username>/distrib/entaxy/.m2/. /opt/karaf/.m2 | ||||
| sudo chown -R karaf:karaf /opt/karaf/.m2 | ||||
| ---- | ||||
|  | ||||
| После копирования файлов конфигураций и локального репозитория можно запустить сервис `karaf` | ||||
|  | ||||
| <<< | ||||
|  | ||||
| == Подготовка ОС для установки Entaxy | ||||
|  | ||||
| Система в процессе работы использует файловые ресурсы, в которых хранятся передаваемые файлы, пакеты и т.д. Эти ресурсы перед установкой Системы необходимо создать: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo mkdir -p /opt/karaf/bundle-repository | ||||
| sudo mkdir -p /mnt/entaxy/file-connector/message-store | ||||
| sudo mkdir -p /mnt/entaxy/ignite | ||||
| sudo mkdir -p /mnt/entaxy/filestore | ||||
| sudo chown -R karaf:karaf /opt/karaf/bundle-repository | ||||
| sudo chown -R karaf:karaf /mnt/entaxy | ||||
| ---- | ||||
|  | ||||
| <<< | ||||
|  | ||||
| == Установка Entaxy | ||||
|  | ||||
| === Проверка работоспособности Apache Karaf | ||||
|  | ||||
| Установка Entaxy осуществляется из консоли управления Apache Karaf. Чтобы войти в консоль управления Apache Karaf, нужно выполнить в терминале команду: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| ssh -p 8101 karaf@localhost | ||||
| ---- | ||||
|  | ||||
| При первом входе в консоль управления необходимо на запрос предоставления доступа ввести слово `yes` и нажать `Enter` | ||||
| После этого Apache Karaf запросит пароль - в качестве пароля ввести `karaf` | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| Warning: Permanently added '[localhost]:8101' (RSA) to the list of known hosts. | ||||
| Password authentication | ||||
| Password:  | ||||
|         __ __                  ____       | ||||
|        / //_/____ __________ _/ __/       | ||||
|       / ,<  / __ `/ ___/ __ `/ /_         | ||||
|      / /| |/ /_/ / /  / /_/ / __/         | ||||
|     /_/ |_|\__,_/_/   \__,_/_/          | ||||
|  | ||||
|   Apache Karaf (4.2.9) | ||||
|  | ||||
| Hit '<tab>' for a list of available commands | ||||
| and '[cmd] --help' for help on a specific command. | ||||
| Hit 'system:shutdown' to shutdown Karaf. | ||||
| Hit '<ctrl-d>' or type 'logout' to disconnect shell from current session. | ||||
| ---- | ||||
|  | ||||
| Для контроля корректности установки ввести команду `list`:  | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| karaf@root()> list | ||||
| START LEVEL 100 , List Threshold: 50 | ||||
| ID │ State  │ Lvl │ Version │ Name | ||||
| ───┼────────┼─────┼─────────┼──────────────────────────────────────────────── | ||||
| 22 │ Active │  80 │ 4.2.9   │ Apache Karaf :: OSGi Services :: Event | ||||
| karaf@root()> | ||||
| ---- | ||||
|  | ||||
| Если статус компонента `Apache Karaf {two-colons} OSGi Services {two-colons} Event` установлен в состояние `Active`, это значит, что Apache Karaf установлен корректно, и можно переходить к установке Entaxy. | ||||
|  | ||||
| === Установка Entaxy | ||||
|  | ||||
| Установка Entaxy выполняется из консоли управления Apache Karaf. Сначала к списку репозиториев Karaf добавляется репозиторий Entaxy: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| feature:repo-add mvn:ru.entaxy.esb/karaf-features/1.8.1/xml/features | ||||
| ---- | ||||
|  | ||||
| Затем запускается команда установки всех компонентов Entaxy | ||||
| [source,bash] | ||||
| ---- | ||||
| feature:install entaxy-all | ||||
| ---- | ||||
|  | ||||
| После завершения установки Entaxy произойдёт выход из консоли управления Apache Karaf. Это связано с перезапуском встроенного в `Karaf` SSH сервера. Это нормальная ситуация, в процессе установки происходит настройка устанавливаемых компонентов. | ||||
|  | ||||
| === Проверка работоспособности Entaxy | ||||
|  | ||||
| Чтобы проверить корректность установки необходимо вновь зайти в консоль управления Karaf: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| ssh -p 8101 karaf@localhost | ||||
| ---- | ||||
|  | ||||
| В консоли управления ввести команду: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| karaf@root()> list | ||||
| ---- | ||||
|  | ||||
| Отобразится список установленных компонентов Entaxy, и вспомогательных библиотек. Состояние почти всех компонентов должно быть `Active` | ||||
|  | ||||
| Среди компонентов, которые могут не находиться в состоянии `Active` можно выделить два: | ||||
|  | ||||
| - `camel-caffeine-lrucache` может находиться в состоянии `Resolved` | ||||
| - `INTEGRATION {two-colons} ENTAXY {two-colons} DB EXAMPLE CONNECTOR` будет находиться в состоянии `Failure` | ||||
|  | ||||
| Компонент `INTEGRATION {two-colons} ENTAXY {two-colons} DB EXAMPLE CONNECTOR` необходимо отключить командой: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| karaf@root()> bundle:stop <id_компонента> | ||||
| ---- | ||||
|  | ||||
| Например, если идентификатор компонента 97, как показано ниже, | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
|  97 │ Failure  │  80 │ 1.0.0.SNAPSHOT     │ INTEGRATION :: ENTAXY :: DB EXAMPLE CONNECTOR | ||||
| ---- | ||||
|  | ||||
| то команда будет выглядеть так: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| karaf@root()> bundle:stop 97 | ||||
| ---- | ||||
|  | ||||
| После остановки компонент перейдёт в состояние `Resolved` | ||||
|  | ||||
| === Отключение компонента установки Nexus | ||||
|  | ||||
| В процессе своей работы Entaxy генерирует и запускает новые компоненты, например, при создании новой системы, она будет отображаться в Entaxy как отдельный компонент. В момент генерирования и установки нового компонента, производится помещение этого компонента во внешний репозиторий. Это позволяет автоматически переустановить сгенерированные компоненты при добавлении нового узла в кластер Entaxy.  | ||||
| В Entaxy существует два варианта хранения сгенерированных компонентов: | ||||
|  | ||||
| - Sonatype Nexus | ||||
| - Файловая система | ||||
|  | ||||
| По-умолчанию все генерируемые компоненты помещаются в систему управления репозиториями Sonatype Nexus. Это отдельное ПО, целесообразность установки которого оправдана только в кластерных конфигурациях. В нашем случае установка всей системы выполняется на одну машину. | ||||
|  | ||||
| Чтобы сгенерированные компоненты устанавливались в файловую систему, требуется отключить компонент установки сгенерированных компонентов в Sonatype Nexus. Отключение компонента выполняется следующим образом: | ||||
|  | ||||
| . Войти в консоль управления Karaf | ||||
| . Найти идентфикатор компонента `SYSTEM {two-colons} ENTAXY {two-colons} NEXUS {two-colons} DEPLOYER` | ||||
| . Остановить его командой: | ||||
| + | ||||
| [source,bash] | ||||
| ---- | ||||
| karaf@root()> bundle:stop <id_компонента> | ||||
| ---- | ||||
|  | ||||
| <<< | ||||
|  | ||||
| == Настройка обновления файла аутентификации `htpasswd` | ||||
|  | ||||
| В Entaxy используется Basic аутентификация для всех запросов, приходящих на балансировщик, функции которого выполняет `nginx`. Аутентификация производится средствами самого `nginx`. | ||||
|  | ||||
| В качестве базы для хранения пользователей `nginx` использует файл в специальном формате htpasswd. | ||||
|  | ||||
| Для того, чтобы вновь созданные пользователи в Системе могли аутентифицироваться, необходимо передать информацию о них в файл htpasswd. Для этого используется специальный скрипт, который отрабатывает по расписанию. Сам скрипт нужно предварительно скопировать из каталога `/home/<username>/distrib/script/htpasswd-checker.sh` в любой каталог, например, в `/opt/htpasswd-checker`: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo mkdir -p /opt/htpasswd-checker/log | ||||
| sudo cp /home/<username>/distrib/nginx/htpasswd /etc/nginx | ||||
| sudo cp /home/<username>/distrib/script/htpasswd-checker.sh /opt/htpasswd-checker | ||||
| sudo chown -R root:root /opt/htpasswd-checker | ||||
| ---- | ||||
|  | ||||
| Так же требуется проверить адреса серверов кластера, публикующих сервис для работы с файлом htpasswd(сервера с karaf) для ключа KARAF_HOST_NAMES: | ||||
| [source,bash] | ||||
| ---- | ||||
| KARAF_HOST_NAMES=("http://192.168.122.93:9091" "http://192.168.122.94:9091") | ||||
| ---- | ||||
|  | ||||
| Затем создать расписание запуска для `cron`: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| sudo crontab -e | ||||
| ---- | ||||
|  | ||||
| В открывшемся редакторе добавить запись: | ||||
|  | ||||
| [source,bash] | ||||
| ---- | ||||
| * * * * * /opt/htpasswd-checker/htpasswd-checker.sh | ||||
| ---- | ||||
|  | ||||
| и сохранить файл. Теперь скрипт будет отрабатывать каждую минуту, подключаться к сервису аутентификации в Apache Karaf, проверять изменение пользовательской информации, и обновлять файл `/etc/nginx/htpasswd` если информация обновилась. | ||||
|  | ||||
| <<< | ||||
|  | ||||
| == Проверка работоспособности сервисов | ||||
|  | ||||
| Чтобы проверить, что сервисы Entaxy работают, можно провести быстрый тест. | ||||
|  | ||||
| Для этого открыть браузер на машине, где установлена Система, и перейти по адресу `http://localhost:8181/cxf`. Браузер запросит имя пользователя и пароль. Ввести `admin` в качестве имени пользователя, и `admin` в качестве пароля. Логин и пароль уже прописаны в файле `/etc/nginx/htpasswd`. При успешной аутентификации отобразится страница следующего вида: | ||||
|  | ||||
| image::img/services.png[] | ||||
|  | ||||
| На этом установку Системы можно считать законченной. | ||||
| @@ -1,11 +0,0 @@ | ||||
| __Alternative languages:__ | ||||
|  | ||||
| * xref:installation-table-of-contents.ru.adoc[Russian] | ||||
|  | ||||
| = Installation | ||||
| Entaxy have different installation ways OOTB: | ||||
|  | ||||
| * xref:../../distribution/entaxy-docker/ReadMe.md[Development docker installation] | ||||
| * xref:../../features/README.md[Development standalone installation] | ||||
| * xref:install.adoc[Enterprise environment installation] | ||||
| * xref:local-installation/local-installation.adoc[Local installation] | ||||
| @@ -1,11 +0,0 @@ | ||||
| __Alternative languages:__ | ||||
|  | ||||
| * xref:installation-table-of-contents.adoc[English] | ||||
|  | ||||
| = Установка | ||||
| Entaxy из коробки имеет разные варианты установки: | ||||
|  | ||||
| * xref:../../distribution/entaxy-docker/ReadMe.md[Установка для разработки в докер] | ||||
| * xref:../../features/README.ru.md[Установка для разработки отдельных серверных приложений] | ||||
| * xref:install.adoc[Установка на промышленное окружение] | ||||
| * xref:local-installation/local-installation.ru.adoc[Локальная установка] | ||||
| Before Width: | Height: | Size: 5.6 KiB | 
| Before Width: | Height: | Size: 43 KiB | 
| Before Width: | Height: | Size: 95 KiB | 
| Before Width: | Height: | Size: 31 KiB |