Friday, February 10, 2012

建立 Oracle Spatial WFS Part I

環境
Oracle Database 11g Release 2 (11.2.0.2 以上)
Oraacle Weblogic 11g Release 1 (10.3.5)+
Oracle Spatial Web Service 架構圖如下:
不同於 Oracle WMS的架構是Spatial Web Service在Middleware上提供WS Server API,實際WS的處理則是在Oracle Database內;管理與設定工具也是建置於資料庫內(PL/SQL API)。
建立Oracle Spatial Web Service的主要步驟:
1. Deploy SDOWS Web 應用程式
2. 設定相關資料庫使用者帳號
3. 設定Middleware連接資料庫的data sources
4. 設定一般Web Service的參數
5. 重新啓動 SDO web Service

Deploy Spatial Web Service
實際上將"sdows.ear"佈署到middleware中間件應用伺服器。我們使用的middleware是WebLogic 10.3.5;建議使用最新的sdows.ear,sdows.ear會跟著資料庫軟體的安裝,放置於$ORACLE_HOME/md/jlib的目錄下。
我是將$ORACLE_HOME/md/jlib/sdows.ear複製至安裝的目錄"/home/oracle"
[以Linux為範例,先解開sdows.ear]
$ cp $ORACLE_HOME/md/jlib/sdows.ear /home/oracle/.
$ cd /home/oracle
[oracle@localhost ~]$ mv sdows.ear sdows.ear1
[oracle@localhost ~]$ mkdir sdows.ear
[oracle@localhost ~]$ cd sdows.ear
[oracle@localhost sdows.ear]$ /usr/java/default/bin/jar xvf ../sdows.ear1
[oracle@localhost sdows.ear]$ mv sdows.war sdows.war1
[oracle@localhost sdows.ear]$ mkdir sdows.war
[oracle@localhost sdows.ear]$ cd  sdows.war
[oracle@localhost sdows.war]$  /usr/java/default/bin/jar xvf ../sdows.war1

設定相關資料庫者帳號
Oracle資料庫預設管理者的帳號都是被鎖定的,需要被解開且重新設定其密碼
以資料庫系統管理者 (system)登入,執行下列SQL

-- 解除鎖定帳號
alter user mdsys account unlock;
alter user spatial_csw_admin_usr account unlock;
alter user spatial_wfs_admin_usr account unlock;

-- 設定管理者帳號的密碼(需要記住密碼,待會在設定WebLogic data sources時需要用到)
alter user mdsys identified by <password>;
alter user spatial_csw_admin_usr identified by <password>;
alter user spatial_wfs_admin_usr identified by <password>;

接下來要設定"匿名使用者",預設資料庫使用者名稱"SpatialWsXmlUser"。該使用者會處理所有傳入XML/HTTP的要求,透過MDSYS進行"proxy authentication",因此SpatialWsXmlUser的密碼跟本不重要(因為完全用不到),但不要設成很好猜到。若要修改"匿名者"的預設使用者名稱,則要一起修改"WSConfig.xml"所對應的使用者。
 -- 建立 "匿名使用者"使用者proxy authentication
create user spatialwsxmluser identified by whatever;
-- 給予"匿名使用者"連接資料庫的系統權限
grant create session to spatialwsxmluser;
-- 透過MDSYS資料庫使用者進行 proxy authentication
alter user spatialwsxmluser grant connect through mdsys;
-- 給予"匿名使用者"接受處理WFS與CSW外部要求的角色能力
grant wfs_usr_role to spatialwsxmluser;
grant csw_usr_role to spatialwsxmluser;

移除不必要角色密碼的設定(選項)

alter role WFS_USR_ROLE not identified;
alter role CSW_USR_ROLE not identified;
alter role SPATIAL_WFS_ADMIN not identified;
alter role SPATIAL_CSW_ADMIN not identified;

設定Middleware連接資料庫的data sources
這裏我們使用WebLogic 10.3.5 做為應用伺服器(middleware application server)。以下們要建立的data sources與相關資訊:
Data Source Name JNDI  Name Database User
Usage
WfsProxyConnection jdbc/WfsProxyConnectionCoreDS mdsys WFS User connections
WFS_ADMIN_CONN_NAME jdbc/WFS_ADMIN_CONN_NAME spatial_wfs_admin_usr WFS Administration
CatalogProxyConnection jdbc/CatalogProxyConnectionCoreDS mdsys CSW User connections
CSW_ADMIN_CONN_NAME jdbc/CSW_ADMIN_CONN_NAME spatial_csw_admin_usr CSW Administration
OpenLsProxyConnection jdbc/OpenLsProxyConnectionCoreDS mdsys OpenLS User connections
 在WebLogic Console (http://localhost:7001/console, for example),點選左邊選單Services->data Sources
在中間"Summary of JDBC Data Sources","Data Sources" 點選 'New","Generic Data Source";分別設定 "Name","JNDI Name","Database Type";Database Type 選 Oracle,按下一步
選擇Oracle JDBC Driver -- "Oracle's Driver (Thin) for Service connections: Versions: 9.0.1 and later";按下一步
點掉(unchecked) "Supports Global Transactions",按下一步
 設定Oracle JDBC連線資訊,按下一步
 按下"測試連線設定"(選項)
 結果顯示連線成功,則表示資料庫連線設定正確,按下一步
 設定Data Source至指定的 application servers,按下"完成"。
依次將要設定的Data Source 設定完成。

設定一般Web Service 的參數
如果都使用預設值,基本上沒有什麼要特別設定的。如果需要可以更改log的設定值,以方便追踪與除錯。WSConfig.xml位於 WEB-INF/conf/WSConfig.xml

<logging log_level="finest" log_thread_name="true"
         log_time="true">
   <log_output name="System.err" />
   <log_output name="log/ws.log" />
</logging>
如果有變動"匿名使用者"的預設使用者,也在此一併修改。

重新啓動 SDO Web Service
停止SDO Web Service:按下Deployments -> 點選 sdows -> 點 "Stop" -> "Force Stop Now"
啓動SDO Web Service:按下Deployments -> 點選 sdows -> 點 "Start" -> "Servicing all requests"


No comments: