Версия 1.14.1
Авторские права © 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 ООО "Открытые библиотечные системы"
В данном документе приведены общие сведения о компонентах серверной части AБИС "Руслан-Нео" . Описаны порядок настройки и проверки компонентов, дополнительные возможности.
Серверная часть "Руслан-Нео" предназначена для обеспечения доступа удалённых пользователей к ресурсам АБИС "Руслан-Нео". Удалёнными пользователями могут являться любые пользователи сервера приложений WildFly , на базе которого функционирует АБИС. Ресурсами АБИС "Руслан-Нео" являются коллекции записей (БД) и собственно записи, поддерживаемые сервером "Руслан-Нео". Доступ к ресурсам заключается в выполнении над ними следующих операций:
Операции, связанные с чтением данных с ограниченным доступом и записью данных, требуют наличия соответствующих прав у пользователя, а следовательно и идентификации пользователя. Идентификация пользователя осуществляется при помощи провайдера идентификации по протоколу SAML 2.0.
Ресурсы хранятся в хранилище данных и представляются в двух форматах: XML и JSON, в зависимости от предпочтений пользователя.
Программы серверной части могут функционировать на любых технических средствах под управлением сервера приложений WildFly версии 10.*.
Обязательными требованиями для выполнения программ серверной части являются:
наличие установленного статического модуля WildFly PicketLink версии 2.7.0.Final
наличие установленного статического модуля WildFly ModeShape версии 5.4.0.Final
После установки сервера WildFly необходимо убедиться в том, что установленный статический модуль PicketLink имеет версию 2.7.0.Final. При необходимости следует обновить этот модуль .
Сведения, изложенные в этом разделе, отражены в составе статических модулей специально подготовленного дистрибутива WildFly . Этот дистрибутив, а также сервер Solr включены в конфигурацию виртуальной машины на базе дистрибутива CentOS .
Серверная часть "Руслан-Нео" состоит из следующих компонентов:
jrzs-ear*.ear
-
Z39.50-клиент, реализованный в виде
EJB.
ridp*.war
- провайдер идентификации.
rneo.ear
- Базовые сервисы
"Руслан-Нео"
, включая Web-интерфейс ресурсов.
rneo-sip-acs-rar-*.rar
- Адаптер ресурсов, поддерживающий взаимодействие по протоколу 3M™ SIP v. 2.00.
rneo-ztarget-rar-*.rar
- Адаптер ресурсов, поддерживающий взаимодействие по протоколу Z39.50.
Установка программы заключается в развёртывании компонентов программы на сервере приложений WildFly.
Необходимым условием для развёртывания базовых сервисов является развёртывание адаптеров ресурсов.
Настройка сервера приложений может быть осуществлена посредством
редактирования конфигурационного файла
standalone-modeshape.xml
.
Сведения, изложенные в этом разделе, отражены в соотв. конфигурационном файле и составе статических модулей специально подготовленного дистрибутива WildFly . Его можно взять за основу и внести изменения, необходимые для настройки на конкретные условия применения (в частности, указать логины/пароли для подключения к источникам данных СУБД, LDAP).
В конфигурацию сервера приложений WildFly требуется включить как минимум один источник данных, предназначенный для хранения ресурсов Руслан-Нео. Следует обратить внимание на то, что настройка источника данных предусматривает установку JDBC драйвера СУБД, которая будет использоваться для хранения данных. Подойдёт любая СУБД, поддерживающая транзакции.
Если планируется миграция данных из АБИС "Руслан", то потребуется установка JDBC драйвера Oracle и определение источника библиотечных данных Руслан, из которого будет осуществляться миграция данных.
Требуемые JDBC драйверы желательно устанавливать как статические модули WildFly.
Пример результата настройки источников библиотечных данных, отражённого в конфигурационном файле сервера приложений WildFly, приведён в Приложении 1.
Атрибут jta
в определении источника данных
должен иметь значение false
.
В качестве хранилища используется репозиторий контента (
JCR)
ModeShape, который устанавливается в виде
статического модуля
WildFly. Хранилище определяется в конфигурационном файле
standalone-modeshape.xml
в разделе подсистемы
ModeShape. Данные могут храниться как на файловой системе, так и в
источниках
данных
СУБД. Рекомендуется использование
СУБД. Пример описания репозитория, включающий определение необходимых для работы индексов, приведён в
Приложении 1.
При первом запуске WilfFly определения индексов для хранилища следует закомментировать и включить их при последующих запусках WildFly.
В
подсистему безопасности сервера приложений
WildFly
необходимо добавить два домена безопасности с именами
modeshape-security
и
sp
. Первый используется провайдером идентификации, второй -
Web-интерфейсом ресурсов и другими серверными компонетами
АБИС
"Руслан-Нео".
Аутентификацию в домене безопасности
modeshape-security
необходимо настроить с использованием любого подходящего модуля
входа.
Именно этот домен безопасности будет использоваться при
идентификации
пользователей
АБИС
"Руслан-Нео"
любых категорий. Выбор модуля входа осуществляется в зависимости
от
выбранного механизма хранения учётных данных пользователей.
Таким образом, одним из первоочередных вопросов, требующих
решения при
установке
АБИС
"Руслан-Нео", является вопрос выбора механизма хранения учётных данных
пользователей.
АБИС
"Руслан-Нео"
обеспечивает полный цикл управления учётными данными
пользователей (не
только аутентификация, но и создание, удаление,
модификация учётных
записей) только для механизмов хранения,
использующих
реляционные
БД
или службы
LDAP.
При необходимости осуществления аутентификации с использованием нескольких источников (в т.ч. и разнородных), в конфигурацию домена безопасности можно включить несколько экземпляров модулей входа с различными параметрами. Настройки должны обеспечивать определение ролей пользователя, а также атрибута, указывающего на принадлежность пользователя к организации (сигла библиотеки) - см. Домены безопасности.
Аутентификацию в домене безопасности
sp
необходимо настроить с использованием модуля входа
SAML2
(класс
org.picketlink.identity.federation.bindings.wildfly.SAML2LoginModule
).
Пример результата настройки доменов безопасности, отражённого в конфигурационном файле сервера приложений WildFly, приведён в Приложении 1.
В АБИС "Руслан-Нео" определены следующие роли пользователей:
Таблица 3-1. Роли пользователей АБИС "Руслан-Нео"
Роль | Описание |
---|---|
ruslan-admin
| Администратор с наивысшими полномочиями (создание/удаление БД, миграция данных и т.д.). При создании БД, эта роль автоматически получает все полномочия по отношению к этой БД. |
ruslan-circ
| Обычный пользователь с полномочиями по отношению к ресурсам АБИС, определяемыми списками контроля доступа для этих ресурсов. Носитель этой роли автоматически получает все полномочия по отношению к записям, отражающим запросы на бронирование от читателей. |
ruslan-user
| Обычный пользователь с полномочиями по отношению к ресурсам АБИС, определяемыми списками контроля доступа для этих ресурсов. |
admin
| Администратор репозитория. |
readwrite
| Пользователь репозитория с правами записи и чтения данных. |
readonly
| Пользователь репозитория с правом чтения данных. |
connect
| Пользователь репозитория с правом доступа к интерфейсу WebDAV ModeShape. |
Анонимный пользователь автоматически получает роль readonly
.
Следует иметь в виду, что при помощи указанных ролей осуществляется грубая обобщённая настройка прав доступа. Тонкая настройка прав доступа осуществляется при помощи списков контроля доступа, относящихся к конкретным ресурсам.
Указанные роли создаются автоматически в случае отсутствия соответствующих записей в используемом механизме хранения.
Также для нормальной работы серверной части в используемом домене безопасности требуется наличие учётной записи системного пользователя,
входящего в группы ruslan-admin
, admin
, readwrite
и connect
.
При необходимости такую учётную запись следует создать. Эта учётная запись создаётся автоматически в случае отсутствия учётных записей
в используемом механизме хранения.
Для успешного восстановления пакетных заданий (например, миграция данных из
АБИС "Руслан") после сбоев,
подсистему пакетных заданий следует настроить таким образом, чтобы состояние выполнения пакетных
заданий фиксировалось в постоянной памяти. В качестве такого механизма можно использовать
источник данных СУБД, выделенный для хранилища данных
или отдельный источник данных. Для этого в конфигурации подсистемы
batch-jberet
в standalone-modeshape.xml
следует определить хранилище с
именем dbb
и использующим источник данных СУБД:
<subsystem xmlns="urn:jboss:domain:batch-jberet:1.0"> ... <job-repository name="dbb"> <jdbc data-source="neo"/> </job-repository> ... </subsystem>
Следует обратить внимание на то, что JNDI-имя источника данных в этом случае приводится в краткой форме.
В конфигурации подсистемы очередей сообщений messaging-activemq
в standalone-modeshape.xml
следует определить как минимум следующие очереди сообщений
CreateUpdateRecordTopic
, HoldExpirationTopic
,
WSOperationsTopic
и OverdueTopic
:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0"> <server name="default"> ... <jms-topic name="CreateUpdateRecordTopic" entries="java:/jms/topic/ruslan/createUpdateRecord java:jboss/exported/jms/topic/ruslan/createUpdateRecord"/> <jms-topic name="HoldExpirationTopic" entries="java:/jms/topic/ruslan/holdExpiration java:jboss/exported/jms/topic/ruslan/holdExpiration"/> <jms-topic name="WSOperationsTopic" entries="java:/jms/topic/ruslan/wsOperations java:jboss/exported/jms/topic/ruslan/wsOperations"/> <jms-topic name="OverdueTopic" entries="java:/jms/topic/ruslan/overdue java:jboss/exported/jms/topic/ruslan/overdue"/> ... </server> </subsystem>
Следует обратить внимание на то, что JNDI-имя источника данных в этом случае приводится в краткой форме.
В качестве хранилища данных таймеров рекомендуется использовать источник данных СУБД:
<subsystem xmlns="urn:jboss:domain:ejb3:4.0"> ... <timer-service thread-pool-name="default" default-data-store="db-store"> <data-stores> <file-data-store name="default-file-store" path="timer-service-data" relative-to="jboss.server.data.dir"/> <database-data-store name="db-store" datasource-jndi-name="java:jboss/datasources/neo" database="oracle" refresh-interval="0"/> </data-stores> </timer-service> ... </subsystem>
После установки сервера
Solr в конфигурационный файл
server/solr/configsets/data_driven_schema_configs/conf/managed-schema
необходимо добавить
следующие определения полей и типа полей, а также переопределить тип поля text_general
:
<field name="collection" type="strings"/> <dynamicField name="*_dtr" type="date_range" indexed="true" stored="true"/> <fieldType name="date_range" class="solr.DateRangeField"/> ... <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true"> <analyzer type="index"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>
Если требуется нормализация индексов и запросов в соответствии с
Unicode Technical Report 30, то определение поля
text_general
в server/solr/configsets/data_driven_schema_configs/conf/managed-schema
должно выглядеть следующим образом:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true"> <analyzer type="index"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/> <filter class="solr.ICUFoldingFilterFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/> <filter class="solr.ICUFoldingFilterFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>
При этом в server/solr/configsets/data_driven_schema_configs/conf/solrconfig.xml
следует добавить:
<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs/" regex=".*\.jar" /> <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lib/" regex=".*\.jar" /> <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-analysis-extras-\d.*\.jar" />
В конфигурационном файле solr.in
необходимо настроить параметры solr.autoSoftCommit.maxTime
,
solr.autoCommit.maxTime
, -Xmx
в соответствии с имеющимися вычислительными ресурсами,
объёмом БД и нагрузкой. Для начала можно принять
solr.autoSoftCommit.maxTime=1000 solr.autoCommit.maxTime=10000 -Xmx2g
Запуск сервера необходимо осуществлять в облачном режиме.
После запуска сервера необходимо создать базовую коллекцию ruslan:
$ bin/solr create -c ruslan -d data_driven_schema_configs
Настройка провайдера идентификации заключается в редактировании
конфигурационного файла
WEB-INF/picketlink.xml
, включённого в ridp*.war
.
Как минимум, необходимо указать значения параметров PicketLinkIDP/IdentityURL
и
PicketLinkIDP/Trust/Domains
, зависящие от конкретных условий эксплуатации.
В первом из них необходимо указать адрес провайдера идентификации
(например, https://host.domain/ridp/
). Во втором - список доменов, разделённых запятой,
с которыми установлены доверительные отношения (например, domain1,domain2
).
Общая настройка заключается в редактировании конфигурации подсистемы naming
в standalone-modeshape.xml
:
<subsystem xmlns="urn:jboss:domain:naming:2.0"> <bindings> <simple name="java:global/ruslan/config/19013582/requestIdGeneratorName" value="db" type="java.lang.String"/> <simple name="java:global/ruslan/config/00000000/solrURL" value="localhost:9983" type="java.lang.String"/> <simple name="java:global/ruslan/config/00000000/repository" value="java:/jcr/neo" type="java.lang.String"/> <simple name="java:global/ruslan/config/00000000/license" value="file:///opt/wildfly/license.cer" type="java.net.URL"/> <simple name="java:global/ruslan/config/defaultOrgId" value="00000000" type="java.lang.String"/> <simple name="java:global/ruslan/config/defaultRecordSchemaName" value="ruslan" type="java.lang.String"/> </bindings> <remote-naming/> </subsystem>
В таблице 3-2 представлены настраиваемые общие параметры, их JNDI-имена, примеры значений.
Таблица 3-2. Настраиваемые общие параметры базовых сервисов АБИС "Руслан-Нео"
JNDI-имя | Назначение | Значение |
---|---|---|
java:global/ruslan/config/{сигла библиотеки}/requestIdGeneratorName | Идентификатор генератора идентификаторов запросов на бронирование |
|
java:global/ruslan/config/{сигла библиотеки}/solrURL | Строка подключения к ZooKeeper (Solr) | localhost:9983 |
java:global/ruslan/config/{сигла библиотеки}/repository | JNDI-имя хранилища | java:/jcr/neo |
java:global/ruslan/config/{сигла библиотеки}/license | URL лицензионного файла | file:///opt/wildfly/license.cer |
java:global/ruslan/config/defaultOrgId | Сигла библиотеки по умолчанию | 00000000 |
java:global/ruslan/config/defaultRecordSchemaName | Идентификатор схемы записей по умолчанию | ruslan |
Некоторые подсистемы базовых сервисов настраиваются при помощи дескриптора развёртывания приложения
idx-jcr-ejb.jar/META-INF/ejb-jar.xml
и иных дескрипторов, включённых в rneo*.ear
.
В таблице 3-3 представлены настраиваемые параметры подсистемы, наименования соответствующих записей окружения,
которые приводятся в дескрипторе развёртывания idx-jcr-ejb.jar/META-INF/ejb-jar.xml
, примеры значений.
Автоматический запуск пакетных заданий по расписанию определяется при помощи элементов
timer
для EJB JobScheduler
в дескрипторе развёртывания idx-jcr-ejb.jar/META-INF/ejb-jar.xml
:
<session> <ejb-name>JobScheduler</ejb-name> <session-type>Stateless</session-type> <timer> <schedule> <minute>0</minute> <hour>19</hour> <day-of-week>1-5</day-of-week> </schedule> <timeout-method> <method-name>timeout</method-name> <method-params> <method-param>javax.ejb.Timer</method-param> </method-params> </timeout-method> <info>ExportRecordsISO2709EBOOKS:19013582</info> </timer> <timer> <schedule> <minute>0</minute> <hour>1</hour> <day-of-week>6</day-of-week> </schedule> <timeout-method> <method-name>timeout</method-name> <method-params> <method-param>javax.ejb.Timer</method-param> </method-params> </timeout-method> <info>ExportRecordsISO2709BOOKS:19013582</info> </timer> </session>
В элементе info
указываются наименование пакетного задания и сигла библиотеки, разделённые двоеточием.
Подробности настройки расписания приводятся в главе 13 спецификации JSR-345.
Соответствующие определения пакетных заданий должны быть размещены в idx-jcr-ejb.jar/META-INF/batch-jobs/
,
а используемые этими заданиями пакетные артефакты необходимо указать в idx-jcr-ejb.jar/META-INF/batch.xml
.
Пакетные задания и артефакты определяются в соответствии с требованиями спецификации
JSR-352.
В таблице 3-4 представлены настраиваемые параметры сервера Z39.50,
которые приводятся в дескрипторе развёртывания idx-jcr-ejb.jar/META-INF/ejb-jar.xml
, примеры значений.
Таблица 3-4. Настраиваемые параметры сервера Z39.50
Наименование параметра | Назначение | Значение |
---|---|---|
ServerName | Сетевой адрес, по которому будет осуществляться взаимодействие с сервером Z39.50 | 0.0.0.0 |
PortNumber | Номер порта, по которому будет осуществляться взаимодействие с сервером Z39.50 | 2100 |
OrgId | Сигла библиотеки | 00000000 |
Фрагмент дескриптора развёртывания idx-jcr-ejb.jar/META-INF/ejb-jar.xml
,
связанный с настройка параметров сервера Z39.50:
<message-driven> <display-name>Z39.50 Target Bean</display-name> <ejb-name>ZTarget</ejb-name> <ejb-class>com.ols.ruslan.neo.z3950.server.ZTarget</ejb-class> <messaging-type>com.ols.z3950.server.ZMessageListener</messaging-type> <transaction-type>Container</transaction-type> <activation-config> <activation-config-property> <activation-config-property-name>ServerName</activation-config-property-name> <activation-config-property-value>0.0.0.0</activation-config-property-value> </activation-config-property> <activation-config-property> <activation-config-property-name>PortNumber</activation-config-property-name> <activation-config-property-value>2100</activation-config-property-value> </activation-config-property> <activation-config-property> <activation-config-property-name>OrgId</activation-config-property-name> <activation-config-property-value>00000000</activation-config-property-value> </activation-config-property> </activation-config> ... </message-driven>
В таблице 3-5 представлены настраиваемые параметры сервера 3M™ SIP v. 2.00,
которые приводятся в дескрипторе развёртывания idx-jcr-ejb.jar/META-INF/ejb-jar.xml
, примеры значений.
Фрагмент дескриптора развёртывания idx-jcr-ejb.jar/META-INF/ejb-jar.xml
,
связанный с настройка параметров сервера 3M™ SIP v. 2.00:
<message-driven> <display-name>SIP ACS Bean</display-name> <ejb-name>SIPACS</ejb-name> <ejb-class>com.ols.ruslan.neo.sip.server.SIPACS</ejb-class> <messaging-type>com.ols.sip.SIPMessageListener</messaging-type> <transaction-type>Container</transaction-type> <activation-config> <activation-config-property> <activation-config-property-name>ServerName</activation-config-property-name> <activation-config-property-value>0.0.0.0</activation-config-property-value> </activation-config-property> <activation-config-property> <activation-config-property-name>SoTimeout</activation-config-property-name> <activation-config-property-value>3000</activation-config-property-value> </activation-config-property> <activation-config-property> <activation-config-property-name>OrgId</activation-config-property-name> <activation-config-property-value>0000000</activation-config-property-value> </activation-config-property> </activation-config> </message-driven>
Подсистема управления пользователями настраивается на конкретный механизм хранения учётных данных при помощи дескриптора
idx-jcr-ejb.jar/META-INF/picketlink.xml
. В комплект поставки в качестве образцов включаются дескрипторы
picketlink-LDAP.xml
, picketlink-AD.xml
и picketlink-JPA.xml
,
для интеграции с механизмами хранения учётных данных, использующими LDAP,
Active Directory и реляционные СУБД соответственно.
Необходимо перенести в picketlink.xml
требуемую конфигурацию и изменить параметры в соответствии с конкретными
условиями применения (адреса сервисов, идентификаторы источников данных, логины и пароли пользователей, от имени которых будет
вестись работа с механизмами хранения учётных данных и т.п.).
При использовании механизма хранения учётных данных, основанного на реляционной СУБД,
в дескрипторе idx-jcr-ejb.jar/META-INF/persistence.xml
следует определить используемые реляционные сущности
(элементы class
) и источник данных (элемент non-jta-data-source
). В комплект поставки входит
persistence.xml
с типовыми сущностями, обеспечивающими хранение учётных записей пользователей, их роли и пароли.
В состав подсистемы управления пользователями входит компонент, обеспечивающий однонаправленную синхронизацию записей на
читателей из АБИС "Руслан-Нео" с используемым механизмом хранения
учётных данных. Таким образом, при создании или изменении записи на читателя, например, при помощи АРМ Книговыдачи
АБИС "Руслан-Нео"
в механизме хранения создаются или изменяются соответствующие учётные записи. Эти записи затем могут быть использованы для
аутентификации читателей в АБИС при помощи доменов безопасности, описанных выше.
Эта функциональность реализуется при помощи класса idx-jcr-ejb.jar/com/ols/ruslan/neo/record/UserManager.class
.
Если такая синхронизация не требуется, то указанный класс следует изъять из приложения.
АБИС "Руслан-Нео" использует систему управления бизнес-правилами
Drools в процессах обработки запросов от пользователей и событий, возникающих в системе.
Бизнес-правила и вспомогательные метаданные воплощены в виде записей в БД .config-{сигла библиотеки}
.
Эти записи создаются автоматически при развёртывании серверной части и не обновляются при обновлении серверной части.
В таблице 3-6 приведены идентификаторы поставляемых записей и их назначение.
Таблица 3-6. Бизнес-правила
Идентификатор записи | Назначение |
---|---|
kmodule.xml | Вспомогательные метаданные - описание модулей бизнес-правил |
ruslan-acl-management.drl | Правила управления списками контроля доступа для отдельных записей |
ruslan-circulation-checkin.drl | Правила возврата документов, выданных во временное пользование |
ruslan-circulation-checkout.drl | Правила выдачи документов во временное пользование |
ruslan-circulation-renewal.drl | Правила продления срока пользования документами, выданными во временное пользование |
ruslan-circulation-requestItem.drl | Правила бронирования документов, включая правила маршрутизации запросов на бронирование в отделы хранения |
ruslan-retention-versions.drl | Правила хранения версий записей |
Поставляемый типовой набор бизнес-правил требует обязательной настройки на конкретные условия применения - отключения ненужных, добавления новых и редактирования имеющихся правил.
Редактирование бизнес-правил и вспомогательных метаданных осуществляется при помощи АРМ Администратора. Добавление новых модулей бизнес-правил осуществляется посредством их добавления в
rneo.ear/idx-jcr-ejb.jar/config/
. При этом название модуля с бизнес-правилами должно соответствовать названию пакета в
kmodule.xml
- например, ruslan-circulation-renewal.drl
указывает, на то, что этот модуль относится к пакету ruslan.circulation
.
Web-интерфейс ресурсов является реализацией провайдера услуг. Для успешного взаимодействия с провайдером идентификации требуется
его настройка, которая заключается в редактировании конфигурационного файла WEB-INF/picketlink.xml
, включённого в
rneo-ear*.ear/rrs-web.war
. Как минимум, необходимо указать значения параметров
PicketLinkSP/IdentityURL
и PicketLinkSP/ServiceURL
, зависящие от конкретных условий
эксплуатации. В первом из них необходимо указать адрес провайдера идентификации (например, https://host.domain/ridp/
).
Во втором - адрес провайдера услуг (например, https://host.domain/rrs-web/
).
Проверка развёртывания компонентов серверной части осуществляется при помощи средств управления WildFly. При неуспешном развёртывании указание на причины следует искать в журнале WildFly.
Серверная часть "Руслан-Нео" не обладает иными возможностями, помимо указанных в Главе 1.
Сообщения системному программисту выводятся в журнал WildFly.
Логический набор классов, предназначенный для загрузки классов и управления зависимостями в сервере приложений WildFly .
См. также Module .
Модуль
WildFly
, установленный в каталоге
modules
сервера приложений
WildFly
.
Программное средство, обеспечивающее доступ одного или нескольких пользователей к удаленным или локальным ресурсам (библиографическим, полнотекстовым и др. базам данных) по протоколу Z39.50.
Enterprise JavaBeans
Java Content Repository
Java Database Connectivity
Java Naming and Directory Interface
JavaScript Object Notation
Lightweight Directory Access Protocol
National Information Standards Organization
Security Assertion Markup Language
Standard Interchange Protocol
Uniform Resource Locator
The Extensible Markup Language
Автоматизированная библиотечно-информационная система
База данных
Система управления базами данных
Показано описание двух источников данных -
java:jboss/datasources/lib1
и
java:jboss/datasources/neo
, а также драйвера
oracle
.
<subsystem xmlns="urn:jboss:domain:datasources:2.0"> <datasources> <datasource jta="false" jndi-name="java:jboss/datasources/lib1" pool-name="lib1" enabled="true" use-ccm="false"> <connection-url>jdbc:oracle:thin:@oracle.test.org:1521/ORA11 </connection-url> <driver-class>oracle.jdbc.OracleDriver</driver-class> <new-connection-sql>alter session set current_schema=lib1 </new-connection-sql> <driver>oracle</driver> <security> <user-name>lib1</user-name> <password>lib1_pwd</password> </security> <validation> <validate-on-match>false</validate-on-match> <background-validation>false</background-validation> </validation> <statement> <share-prepared-statements>false</share-prepared-statements> </statement> </datasource> <datasource jta="false" jndi-name="java:jboss/datasources/neo" pool-name="neo" enabled="true" use-ccm="false" statistics-enabled="true"> <connection-url>jdbc:oracle:thin:@localhost:1521/xe</connection-url> <driver-class>oracle.jdbc.OracleDriver</driver-class> <driver>oracle</driver> <security> <user-name>neo</user-name> <password>changeit</password> </security> <validation> <validate-on-match>false</validate-on-match> <background-validation>false</background-validation> </validation> <statement> <share-prepared-statements>false</share-prepared-statements> </statement> </datasource> <driver name="oracle" module="com.oracle.ojdbc"> <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource </xa-datasource-class> </driver> </datasources> </subsystem>
Показано описание репозитория neo, использующего для хранения как
обычных, так и двоичных данных источник данных
java:jboss/datasources/neo
. Также показано описание необходимых для работы индексов.
<repository name="neo"> <db-persistence create-on-start="true" data-source-jndi-name="java:jboss/datasources/neo" /> <index-providers> <index-provider name="lucene" classname="lucene" module="org.modeshape.index-provider.lucene" relative-to="jboss.server.data.dir" path="modeshape/neo/indexes/" /> <index-provider name="local" classname="local" relative-to="jboss.server.data.dir" path="modeshape/neo/indexes/" /> </index-providers> <indexes> <index name="file_path" provider-name="lucene" kind="value" synchronous="true" node-type="nt:file" columns="jcr:path(PATH)" /> <index name="res_path" provider-name="lucene" kind="value" synchronous="true" node-type="nt:resource" columns="jcr:path(PATH)" /> <index name="file_name" provider-name="lucene" kind="value" synchronous="true" node-type="nt:file" columns="jcr:name(NAME)" /> <index name="folder_name" provider-name="lucene" kind="value" synchronous="true" node-type="nt:folder" columns="jcr:name(NAME)" /> <index name="rn_itemId" provider-name="lucene" kind="value" synchronous="true" node-type="nt:file" columns="rn:itemId(STRING)" /> <index name="rn_userId" provider-name="lucene" kind="value" synchronous="true" node-type="nt:file" columns="rn:userId(STRING)" /> <index name="rn_circ_userId" provider-name="lucene" kind="value" synchronous="true" node-type="nt:file" columns="rn:circUserId(STRING)"/> </indexes> <reindexing async="true" mode="if_missing" /> <db-binary-storage data-source-jndi-name="java:jboss/datasources/neo" /> </repository>
Показано описание домена безопасности modeshape-security,
использующего
источник
LDAP
со специфичными для
Active Directory
настройками (идентификатор пользователя - в атрибуте
sAMAccountName
, идентификатор организации (сигла библиотеки) - в атрибуте
company
).
Показано описание домена безопасности
modeshape-security-db
, использующего реляционный источник данных
java:jboss/datasources/ExampleDS
(идентификатор библиотеки
00000000
указывается статическим образом в параметре
rolesQuery
).
Также показано описание домена безопасности
sp
.
<subsystem xmlns="urn:jboss:domain:security:1.2"> <security-domains> <security-domain name="modeshape-security" cache-type="default"> <authentication> <login-module code="LdapExtended" flag="required"> <module-option name="password-stacking" value="useFirstPass" /> <module-option name="java.naming.provider.url" value="ldap://localhost:389" /> <module-option name="java.naming.referral" value="follow" /> <module-option name="bindDN" value="CN=LDAP user,CN=Users,DC=LOCAL" /> <module-option name="bindCredential" value="changeit" /> <module-option name="baseCtxDN" value="DC=LOCAL" /> <module-option name="baseFilter" value="(sAMAccountName={0})" /> <module-option name="rolesCtxDN" value="OU=ruslan,DC=LOCAL" /> <module-option name="roleFilter" value="(member={1})" /> <module-option name="roleAttributeID" value="cn" /> <module-option name="roleAttributeIsDN" value="false" /> <module-option name="roleRecursion" value="2" /> <module-option name="searchScope" value="SUBTREE_SCOPE" /> <module-option name="allowEmptyPasswords" value="false" /> </login-module> </authentication> <mapping> <mapping-module code="org.jboss.security.mapping.providers.attribute.LdapAttributeMappingProvider" type="attribute"> <module-option name="attributeList" value="company" /> <module-option name="bindDN" value="CN=LDAP user,CN=Users,DC=LOCAL" /> <module-option name="bindCredential" value="changeit" /> <module-option name="baseFilter" value="(sAMAccountName={0})" /> <module-option name="java.naming.provider.url" value="ldap://localhost:389" /> <module-option name="baseCtxDN" value="DC=LOCAL" /> </mapping-module> </mapping> </security-domain> <security-domain name="modeshape-security-db" cache-type="default"> <authentication> <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required"> <module-option name="hashAlgorithm" value="SHA-512" /> <module-option name="hashEncoding" value="base64" /> <module-option name="dsJndiName" value="java:jboss/datasources/ExampleDS" /> <module-option name="principalsQuery" value="select p.passwordencodedhash from passwordcredentialtypeentity p, accounttypeentity a where p.owner_id=a.id and a.loginname=?" /> <module-option name="rolesQuery" value="select '00000000', 'Orgs' from attributetypeentity union select distinct r.name, 'Roles' from roletypeentity r, relationshipidentitytypeentity x1, relationshipidentitytypeentity x2, accounttypeentity a where r.id=x1.identitytype_id and x1.descriptor='role' and x2.descriptor='assignee' and x1.owner_id=x2.owner_id and x2.identitytype_id=a.id and a.loginname=?" /> <module-option name="digestCallback" value="com.ols.auth.SaltedPasswordProcessor" /> <module-option name="saltQuery" value="select p.passwordsalt from passwordcredentialtypeentity p, accounttypeentity a where p.owner_id=a.id and a.loginname=?" /> </login-module> </authentication> </security-domain> <security-domain name="sp" cache-type="default"> <authentication> <login-module code="org.picketlink.identity.federation.bindings.wildfly.SAML2LoginModule" flag="required" /> </authentication> </security-domain> </security-domains> </subsystem>