Стандарт 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.
Как показано на слайде:
-
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>
В файле нажмем Ctrl-O для сохранения, затем Ctrl-X для выхода.
Сконфигурируем пути OC4J
1. В терминальном окне введем следующие команды:
cd $OC4J_HOME/bin
nano oc4j
2. Добавьте следующие строки в начало:
ORACLE_HOME=<путь к OC4J>
JAVA_HOME=<путь к JDK>
Если при сохранении возникнет ошибка [ Could not open file for writing: Permission denied ] – необходимо зайти под пользователем root и выполнить следующие команды
cd $OC4J_HOME/bin
chmod 777 oc4j
затем повторить действия, которые не получились.
Создадим и зарегистрируем разделяемые библиотеки
1. Из терминального окна вводим следующие команды для создания каталога разделяемых библиотек:
mkdir $OC4J_HOME/j2ee/home/shared-lib/sdowsmkdir $OC4J_HOME/j2ee/home/shared-lib/sdows/1.0
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 для выхода.
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>
Сохраняем и выходим.
Скопируем файлы в папку разделяемых библиотек
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 .
Пропатчим xmlparser2.jar файл
1. Из терминального окна выволним следующие команды, чтобы скопировать файл xmlparserv2.jar из инсталляции ORACLE Database 11g в OC4J:
Извлекаем файлы из 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”
Развертывание EAR файлов
В этой секции описано, как развернуть Spatial Web сервис в экземпляре oc4j, запущенном на предыдущем шаге
1. Откройти браузер и введите в строке адреса http://orabi:8888/em/, где orabi – это имя или ip адрес Вашего сервера, где стартован OC4J.
2. В открывшемся окне введите пароль (мы условились, что это admin)
3. Перейдем на закладку Applications и нажмем кнопку Deploy
4. Укажите, что Ваш файл уже лежит на сервере и введите путь к файл sdows.ear. Он расположен в стандартной инсталляции Oracle Database в папке $ORACLE_HOME/md/jlib. В моем случае это папка /u01/app/oracle/product/11.1.0/db_1/md/jlib/sdows.ear. Затем нажмите Next
5. В имени приложений укажите sdows, затем Next
6. На последней странице нажмите Deploy. Дождитесь завершения развертывания приложения сообщением COMPLETES.
7. В результате приложение должно запуститься
Конфигурирование Ваших источников данных
В этой секции описано как сконфигурировать источники данных, используемые нашими веб-сервисами. Выполним следующие шаги:
1. Завершим выполнение ранее запущенной OC4J комбинацией клавиш Ctrl-C:
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"
Вот примерно так
Для источников jdev-connection-CSW_ADMIN_CONN_NAME и jdev-connection-WFS_ADMIN_CONN_NAME нужно будет ввести только строку подключения и пароль. Пользователь уже задан:
url="jdbc:oracle:thin:@localhost:1521:orcl"
password="oracle"
Сохраняйте 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>
Не забудьте убрать коментирующие теги.
Сохраните и выйдите из 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):
Аналогичные действия проделаем для файлов wfsdocmd.sql и cswmd.sql:
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");
Аналогично для CSWAdminDemo.java
cd $CLIENT_HOME/src/oracle/spatial/ws/admindemo
nano CSWAdminDemo.java
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
8. Запустим OC4J:
cd $OC4J_HOME/bin
./oc4j –start
Дождемся пока запустится
Теперь будем тестить наши источники данных.
1. Откройте браузер и введите адрес Enterprise Management Console (здесь orabi – имя моего сервера, где развернут OC4J):
2. Перейдем на закладку Administration
3. Кликнем на значек рядом с пунктом JDBC Resources
4. Будем теперь нажимать ссылку Test Connection рядом с каждым пунктом
5. Тестирование должно проходить корректно:
Все на этом WFS сервер можно считать развернутым ;) Пока непонятно как к нему цепляться :))) Сейчас над этим работаем.
2 комментария:
>>Пока непонятно как к нему цепляться :)))
Если нужно по-быстрому потестировать веб-сервис, рекомендую soapUI. Достаточно подуснуть ему wsdl-ку + url webservice'а, а он сгенерит нужные реквесты в которые надо будет только подставить нужные данные. Удобно.
Цепляться к нему хочется чем-то, умеющим работать с графикой. Например MapServer, uDig, Arcgis...
В принципе, сам веб-сервис запускается, у него есть свой веб-интерфейсик, позволяющий его дергать. Но сами слои данных опубликовать неполучилось. Это веб-интерфейс не видит ни одного слоя. Немного будет больше времени - найдем решение :)
Отправить комментарий