使用 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,请执行以下步骤:
- 导航至 Tomcat 安装目录中的 conf 目录。
- 创建 context.xml 文件的备份副本。
- 在文本编辑器中打开 context.xml 文件。
- 更改<资源名称>元素中的信息以将其用于您的站点。(本主题中提供了多个示例。)<Resource name> 元素嵌套在 <Context> 元素中。
<Context> 元素中可以包含其他元素,但请确保 <Resource name> 元素处于 <Context> 元素的下一级且未嵌套在某个其他元素中。
- 保存并关闭 context.xml 文件。
- 重新启动 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>