Руководство по установке Platform V Exchange Rates#

Основные понятия#

В таблице приведены основные аббревиатуры и сокращения:

Термин

Описание

CPU

Central Processing Unit, центральный процессор

Kafka

Компонент Kafka продукта Platform V Corax

ОТТ

Platform V One-Time-Token. Сервис для выпуска и подтверждения действительности выпущенных ключей

АС

Автоматизированная система

БД

База данных

ЕКПиТ

Единый каталог продуктов и тарифов

ЗНО

Запрос на обслуживание

ОЗУ

Оперативное запоминающее устройство

ОС

Операционная система

ПЖ

Компонент Прикладной журнал продукта Platform V Data Tools

Продукт

Platform V Exchange Rates

Платформа

Набор продуктов Platform V, правообладателем которых является АО "СберТех". Перечень таких продуктов обозначен в документации на конкретный продукт

ТЯ

Технологическое ядро

УЦ

Удостоверяющий центр

Системные требования#

В данном разделе перечислены пререквизиты и требования к окружению для установки программного продукта, в том числе рекомендуемые настройки безопасности окружения. Также представлен перечень внешних продуктов, используемых для установки, настройки и контроля с указанием выполняемых ими функций.

Аппаратные требования#

В качестве клиентской части модуля Продукта используется АРМ, реализуемое по технологии «тонкого» клиента (WEB-интерфейс). Минимальные требования к составу оборудования системного блока типового АРМ по WEB-технологии и их характеристики:

  • процессор — 4x 2.4 Ггц

  • объем оперативной памяти — 2 Гб;

  • сетевая карта;

  • видеокарта — минимум 64 Мб с поддержкой видео режима с глубиной цвета HiColor (65536 цветов);

  • жесткий диск — 120 Гб;

  • мониторы с разрешающей способностью не менее 1024х768 пикселей.

Программные требования#

Требования к ПО:

  • ОС Linux (рекомендован «Альт СП 8»);

  • сервер приложений WildFly 10.1.0.Final;

  • OpenJDK 1.8.

Предусловия#

Подготовка дистрибутива#

В хранилище артефактов находиться 2 части дистрибутивного комплекта: owned и party.

  • Party — содержит набор внешних библиотек.

  • Owned — содержит набор артефактов, относящихся к продукту.

Перед установкой:

  1. Соедините артефакты и опубликуйте.

  2. Разверните в Jenkins job расположенную в owned-дистрибутиве в Package/conf/ buildFullDistrib.groovy.

  3. Кастомизируйте job под свое окружение.

  4. В разделе параметров укажите ссылки на хранилище.

parameters {
    string(name: 'RELEASE_VERSION', description: 'Enter version')
    choice(name: 'NEXUS_URL', 
           choices:[
               "https://xxx.sw.sbc.space/nexus-cd/repository/sbt_PROD",
               "https://sbtnexus.domain.mycompany.ru/nexus",
               "http://mycompany-nexus.maindomain.mycompany.ru/nexus",
           ], 
           description: "" )

    choice(name: 'NEXUS_REPO_ID' , 
           choices: ['sbt_PROD',
                     'Nexus_PROD',
           ],
          description: 'Repo id ex: Nexus_PROD or SERVICE_PACKAGE_snapshot') 
    string(name: 'NEXUS_ARTIFACT_ID', description: 'ArtifactId ex: CI00859822_XXXX_ExchangeRates', defaultValue: 'crtx')
    string(name: 'NEXUS_CREDENTIALS_ID',description: 'You Nexus Credentialid', defaultValue: 'tuz_sbt_ci_crtx')
    string(name: 'MAVEN_JENKINS_SETTINGS_XML', defaultValue: "dc9b4c3c-ccc7-4372-a8ee-b63a58ffe50c", description: "settings xml by upload distrib" )
    string(name: 'NEXUS_GROUP_ID', defaultValue: "sbt_PROD.CI90000071_crtx.3g", description: "group_id" )
    // distrib
    string(name: 'OWNED_DISTR_URL', description: 'Nexus url by owner distrib')
    string(name: 'PARTY_DISTR_URL', description: 'Nexus url by party distrib')
    booleanParam( defaultValue: true,description: 'NO_UPLOAD_NEXUS',name: 'NO_UPLOAD_NEXUS')
}

  1. Задайте метку Jenkins agent, который существует в окружении.

Пример заполненных параметров

Перед установкой Продукта убедитесь, что выполнены все следующие условия:

  1. Обязательной установке подлежат:

    • Linux-сервер (рекомендован Альт 8 СП) со средой виртуализации с приложений WildFly;

    • Две базы данных:

      • База данных для приложения. Создайте схему в СУБД на базе PostgreSQL.

      • В дистрибутиве (Owned) находится набор файлов для создания структуры базы данных (в папке db).

      • Для запуска скриптов потребуется java8, библиотека liquibase не ниже версии 3.8.7 и драйвер базы данных.

Пример вызова скрипта командного вызова SQL-скрипта инициализации схемы базы данных

liquibase --url='${url}' --username=${} --password='${password}'--changeLogFile= /db/changelog.xml --logLevel=info update -Dtablespace_t=${tablespace_t}  -Dtablespace_i=${tablespace_i} i -Dtablespace_l=${tablespace_l}  -Drole=${roleName} -Duser_name=${username}

где,

  • переменная url — это путь к базе данных в формате JDBS;

  • changeLogFile — путь к скриптам базы данных.

    • Передайте параметры табличных пространств ${tablespace_i} ${tablespace_t}, ${tablespace_l}.

    • Передайте роль и имя пользователя владельца схемы ${roleName}, ${username}.

  • База данных справочников, выполняющая контракт API для справочников Продукта.

  1. Опциональная установка следующих компонентов, производится по усмотрению потребителя:

  • установлен компонент Platform V One-Time-Token;

  • установлен компонент Прикладной журнал продукта Platform V Data Tools;

  • установлен компонент Аудит продукта Platform V Audit SE;

  • установлен компонент Журналирование продукта Platform V Monitor.

  • БД ЕКПиТ, предоставляющая структуру данных и метаданные, которые необходимы для визуализации на UI. Для продукта потребуется пользователь и пароль с правами на чтение (предполагается, что все действия по инициализации схемы данных пользователя были сделаны заранее, а также таблицы в БД не пустые).

Установка#

Ручная установка#

Установка конфигурацией WildFly#

Установка описана для окружения WildFly. Для того чтобы сконфигурировать WildFly: Создайте проект в каталоге WF /usr/WF/WF_CV/bin/standalone.conf (путь может изменяться).

Установка Продукта описывает конфигурацию с использованием опциональных параметров.

Важно! Для запуска приложения нужен файл seap-lib-deps-3.5.1.ear, который содержит в себе необходимые платформенные зависимости.

Список системных свойств описан далее по тексту system-properties.

Ниже приведены параметры конфигурации для WildFly Продукта:

