Сервер переехал на новый сайт http://www.oraclegis.com/blog. Здесь идет ретрансляция

пятница, 14 ноября 2008 г.

Инсталляция пространственных веб-сервис в OC4J

Стандарт WFS.

Стандарт Open Geospatial Consortium Web Feature Service (WFS) определяет интерфейс, позволяющий запрашивать географические объекты (features) через web, используя платформенно независимые вызовы. В 2006 году, комитет OGC одобрил принятие стандарта OpenGIS GML Simple Features Profile. Этот стандарт разработан для того, чтобы повысить возможности взаимозаменяемости WFS серверов и повысить простоту реализации стандарта WFS.

Спецификация WFS определяет интерфейс для операций над географическими объектами. Включены такие операции как :

Получить (Get) или Выполнить запрос (Query) к географическим объектам на основе пространственнго или непространственного условия
Создать (Create) новый географический объект
Удалить (Delete) существующий географический объект
Изменить (Update) существующий географический объект

Простейший функционал Web Feature Service позволяет “получать” и “выполнять запросы” к географическим объектам. Транзакционный Web Feature Service (WFS-T) позволяет создавать, удалять и изменять географические объекты.

WFS описывает формат запроса. Клиент генерирует запрос и передает его WFS-серверу с использованием HTTP. WFS-cервер запускает запрос . Спецификация WFS использует HTTP как транспортный протокол, но это не жестко закрепленное требование.

В настоящее время определены два стандарта кодирования операций WFS:

XML (HTTP POST/SOAP)
Keyword-Value pairs (HTTP GET/Remote procedure call)

Более подробную информацию по WFS можно посмотреть здесь.

А мы перейдем к рассмотрению как WFS реализован в СУБД Oracle

Поддержка WFS в Oracle

WFS в СУБД реализована как веб-сервис и должна быть развернута в Oracle Containers for Java (OC4J), включенной в Oracle Application Server.

WFS имеет слой метаданных, которые хранятся в базе данных. Эти данные необходимы для ответа на WFS запросы. Метаданные включают пространственные столбцы, которые могут быть запрошены и обработаны с использованием интерфейса Oracle Spatial. Метаданные также содержат ассоциацию непространственных и пространственных столбцов  географических объектов, так как Web Feature Service предоставляет их клиенту.

Ниже показана архитектура Web Feature Service.

  image

Как показано на слайде:

  • WFS – часть контейнера Oracle Application Server.

  • WFS – взаимойствует с Web service клиентом с использованием WFS запросов и ответов в SOAP/XML формате.

  • WFS – выполняет операции по доступу к пространственным данным и метаданные через JDBC вызовы к базе данных.

  • В базе хванятся как WFS метаданные, так и сами пространственные данные.

 

Предварительные шаги

Необходимо проинсталлировать Oracle Database 11g. Сделать это можно как описано в инструкции.

Проинсталлировать Oracle Database 11g Companion CD.

Скачать JDeveloper с сайта OTN и проинсталлировать его.

Скачать последнюю версию J2SE с Javasoft и проинсталлировать.

Создать рабочий каталог и скопировать в него файл wsclient.jar из папки $ORACLE_HOME/md/demo/ws/client.

Скачать файл xsds.jar в Ваш рабочий каталог.

Убедиться, что пользователи mdsys, spatial_csw_admin_usr и spatial_wfs_admin_usr  разблокированы. Сделать это можно следующими командами из sqlplus.

connect sys/oracle as sysdba
alter user mdsys identified by oracle account unlock;
alter user spatial_csw_admin_usr identified by oracle account unlock;
alter user spatial_wfs_admin_usr identified by oracle account unlock;

Конфигурация OC4J.

В этой секции описываются шаги, необходимые для конфигурации oc4j для инсталляции пространственных веб-сервисов (spatial web services) и демонстрационных пользователей. Вы полним следующие шаги:

  • сконфигурируем демонстрационных пользователей
  • сконфигурируем пути OC4J
  • Создадим и зарегистрируем разделяемые библиотеки
  • Скопируем файлы в папку разделяемых библиотек
  • Пропатчим xmlparser2.jar файл
  • Извлекаем файлы из wsclient.jar
