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

среда, 16 июля 2008 г.

Инсталляция Oracle Mapviewer 10.1.3.1 на Oracle BEWeblogic 10A

Oracle Mapviewer представляет собой стандартный пакет EAR, который можно разворачивать на любом J2EE-совместимом сервере приложений, а не только на Oracle Application Server (OAS).

К сожалению, даже J2EE-сервера имеют некоторые различия в реализации. Так, к примеру, OAS поддерживает разворачивание EAR архивов. При этом он распаковывает war архивы.
Oracle Weblogic не распаковывает архив. Запуск приложения происходит непосредственно из war архива. При этом у Weblogic - это поведение по умолчанию.

Для того, чтобы поведение было аналогично поведению OAS необходимо вручную распаковать архив и осуществлять развертывание в режиме exploded. Связано это с некорректной работой функции servletconfig.getServletContext().getRealPath("/"); Для приложений развернутых в виде war-архива эта функция возвращает NULL.

Ниже я привожу пошаговую инструкцию по инсталляции Oracle Mapviewer на Oracle Weblogic 10.

1. Скачиваем Oracle Weblogic 10 MP1.
2. Скачиваем Oracle Mapviewer 10.1.3.1 из ноты 7195504 на metalink
3. Инсталлируем Oracle Weblogic 10 с настройками по-умолчанию.
4.1 Запускаем Oracle Weblogic: $BEA_HOME/wlserver_10.0/server/bin/startWLS.sh.
4.2 Отвечаем на вопросы. Ждем пока появится сообщение 5.1 Копируем на сервер файл mapviewer.ear из пакета Oracle Mapviewer в любой каталог. И переименовываем его в mapviewer1.ear
5.2 Распаковываем mapviewer1.ear в каталог mapviewer.ear
5.3 Внутри каталога есть файл web.war. Переименовываем его в web1.war. Распаковываем его в каталог web.war
5.4 В поставке Oracle Weblogic 10 отсутствует библиотека xmlparserv2.jar. Ее можно взять из поставки OC4J и скопировать в каталог mapviewer.ear/web.war/WEB-INF/lib/
6.1 В новом терминальном окне идем, в каталог, куда распаковали mapviewer.ear
6.2 Запускаем настройку среды для WebLogic: ". $BEA_HOME/wlserver_10.0/server/bin/setWLSEnv.sh"
6.3 Разверачиваем приложение командой: java weblogic.Deployer -user system -password weblogic -deploy /home/oracle/mapviewer.ear
Читать далее...

четверг, 3 июля 2008 г.

При вот такой ошибке
javax.servlet.ServletException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified



Проблемы не с драйвером, а с самой XE.
Я, наверно, все возможные варианты перепробывал, и драйверов, и локалей, и параметров ОС.

Jdbc с XE работает только с англицкой локалью, это известная трабла, и во многих постах и статьях отмечена.

Вопрос был скорее в том, почему сервлеты BPEL-а не цепляют локаль из системы, если поставить языковые параметры ОС на английские. Ведь все jdbc-приложения (SQLDeveloper, Enterprise Manager 10g, irca - скрипты создания схем) в этом случае нормально работают с XE. И где, раз так, задать параметры локали для java вручную.

Нашел - в %ORACLE_HOME%\opmn\conf\opmn.xml (и ещё в opmn.xml.BPM и opmn.xml.ESB), есть параметры запуска инстансов сервера приложений. Туда и добавил параметры "-Duser.language=en -Duser.region=us". Если запуск осуществляется вручную, то те же самые параметры добавляем к вызову java-машины, например 

java -Duser.language=e -Duser.region=us myjavaclass 


Читать далее...
Oracle+SSO
Доступ к пространственным данным должен осуществляться после авторизации пользователя. Oracle Mapviewer как составная часть платформы Oracle Application Server предоставляет возможность интеграции системы аутенфикации.
Благодаря этому возможно:
1. Аутенфицировать пользователя на доступ к пространственным данным в Mapviewer
2. Авторизовать пользователя только на доступ к ограниченному объему данных в зависимости от привилегий.

