Руководство системного программиста » История » Версия 56
Rustam Usmanov, 31.05.2016 10:08
| 1 | 1 | Rustam Usmanov | h1. Руководство системного програмиста |
|---|---|---|---|
| 2 | |||
| 3 | {{toc}} |
||
| 4 | |||
| 5 | h2. Аннотация |
||
| 6 | |||
| 7 | В данном документе приведены общие сведения о программе "Web-сервисы Руслан", ее структура. Описаны порядок настройки и проверки программы, дополнительные возможности. |
||
| 8 | |||
| 9 | 26 | Rustam Usmanov | h2. Глава 1. Общие сведения о программе |
| 10 | 1 | Rustam Usmanov | |
| 11 | 16 | Rustam Usmanov | Программа "Web-сервисы Руслан" предназначена для обеспечения простого и удобного доступа удалённых пользователей к ресурсам АБИС "Руслан". Удалёнными пользователями могут являться любые пользователи сервера приложений "WildFly":http://wildfly.org, на базе которого функционирует программа. Ресурсами АБИС "Руслан" являются БД, поддерживаемые сервером "Руслан" и записи, содержащиеся в этих базах данных. Доступ к ресурсам заключается в выполнении над ними следующих операций: |
| 12 | 11 | Rustam Usmanov | * Поиск (по протоколу "SRU 2.0":http://www.loc.gov/standards/sru/sru-2-0.html) |
| 13 | 15 | Rustam Usmanov | * Извлечение, модификация, создание, удаление (по протоколу "WebDAV":http://tools.ietf.org/html/rfc4918) |
| 14 | 16 | Rustam Usmanov | * Заказ услуги (бронирование, копия) по найденному библиографическому описанию (по протоколу "NCIP v. 2.0.2":http://www.ncip.info/) |
| 15 | 1 | Rustam Usmanov | |
| 16 | 11 | Rustam Usmanov | Операции, связанные с чтением данных с ограниченным доступом и записью данных, требуют наличия соответствующих прав у пользователя, а следовательно и идентификации пользователя. Идентификация пользователя осуществляется при помощи провайдера идентификации по протоколу SAML 2.0. |
| 17 | 1 | Rustam Usmanov | |
| 18 | 11 | Rustam Usmanov | Взаимодействие с сервером "Руслан" осуществляется по протоколу Z39.50. |
| 19 | |||
| 20 | 12 | Rustam Usmanov | Ресурсы представляются в двух форматах: XML и JSON, в зависимости от предпочтений пользователя. |
| 21 | 1 | Rustam Usmanov | |
| 22 | 56 | Rustam Usmanov | Программа может функционировать на любых технических средствах под управлением сервера приложений *WildFly 8.2.**. После установки сервера WildFly необходимо убедиться в том, что установленный "статический модуль":https://docs.jboss.org/author/display/WFLY8/Glossary+--+Module "*PicketLink*":http://picketlink.org имеет версию *2.7.0.Final*. При необходимости следует "обновить этот модуль":http://picketlink.org/gettingstarted/. |
| 23 | 38 | Rustam Usmanov | |
| 24 | Обязательным требованием для выполнения программы является возможность сетевого взаимодействия с сервером "Руслан" и с сервером *Oracle*, используемым АБИС "Руслан". |
||
| 25 | |||
| 26 | 26 | Rustam Usmanov | h2. Глава 2. Структура программы |
| 27 | 1 | Rustam Usmanov | |
| 28 | 12 | Rustam Usmanov | Программа "Web-сервисы Руслан" состоит из следующих компонентов: |
| 29 | |||
| 30 | 14 | Rustam Usmanov | # @jrzs-ear*.ear@ - Z39.50-клиент, реализованный в виде EJB. |
| 31 | 12 | Rustam Usmanov | # @ridp*.war@ - провайдер идентификации. |
| 32 | # @rrs-web*.war@ - Web-интерфейс ресурсов АБИС "Руслан" |
||
| 33 | |||
| 34 | 26 | Rustam Usmanov | h2. Глава 3. Настройка программы |
| 35 | 1 | Rustam Usmanov | |
| 36 | 26 | Rustam Usmanov | h3. 3.1. Установка программы |
| 37 | 19 | Rustam Usmanov | |
| 38 | 16 | Rustam Usmanov | Установка программы заключается в "развёртывании компонентов программы на сервере приложений WildFly":https://docs.jboss.org/author/display/WFLY8/Application+deployment. |
| 39 | 1 | Rustam Usmanov | |
| 40 | 26 | Rustam Usmanov | h3. 3.2. Настройка программы |
| 41 | 19 | Rustam Usmanov | |
| 42 | 26 | Rustam Usmanov | h4. 3.2.1. Настройка сервера приложений WildFly |
| 43 | 21 | Rustam Usmanov | |
| 44 | 26 | Rustam Usmanov | h5. 3.2.1.1. Настройка источников данных |
| 45 | 21 | Rustam Usmanov | |
| 46 | 32 | Rustam Usmanov | Все источники данных Oracle, используемые сервером Руслан, должны быть "включены в конфигурацию сервера приложений WildFly":https://docs.jboss.org/author/display/WFLY8/DataSource+configuration. Следует обратить внимание на то, что настройка источников данных предусматривает "установку":https://docs.jboss.org/author/display/WFLY8/Application+deployment "JDBC драйвера Oracle":http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html. Пример результата настройки источников данных, отражённого в конфигурационном файле сервера приложений WildFly, приведён в [[Руководство системного програмиста#Источники данных|Приложении 1]]. |
| 47 | 29 | Rustam Usmanov | |
| 48 | 28 | Rustam Usmanov | h5. 3.2.1.2 Настройка доменов безопасности |
| 49 | 33 | Rustam Usmanov | |
| 50 | 1 | Rustam Usmanov | В "подсистему безопасности сервера приложений WildFly":https://docs.jboss.org/author/display/WFLY8/Security+subsystem+configuration необходимо "добавить два домена безопасности":https://docs.jboss.org/author/display/WFLY8/Security+subsystem+configuration#Securitysubsystemconfiguration-securitydomains с именами @idp@ и @sp@. Первый используется провайдером идентификации, второй - Web-интерфейсом ресурсов АБИС "Руслан". |
| 51 | 33 | Rustam Usmanov | |
| 52 | 55 | Rustam Usmanov | Аутентификацию в домене безопасности @idp@ необходимо настроить с использованием модуля входа Z39.50 (класс @com.ols.auth.Z3950LoginModule@). Этот модуль позволяет осуществлять аутентификацию любых пользователей АБИС "Руслан". В Таблице 3-1 представлены параметры модуля входа Z39.50, их назначение и примеры значений. При необходимости осуществления аутентификации на нескольких серверах Руслан, в конфигурацию домена безопасности можно включить несколько экземпляров модуля входа Z39.50 с различными параметрами. |
| 53 | 33 | Rustam Usmanov | |
| 54 | 34 | Rustam Usmanov | Таблица 3-1. Параметры модуля входя Z39.50 |
| 55 | 33 | Rustam Usmanov | |_.Параметр|_.Назначение|_.Значение| |
| 56 | 34 | Rustam Usmanov | |orgId|Уникальный идентификатор организации. Рекомендуется использовать национальный код библиотеки. Значение этого параметра должно совпадать со значением параметра @Org899@ сервера "Руслан"|@19013582@| |
| 57 | 36 | Rustam Usmanov | |zHost|Адрес сервера Z39.50. Значение этого параметра должно совпадать со значением параметра @Host@ сервера "Руслан".|@testbed.ruslan.ru@| |
| 58 | |zPort|Порт сервера Z39.50. Значение этого параметра должно совпадать со значением параметра @Port@ сервера "Руслан".|@210@| |
||
| 59 | |zClientBinding|JNDI-имя Z39.50-клиента, реализованного в виде EJB.|@java:global/jrzs/jrzs-ejb/ZClient@| |
||
| 60 | |debug|Управление выводом отладочных сообщений в журнал.|@true@ |
||
| 61 | 34 | Rustam Usmanov | @false@| |
| 62 | 33 | Rustam Usmanov | |
| 63 | 37 | Rustam Usmanov | Аутентификацию в домене безопасности @sp@ необходимо настроить с использованием модуля входа SAML2 (класс @org.picketlink.identity.federation.bindings.wildfly.SAML2LoginModule@). |
| 64 | |||
| 65 | 33 | Rustam Usmanov | Пример результата настройки доменов безопасности, отражённого в конфигурационном файле сервера приложений WildFly, приведён в [[Руководство системного програмиста#Домены безопасности|Приложении 1]]. |
| 66 | 28 | Rustam Usmanov | |
| 67 | 42 | Rustam Usmanov | h4. 3.2.2. Настройка провайдера идентификации |
| 68 | 41 | Rustam Usmanov | |
| 69 | 1 | Rustam Usmanov | Настройка провайдера идентификации заключается в редактировании "конфигурационного файла WEB-INF/picketlink.xml":https://docs.jboss.org/author/display/PLINK/Identity+Provider+Configuration#IdentityProviderConfiguration-Thepicketlink.xmlconfigurationfile, включённого в @ridp*.war@. Как минимум, необходимо указать значения параметров @PicketLinkIDP/IdentityURL@ и @PicketLinkIDP/Trust/Domains@, зависящие от конкретных условий эксплуатации. В первом из них необходимо указать адрес провайдера идентификации (например, @https://host.domain/ridp/@). Во втором - список доменов, разделённых запятой, с которыми установлены доверительные отношения (например, @domain1,domain2@). |
| 70 | 42 | Rustam Usmanov | |
| 71 | h4. 3.2.3. Настройка Web-интерфейса ресурсов АБИС "Руслан" |
||
| 72 | |||
| 73 | h5. 3.2.3.1 Настройка провайдера услуг |
||
| 74 | |||
| 75 | Web-интерфейс ресурсов АБИС "Руслан" является реализацией провайдера услуг. Для успешного взаимодействия с провайдером идентификации требуется его настройка, которая заключается в редактировании "конфигурационного файла WEB-INF/picketlink.xml":https://docs.jboss.org/author/display/PLINK/Service+Provider+Configuration#ServiceProviderConfiguration-Thepicketlink.xmlconfigurationfile, включённого в @rrs-web*.war@. Как минимум, необходимо указать значения параметров @PicketLinkSP/IdentityURL@ и @PicketLinkSP/ServiceURL@, зависящие от конкретных условий эксплуатации. В первом из них необходимо указать адрес провайдера идентификации (например, @https://host.domain/ridp/@). Во втором - адрес провайдера услуг (например, @https://host.domain/rrs-web/@). |
||
| 76 | 41 | Rustam Usmanov | |
| 77 | 48 | Rustam Usmanov | h5. 3.2.3.2 Настройка хранения данных |
| 78 | 49 | Rustam Usmanov | |
| 79 | 48 | Rustam Usmanov | Настройка хранения данных заключается в редактировании "дескриптора хранения данных WEB-INF/classes/META-INF/persistence.xml":http://java.sun.com/xml/ns/persistence, включённого в @rrs-web*.war@. В этом дескрипторе необходимо определить модули хранения данных (persistence-unit), связав их с [[Руководство системного програмиста#3.2.1.1. Настройка источников данных|ранее определёнными источниками данных]]. Пример дескриптора хранения данных приведён в [[Руководство системного програмиста#Дескриптор хранения данных|Приложении 1]]. |
| 80 | 46 | Rustam Usmanov | |
| 81 | 49 | Rustam Usmanov | h5. 3.2.3.3 Общая настройка |
| 82 | 46 | Rustam Usmanov | |
| 83 | 54 | Rustam Usmanov | Общая настройка заключается в редактировании "дескриптора развёртывания приложения WEB-INF/web.xml":http://xmlns.jcp.org/xml/ns/javaee, включённого в @rrs-web*.war@. В этом дескрипторе необходимо определить контексты хранения данных (persistence-context-ref), связав их с ранее определёнными модулями хранения данных (persistence-unit). Контексты хранения данных должны быть поименованы (элемент @persistence-context-ref-name@) следующим образом (с указанием национального кода библиотеки вместо @orgId@): |
| 84 | * Контекст, связанный через соответствующий модуль хранения данных с управляющим источником данных АБИС "Руслан", должен иметь имя @persistence/orgId.Server@; |
||
| 85 | * Контекст, связанный через соответствующий модуль хранения данных с источником библиотечных данных АБИС "Руслан", должен иметь имя @persistence/orgId.DbMetadata@. |
||
| 86 | 1 | Rustam Usmanov | |
| 87 | 53 | Rustam Usmanov | Пример определения контекстов хранения данных приведён в [[Руководство системного програмиста#Контексты хранения данных в дескрипторе развёртывания|Приложении 1]]. |
| 88 | 52 | Rustam Usmanov | |
| 89 | 50 | Rustam Usmanov | h5. 3.2.3.4 Настройка АБИС "Руслан" |
| 90 | |||
| 91 | Настройка АБИС "Руслан" заключается в присвоении значений параметрам сервера "Руслан": |
||
| 92 | 54 | Rustam Usmanov | * Host - имя узла с экземпляром АБИС "Руслан", по которому Web-интерфейс ресурсов АБИС "Руслан" сможет связываться с сервером Руслан; |
| 93 | 50 | Rustam Usmanov | * Org899 - национальный код библиотеки, используемый в определениях контекстов хранения данных. |
| 94 | |||
| 95 | 4 | Rustam Usmanov | h2. Перечень сокращений |
| 96 | 1 | Rustam Usmanov | |
| 97 | table{border:none}. |
||
| 98 | 18 | Rustam Usmanov | |EJB|Enterprise JavaBeans| |
| 99 | 35 | Rustam Usmanov | |JNDI|Java Naming and Directory Interface| |
| 100 | 1 | Rustam Usmanov | |JSON|JavaScript Object Notation| |
| 101 | 16 | Rustam Usmanov | |NISO|National Information Standards Organization| |
| 102 | |NCIP|NISO Circulation Interchange Protocol| |
||
| 103 | 1 | Rustam Usmanov | |XML|The Extensible Markup Language| |
| 104 | |АБИС|Автоматизированная библиотечно-информационная система| |
||
| 105 | 43 | Rustam Usmanov | |БД|База данных| |
| 106 | 23 | Rustam Usmanov | |
| 107 | h2. Приложение 1. Конфигурационный файл сервера приложений WildFly |
||
| 108 | |||
| 109 | h3. Источники данных |
||
| 110 | 31 | Rustam Usmanov | |
| 111 | 23 | Rustam Usmanov | <pre><code class="xml"> |
| 112 | <subsystem xmlns="urn:jboss:domain:datasources:2.0"> |
||
| 113 | <datasources> |
||
| 114 | <datasource jta="false" jndi-name="java:jboss/datasources/ruslan" pool-name="ruslan" enabled="true" use-ccm="false"> |
||
| 115 | <connection-url>jdbc:oracle:thin:@oracle.test.org:1521/ORA11</connection-url> |
||
| 116 | <driver-class>oracle.jdbc.OracleDriver</driver-class> |
||
| 117 | <driver>ojdbc6.jar</driver> |
||
| 118 | <security> |
||
| 119 | <user-name>libmgr</user-name> |
||
| 120 | <password>libmgr_pwd</password> |
||
| 121 | </security> |
||
| 122 | <validation> |
||
| 123 | <validate-on-match>false</validate-on-match> |
||
| 124 | <background-validation>false</background-validation> |
||
| 125 | </validation> |
||
| 126 | <statement> |
||
| 127 | <share-prepared-statements>false</share-prepared-statements> |
||
| 128 | </statement> |
||
| 129 | </datasource> |
||
| 130 | <datasource jta="false" jndi-name="java:jboss/datasources/lib1" pool-name="lib1" enabled="true" use-ccm="false"> |
||
| 131 | <connection-url>jdbc:oracle:thin:@oracle.test.org:1521/ORA11</connection-url> |
||
| 132 | <driver-class>oracle.jdbc.OracleDriver</driver-class> |
||
| 133 | 27 | Rustam Usmanov | <new-connection-sql>alter session set current_schema=lib1</new-connection-sql> |
| 134 | 23 | Rustam Usmanov | <driver>ojdbc6.jar</driver> |
| 135 | <security> |
||
| 136 | <user-name>lib1</user-name> |
||
| 137 | <password>lib1_pwd</password> |
||
| 138 | </security> |
||
| 139 | <validation> |
||
| 140 | <validate-on-match>false</validate-on-match> |
||
| 141 | <background-validation>false</background-validation> |
||
| 142 | </validation> |
||
| 143 | <statement> |
||
| 144 | <share-prepared-statements>false</share-prepared-statements> |
||
| 145 | </statement> |
||
| 146 | </datasource> |
||
| 147 | 1 | Rustam Usmanov | </datasources> |
| 148 | 30 | Rustam Usmanov | </subsystem> |
| 149 | </code></pre> |
||
| 150 | |||
| 151 | h3. Домены безопасности |
||
| 152 | 31 | Rustam Usmanov | |
| 153 | 30 | Rustam Usmanov | <pre><code class="xml"> |
| 154 | <subsystem xmlns="urn:jboss:domain:security:1.2"> |
||
| 155 | <security-domains> |
||
| 156 | <security-domain name="idp" cache-type="default"> |
||
| 157 | <authentication> |
||
| 158 | <login-module code="com.ols.auth.Z3950LoginModule" flag="required"> |
||
| 159 | <module-option name="orgId" value="1"/> |
||
| 160 | <module-option name="zHost" value="testbed.ruslan.ru"/> |
||
| 161 | <module-option name="zPort" value="210"/> |
||
| 162 | <module-option name="zClientBinding" value="java:global/jrzs/jrzs-ejb/ZClient"/> |
||
| 163 | <module-option name="debug" value="false"/> |
||
| 164 | </login-module> |
||
| 165 | </authentication> |
||
| 166 | </security-domain> |
||
| 167 | <security-domain name="sp" cache-type="default"> |
||
| 168 | <authentication> |
||
| 169 | <login-module code="org.picketlink.identity.federation.bindings.wildfly.SAML2LoginModule" flag="required"/> |
||
| 170 | </authentication> |
||
| 171 | </security-domain> |
||
| 172 | </security-domains> |
||
| 173 | 23 | Rustam Usmanov | </subsystem> |
| 174 | 1 | Rustam Usmanov | </code></pre> |
| 175 | 46 | Rustam Usmanov | |
| 176 | h3. Дескриптор хранения данных |
||
| 177 | |||
| 178 | <pre><code class="xml"> |
||
| 179 | <?xml version="1.0" encoding="UTF-8"?> |
||
| 180 | <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> |
||
| 181 | <persistence-unit name="ruslan-database"> |
||
| 182 | <jta-data-source>java:jboss/datasources/lib1</jta-data-source> |
||
| 183 | <class>com.ols.ruslan.persistence.database.Zdbi</class> |
||
| 184 | </persistence-unit> |
||
| 185 | <persistence-unit name="ruslan-server"> |
||
| 186 | <jta-data-source>java:jboss/datasources/ruslan</jta-data-source> |
||
| 187 | <class>com.ols.ruslan.persistence.server.Apoint</class> |
||
| 188 | <class>com.ols.ruslan.persistence.server.Lusr</class> |
||
| 189 | <class>com.ols.ruslan.persistence.server.Zacl</class> |
||
| 190 | <class>com.ols.ruslan.persistence.server.Zparam</class> |
||
| 191 | </persistence-unit> |
||
| 192 | </persistence></code></pre> |
||
| 193 | 49 | Rustam Usmanov | |
| 194 | 53 | Rustam Usmanov | h3. Контексты хранения данных в дескрипторе развёртывания |
| 195 | 50 | Rustam Usmanov | |
| 196 | 49 | Rustam Usmanov | <pre><code class="xml"> |
| 197 | <persistence-context-ref> |
||
| 198 | <persistence-context-ref-name>persistence/1.Server</persistence-context-ref-name> |
||
| 199 | <persistence-unit-name>ruslan-server</persistence-unit-name> |
||
| 200 | </persistence-context-ref> |
||
| 201 | <persistence-context-ref> |
||
| 202 | <persistence-context-ref-name>persistence/1.DbMetadata</persistence-context-ref-name> |
||
| 203 | <persistence-unit-name>ruslan-database</persistence-unit-name> |
||
| 204 | </persistence-context-ref> |
||
| 205 | </code></pre> |