在 OC4J 中安装并配置 Spatial Web 服务

本教程描述如何发布使用空间数据的 web 服务。

大约 1 个小时

本教程包括下列主题:

将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。 (警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。

本教程介绍了 Oracle Spatial 对空间 Web 服务的支持。Oracle Spatial 提供以下类型的 Web 服务:

Web 地理特征服务 (WFS) 允许用户根据其与位置和其他非空间属性的关系查找/更新各种地理特征(如道路、河流等)。该 web 服务是 WFS 1.0.0 的开放 GIS 协会 (OGC) 规范在 Oracle Spatial 中的具体实现。

Web 目录服务 (CSW) 可发布和搜索数据、服务和相关信息对象的描述信息(元数据)的集合。该 web 服务是 CSW 2.0.0 的 OGC 规范在 Oracle Spatial 中的具体实现。

开放位置服务 (OpenLS) 提供基于位置的服务,如地理编码、绘图、路由和黄页。地理编码使用户可将空间位置(经度和纬度坐标)与邮政地址关联起来。

绘图使用户可根据空间位置信息生成地图。黄页使用户可按名称和类别根据公司与某一位置的关系查找公司。路由为单条或多条路线提供行车信息与说明。

利用该 web 服务可访问 Oracle Spatial 中的各种现有功能,如符合 OGC 定义的 OpenLS 1.1 规范的路由、地理编码、绘图和目录功能。

在本教程中,您将学习如何在 OC4J (Oracle Containers for Java) 中安装并配置 Spatial Web 服务。

您将在标题为“运行 Oracle Spatial Web 服务”的教程中学习如何运行上述各种 web 服务(WFS、CSW 和 OpenLS)的 web 服务客户端演示

开始本教程之前,您应该:

安装 Oracle 数据库 11g 软件并创建一个数据库。

安装 Oracle 数据库 11g 配套 CD。

OTN 下载 Oracle JDeveloper 并将其解压缩到任一目录下。

Javasoft 下载并安装最新的 J2SE。

创建一个工作目录并将 wsclient.jar$ORACLE_HOME/md/demo/ws/client 目录复制到工作目录。

xsds.jar 文件下载到工作目录。

确保以下用户未被锁定:mdsys、spatial_csw_admin_usr 和 spatial_wfs_admin_usr。打开 SQL*Plus,并执行以下命令:

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(以便安装 Spatial Web 服务)和 Spatial Web 服务演示用户所需的步骤。执行以下步骤:

配置示例用户

1.

从终端窗口中,输入以下命令:

cd <jdevhome directory>/j2ee/home/config
gedit system-jazn-data.xml

其中 <jdevhome directory> 是 JDeveloper 解压缩到的目录位置。

2.

这里打开 exampleusers.txt 文件。选择所有文本,然后按下 Ctrl + C 键进行复制。切换到 Linux 桌面的 gedit 窗口。按下 Ctrl + V 键将以下语句添加到 system-jazn-data.xml 文件中最后的 <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>

在 gedit 窗口中,从 File 菜单中选择 Save 保存更改,或单击工具栏上的 Save 图标。从 File 菜单中,选择 Quit 退出编辑器。

返回主题

配置 OC4J 路径设置

1.

从终端窗口中,输入以下命令:

cd <jdevhome directory>/bin
gedit oc4j

其中 <jdevhome directory> 是 JDeveloper 解压缩到的目录位置。

注:如果文件以只读模式打开,请退出编辑器。在终端窗口中,以 root 身份登录,并使用 chmod 命令将访问权限更改为读写并可执行。然后在 gedit 中重新打开该文件。更改访问模式的命令如下:

chmod 777 oc4j
2.

将以下语句添加到文件开头。

ORACLE_HOME=<jdevhome directory>
JAVA_HOME=<jdk home directory>

保存文件并退出编辑器。(不能以 oracle 用户身份保存文件;以 su 身份登录可以保存文件。)

返回主题

创建并注册共享库

1.

从终端窗口中,输入以下命令以创建共享库目录:

mkdir <jdevhome directory>/j2ee/home/shared-lib/sdows
mkdir <jdevhome directory>/j2ee/home/shared-lib/sdows/1.0

其中 <jdevhome directory> 是 JDeveloper 解压缩到的目录位置。

2.

要在 server.xml 文件中注册该库,输入以下命令:

cd <jdevhome directory>/j2ee/home/config
gedit 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>

保存文件并退出编辑器。

3.

确保当前的工作目录为 <jdevhome directory>/j2ee/home/config。要在 application.xml 文件中注册该库,输入以下命令:

gedit application.xml

然后在 </imported-shared-libraries> 语句前添加以下语句。

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

保存文件并退出编辑器。

返回主题

复制文件到共享库目录

1.

从终端窗口中输入以下命令,将 $ORACLE_HOME/md/jlib 和 $ORACLE_HOME/rdbms/jlib 中的文件复制到刚刚创建的共享库目录中。

cd <jdevhome directory>/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 .

其中 <jdevhome directory> 是 JDeveloper 解压缩到的目录位置,$ORACLE_HOME 是 Oracle 数据库主目录。

返回主题

修补 xmlparserv2.xdk 文件

1.

从终端窗口中输入以下命令,将 xmlparserv2.jar 文件从 $ORACLE_HOME/lib 复制到 <jdevhome directory>/lib 目录中。

cd <jdevhome directory>/lib
cp $ORACLE_HOME/lib/xmlparserv2.jar .

其中 <jdevhome directory> 是 JDeveloper 解压缩到的目录位置,$ORACLE_HOME 是 Oracle 数据库主目录。

返回主题

提取 wsclient.jar 文件

1.

从终端窗口中输入以下命令,提取本教程提供的 wsclient.jar 文件。

从终端窗口中,输入以下命令:

cd $CLIENT_HOME
jar -xvf wsclient.jar

其中 $CLIENT_HOME 是希望从其提取 wsclient.jar 文件的目录位置。您可以在任一目录中提取 wsclient.jar 文件。

返回主题

本部分描述如何启动 oc4j 实例。执行以下步骤:

1.

从终端窗口中,输入以下命令:

cd <jdevhome directory>/bin
./oc4j -start

其中 <jdevhome directory> 是 JDeveloper 解压缩到的目录位置。

注:系统会提示您指定一个管理员口令,输入 admin。再次输入 admin 确认口令。您应该能看到消息“Oracle Containers for J2EE 10g (10.1.3.1.1) initialized”,这表明 OC4J 服务器已启动。

返回主题列表

本部分描述如何在上一步启动的 oc4j 实例中部署 Spatial Web 服务。执行以下步骤:

1.

打开另一个终端窗口,输入以下命令设置 $JAVA_HOME 变量。确保设置了 ORACLE_HOME 变量。如果没有,使用导出命令将 ORACLE_HOME 变量设置为 Oracle 数据库主目录。

export JAVA_HOME=/usr/java/<jdk dir>/

2.

现在,可以部署 EAR 文件。从终端窗口中,输入以下命令:

$JAVA_HOME/bin/java -jar <jdev_home>/j2ee/home/admin.jar ormi://localhost oc4jadmin admin
 -deploy -file $ORACLE_HOME/md/jlib/sdows.ear -deploymentName sdows -bindWebApp 
default-web-site

其中 $ORACLE_HOME 是 Oracle 数据库主目录。

返回主题列表

本部分描述如何配置 Spatial Web 服务将要使用的数据源。执行以下步骤:

1.

配置数据源之前,应停止 oc4j。从终端窗口中,输入以下命令:

cd <jdevhome directory>\bin
./oc4j -shutdown -port 23791 -password admin

注:在 <jdevhome directory>/j2ee/home/config/rmi.xml 文件中可找到端口号。

2.

从终端窗口中,输入以下命令:

cd <jdevhome directory>/j2ee/home/applications/sdows/META-INF
gedit data-sources.xml

其中 <jdevhome directory> 是 JDeveloper 解压缩到的目录位置。

对原生数据源 url、用户和口令参数一一进行配置。

对于以下原生数据源:

将每个 url、用户和口令参数更改为:

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

对于原生数据源 jdev-connection-CSW_ADMIN_CONN_NAMEjev-connection-WFS_ADMIN_CONN_NAME,只将 url 和口令参数更改为:

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

完成后,保存并关闭文件。

3.

在任意 URL 位置加载 OGC WFS XSD。提取 xsds.jar 文件到 <jdevhome directory>/j2ee/home/default-web-app/examples/servlets/ 目录。注意,将在此位置存储从 xsds.jar 文件提取出的文件。

要更改为提取 xsds.jar 文件的目录位置,输入以下命令:

cd <jdevhome directory/j2ee/home/default-web-app/examples/servlets/

您必须已经将 xsds.jar 文件(从“前提条件”部分)下载到某一目录位置。要从 xsds.jar 文件中提取文件,输入以下命令:

jar -xvf <directorylocation where you downloaded the xsds.jar file>/xsds.jar 

4.

编辑 WSConfig.xml 文件,以指定 xsd 文件位置 url。从终端窗口中,输入以下命令:

cd <jdevhome directory>/j2ee/home/applications/sdows/sdows/WEB-INF/conf
gedit WSConfig.xml

其中 <jdevhome directory> 是 JDeveloper 解压缩到的目录位置。

在 WSConfig.xml 文件中,将 wfs-xsd-loc-url 更改为保存 XSDS 的路径,如下所示:

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

记得清除注释标记。

保存文件并退出编辑器。

5.

编辑 wfsrelmd.sql、wfsdocmd.sql 和 cswmd.sql,将 $DATA_DIR_PATH 更改为 src 目录所在的目录。src 目录在您提取 wsclient.jar 文件时创建。

从终端窗口中,输入以下命令:

cd $CLIENT_HOME/src/sql
gedit wfsrelmd.sql
其中 $CLIENT_HOME 是从其提取 wsclient.jar 文件的目录位置。 使用 src 目录替换 $DATA_DIR_PATH,如下面的屏幕截图所示。 保存更改。

同样,对 wfsdocmd.sql 进行编辑(在同一文件夹中),将 $DATA_DIR_PATH 更改为 src 目录的路径,如以下屏幕截图所示。保存文件。


按屏幕截图所示编辑 cswmd.sql:(您将发现 $DATA_DIR_PATH 变量几乎在文件最末端,所以您需要向下滚动窗口。)


保存文件并退出编辑器。

6.

更改连接字符串(数据库机器名、端口号、Oracle SID 等)以便在以下文件中反映实际信息:

- 对于 WFS:oracle.spatial.ws.admindemo.WFSAdminDemo.java 文件
— 对于 CSW:oracle.spatial.ws.admindemo.CSWAdminDemo.java 文件

从终端窗口中,输入以下命令:

cd $CLIENT_HOME/src/oracle/spatial/ws/admindemo
gedit WFSAdminDemo.java
其中 $CLIENT_HOME 是从其提取 wsclient.jar 文件的目录位置。
编辑以下语句:

OracleConnection conn =
(OracleConnection) DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl","WFS_ADMIN_USR","WFS_ADMIN_USR");
保存此文件。 同样地,编辑 CSWAdminDemo.java 文件。


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

保存文件并退出编辑器。

7.

在 TestWfsCsBase.java 文件中,更该 myPort.setEndpoint("http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort") 以便反映 OC4J 服务器机器名和端口号对于本教程,您可以输入 localhost 作为机器名,输入 8888 作为端口号。

从终端窗口中,输入以下命令:

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

其中 $CLIENT_HOME 是从其提取 wsclient.jar 文件的目录位置。

更改为
 myPort.setEndpoint
  ("http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort");

8.

现在,您需要重启 oc4j。从终端窗口中,输入以下命令:

cd <jdevhome directory>/bin
./oc4j -start

其中 <jdevhome directory> 是 JDeveloper 解压缩到的目录位置。

返回主题列表

以下步骤帮助您验证是否已正确配置了演示所需的数据源参数。执行以下步骤:

1.

打开一个浏览器窗口,并输入以下 URL:

http://<hostname>:8888/em 

对于本教程环境,您可使用 localhost 作为主机名。 以 oc4jadmin 身份登录,口令为 admin。此口令为您启动 oc4j 时创建的口令。然后,单击 Login

2.

在 Supply Administration Credentials 页面中,为 oc4j-administrators 组中的一个用户输入证书。Application Server Control 需要这些证书来维护代理连接。输入 admin 作为口令。

3.

单击 Administration 选项卡。

4.

单击 Services:JDBC Resources 任务的 Go to Task 图标。

5.

会列出您的数据源。单击某一数据源的 Test Connection 图标。

将显示 Test Connection 页面,单击 Test

将显示成功连接确认信息。

单击 Logout

返回主题列表

现在,您可以编译并运行客户端了。执行以下步骤:

1.

在 compileAndRunClient.sh 文件中设置以下变量:

输入以下命令:

cd $CLIENT_HOME/src
gedit compileAndRunClient.sh

其中 $CLIENT_HOME 是从其提取 wsclient.jar 文件的目录位置。

下面的屏幕截图显示了已配置的参数。

保存文件并退出编辑器。

2.

在终端窗口中,输入以下命令:

./compileAndRunClient.sh

返回主题列表

在本教程中,您学习了如何:

配置和启动 OC4J
部署 EAR 文件
配置和验证数据源
配置并运行客户端

返回主题列表

将鼠标移到该图标上可以隐藏所有屏幕截图。