This file is optional; it may be removed if not needed.


GC_OPT="-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1MixedGCCountTarget=6 -XX:ParallelGCThreads=8 -XX:ConcGCThreads=2"


 Specify the maximum file descriptor limit, use "max" or "maximum" to use
the default, as queried by the system.

 Defaults to "maximum"

MAX_FD="maximum"


 Specify the profiler configuration file to load.

 Default is to not load profiler configuration file.

PROFILER=""


 Specify the location of the Java home directory.  If set then $JAVA will
 be defined to $JAVA_HOME/bin/java, else $JAVA will be "java".

JAVA_HOME="/opt/java/jdk"


 Specify the exact Java VM executable to use.

JAVA=""

if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; then
   JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman"
fi

 Uncomment the following line to prevent manipulation of JVM options
 by shell scripts.

PRESERVE_JAVA_OPTS=true
if [ "x$JBOSS_MODULEPATH" = "x" ]; then
   JBOSS_MODULEPATH="$JBOSS_HOME/modules:$JBOSS_HOME/standalone/lib/ext"
fi

 Specify options to pass to the Java VM.

if [ "x$JAVA_OPTS" = "x" ]; then

JAVA_OPTS="-server"
JAVA_OPTS="$JAVA_OPTS -Xms10g"
JAVA_OPTS="$JAVA_OPTS -Xmx10g"
JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
JAVA_OPTS="$JAVA_OPTS -XX:MaxGCPauseMillis=2000"
JAVA_OPTS="$JAVA_OPTS -XX:+ScavengeBeforeFullGC"
JAVA_OPTS="$JAVA_OPTS -XX:+AlwaysPreTouch"
JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC"
JAVA_OPTS="$JAVA_OPTS -XX:InitiatingHeapOccupancyPercent=30"
JAVA_OPTS="$JAVA_OPTS -XX:G1HeapRegionSize=32m"
JAVA_OPTS="$JAVA_OPTS -XX:+UnlockDiagnosticVMOptions"
JAVA_OPTS="$JAVA_OPTS -XX:+UnlockExperimentalVMOptions"
JAVA_OPTS="$JAVA_OPTS -XX:+UseGCLogFileRotation"
JAVA_OPTS="$JAVA_OPTS -XX:NumberOfGCLogFiles=30"
JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=30M"
JAVA_OPTS="$JAVA_OPTS -XX:-OmitStackTraceInFastThrow"
JAVA_OPTS="$JAVA_OPTS -XX:+LogVMOutput"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintFlagsFinal"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGC"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDateStamps"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCTimeStamps"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCApplicationConcurrentTime"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCApplicationStoppedTime"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintAdaptiveSizePolicy"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintTenuringDistribution"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintClassHistogramAfterFullGC"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintClassHistogramBeforeFullGC"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS"
 OASP
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError"
JAVA_OPTS="$JAVA_OPTS -XX:HeapDumpPath=$JBOSS_HOME/standalone/log"
JAVA_OPTS="$JAVA_OPTS -Xloggc:$JBOSS_HOME/standalone/log/gc_memory.log"
JAVA_OPTS="$JAVA_OPTS -Djava.io.tmpdir=/logs/WF/ "
JAVA_OPTS="$JAVA_OPTS -Disparallel=true"
JAVA_OPTS="$JAVA_OPTS -Djava.library.path=$JBOSS_HOME/standalone/lib/ext"
JAVA_OPTS="$JAVA_OPTS -Djboss.as.management.blocking.timeout=3600"
JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
JAVA_OPTS="$JAVA_OPTS -Dnetworkaddress.cache.ttl=-1"
JAVA_OPTS="$JAVA_OPTS -Dhttps.protocols=TLSv1.2"
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
JAVA_OPTS="$JAVA_OPTS -Dsecurity.disabled=true"


JAVA_OPTS="$JAVA_OPTS -Dlog4j.formatMsgNoLookups=true"

else
   echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS"
fi

 Sample JPDA settings for remote socket debugging
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend

Далее в файле standalone.conf необходимо сконфигурировать приложение. Список системных свойств описан далее по тексту system-properties.


<?xml version='1.0' encoding='UTF-8'?>