Инструкция.
1. Инсталлируем базу данных Oracle, заливаем тестовую схему MVDEMO
2. Инсталлируем OC4J
3. Инсталлируем Mapviewer
4. Настраиваем аутенфикацию через SSO
4.1 Создаем пользователей через EM или через пакет jazn.jar, добавляем пользователей в роль users:
java -jar jazn.jar -user oc4jadmin -password oracle -adduser jazn.com max max
java -jar jazn.jar -user oc4jadmin -password oracle -adduser jazn.com george george
java -jar jazn.jar -user oc4jadmin -password oracle -adduser jazn.com stacy stacy
java -jar jazn.jar -user oc4jadmin -password oracle -adduser jazn.com alex alex

java -jar jazn.jar -user oc4jadmin -password oracle -grantrole users jazn.com max
java -jar jazn.jar -user oc4jadmin -password oracle -grantrole users jazn.com george
java -jar jazn.jar -user oc4jadmin -password oracle -grantrole users jazn.com stacy
java -jar jazn.jar -user oc4jadmin -password oracle -grantrole users jazn.com alex
4.2 Далее для простоты введем поле account_mgr и в него поместим имя менеджера для этого клиента. Разбиваем по фамилии клиента: если с буквы A и до G, то менеджер alex, с G и до M - george, и т.д.

alter table customers add (account_mgr varchar2(64));
update customers set account_mgr='alex' where substr(name,1,1)>='A' and substr(name,1,1) <'G'; update customers set account_mgr='george' where substr(name,1,1)>='G' and substr(name,1,1) <'M'; update customers set account_mgr='max' where substr(name,1,1)>='M' and substr(name,1,1) <'S'; update customers set account_mgr='stacy' where substr(name,1,1)>='S';

4.3 Создаем пакет, который в обязательно порядке имеет процедуру SET_USER и CLEAR_USER. При каждом обращении будет вызываться процедура SET_USER, а по завершению запроса CLEAR_USER. Пакет запоминает имя пользователя. Это имя в дальнейшем будет использовано для ограничения видимости клиентов.

CREATE OR REPLACE PACKAGE web_user_info
AS
PROCEDURE set_user (p_name IN VARCHAR2);
PROCEDURE clear_user;
FUNCTION get_user
RETURN VARCHAR2;
END;
/

CREATE OR REPLACE PACKAGE BODY web_user_info
AS
w_name VARCHAR2 (32767);

PROCEDURE set_user (p_name IN VARCHAR2)
AS
BEGIN
w_name := LOWER (p_name);
END;

PROCEDURE clear_user
AS
BEGIN
w_name := null;
END;

FUNCTION get_user
RETURN VARCHAR2
AS
BEGIN
RETURN w_name;
END;
END;
/

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

CREATE OR REPLACE VIEW customers_view
AS
SELECT * FROM customers
WHERE account_mgr = web_user_info.get_user;

4.5 Записываем метаданные для созданного представления (представление будет не видно в MapBuilder, поэтому создаем метаданные вручную)

insert into user_sdo_geom_metadata
select 'CUSTOMERS_VIEW', column_name, diminfo, srid
from user_sdo_geom_metadata where table_name='CUSTOMERS';

