Проект

Общее

Профиль

Руководство системного программиста » История » Версия 52

Rustam Usmanov, 10.05.2016 12:39

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 40 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 38 Rustam Usmanov
Аутентификацию в домене безопасности @idp@ необходимо настроить с использованием модуля входа Z39.50 (класс @com.ols.auth.Z3950LoginModule@). Этот модуль позволяет осуществлять аутентификацию любых пользователей АБИС "Руслан". В Таблице 3-1 представлены параметры модуля входа 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 50 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@) определённым образом:
84
* Контекст, связанный через соответствующий модуль хранения данных с управляющим источником данных АБИС "Руслан", должен иметь имя @persistence/<orgId>.Server@
85
* Контекст, связанный через соответствующий модуль хранения данных с источником библиотечных данных АБИС "Руслан", должен иметь имя @persistence/<orgId>.DbMetadata@.
86 1 Rustam Usmanov
87 50 Rustam Usmanov
@orgId@ - национальный код библиотеки.
88
89 52 Rustam Usmanov
Пример определения контекстов хранения данных приведён в [[Руководство системного програмиста#Контексты хранения данных в дексрипторе развёртывания|Приложении 1]].
90
91
92 50 Rustam Usmanov
h5. 3.2.3.4 Настройка АБИС "Руслан"
93
94
Настройка АБИС "Руслан" заключается в присвоении значений параметрам сервера "Руслан":
95
* Host - имя узла с экземпляром АБИС "Руслан", по которому Web-интерфейс ресурсов АБИС "Руслан" сможет  связываться с сервером Руслан.
96
* Org899 - национальный код библиотеки, используемый в определениях контекстов хранения данных.
97
98 4 Rustam Usmanov
h2. Перечень сокращений
99 1 Rustam Usmanov
100
table{border:none}.
101 18 Rustam Usmanov
|EJB|Enterprise JavaBeans|
102 35 Rustam Usmanov
|JNDI|Java Naming and Directory Interface|
103 1 Rustam Usmanov
|JSON|JavaScript Object Notation|
104 16 Rustam Usmanov
|NISO|National Information Standards Organization|
105
|NCIP|NISO Circulation Interchange Protocol|
106 1 Rustam Usmanov
|XML|The Extensible Markup Language|
107
|АБИС|Автоматизированная библиотечно-информационная система|
108 43 Rustam Usmanov
|БД|База данных|
109 23 Rustam Usmanov
110
h2. Приложение 1. Конфигурационный файл сервера приложений WildFly
111
112
h3. Источники данных
113 31 Rustam Usmanov
114 23 Rustam Usmanov
<pre><code class="xml">
115
<subsystem xmlns="urn:jboss:domain:datasources:2.0">
116
  <datasources>
117
    <datasource jta="false" jndi-name="java:jboss/datasources/ruslan" pool-name="ruslan" enabled="true" use-ccm="false">
118
      <connection-url>jdbc:oracle:thin:@oracle.test.org:1521/ORA11</connection-url>
119
      <driver-class>oracle.jdbc.OracleDriver</driver-class>
120
      <driver>ojdbc6.jar</driver>
121
      <security>
122
        <user-name>libmgr</user-name>
123
        <password>libmgr_pwd</password>
124
      </security>
125
      <validation>
126
        <validate-on-match>false</validate-on-match>
127
        <background-validation>false</background-validation>
128
      </validation>
129
      <statement>
130
        <share-prepared-statements>false</share-prepared-statements>
131
      </statement>
132
    </datasource>
133
    <datasource jta="false" jndi-name="java:jboss/datasources/lib1" pool-name="lib1" enabled="true" use-ccm="false">
134
      <connection-url>jdbc:oracle:thin:@oracle.test.org:1521/ORA11</connection-url>
135
      <driver-class>oracle.jdbc.OracleDriver</driver-class>
136 27 Rustam Usmanov
      <new-connection-sql>alter session set current_schema=lib1</new-connection-sql>
137 23 Rustam Usmanov
      <driver>ojdbc6.jar</driver>
138
      <security>
139
        <user-name>lib1</user-name>
140
        <password>lib1_pwd</password>
141
      </security>
142
      <validation>
143
        <validate-on-match>false</validate-on-match>
144
        <background-validation>false</background-validation>
145
      </validation>
146
      <statement>
147
        <share-prepared-statements>false</share-prepared-statements>
148
      </statement>
149
    </datasource>
150 1 Rustam Usmanov
  </datasources>
151 30 Rustam Usmanov
</subsystem>
152
</code></pre>
153
154
h3. Домены безопасности
155 31 Rustam Usmanov
156 30 Rustam Usmanov
<pre><code class="xml">
157
<subsystem xmlns="urn:jboss:domain:security:1.2">
158
  <security-domains>
159
    <security-domain name="idp" cache-type="default">
160
      <authentication>
161
        <login-module code="com.ols.auth.Z3950LoginModule" flag="required">
162
          <module-option name="orgId" value="1"/>
163
          <module-option name="zHost" value="testbed.ruslan.ru"/>
164
          <module-option name="zPort" value="210"/>
165
          <module-option name="zClientBinding" value="java:global/jrzs/jrzs-ejb/ZClient"/>
166
          <module-option name="debug" value="false"/>
167
        </login-module>
168
      </authentication>
169
    </security-domain>
170
    <security-domain name="sp" cache-type="default">
171
      <authentication>
172
        <login-module code="org.picketlink.identity.federation.bindings.wildfly.SAML2LoginModule" flag="required"/>
173
      </authentication>
174
    </security-domain>
175
  </security-domains>
176 23 Rustam Usmanov
</subsystem>
177 1 Rustam Usmanov
</code></pre>
178 46 Rustam Usmanov
179
h3. Дескриптор хранения данных
180
181
<pre><code class="xml">
182
<?xml version="1.0" encoding="UTF-8"?>
183
<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">
184
	<persistence-unit name="ruslan-database">
185
		<jta-data-source>java:jboss/datasources/lib1</jta-data-source>
186
		<class>com.ols.ruslan.persistence.database.Zdbi</class>
187
	</persistence-unit>
188
	<persistence-unit name="ruslan-server">
189
		<jta-data-source>java:jboss/datasources/ruslan</jta-data-source>
190
		<class>com.ols.ruslan.persistence.server.Apoint</class>
191
		<class>com.ols.ruslan.persistence.server.Lusr</class>
192
		<class>com.ols.ruslan.persistence.server.Zacl</class>
193
		<class>com.ols.ruslan.persistence.server.Zparam</class>
194
	</persistence-unit>
195
</persistence></code></pre>
196 49 Rustam Usmanov
197 1 Rustam Usmanov
h3. Контексты хранения данных в дексрипторе развёртывания
198 50 Rustam Usmanov
199 49 Rustam Usmanov
<pre><code class="xml">
200
	<persistence-context-ref>
201
		<persistence-context-ref-name>persistence/1.Server</persistence-context-ref-name>
202
		<persistence-unit-name>ruslan-server</persistence-unit-name>
203
	</persistence-context-ref>
204
	<persistence-context-ref>
205
		<persistence-context-ref-name>persistence/1.DbMetadata</persistence-context-ref-name>
206
		<persistence-unit-name>ruslan-database</persistence-unit-name>
207
	</persistence-context-ref>
208
</code></pre>