Сконфигурируем демонстрационных пользователей

1. Из терминального окна

cd $OC4J_HOME/j2ee/home/config 
nano system-jazn-data.xml

где $OC4J_HOME – папку, куда Вы проинсталлировали OC4J

2. Добавим в этот файл после последней секции <user> следующий текст:

<user>  <name>  SpatialWsUser0 </name> <display-name>Spatial WS user 0</display-name> <description>Used for SpatialWs</description> <credentials>!welcome</credentials>
</user> 
<user>  <name>SpatialWsUser1</name>  <display-name>Spatial WS user 1</display-name>  <description>Used for SpatialWs</description>  <credentials>!welcome</credentials> 
</user> 
<user>  <name>SpatialWsUser2</name>  <display-name>Spatial WS user 2</display-name>  <description>Used for SpatialWs</description>  <credentials>!welcome</credentials> 
</user> 
<user>  <name>SpatialWsUser3</name>  <display-name>Spatial WS user 3</display-name>  <description>Used for SpatialWs</description>  <credentials>!welcome</credentials> 
</user>
<user>  <name>wfs_rel_user</name>  <display-name>wfs_rel_user</display-name>  <description>Spatial WFS user </description>  <credentials>!wfs_rel_user</credentials> 
</user> 
<user>  <name>wfs_doc_user</name>  <display-name>wfs_doc_user</display-name>  <description>Spatial WFS user </description>  <credentials>!wfs_doc_user</credentials> 
</user> 
<user>  <name>csw_user</name>  <display-name>csw_user</display-name>  <description>Spatial CSW  user </description>  <credentials>!csw_user</credentials> 
</user>

image

В файле нажмем Ctrl-O для сохранения, затем Ctrl-X  для выхода.

Сконфигурируем пути OC4J

1. В терминальном окне введем следующие команды:

cd $OC4J_HOME/bin
nano oc4j

image

2. Добавьте следующие строки в начало:
ORACLE_HOME=<путь к OC4J>
JAVA_HOME=<путь к JDK>
image

Если при сохранении возникнет ошибка [ Could not open file for writing: Permission denied ] – необходимо зайти под пользователем root и выполнить следующие команды

cd $OC4J_HOME/bin
chmod 777 oc4j

затем повторить действия, которые не получились.

Создадим и зарегистрируем разделяемые библиотеки

1. Из терминального окна вводим следующие команды для создания каталога разделяемых библиотек:

mkdir $OC4J_HOME/j2ee/home/shared-lib/sdows
mkdir $OC4J_HOME/j2ee/home/shared-lib/sdows/1.0

image

2. Регистрируем библиотеки в server.xml. Для этого вводим следующие команды:

cd $OC4J_HOME/j2ee/home/config
nano server.xml

Добавляем следующие строки перед секцией rmi-config:

<shared-library name="sdows" version="1.0">
         <code-source path="*"/>
         <import-shared-library name="oracle.xml"/>
            <import-shared-library name="oracle.jdbc"/>
</shared-library>

В файле нажмем Ctrl-O для сохранения, затем Ctrl-X  для выхода.

image

3. Регистрируем библиотеки в файл application.xml

cd $OC4J_HOME/j2ee/home/config
nano application.xml

Добавляем следующие строки перед закрывающим тэгом </imported-shared-libraries>:

<import-shared-library name="sdows"/>

Если секции </imported-shared-libraries> нет, то добавляем немного больше в конце файла перед </orion-application>:

<imported-shared-libraries>
     <import-shared-library name="sdows"/>
</imported-shared-libraries>

image

Сохраняем и выходим.

Скопируем файлы в папку разделяемых библиотек

1. Из терминального окна выволним следующие команды, чтобы скопировать файлы из и  в папку разделяемых библиотек, которую мы только что создали (здесь $ORACLE_HOME – домашний каталог СУБД Oracle):

cd $OC4J_HOME/j2ee/home/shared-lib/sdows/1.0