<server xmlns="urn:jboss:domain:9.0">
    <extensions>
        <extension module="org.jboss.as.clustering.infinispan"/>
        <extension module="org.jboss.as.connector"/>
        <extension module="org.jboss.as.deployment-scanner"/>
        <extension module="org.jboss.as.ee"/>
        <extension module="org.jboss.as.ejb3"/>
        <extension module="org.jboss.as.jaxrs"/>
        <extension module="org.jboss.as.jdr"/>
        <extension module="org.jboss.as.jmx"/>
        <extension module="org.jboss.as.jpa"/>
        <extension module="org.jboss.as.jsf"/>
        <extension module="org.jboss.as.logging"/>
        <extension module="org.jboss.as.mail"/>
        <extension module="org.jboss.as.naming"/>
        <extension module="org.jboss.as.pojo"/>
        <extension module="org.jboss.as.remoting"/>
        <extension module="org.jboss.as.sar"/>
        <extension module="org.jboss.as.security"/>
        <extension module="org.jboss.as.transactions"/>
        <extension module="org.jboss.as.webservices"/>
        <extension module="org.jboss.as.weld"/>
        <extension module="org.wildfly.extension.batch.jberet"/>
        <extension module="org.wildfly.extension.bean-validation"/>
        <extension module="org.wildfly.extension.core-management"/>
        <extension module="org.wildfly.extension.discovery"/>
        <extension module="org.wildfly.extension.ee-security"/>
        <extension module="org.wildfly.extension.elytron"/>
        <extension module="org.wildfly.extension.io"/>
        <extension module="org.wildfly.extension.microprofile.config-smallrye"/>
        <extension module="org.wildfly.extension.microprofile.health-smallrye"/>
        <extension module="org.wildfly.extension.microprofile.metrics-smallrye"/>
        <extension module="org.wildfly.extension.microprofile.opentracing-smallrye"/>
        <extension module="org.wildfly.extension.request-controller"/>
        <extension module="org.wildfly.extension.security.manager"/>
        <extension module="org.wildfly.extension.undertow"/>
    </extensions>
    <system-properties>
        <property name="group.id" value="zone0"/>
        <property name="config-store@jdbc.login" value="configurator"/>
        <property name="config-store@jdbc.url" value="jdbc:postgresql://10.255.29.183:5432/cfg"/>
        <property name="si.zone.id" value="zone0"/>
	<property name="config-store@jdbc.password" value="<fake_fake_fake>"/>
        <property name="custodian.channel.authenticationEnabled" value="false"/>
        <property name="config-store.disabled" value="false"/>
	<property name="config-store@crypto.password" value="<fake_fake_fake>"/>
        <property name="custodian.logger.baseDir" value="/opt/xxxx/logs/mon"/>
        <property name="custodian.channel.jmx.port" value="1098"/>
        <property name="custodian.safeModeEnabled" value="false"/>
        <property name="custodian.logger.level" value="INFO"/>
        <property name="custodian.channel.jmx.accumulationEnabled" value="false"/>
        <property name="platform-commons@access.dev-mode" value="false"/>
        <property name="platform-commons@monitoring.enabled" value="false"/>
        <property name="configurator-ui@ldapSearchLoginAttr" value="sAMAccountName"/>
        <property name="configurator@rmi.envelope.serviceName" value="Envelope"/>
        <property name="configurator@db.url" value="jdbc:postgresql://10.255.29.183:5432/cfg"/>
        <property name="configurator@db.username" value="configurator"/>
        <property name="transport-kafka@kafka.bootstrap.servers" value="10.255.29.215:9092"/>
        <property name="configurator-ui@ldapDnPattern" value="cn={0},ou=users"/>
        <property name="configurator@rmi.config.port" value="51501"/>
        <property name="custodian-distr-impl@RuntimeParams[GROUP]/custodian.channel.kafka.ssl.enabled" value="false"/>
        <property name="configurator-ui@ad.auth" value="false"/>
        <property name="platform-commons@sudir-enabled" value="false"/>
        <property name="configurator@rmi.envelope.port" value="51502"/>
        <property name="configurator-ui@ldapDomain" value="maindomain.mycompany.ru"/>
        <property name="configurator-ui@roleGroupLevels1Plus2Enable" value="true"/>
        <property name="node.id" value="wf_${jboss.node.name}"/>
	<property name="configurator-ui@ldapBindPassword" value="<fake_fake_fake>"/>
        <property name="configurator@rmi.config.serviceName" value="Configurator"/>
	<property name="configurator-ui@initial.admin.password" value="<fake_fake_fake>"/>
        <property name="configurator-ui@ldapBaseDN" value="DC=ca,DC=mycompany,DC=ru"/>
        <property name="logger@config.zookeeper.host" value="10.255.29.215:2181"/>
        <property name="custodian-distr-impl@RuntimeParams[GROUP]/custodian.channel.authenticationEnabled" value="false"/>
        <property name="message-dispatcher@service.coordination.zookeeper.hosts" value="10.255.29.215:2181"/>
	<property name="configurator@db.password" value="<fake_fake_fake>"/>
        <property name="configurator-ui@ldapUrl" value="ldap://10.67.2.128:389"/>
        <property name="message-dispatcher@kafka.producer.acks" value="1"/>
        <property name="configurator-ui@ldapSearchResultLimit" value="300"/>
        <property name="audit2-client@kafka.producer.bootstrap.servers" value="10.255.29.215:9092"/>
        <property name="transport-kafka@service.coordination.zookeeper.hosts" value="10.255.29.215:2181"/>
        <property name="transport-kafka@kafka.admin.zookeeper.hosts" value="10.255.29.215:2181"/>
        <property name="audit2-client@buffer.maxSize" value="2000000"/>
        <property name="message-dispatcher@kafka.bootstrap.servers" value="10.255.29.215:9092"/>
        <property name="logger@context.dev.mode" value="true"/>
        <property name="custodian-distr-impl@Selfcheck[GROUP]/custodian.selfcheck.logger.level" value="info"/>
        <property name="transport-kafka@kafka.producer.acks" value="1"/>
	<property name="configurator@crypto.password" value="<fake_fake_fake>"/>
        <property name="configurator-ui@roleGroupLevels1Plus1Enable" value="true"/>
        <property name="configurator-ui@ldapSearchFullNameAttr" value="displayName"/>
        <property name="configurator-ui@ldapSearchObjClassPrefix" value="&amp;(objectClass=Person)(objectClass=user)"/>
        <property name="configurator-ui@ldapSearchUrl" value="ldap://10.67.2.128:389"/>
        <property name="audit2-client@mockMode" value="true"/>
    </system-properties>

