Руководство по установке 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 — содержит набор артефактов, относящихся к продукту.
Перед установкой:
Соедините артефакты и опубликуйте.
Разверните в Jenkins job расположенную в owned-дистрибутиве в Package/conf/ buildFullDistrib.groovy.
Кастомизируйте job под свое окружение.
В разделе параметров укажите ссылки на хранилище.
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')
}
Задайте метку Jenkins agent, который существует в окружении.
Пример заполненных параметров

Перед установкой Продукта убедитесь, что выполнены все следующие условия:
Обязательной установке подлежат:
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 для справочников Продукта.
Опциональная установка следующих компонентов, производится по усмотрению потребителя:
установлен компонент 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="&(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:
Скопируйте файл seap-lib*.ear, расположенный в party-дистрибутиве, в папке lib-overlay на сервер WildFly.
Выполните разархивацию.
unzip -q seap-lib*.ear -d <your seap-lib dir >
В распакованной директории выдайте разрешение на исполнение к файлам с расширением sh.
chmod +x ${SEAP_LIB_DIR}/*.sh
Убедитесь, что в окружении заведен env JBOSS_HOME. В случае отсутствия добавьте, пример: export JBOSS_HOME=/opt/wildfly.
Вызовите скрипт.
create-overlay.sh
В результате чего произойдет добавление библиотек в wildfly.
Подключите зависимости в инсталляцию приложения.
. jboss-cli.sh --connect --command="deployment-overlay link --name=seap-lib-<version>--deployments=<имя инсталляции приложения, пример: currency-rates-war >
Подробное описание — в документации WildFly.
Установка продукта с помощью install_eip (опциональный способ)#
Подготовьте инструменты install_eip.
Используйте git, в котором расположены конфигурации стенда, хранилище артефактов.
Используйте Jenkins c подготовленным инструментом Install_eip. Продукт Platform V Configurator который настроен на сервере с WildFly.
В Git-репозитории заведите параметры согласно настройкам install_eip.
Пререквизитом для установки Продукта является установка и настройка следующих модулей:
Platform V Configuration;
интеграционный модуль;
логгер;
метрики.
Кроме того, необходимо, чтобы было настроено Единое Информационное Пространство.
Настройка сервера приложений для работы с БД, back-часть Конфигуратора#
Для того чтобы Продукт загружал конфигурационные настройки системных модулей back-части и свои бизнес-параметры, пропишите в настройках сервера приложений параметры подключения к БД модуля back-части Конфигуратор. При этом сам модуль Конфигуратор должен быть заранее установлен, выполнены все скрипты БД, входящие в состав дистрибутива модуля back-части Конфигуратора (в том числе и скрипты, создающие пользователя для чтения конфигурационных параметров). Заведите 5 свойств:
Название |
Значение (пример) |
Описание |
|---|---|---|
config-store@jdbc.url |
|
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 |
Для получения приватной части сертификата:
Администратор прикладного модуля: выполняет генерацию ключевой пары в 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
Администратор прикладного модуля: формирует запрос на сертификат.
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 в заявке на генерацию сертификата для модуля. В заявке указать, что сертификат должен быть сгенерирован из приложенного запроса по данной инструкции.
Администратор OTT: выписывает сертификат.
./ejbcawsracli.sh certreq %{module_id} "CN=%{module_id}" NULL PlatformCA_EC XXXXModule %{module_id}_cert_req.pem PKCS10 PEM NONEВ результате выполнения данной команды будет создан файл с сертификатом− %{module_id}.pem, который необходимо передать Администратору прикладного модуля.
Администратор OTT: вместе с сертификатом модуля передает сертификат УЦ OTT PlatformCA_EC.pem. CN=PlatformCA_EC
CA certificate: Download as PEMАдминистратор прикладного модуля: импортирует сертификат УЦ 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}После выполнения шагов должно быть два файла (необязательно с такими именами):
ott_service_truststore.p12 − публичная часть (truststore);
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-интерфейса продукта:
Успешно войти в АРМ продукта под пользователем, которому назначена определенная роль.
Перейти по всем разделам Sidebar продукта и убедиться, что при переходе отсутствуют ошибки.
Работоспособность Продукта определяется:
видимостью на консоли, что приложение Wildfly запущено;
отсутствием критичных ошибок в логах.
Откат#
Автоматической процедуры отката нет.
Для отката необходимо выполнить установку предыдущей стабильной версии в соответствии с инструкцией, пункт Установка дистрибутива текущего документа.
Часто встречающиеся проблемы и пути их устранения#
В данном разделе собраны наиболее частые проблемы и описаны пути их устранения.
Проблема |
Причина |
Способ устранения |
|---|---|---|
Загрузка конфигурационных элементов |
Некорректная загрузка |
Просмотреть логи на наличие ошибок |
При накате скриптов Liquibase |
— |
Обратиться в команду разработки |
При деплое Продукта |
— |
Обратиться к администраторам Wildfly |
Чек-лист валидации установки#
После установки необходимо проверить:
для проекта в WildFly создались объекты приложений.
логи на отсутствие ошибок.