cp $ORACLE_HOME/md/jlib/sdowfscs.jar .
cp $ORACLE_HOME/md/jlib/sdoutl.jar .
cp $ORACLE_HOME/md/jlib/sdotype.jar .
cp $ORACLE_HOME/md/jlib/sdoapi.jar .
cp $ORACLE_HOME/md/jlib/sdowshandlers.jar .
cp $ORACLE_HOME/md/jlib/sdowspool.jar .
cp $ORACLE_HOME/md/jlib/sdowshandlerols.jar .
cp $ORACLE_HOME/rdbms/jlib/xdb.jar .

image

Пропатчим xmlparser2.jar файл

1. Из терминального окна выволним следующие команды, чтобы скопировать файл xmlparserv2.jar из инсталляции ORACLE Database 11g в OC4J:

image

Извлекаем файлы из wsclient.jar

1. Из терминального окна выволним следующие команды, чтобы извлечь файл из JAR-файла wsclient.jar:

export CLIENT_HOME=/home/oracle/wsclient
cd $CLIENT_HOME
unzip wsclient.jar

Запускаем OC4J

В этой секции описано как запустить экземпляр OC4J. Выполните следующие шаги:

1. В терминальном окне введите команды

cd $OC4J_HOME/bin
./oc4j –start

2. При запросе пароля введите любой пароль (для определенности будем считать, что ввели admin). Затем введите тот же пароль для подтверждения. Дождитесь появления сообщения “Oracle Containers for J2EE 10g (10.1.3.4.0)  initialized”

image

Развертывание EAR файлов

В этой секции описано, как развернуть Spatial Web сервис в экземпляре oc4j, запущенном на предыдущем шаге

1. Откройти браузер и введите в строке адреса http://orabi:8888/em/, где orabi – это имя или ip адрес Вашего сервера, где стартован OC4J.

image

2. В открывшемся окне введите пароль (мы условились, что это admin)

image

3. Перейдем на закладку Applications и нажмем кнопку Deploy

image

4. Укажите, что Ваш файл уже лежит на сервере и введите путь к файл sdows.ear. Он расположен в стандартной инсталляции Oracle Database в папке $ORACLE_HOME/md/jlib. В моем случае это папка /u01/app/oracle/product/11.1.0/db_1/md/jlib/sdows.ear. Затем нажмите Next

image

5. В имени приложений укажите sdows, затем Next

image

6. На последней странице нажмите Deploy. Дождитесь завершения развертывания приложения сообщением COMPLETES.

image 

7. В результате приложение должно запуститься

image

Конфигурирование Ваших источников данных

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

1. Завершим выполнение ранее запущенной OC4J комбинацией клавиш Ctrl-C:

image

2. В терминальном окне введем следующие команды

cd $OC4J_HOME/j2ee/home/applications/sdows/META-INF
nano data-sources.xml

Сконфигурируем следующие источники данных:

jdev-connection-WfsProxyConnection
jdev-connection-NdmProxyConnection
jdev-connection-CatalogProxyConnection
jdev-connection-OpenLsProxyConnection
jdev-connection-ConferenceProxyConnection

Изменим их так, чтобы они могли подключаться к нашей базе данных под такими параметрами:

url="jdbc:oracle:thin:@localhost:1521:orcl"
user="mdsys"
password="oracle"

Вот примерно так

image

Для источников jdev-connection-CSW_ADMIN_CONN_NAME и jdev-connection-WFS_ADMIN_CONN_NAME нужно будет ввести только строку подключения и пароль. Пользователь уже задан:

url="jdbc:oracle:thin:@localhost:1521:orcl"
password="oracle"

image

Сохраняйте Ctrl-O и выходите Ctrl-X.

3. Загрузите OGC XSD-схему для WFS по любому адресу. Распакуйте xsds.jar в папку $OC4J_HOME/j2ee/home/default-web-app/examples/servlets/. Запомните место, где эти файлы будут лежать. Сделать все это можно следующими командами:

