使用 Apache Tomcat Web 服务器时适用于 Java 的数据源配置

数据源是一个指定的数据库连接。您必须在 Web 应用程序服务器中指定数据源,才能将要素服务发布到 ArcGIS Spatial Data Server for Java Platform。数据源对象配置有一个基于 Java 命名和目录接口 (JNDI) API 的命名服务。

安装并配置 Tomcat 后,请执行以下操作以便其可与 ArcGIS Spatial Data Server 配合使用:

将 JDBC 驱动程序放置在 Tomcat 主目录下

必须将 DBMS 的 JDBC 驱动程序放到 $CATALINA_HOME 的 lib 目录下。

更改 Tomcat 的 context.xml 文件

如果使用 Apache Tomcat Web 服务器,则必须在默认的 Web 配置文件 context.xml 中指定数据源。要编辑 context.xml,请执行以下步骤:

  1. 导航至 Tomcat 安装目录中的 conf 目录。
  2. 创建 context.xml 文件的备份副本。
  3. 在文本编辑器中打开 context.xml 文件。
  4. 更改<资源名称>元素中的信息以将其用于您的站点。(本主题中提供了多个示例。)<Resource name> 元素嵌套在 <Context> 元素中。

    <Context> 元素中可以包含其他元素,但请确保 <Resource name> 元素处于 <Context> 元素的下一级且未嵌套在某个其他元素中。

  5. 保存并关闭 context.xml 文件。
  6. 重新启动 Tomcat 服务器。

如果您未向 context.xml 文件添加数据源,或 <Resource name> 元素属性前不带有 jdbc/,则您将收到以下错误消息:

Name jdbc is not bound in this Context

示例

以下是在 Tomcat context.xml 文件中为每种支持的数据库进行数据源配置的相关示例。针对每种数据库的两种类型的连接池的示例分别为:数据库连接池 (DBCP) 和 JDBC 连接池。

注注:

Apache 建议使用 JDBC 连接池。有关详细信息以及 <Resource name> 元素中可用属性的相关说明,请参阅 Apache Tomcat 文档。

PostgreSQL

以下是使用 DBCP 的 PostgreSQL <Resource> 元素的示例。用 X 表示的值代表您将要提供的站点的特定信息。

<Context>
    <Resource name="jdbc/X" 
              auth="Container"
              type="javax.sql.DataSource" 
              driverClassName="org.postgresql.Driver"
              url="jdbc:postgresql://X:X/X"
              username="X" 
              password="X" 
              maxActive="X" 
              maxIdle="X" 
              maxWait="X"/>
</Context>

在此示例中,资源名称是 jdbc/pgservername,数据源是服务器 pgservername 上监听端口 5432 的 PostgreSQL 数据库 (pgdbname)。

<Context>
    <Resource name="jdbc/pgservername_pgdbname_pgusername" 
              auth="Container"
              type="javax.sql.DataSource" 
              driverClassName="org.postgresql.Driver"
              url="jdbc:postgresql://pgservername:5432/pgdbname"
              username="pgusername" 
              password="pgpassword246" 
              maxActive="20" 
              maxIdle="10" 
              maxWait="-1"/>
</Context>

以下仍是 PostgreSQL 数据库的示例,但使用了 JDBC 连接池:

<Context>
     <Resource 
               type="javax.sql.DataSource"
               name="jdbc/pgservername_pgdbname_pgusername" 
               factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
               driverClassName="org.postgresql.Driver"
               url="jdbc:postgresql://pgservername:5432/pgdbname" 
               username="pgusername"
               password="pgpassword246"
               initialSize="0"
               maxActive="80" 
               maxIdle = "30" 
               minIdle="20"
               timeBetweenEvictionRunsMillis="30000"
               minEvictableIdleTimeMillis="60000"
               testOnBorrow="true"
               validationQuery="SELECT 1" 
               validationInterval="30000" 
               removeAbandoned="true"
               removeAbandonedTimeout="60" 
               logAbandoned="true" 
               abandonWhenPercentageFull="60"
               jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"/>