<management>
	    <security-realms>
            <security-realm name="ManagementRealm">
                <authentication>
                    <local default-user="$local" skip-group-loading="true"/>
                    <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
                </authentication>
                <authorization map-groups-to-roles="false">
                    <properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
                </authorization>
            </security-realm>
            <security-realm name="ApplicationRealm">
                <server-identities>
                    <ssl>
			    <keystore path="application.keystore" relative-to="jboss.server.config.dir" keystore-password="<fake_fake_fake>" alias="server" key-password="<fake_fake_fake>" generate-self-signed-certificate-host="localhost"/>
                    </ssl>
                </server-identities>
                <authentication>
                    <local default-user="$local" allowed-users="*" skip-group-loading="true"/>
                    <properties path="application-users.properties" relative-to="jboss.server.config.dir"/>
                </authentication>
                <authorization>
                    <properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
                </authorization>
            </security-realm>
        </security-realms>
        <audit-log>
            <formatters>
                <json-formatter name="audit-formatter" compact="true" date-format="yyyy-MM-dd HH:mm:ss,SSS" escape-control-characters="true" escape-new-line="true"/>
            </formatters>
            <handlers>
                <size-rotating-file-handler name="file-rotate" formatter="audit-formatter" path="audit-log.log" relative-to="jboss.server.log.dir" rotate-size="100m" max-backup-index="1"/>
            </handlers>
            <logger log-boot="true" log-read-only="true" enabled="true">
                <handlers>
                    <handler name="file-rotate"/>
                </handlers>
            </logger>
        </audit-log>
        <management-interfaces>
            <http-interface security-realm="ManagementRealm">
                <http-upgrade enabled="true"/>
                <socket-binding http="management-http"/>
            </http-interface>
        </management-interfaces>
        <access-control provider="rbac">
            <role-mapping>
                <role name="SuperUser">
                    <include>
                        <user name="$local"/>
                        <user name="wfadmin"/>
                    </include>
                </role>
                <role name="Monitor">
                    <include>
                        <user name="dev-crtx"/>
                    </include>
                </role>
            </role-mapping>
        </access-control>
    </management>
    <profile>
        <subsystem xmlns="urn:jboss:domain:logging:6.0">
            <console-handler name="CONSOLE">
                <level name="INFO"/>
                <formatter>
                    <named-formatter name="COLOR-PATTERN"/>
                </formatter>
            </console-handler>
            <size-rotating-file-handler name="FILE" rotate-on-boot="true">
                <level name="INFO"/>
                <formatter>
                    <named-formatter name="PATTERN"/>
                </formatter>
                <file relative-to="jboss.server.log.dir" path="server.log"/>
                <rotate-size value="100m"/>
                <max-backup-index value="5"/>
            </size-rotating-file-handler>
            <logger category="com.arjuna">
                <level name="WARN"/>
            </logger>
            <logger category="io.jaegertracing.Configuration">
                <level name="WARN"/>
            </logger>
            <logger category="org.jboss.as.config">
                <level name="DEBUG"/>
            </logger>
            <logger category="sun.rmi">
                <level name="WARN"/>
            </logger>
            <root-logger>
                <level name="INFO"/>
                <handlers>
                    <handler name="CONSOLE"/>
                    <handler name="FILE"/>
                </handlers>
            </root-logger>
            <formatter name="PATTERN">
                <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
            </formatter>
            <formatter name="COLOR-PATTERN">
                <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
            </formatter>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:batch-jberet:2.0">
            <default-job-repository name="in-memory"/>
            <default-thread-pool name="batch"/>
            <job-repository name="in-memory">
                <in-memory/>
            </job-repository>
            <thread-pool name="batch">
                <max-threads count="10"/>
                <keepalive-time time="30" unit="seconds"/>
            </thread-pool>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:bean-validation:1.0"/>
        <subsystem xmlns="urn:jboss:domain:core-management:1.0"/>
        <subsystem xmlns="urn:jboss:domain:datasources:5.0">
            <datasources>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</password>
                    </security>
                </datasource>
                <xa-datasource jndi-name="java:/jdbc/currency" pool-name="currency" enabled="true" use-ccm="true">
                    <xa-datasource-property name="URL">
                        jdbc:postgresql://10.23.20.27:6544/crtxift1?prepareThreshold=0
                    </xa-datasource-property>
                    <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
                    <driver>postgresql</driver>
                    <xa-pool>
                        <is-same-rm-override>false</is-same-rm-override>
                        <no-tx-separate-pools>true</no-tx-separate-pools>
                    </xa-pool>
                    <security>
                        <user-name>currency_rates_appl</user-name>
			<password>fake_fake_fake</password>
                    </security>
                </xa-datasource>
                <xa-datasource jndi-name="java:/jdbc/currencyStandIn" pool-name="currencySI" enabled="true" use-ccm="true">
                    <xa-datasource-property name="URL">
                        jdbc:postgresql://10.23.20.27:6544/crtxift1?prepareThreshold=0
                    </xa-datasource-property>
                    <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
                    <driver>postgresql</driver>
                    <xa-pool>
                        <is-same-rm-override>false</is-same-rm-override>
                        <no-tx-separate-pools>true</no-tx-separate-pools>
                    </xa-pool>
                    <security>
                        <user-name>currency_rates_appl</user-name>
                        <password>fake_fake_fake</password>
                    </security>
                </xa-datasource>
                <xa-datasource jndi-name="java:/jdbc/ekpit" pool-name="ekpit" enabled="true" use-ccm="true">
                    <xa-datasource-property name="URL">
                        jdbc:oracle:thin:@10.23.64.47:1521:EKPT_IFT
                    </xa-datasource-property>
                    <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
                    <driver>oracle</driver>
                    <xa-pool>
                        <is-same-rm-override>false</is-same-rm-override>
                        <no-tx-separate-pools>true</no-tx-separate-pools>
                    </xa-pool>
                    <security>
                        <user-name>EKPIT_APPL</user-name>
                        <password>fake_fake_fake</password>
                    </security>
                </xa-datasource>
                <xa-datasource jndi-name="java:/jdbc/ekpitStandIn" pool-name="ekpitSI" enabled="true" use-ccm="true">
                    <xa-datasource-property name="URL">
                        jdbc:oracle:thin:@10.23.64.47:1521:EKPT_IFT
                    </xa-datasource-property>
                    <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
                    <driver>oracle</driver>
                    <xa-pool>
                        <is-same-rm-override>false</is-same-rm-override>
                        <no-tx-separate-pools>true</no-tx-separate-pools>
                    </xa-pool>
                    <security>
                        <user-name>EKPIT_APPL</user-name>
                        <password>fake_fake_fake</password>
                    </security>
                </xa-datasource>
                <drivers>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                    <driver name="oracle" module="com.oracle">
                        <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
                    </driver>
                    <driver name="postgresql" module="org.postgresql">
                        <driver-class>org.postgresql.Driver</driver-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0">
            <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" runtime-failure-causes-rollback="${jboss.deployment.scanner.rollback.on.failure:false}"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:discovery:1.0"/>
        <subsystem xmlns="urn:jboss:domain:ee:4.0">
            <global-modules>
                <module name="org.zeromq.jzmq" slot="main"/>
            </global-modules>
            <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>
            <concurrent>
                <context-services>
                    <context-service name="default" jndi-name="java:jboss/ee/concurrency/context/default" use-transaction-setup-provider="true"/>
                </context-services>
                <managed-thread-factories>
                    <managed-thread-factory name="default" jndi-name="java:jboss/ee/concurrency/factory/default" context-service="default"/>
                </managed-thread-factories>
                <managed-executor-services>
                    <managed-executor-service name="default" jndi-name="java:jboss/ee/concurrency/executor/default" context-service="default" hung-task-threshold="60000" keepalive-time="5000"/>
                </managed-executor-services>
                <managed-scheduled-executor-services>
                    <managed-scheduled-executor-service name="default" jndi-name="java:jboss/ee/concurrency/scheduler/default" context-service="default" hung-task-threshold="60000" keepalive-time="3000"/>
                </managed-scheduled-executor-services>
            </concurrent>
            <default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:ee-security:1.0"/>
        <subsystem xmlns="urn:jboss:domain:ejb3:5.0">
            <session-bean>
                <stateless>
                    <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
                </stateless>
                <stateful default-access-timeout="5000" cache-ref="simple" passivation-disabled-cache-ref="simple"/>
                <singleton default-access-timeout="5000"/>
            </session-bean>
            <pools>
                <bean-instance-pools>
                    <strict-max-pool name="mdb-strict-max-pool" derive-size="from-cpu-count" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
                    <strict-max-pool name="slsb-strict-max-pool" derive-size="from-worker-pools" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
                </bean-instance-pools>
            </pools>
            <caches>
                <cache name="simple"/>
                <cache name="distributable" passivation-store-ref="infinispan" aliases="passivating clustered"/>
            </caches>
            <passivation-stores>
                <passivation-store name="infinispan" cache-container="ejb" max-size="10000"/>
            </passivation-stores>
            <async thread-pool-name="default"/>
            <timer-service thread-pool-name="default" default-data-store="default-file-store">
                <data-stores>
                    <file-data-store name="default-file-store" path="timer-service-data" relative-to="jboss.server.data.dir"/>
                </data-stores>
            </timer-service>
            <remote connector-ref="http-remoting-connector" thread-pool-name="default">
                <channel-creation-options>
                    <option name="READ_TIMEOUT" value="${prop.remoting-connector.read.timeout:20}" type="xnio"/>
                    <option name="MAX_OUTBOUND_MESSAGES" value="1234" type="remoting"/>
                </channel-creation-options>
            </remote>
            <thread-pools>
                <thread-pool name="default">
                    <max-threads count="10"/>
                    <keepalive-time time="100" unit="milliseconds"/>
                </thread-pool>
            </thread-pools>
            <default-security-domain value="other"/>
            <default-missing-method-permissions-deny-access value="true"/>
            <log-system-exceptions value="true"/>
        </subsystem>
        <subsystem xmlns="urn:wildfly:elytron:5.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
            <providers>
                <aggregate-providers name="combined-providers">
                    <providers name="elytron"/>
                    <providers name="openssl"/>
                </aggregate-providers>
                <provider-loader name="elytron" module="org.wildfly.security.elytron"/>
                <provider-loader name="openssl" module="org.wildfly.openssl"/>
            </providers>
            <audit-logging>
                <file-audit-log name="local-audit" path="audit.log" relative-to="jboss.server.log.dir" format="JSON"/>
            </audit-logging>
            <security-domains>
                <security-domain name="ApplicationDomain" default-realm="ApplicationRealm" permission-mapper="default-permission-mapper">
                    <realm name="ApplicationRealm" role-decoder="groups-to-roles"/>
                    <realm name="local"/>
                </security-domain>
                <security-domain name="ManagementDomain" default-realm="ManagementRealm" permission-mapper="default-permission-mapper">
                    <realm name="ManagementRealm" role-decoder="groups-to-roles"/>
                    <realm name="local" role-mapper="super-user-mapper"/>
                </security-domain>
            </security-domains>
            <security-realms>
                <identity-realm name="local" identity="$local"/>
                <properties-realm name="ApplicationRealm">
                    <users-properties path="application-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ApplicationRealm"/>
                    <groups-properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
                </properties-realm>
                <properties-realm name="ManagementRealm">
                    <users-properties path="mgmt-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ManagementRealm"/>
                    <groups-properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
                </properties-realm>
            </security-realms>
            <mappers>
                <simple-permission-mapper name="default-permission-mapper" mapping-mode="first">
                    <permission-mapping>
                        <principal name="anonymous"/>
                        <permission-set name="default-permissions"/>
                    </permission-mapping>
                    <permission-mapping match-all="true">
                        <permission-set name="login-permission"/>
                        <permission-set name="default-permissions"/>
                    </permission-mapping>
                </simple-permission-mapper>
                <constant-realm-mapper name="local" realm-name="local"/>
                <simple-role-decoder name="groups-to-roles" attribute="groups"/>
                <constant-role-mapper name="super-user-mapper">
                    <role name="SuperUser"/>
                </constant-role-mapper>
            </mappers>
            <permission-sets>
                <permission-set name="login-permission">
                    <permission class-name="org.wildfly.security.auth.permission.LoginPermission"/>
                </permission-set>
                <permission-set name="default-permissions">
                    <permission class-name="org.wildfly.extension.batch.jberet.deployment.BatchPermission" module="org.wildfly.extension.batch.jberet" target-name="*"/>
                    <permission class-name="org.wildfly.transaction.client.RemoteTransactionPermission" module="org.wildfly.transaction.client"/>
                    <permission class-name="org.jboss.ejb.client.RemoteEJBPermission" module="org.jboss.ejb-client"/>
                </permission-set>
            </permission-sets>
            <http>
                <http-authentication-factory name="management-http-authentication" security-domain="ManagementDomain" http-server-mechanism-factory="global">
                    <mechanism-configuration>
                        <mechanism mechanism-name="DIGEST">
                            <mechanism-realm realm-name="ManagementRealm"/>
                        </mechanism>
                    </mechanism-configuration>
                </http-authentication-factory>
                <provider-http-server-mechanism-factory name="global"/>
            </http>
            <sasl>
                <sasl-authentication-factory name="application-sasl-authentication" sasl-server-factory="configured" security-domain="ApplicationDomain">
                    <mechanism-configuration>
                        <mechanism mechanism-name="JBOSS-LOCAL-USER" realm-mapper="local"/>
                        <mechanism mechanism-name="DIGEST-MD5">
                            <mechanism-realm realm-name="ApplicationRealm"/>
                        </mechanism>
                    </mechanism-configuration>
                </sasl-authentication-factory>
                <sasl-authentication-factory name="management-sasl-authentication" sasl-server-factory="configured" security-domain="ManagementDomain">
                    <mechanism-configuration>
                        <mechanism mechanism-name="JBOSS-LOCAL-USER" realm-mapper="local"/>
                        <mechanism mechanism-name="DIGEST-MD5">
                            <mechanism-realm realm-name="ManagementRealm"/>
                        </mechanism>
                    </mechanism-configuration>
                </sasl-authentication-factory>
                <configurable-sasl-server-factory name="configured" sasl-server-factory="elytron">
                    <properties>
                        <property name="wildfly.sasl.local-user.default-user" value="$local"/>
                    </properties>
                </configurable-sasl-server-factory>
                <mechanism-provider-filtering-sasl-server-factory name="elytron" sasl-server-factory="global">
                    <filters>
                        <filter provider-name="WildFlyElytron"/>
                    </filters>
                </mechanism-provider-filtering-sasl-server-factory>
                <provider-sasl-server-factory name="global"/>
            </sasl>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:infinispan:7.0">
            <cache-container name="server" default-cache="default" module="org.wildfly.clustering.server">
                <local-cache name="default">
                    <transaction mode="BATCH"/>
                </local-cache>
            </cache-container>
            <cache-container name="web" default-cache="passivation" module="org.wildfly.clustering.web.infinispan">
                <local-cache name="passivation">
                    <locking isolation="REPEATABLE_READ"/>
                    <transaction mode="BATCH"/>
                    <file-store passivation="true" purge="false"/>
                </local-cache>
            </cache-container>
            <cache-container name="ejb" aliases="sfsb" default-cache="passivation" module="org.wildfly.clustering.ejb.infinispan">
                <local-cache name="passivation">
                    <locking isolation="REPEATABLE_READ"/>
                    <transaction mode="BATCH"/>
                    <file-store passivation="true" purge="false"/>
                </local-cache>
            </cache-container>
            <cache-container name="hibernate" module="org.infinispan.hibernate-cache">
                <local-cache name="entity">
                    <transaction mode="NON_XA"/>
                    <object-memory size="10000"/>
                    <expiration max-idle="100000"/>
                </local-cache>
                <local-cache name="local-query">
                    <object-memory size="10000"/>
                    <expiration max-idle="100000"/>
                </local-cache>
                <local-cache name="timestamps"/>
            </cache-container>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:io:3.0">
            <worker name="default"/>
            <buffer-pool name="default"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/>
        <subsystem xmlns="urn:jboss:domain:jca:5.0">
            <archive-validation enabled="true" fail-on-error="true" fail-on-warn="false"/>
            <bean-validation enabled="true"/>
            <default-workmanager>
                <short-running-threads>
                    <core-threads count="50"/>
                    <queue-length count="50"/>
                    <max-threads count="50"/>
                    <keepalive-time time="10" unit="seconds"/>
                </short-running-threads>
                <long-running-threads>
                    <core-threads count="50"/>
                    <queue-length count="50"/>
                    <max-threads count="50"/>
                    <keepalive-time time="10" unit="seconds"/>
                </long-running-threads>
            </default-workmanager>
            <cached-connection-manager/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:jdr:1.0"/>
        <subsystem xmlns="urn:jboss:domain:jmx:1.3">
            <expose-resolved-model/>
            <expose-expression-model/>
            <remoting-connector/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:jpa:1.1">
            <jpa default-datasource="" default-extended-persistence-inheritance="DEEP"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:jsf:1.1"/>
        <subsystem xmlns="urn:jboss:domain:mail:3.0">
            <mail-session name="default" jndi-name="java:jboss/mail/Default">
                <smtp-server outbound-socket-binding-ref="mail-smtp"/>
            </mail-session>
        </subsystem>
        <subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0"/>
        <subsystem xmlns="urn:wildfly:microprofile-health-smallrye:1.0" security-enabled="false"/>
        <subsystem xmlns="urn:wildfly:microprofile-metrics-smallrye:1.0" security-enabled="false" exposed-subsystems="*"/>
        <subsystem xmlns="urn:jboss:domain:naming:2.0">
            <remote-naming/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:pojo:1.0"/>
        <subsystem xmlns="urn:jboss:domain:remoting:4.0">
            <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:request-controller:1.0"/>
        <subsystem xmlns="urn:jboss:domain:resource-adapters:5.0"/>
        <subsystem xmlns="urn:jboss:domain:sar:1.0"/>
        <subsystem xmlns="urn:jboss:domain:security:2.0">
            <security-domains>
                <security-domain name="other" cache-type="default">
                    <authentication>
                        <login-module code="Remoting" flag="optional">
                            <module-option name="password-stacking" value="useFirstPass"/>
                        </login-module>
                        <login-module code="RealmDirect" flag="required">
                            <module-option name="password-stacking" value="useFirstPass"/>
                        </login-module>
                    </authentication>
                </security-domain>
                <security-domain name="jboss-web-policy" cache-type="default">
                    <authorization>
                        <policy-module code="Delegating" flag="required"/>
                    </authorization>
                </security-domain>
                <security-domain name="jaspitest" cache-type="default">
                    <authentication-jaspi>
                        <login-module-stack name="dummy">
                            <login-module code="Dummy" flag="optional"/>
                        </login-module-stack>
                        <auth-module code="Dummy"/>
                    </authentication-jaspi>
                </security-domain>
                <security-domain name="jboss-ejb-policy" cache-type="default">
                    <authorization>
                        <policy-module code="Delegating" flag="required"/>
                    </authorization>
                </security-domain>
            </security-domains>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:security-manager:1.0">
            <deployment-permissions>
                <maximum-set>
                    <permission class="java.security.AllPermission"/>
                </maximum-set>
            </deployment-permissions>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:transactions:5.0">
            <core-environment node-identifier="${jboss.tx.node.id:1}">
                <process-id>
                    <uuid/>
                </process-id>
            </core-environment>
            <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
            <object-store path="tx-object-store" relative-to="jboss.server.data.dir"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:undertow:8.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
            <buffer-cache name="default"/>
            <server name="default-server">
                <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
                <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
                <host name="default-host" alias="localhost">
                    <location name="/" handler="welcome-content"/>
                    <http-invoker security-realm="ApplicationRealm"/>
                </host>
            </server>
            <servlet-container name="default">
                <jsp-config/>
                <websockets/>
            </servlet-container>
            <handlers>
                <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
            </handlers>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:webservices:2.0">
            <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>
            <endpoint-config name="Standard-Endpoint-Config"/>
            <endpoint-config name="Recording-Endpoint-Config">
                <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
                    <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
                </pre-handler-chain>
            </endpoint-config>
            <client-config name="Standard-Client-Config"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:weld:4.0"/>
    </profile>
    <interfaces>
        <interface name="management">
            <inet-address value="${jboss.bind.address.management:0.0.0.0}"/>
        </interface>
        <interface name="public">
            <inet-address value="${jboss.bind.address:0.0.0.0}"/>
        </interface>
    </interfaces>
    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
        <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
        <socket-binding name="http" port="${jboss.http.port:8080}"/>
        <socket-binding name="https" port="${jboss.https.port:8443}"/>
        <socket-binding name="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
        <outbound-socket-binding name="mail-smtp">
            <remote-destination host="localhost" port="25"/>
        </outbound-socket-binding>
    </socket-binding-group>
    <deployments>
        <deployment name="platform-commons-war" runtime-name="platform-commons-war-3.3.4.war">
            <content sha1="c3ba2f62c8bccbd2e7e9b56f6e6b3e7da0f5be3a"/>
        </deployment>
        <deployment name="seap-lib-deps" runtime-name="seap-lib-deps-3.5.1.ear">
            <content sha1="3131ebc004d9b9516b3e837a13030cf7fa90d5e0"/>
        </deployment>
        <deployment name="audit2-client-platform" runtime-name="audit2-client-platform-4.0.6.war">
            <content sha1="98d28fdc525bf7e188cd11a7853b38af55d39699"/>
        </deployment>
        <deployment name="audit2-wildfly-agent" runtime-name="audit2-wildfly-agent-4.0.6.war">
            <content sha1="ff5bce35e480882f544651e3ae71cc485bdfbff6"/>
        </deployment>
        <deployment name="access_platform_client_ear" runtime-name="access_platform_client_ear-4.2.0.ear">
            <content sha1="cd2634a290afc9df7a01011d416213cedd6010f4"/>
        </deployment>
        <deployment name="logger-platform" runtime-name="logger-platform-3.7.2.war">
            <content sha1="7d77297a5e527b983ea7f5044768d8ce8a5dce43"/>
        </deployment>
        <deployment name="custodian-distr-impl-ear" runtime-name="custodian-distr-impl-ear-4.0.0.ear">
            <content sha1="b765335f9b52c996d5db4033460241d262cebcc1"/>
        </deployment>
        <deployment name="transport-md-wf-web" runtime-name="transport-md-wf-web-6.1.0.war">
            <content sha1="bc8c8d1c770bc0cc5189aeb1e4b0706809421c3c"/>
        </deployment>
        <deployment name="transport-platform-api-web" runtime-name="transport-platform-api-web-6.1.0.war">
            <content sha1="b11718ae2707e2096625e002cd0fb26606b56a33"/>
        </deployment>
        <deployment name="com-sbt-ott-api-client-war" runtime-name="com-sbt-ott-api-client-war-4.1.10.war">
            <content sha1="bd183fc9865fdb9585990c35d851e3f5b0686258"/>
        </deployment>
        <deployment name="currency-rates" runtime-name="currency-rates-war-XXX.war">
            <content sha1="70c4d9f24107ce571a4b394d7b9663a797901848"/>
        </deployment>
    </deployments>