mkdir -p $OC4J_HOME/j2ee/home/default-web-app/examples/servlets/
cd $OC4J_HOME/j2ee/home/default-web-app/examples/servlets/
cp /home/oracle/xsds.jar  $OC4J_HOME/j2ee/home/default-web-app/examples/servlets/
unzip xsds.jar

4. Отредактируйте файл WSConfig.xml, чтобы указать местоположение xsd. Из терминального окна введите:

cd $OC4J_HOME/j2ee/home/applications/sdows/sdows/WEB-INF/conf
nano WSConfig.xml

В файле укажите URL где XSDs были сохранены

<wfs_xsd_loc_url>http://<machine_name>:8888/examples/servlets/xsds/</wfs_xsd_loc_url>

image

Не забудьте убрать коментирующие теги.

Сохраните и выйдите из nano.

5. Отредактируем файлы wfsrelmd.sql, wfsdocmd.sql, and cswmd.sql, заменив $DATA_DIR_PATH на путь к каталогу $CLIENT_HOME/src. Эта папка недавно создана при распаковке wsclient.jar. Из терминального окна введем команды

cd $CLIENT_HOME/src/sql
nano wfsrelmd.sql

Заменим $DATA_DIR_PATH  на путь к каталогу src (в моем случае /home/oracle/wsclient/src):

image

Аналогичные действия проделаем для файлов wfsdocmd.sql и cswmd.sql:

image

image

6. Изменим строки для подключения к базе данных в следующих файлах:

- For WFS: oracle.spatial.ws.admindemo.WFSAdminDemo.java file
- For CSW: oracle.spatial.ws.admindemo.CSWAdminDemo.java file

Из терминального окна вводим

cd $CLIENT_HOME/src/oracle/spatial/ws/admindemo
nano WFSAdminDemo.java

Редактируем следующее выражение для того, чтобы дескриптор подключения был правильным

OracleConnection conn =
      (OracleConnection) DriverManager.getConnection
      ("jdbc:oracle:thin:@localhost:1521:orcl","WFS_ADMIN_USR","WFS_ADMIN_USR");

image

Аналогично для CSWAdminDemo.java

cd $CLIENT_HOME/src/oracle/spatial/ws/admindemo
nano CSWAdminDemo.java

image

7. В файле TestWfsCsBase.java измените строку http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort на нужную Вам (можно было оставить и так, но я на всякий случай заменил на http://orabi:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort). По этой строке должно откликаться развернутое ранее Вами приложение.

cd $CLIENT_HOME/src/oracle/spatial/ws/svrproxy
gedit TestWfsCsBase.java

image

8. Запустим OC4J:

cd $OC4J_HOME/bin
./oc4j –start

Дождемся пока запустится

image

Теперь будем тестить наши источники данных.

1. Откройте браузер и введите адрес Enterprise Management Console (здесь orabi – имя моего сервера, где развернут OC4J):

http://orabi:8888/em/

image

2. Перейдем на закладку Administration

image

3. Кликнем на значек рядом с пунктом JDBC Resources

image

4. Будем теперь нажимать ссылку Test Connection рядом с каждым пунктом

image

5. Тестирование должно проходить корректно:

image

image

Все на этом WFS сервер можно считать развернутым ;) Пока непонятно как к нему цепляться :))) Сейчас над этим работаем.

2 комментария:

Timur Akhmadeev комментирует...

>>Пока непонятно как к нему цепляться :)))
Если нужно по-быстрому потестировать веб-сервис, рекомендую soapUI. Достаточно подуснуть ему wsdl-ку + url webservice'а, а он сгенерит нужные реквесты в которые надо будет только подставить нужные данные. Удобно.

Alexander Ryndin комментирует...

Цепляться к нему хочется чем-то, умеющим работать с графикой. Например MapServer, uDig, Arcgis...
В принципе, сам веб-сервис запускается, у него есть свой веб-интерфейсик, позволяющий его дергать. Но сами слои данных опубликовать неполучилось. Это веб-интерфейс не видит ни одного слоя. Немного будет больше времени - найдем решение :)