</Context>

Oracle

以下是 Oracle <Resource> 元素的示例。用 X 表示的值代表您将要提供的站点的特定信息。

<Context>
    <Resource name="jdbc/X" 
              auth="Container"
              type="javax.sql.DataSource" 
              driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@X:X:X"
              username="X" 
              password="X" 
              maxActive="X" 
              maxIdle="X"
              maxWait="X"/>
</Context>

在此示例中,资源名称是 jdbc/oraservername,数据源是服务器 oraservername 上监听数据库端口 1521 的 Oracle 数据库。Oracle SID 是 osid。必须在注册数据源之前配置 Oracle SID。

<Context>
    <Resource name="jdbc/oraservername_osid_orausername" 
              auth="Container"
              type="javax.sql.DataSource" 
              driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@oraservername:1521:osid"
              username="orausername" 
              password="0rapassword123" 
              maxActive="20" 
              maxIdle="10"
              maxWait="-1"/>
</Context>

以下仍是相同 Oracle 数据库的示例,但使用了 JDBC 连接池:

<Context>
    <Resource 
              type="javax.sql.DataSource"
              name="jdbc/oraservername_osid_orausername" 
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
              driverClassName="oracle.jdbc.driver.OracleDriver"
              url="jdbc:oracle:thin:@oraservername:1521:osid" 
              username="orausername"
              password="0rapassword123"
              initialSize="0"
              maxActive="80" 
              maxIdle = "30" 
              minIdle="20"
              timeBetweenEvictionRunsMillis="30000"
              minEvictableIdleTimeMillis="60000"
              testOnBorrow="true"
              validationQuery="SELECT 1 FROM DUAL" 
              validationInterval="30000" 
              removeAbandoned="true"
              removeAbandonedTimeout="60" 
              logAbandoned="true" 
              abandonWhenPercentageFull="60"
              jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"/>
</Context>

DB2

以下是 DB2 <Resource> 元素的示例。用 X 表示的值代表您将要提供的站点的特定信息。

<Context>
    <Resource name="jdbc/X" 
              auth="Container"
              type="javax.sql.DataSource" 
              driverClassName="com.ibm.db2.jcc.DB2Driver"
              url="jdbc:db2://X:X/X"
              username="X" 
              password="X" 
              maxActive="X" 
              maxIdle="X"
              maxWait="X"/>
</Context>

在此示例中,资源名称是 jdbc/db2servername,DB2 服务器是 db2servername,数据库端口是 60000,登记数据库是 db2dba。

<Context>
    <Resource name="jdbc/db2servername_db2dba_db2username" 
              auth="Container"
              type="javax.sql.DataSource" 
              driverClassName="com.ibm.db2.jcc.DB2Driver"
              url="jdbc:db2://db2servername:60000/db2dba"
              username="db2username" 
              password="db2password975" 
              maxActive="20" 
              maxIdle="10"
              maxWait="-1"/>
</Context>

以下仍是相同 DB2 数据库的示例,但使用了 JDBC 连接池:

<Context>
    <Resource 
              type="javax.sql.DataSource"
              name="jdbc/db2servername_db2dba_db2username" 
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
              driverClassName="com.ibm.db2.jcc.DB2Driver"
              url="jdbc:db2://db2servername:60000/db2dba" 
              username="db2username"
              password="db2password975"
              initialSize="0"
              maxActive="80" 
              maxIdle = "30" 
              minIdle="20"
              timeBetweenEvictionRunsMillis="30000"
              minEvictableIdleTimeMillis="60000"
              testOnBorrow="true"
              validationQuery="VALUES 1" 
              validationInterval="30000" 
              removeAbandoned="true"
              removeAbandonedTimeout="60" 
              logAbandoned="true" 
              abandonWhenPercentageFull="60"
              jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"/>
</Context>

9/15/2013