Необходимые компоненты для корректной установки Platform V Exchange Rates

Для корректной установки Продукта требуется наличие следующих компонентов:

<dependencies>
    <module name="org.dom4j"/>
    <module name="deployment.custodian-distr-impl-ear.ear" services="import" optional="true"/>
    <module name="deployment.dpl-lite-ear-${version}.ear" meta-inf="import" optional="true"/>
    <module name="deployment.seap-lib-${version}.ear" meta-inf="import" services="import" optional="true" />
</dependencies>

Seap_lip

Для того, чтобы выполнить установку Seap_lip:

  1. Скопируйте файл seap-lib*.ear, расположенный в party-дистрибутиве, в папке lib-overlay на сервер WildFly.

  2. Выполните разархивацию.

unzip -q seap-lib*.ear -d <your seap-lib dir >
  1. В распакованной директории выдайте разрешение на исполнение к файлам с расширением sh.

chmod +x ${SEAP_LIB_DIR}/*.sh
  1. Убедитесь, что в окружении заведен env JBOSS_HOME. В случае отсутствия добавьте, пример: export JBOSS_HOME=/opt/wildfly.

  2. Вызовите скрипт.

create-overlay.sh
  1. В результате чего произойдет добавление библиотек в wildfly.

  2. Подключите зависимости в инсталляцию приложения.

. jboss-cli.sh --connect --command="deployment-overlay link --name=seap-lib-<version>--deployments=<имя инсталляции приложения, пример: currency-rates-war >

Подробное описание — в документации WildFly.

Установка продукта с помощью install_eip (опциональный способ)#

  1. Подготовьте инструменты install_eip.

  2. Используйте git, в котором расположены конфигурации стенда, хранилище артефактов.

  3. Используйте Jenkins c подготовленным инструментом Install_eip. Продукт Platform V Configurator который настроен на сервере с WildFly.

  4. В Git-репозитории заведите параметры согласно настройкам install_eip.

Пререквизитом для установки Продукта является установка и настройка следующих модулей:

  • Platform V Configuration;

  • интеграционный модуль;

  • логгер;

  • метрики.

Кроме того, необходимо, чтобы было настроено Единое Информационное Пространство.

Настройка сервера приложений для работы с БД, back-часть Конфигуратора#

Для того чтобы Продукт загружал конфигурационные настройки системных модулей back-части и свои бизнес-параметры, пропишите в настройках сервера приложений параметры подключения к БД модуля back-части Конфигуратор. При этом сам модуль Конфигуратор должен быть заранее установлен, выполнены все скрипты БД, входящие в состав дистрибутива модуля back-части Конфигуратора (в том числе и скрипты, создающие пользователя для чтения конфигурационных параметров). Заведите 5 свойств:

Название

Значение (пример)

Описание

config-store@jdbc.url

jdbc:postgresql:thin:@10.68.24.101:1521:FILTERS

URL для подключения к БД Конфигуратора

config-store@jdbc.login

CONFIG_READER

Логин пользователя с правами на чтение схемы Конфигуратора

config-store@jdbc.password

CONFIG_READER

Пароль пользователя с правами на чтение схемы Конфигуратора

config-store@crypto.password

123456

Ключ для шифрования пароля. Обязательно должен совпадать со значение ключа crypto.password Конфигуратора (задается при установке конфигуратора)

node.id

sbt-oabs-356

Идентификатор сервера для межмодульного транспорта

Настройка клиента OTT#

Чтобы настроить клиента OTT на использование полученного сертификата OTT Service, необходимо задать параметры:

Параметр

Описание

Пример

ott.trust.store.path

Путь к хранилищу, содержащему сертификат OTT Service

/etc/xxxx/ott/ott_truststore.p12

ott.trust.store.pwd

Пароль от хранилища, содержащего сертификат OTT Service. При получении сертификата задавался в параметре <password>

<здесь ваш пароль от хранилища ключей>

ott.service.cert.alias

Alias сертификата OTT Service в хранилище

ott−service

ott.certstore.type=PKCS12

Тип хранилища (PKCS12 или JKS)

PKCS12

Для получения приватной части сертификата:

  1. Администратор прикладного модуля: выполняет генерацию ключевой пары в p12−контейнере.

    keytool −genkey −keyalg EC −sigalg SHA256withECDSA −keystore ${module_id}.p12 −storetype PKCS12 −keysize 256 −dname "CN=${module_id}" −alias ${module_id}
    

    Версия JDK

    Рекомендуется использовать версию JDK не ниже 1.8

  2. Администратор прикладного модуля: формирует запрос на сертификат.

    keytool −certreq −keyalg EC −sigalg SHA256withECDSA −keystore ${module_id}.p12 −storetype PKCS12 −alias ${module_id} > ${module_id}_cert_req.pem
    

    В результате выполнения данной команды создастся файл CSR− ${module_id}_cert_req.pem , который необходимо передать Администратору OTT в заявке на генерацию сертификата для модуля. В заявке указать, что сертификат должен быть сгенерирован из приложенного запроса по данной инструкции.

  3. Администратор OTT: выписывает сертификат.

    ./ejbcawsracli.sh certreq %{module_id} "CN=%{module_id}" NULL PlatformCA_EC XXXXModule %{module_id}_cert_req.pem PKCS10 PEM NONE
    

    В результате выполнения данной команды будет создан файл с сертификатом− %{module_id}.pem, который необходимо передать Администратору прикладного модуля.

  4. Администратор OTT: вместе с сертификатом модуля передает сертификат УЦ OTT PlatformCA_EC.pem. CN=PlatformCA_EC
    CA certificate: Download as PEM

  5. Администратор прикладного модуля: импортирует сертификат УЦ OTT и сертификат модуля в keystore, созданный на 1 шаге (строго в указанном порядке).

    keytool −import −keystore ${module_id}.p12 −storetype PKCS12 −file PlatformCA_EC.pem −alias PlatformCA_EC
    keytool −import −keystore ${module_id}.p12 −storetype PKCS12 −file ${module_id}.pem −alias ${module_id}
    
  6. После выполнения шагов должно быть два файла (необязательно с такими именами):

    1. ott_service_truststore.p12 − публичная часть (truststore);

    2. pricing−service.p12 − приватная часть (keystore).

Создание источников данных#

В конфигурационном файле WildFly/standalone/configuration/standalone.xml пропишите драйвер для подключения к БД, в секцию <datasources> для <subsystem xmlns="urn:jboss:domain:datasources:4.0">.

<drivers>
<driver name="postgresql" module="org.postqres">
  <driver-class>org.postqresql.Driver</driver-class>
</driver>
</drivers>

Источник для Exchange Rates:

<xa-datasource jndi-name="java:/jdbc/currency" pool-name="currencyDS" enabled="true" use-ccm="true">
<xa-datasource-property name="URL">
jdbc:postgresql:thin:@10.122.238.45:1521:db18
</xa-datasource-property>
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
<driver>postgresql</driver>
<xa-pool>
<is-same-rm-override>false</is-same-rm-override>
<no-tx-separate-pools>true</no-tx-separate-pools>
</xa-pool>
<security>
<user-name>CURRENCY_RATES_APPL</user-name>
<password>123456</password>
</security>
</xa-datasource>

Обязательные параметры:

Название

Описание

jndiNameCurrency

JNDI имя источника данных

ownerSchemaCurrency

Имя владельца схемы, если отличается от текущего пользователя

Необязательные параметры:

Название

Описание

pj.disabled

Отправка в ПЖ отключена

jndiNameEkpit

JNDI-имя источника данных схемы ЕКПиТ

jndiNameEkpitStandIn

JNDI-имя источника данных схемы ЕКПиТ StandIn

ownerSchemaEkpit

Имя схемы владельца сущностей ЕКПиТ

jndiNameCurrencyRates

JNDI-имя источника данных схемы Курсов валют

jndiNameCurrencyRatesStandIn

JNDI-имя источника данных схемы Курсов валют StandIn

ownerSchemaCurrencyRates

Имя схемы владельца сущностей КВ

showSql

Добавление выполненных запросов в логи

saverApi.threadPoolSize

Размер пула потоков, используемого при сохранении распоряжений. При значении 0 размер пула равен двойному количеству ядер процессоров

saverApi.queueSize

Длина очереди для хранения распоряжений перед сохранением

saverApi.monitorDelay

Периодичность логирования параметров пула для сохранения распоряжений. Значение 0 отключает мониторинг

useNsi

Использование НСИ Фасада

nsiApiTimeout

Pначение timeout обращения в НСИ Фасад (в милисекундах)

pprbac.gf.shutdown.maxpoolsize

Максимальный размер пула выключения всех API-серверов

pprbac.gf.shutdown.timeout

Timeout, в течении которого выполняется ожидание выключения всех API-северов

loadCbRatesHistory

Загружать исторические курсы Центрального банка из дистрибутива

audit.url

URL для Rest API аудита

currency.rates.executorService.poolSize

Размер пула потоков, используемого executorService-ом. При значении 0 размер пула равен двойному количеству ядер процессоров

currency.rates.executorService.queueSize

Длина очереди для executorService

node_name

Имя node

cacheClearingSchedule

Расписание автоматической очистки кеша

Пароль для подключения к базе данных должен храниться в зашифрованном виде в системе управления секретами и тиражироваться инструментами централизованного развертывания. В конфигурации приложения (Hyperic или platform-config.properties) необходимо указать, если они отличаются от принятых по умолчанию, следующие параметры:

Название

Значение (пример)

Описание

jndiNameCurrency

CURRENCY_RATES

JNDI-имя источника данных

ownerSchemaCurrency

CURRENCY_RATES

Имя владельца схемы, если отличается от текущего пользователя

В случае, если предусматривается работа в режиме StandIn, то необходимо добавить следующие параметры:

Название

Значение (пример)

Описание

jndiNameCurrencyRatesStandIn

java:/jdbc/currencyStandIn

JNDI-имя источника данных

Работа Продукта в режиме StandIn#

Для работы модуля курсов валют в режиме StandIn необходимо:

  • задать JVM-свойство -Dpj.disabled=false;

  • обеспечить наличие DS (источники данных) на сервере приложений (WildFly) для схемы КВ и ЕКПиТ;

  • задать параметр в конфигураторе, для имени DS ЕКПиТ и Exchange Rates, которые были добавлены в сервер приложений, если имена отличаются от тех, что есть по умолчанию: java:/jdbc/currencyStandIn, соответственно свойство jndiNameCurrencyRatesStandIn.

Установка приложений#

Перед установкой приложений необходимо установить seap-lib. Для корректной работы модуля курсов валют необходим overlay — seap-lib-8.1. Установка приложений представляет собой стандартный деплой *.war файла на сервер приложений: Продукт — currency-rates-war-<номер версии>.war

Модули могут быть установлены в любом порядке.

Конфигурация приложения#

  • pricing-rates-config-struct.xml

    • файл конфигурации Модуля Распространения Курсов (для импорта Конфигуратора back-часть)

Конфигурация Продуктов. Список артефактов

Наименование элемента

Тип элемента

Значение в конфигураторе

pjenabled

boolean

true

jndiNameEkpit

string

Java:/jbdc/ekpit

jndiNameEkpitStandIn

string

Java:/jbdc/ekpitStandIn

ownerSchemaEkpit

string

EKPIT

jndiNameCurrencyRates

string

Java:/jbdc/currency

jndiNameCurrencyRatesStandIn

string

Java:/jbdc/currencyStandIn

ownerSchemaCurrencyRates

string

CURRENCY_RATES

SHOWsQL

boolean

false

Мониторинг работы приложения#

Описание метрик#

Продукт сообщает компоненту Журналирование (LOGA) продукта Platform V Monitor метрики, имеющие следующее содержание:

Имя

ID

Содержание

Метрика контроля доступности модуля currency-rates

currency-rates.availability

Осуществляет отправку сведений о доступности модуля

Информация о версии модуля currency-rates

currency-rates.version

Сообщает номер последней установленной версии модуля, дату сборки, узел и время старта

Метрика-счетчик количества вызовов методов класса

currency-rates.methodCounter

Сообщает о вызове методов класса

Метрика-таймер времени выполнения методов

currency-rates.methodExecution

Сообщает время выполнения метода

Обновление#

Обновление осуществляется так же, как первоначальная установка: запускается задача установки с параметром updateMode равным fullInstall. В процедуру установки включен процесс обновления базы данных с помощью утилиты liquibase. Установку новой версии продукта необходимо осуществлять согласно описанным шагам в разделе Установка текущего документа. Дополнительных настроек не требуется.

Проверка работоспособности#

Для проверки корректности работоспособности web-интерфейса продукта:

  1. Успешно войти в АРМ продукта под пользователем, которому назначена определенная роль.

  2. Перейти по всем разделам Sidebar продукта и убедиться, что при переходе отсутствуют ошибки.

Работоспособность Продукта определяется:

  • видимостью на консоли, что приложение Wildfly запущено;

  • отсутствием критичных ошибок в логах.

Откат#

Автоматической процедуры отката нет.

Для отката необходимо выполнить установку предыдущей стабильной версии в соответствии с инструкцией, пункт Установка дистрибутива текущего документа.

Часто встречающиеся проблемы и пути их устранения#

В данном разделе собраны наиболее частые проблемы и описаны пути их устранения.

Проблема

Причина

Способ устранения

Загрузка конфигурационных элементов

Некорректная загрузка

Просмотреть логи на наличие ошибок

При накате скриптов Liquibase

Обратиться в команду разработки

При деплое Продукта

Обратиться к администраторам Wildfly

Чек-лист валидации установки#

После установки необходимо проверить:

  • для проекта в WildFly создались объекты приложений.

  • логи на отсутствие ошибок.