insert into user_sdo_themes values('MYCUSTOMERS',NULL,'CUSTOMERS_VIEW','LOCATION',
'











');

4.6 Также необходимо добавить новый безопасный источник данных. Делается это в файле
$OC4J_HOME\j2ee\home\applications\mapviewer\web\WEB-INF\conf\mapViewerConfig.xml. После изменения необходимо перегрузить OC4J.
Источник данных должен выглядеть примерное вот так



4.7 Возьмем теперь один из примеров Oracle Maps приложения (пусть будет $OC4J_HOME\j2ee\home\applications\mapviewer\web\fsmc\tutorial\samples\themeBasedFOIVisible.html). Переименуем в themeBasedFOIVisibleSec.html. Отредактируем строчку

var themebasedfoi2 = new MVThemeBasedFOI('themebasedfoi2','mvdemo.customers');

чтобы было вот так

var themebasedfoi2 = new MVThemeBasedFOI('themebasedfoi2','mvdemo_sec.mycustomers');

4.8 Теперь необходимо прописать, что при доступе к этой странице должна осуществляться аутенфикация пользователя. Делается это в файле
$OC4J_HOME\j2ee\home\applications\mapviewer\web\WEB-INF\web.xml

Добавляем сразу за

Secure mapping demo page
MapViewer secure map rendering demo
/demo/secure-mapping.html

наш страницу

Secure mapping demo page
MapViewer secure map rendering demo
/fsmc/tutorial/samples/themeBasedFOIVisibleSec.html


4.9 Перезапускаем OC4J и заходим по адресу
http://server:8888/mapviewer/fsmc/tutorial/samples/themeBasedFOIVisibleSec.html

4.10 На экран будет попадать только информация о заказчиках, вошедшего в систему пользователя.

Читать далее...

вторник, 24 июня 2008 г.

Работа с Georaster

1. Инсталляция
Начиная с Oracle Database 10g в базе данных появилась новая возможность по хранению географически привязанных растровых данных, таких как спутниковые снимки. К сожалению, с самого начала Oracle не предложил инструментария для работы с растровыми данными, полагаясь на партнеров. В 11-ой версии все стало лучше. Давайте посмотрим как можно загружаться данные.
1. После инсталляции примеров, в папке $ORACLE_HOME\md\demo\georaster\java есть загрузчик в базу данных.
2. Есть загрузчик от сторонних разработчиков - http://www.pcigeomatics.com/download_georaster_loader.php. Его можно проинсталлировать и получить ключик для использования. Объявлено, что он бесплатный.
К сожалению ни тот ни другой не автоматизурют процедуру заполнения метаданных для георастра. Для этого необходимо скачать инструмент http://dl.maptools.org/dl/geotiff/libgeotiff/.

2. Загрузка
Сначала необходимо создать 2 таблицы: таблицу с полем SDO_GEORASTER и таблицы, где непосредственно будут храниться метаданные.
Кроме это необходимо создать DML триггеры.
You should create the necessary DML trigger or triggers immediately after you create a GeoRaster table, and you must create the trigger or triggers before you perform any operations on the table.

Each time you call the SDO_GEOR_UTL.createDMLTrigger procedure successfully, GeoRaster creates a trigger with a unique name. (All GeoRaster DML trigger names start with the string GRDMLTR_.) When you drop a GeoRaster table, all GeoRaster triggers associated with the table are automatically dropped also.

If you have created the GeoRaster DML trigger on a column, GeoRaster automatically performs the following actions when the trigger is fired as a result of a DML operation affecting that column:

  • After an insert operation, the trigger inserts a row with the GeoRaster table name, GeoRaster column name, raster data table name, and rasterID value into the USER_SDO_GEOR_SYSDATA view (described in Section 2.4). If an identical entry already exists, an exception is raised.

  • After an update operation, if the new GeoRaster object is null or empty, the trigger deletes the old GeoRaster object. If there is no entry in the USER_SDO_GEOR_SYSDATA view for the old GeoRaster object (that is, if the old GeoRaster object is null), the trigger inserts a row into that view for the new GeoRaster object. If there is an entry in the USER_SDO_GEOR_SYSDATA view for the old GeoRaster object, the trigger updates the information to reflect the new GeoRaster object.

  • After a delete operation, the trigger deletes raster data blocks for the GeoRaster object in its raster data table, and it deletes the row in the USER_SDO_GEOR_SYSDATA view for the GeoRaster object.


create table city_data
(city_name varchar2(50),
population number,
georaster sdo_georaster);

call SDO_GEOR_UTL.createDMLTrigger('CITY_DATA', 'GEORASTER');

create table city_data_rdt_01
of sdo_raster (primary key (
rasterId,
pyramidLevel,
bandBlockNumber,
rowBlockNumber,
columnBlockNumber))
lob(rasterblock) store as (nocache nologging);

После этого можно создать пустые объекты, в которые будет осуществляться загрузка Georaster объектов (для PCI Geomatics это можно не делать).

-- Initialize a GeoRaster image with RASTERID=1
INSERT INTO city_data
values ('Boston', 625494,
sdo_geor.init('city_data_rdt_01', 1));

Имена таблицы RDT (где непосредственно хранятся данные георастра), судя по всем, должны быть уникальны в рамках все базы данных. Иначе получаем вот такую ошибку

ERROR at line 1:
ORA-13403: invalid rasterDataTable specification: GPS.MOSCOW_DATA_RD
ORA-06512: at "MDSYS.MD", line 1723
ORA-06512: at "MDSYS.MDERR", line 17
ORA-06512: at "MDSYS.SDO_GEOR_DEF", line 116
ORA-06512: at "MDSYS.SDO_GEOR_INT", line 2482
ORA-06512: at "MDSYS.SDO_GEOR_AUX", line 34
ORA-06512: at "GPS.GRDMLTR_73192_3", line 1
ORA-04088: error during execution of trigger 'GPS.GRDMLTR_73192_3'

3. Отображение в Map
После того как данные загружены - попробуем отобразить их в Mapviewer. Тут для России есть один очень существенный нюанс. Необходимо в запуск MapBuilder включить библиотеку orai18n.jar, иначе будет выдаваться вот такая ошибка (спасибо братьям китайцам http://hi.baidu.com/tiny_lk/blog/item/78e4510f5285bc2f6159f34e.html - им тоже тяжело с их иероглифами, как и нам с кириллицей)
Can not find a GeoRaster object with specified rdt and rid
Команда "правильного" запуска MapBuilder (библиотеку
orai18n.jar кладем в тот же каталог, где и MapBuilder и из него и запускаем):
java -cp orai18n.jar;mapbuilder.jar oracle.mapviewer.builder.MapBuilder

Здесь создаем Georaster theme. Процесс создания совершенно простой.
Создаем BASEMAP, с включенной темой Georaster.
Создаем MapTile на базе BASEMAP.
Кроме всего прочего для корректного показа нужно создать индекс на свойство spatialextent:
CREATE INDEX geor_idx ON moscow_data(georaster.spatialextent)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

Все. После этого базе TILECACHE можно создавать страничку в Mapviewer




Читать далее...

понедельник, 2 июня 2008 г.

Oracle Spatial for GPS vehicle monitoring

Сегодня появилась потребность создать небольшую, но интересную презентацию по Oracle Spatial. Был выбрано создание софтинки для GPS мониторинга.

Начнем с заполнения данных.
Одна из проблем - отсутствие примеров для России. Сильно не вдаваясь в детали - берем данные из штатов от Navteq :)
Берем отсюда
http://www.oracle.com/technology/products/spatial/htdocs/spatial_partners_data.html и заливаем в базу:
  1. Распаковываем данные
  2. Из каталога с данными подключаемся к базе sqlplus system/password@orcl
  3. Создаем пользователя world_sample
    SQL> CREATE USER world_sample IDENTIFIED BY world_sample; User created. SQL> GRANT CONNECT, RESOURCE TO world_sample; Grant succeeded.
  4. Запускаем загрузку данных
    SQL> @load_sample_data.sql
    Enter value for directory_name: C:\distrib\spatial data\world_sample
    Enter value for user_name: world_sample
    Password:
    oracle (пароль пользователя system)
  5. Теперь можно посмотреть на эти данные. Для этого в поставке есть файлик worldmaps.jspx
    cd c:\oc4j\j2ee\home\applications\mapviewer\web\fsmc
    copy "C:\distrib\spatial data\world_sample\worldmaps.jspx" .
  6. Прописываем источник данных для world_sample
  7. Запускаем oc4j из каталога c:\oc4j\bin
    cd c:\oc4j\bin

    oc4j -start



Читать далее...