应用程序中的数据源资源定义
应用程序可以在注释或者部署描述符中定义数据源。本主题描述了与在服务器、节点、集群或者单元级别定义的 WebSphere® Application Server 数据源的相似性和兼容性。还讨论了数据源定义中的可选功能。
数据源定义的标准属性
注释元素 | 描述符元素 | 注释 |
---|---|---|
name | name | 数据源的 JNDI 名称。此名称必须位于 java:global、java:app、java:module 或 java:comp 名称空间中。 |
className | class-name | JDBC 驱动程序中用于实现 javax.sql.XADataSource、javax.sql.ConnectionPoolDataSource 或 javax.sql.DataSource 的标准类名。 |
databaseName | database-name | 向 JDBC 驱动程序提供此值。 |
description | description | 向数据源 MBean 提供此值。 |
initialPoolSize | initial-pool-size | 将忽略此属性的值。在 WebSphere Application Server 中,初始池大小始终为 0。 |
isolationLevel | isolation-level | 等价于 WebSphere Application Server 数据源定制属性 webSphereDefaultIsolationLevel。这是新连接的缺省事务隔离级别。 |
loginTimeout | login-timeout | 向 JDBC 驱动程序提供此值。 |
maxIdleTime | max-idle-time | 等价于 WebSphere Application Server 连接池属性 unusedTimeout。在未提供连接池的客户机容器中将忽略此属性。 |
maxPoolSize | max-pool-size | 等价于 WebSphere Application Server 连接池属性 maxConnections。在未提供连接池的客户机容器中将忽略此属性。 |
maxStatements | max-statements | 定义连接池的最大语句数。在 WebSphere Application Server 中,每个合用的连接都有自己的语句高速缓存。因此,在连接池的 maxPoolSize 之间将划分 maxStatements(平均划分,向下舍入)。如果对于 maxPoolSize 无限制,那么会禁用语句池。 |
minPoolSize | min-pool-size | 等价于 WebSphere Application Server 连接池属性 minConnections。在未提供连接池的客户机容器中将忽略此属性。 |
password | password | 未指定密码的连接请求使用的缺省密码。请考虑使用认证别名,而不将用户名和密码硬编码到应用程序中。 |
portNumber | port-number | 向 JDBC 驱动程序提供此值。 |
serverName | server-name | 向 JDBC 驱动程序提供此值。 |
transactional | transactional | 在 WebSphere Application Server 中,transactional 属性将控制是否将连接加入 JTA 事务。当 transactional=false 时,不会将连接加入 JTA 事务,但是您仍然可以使用 autocommit=true 或者 connection.commit/rollback (autocommit=false) 对数据库运行事务。等价于 WebSphere Application Server 数据源定制属性 nonTransactionalDataSource 的对立面。 |
url | url | 向 JDBC 驱动程序提供此值。指定 URL 时,将忽略 databaseName、serverName 和 portNumber 值。 |
user | user | 未指定用户名的连接请求使用的缺省用户名。请考虑使用认证别名,而不将用户名和密码硬编码到应用程序中。 |
供应商属性和定制属性
可以将 JDBC 驱动程序供应商属性包括在数据源定义中。还可以将大多数 WebSphere Application Server 定制属性包括在数据源定义中。
@DataSourceDefinition
(
name="java:app/env/myDataSource",
className="org.apache.derby.jdbc.EmbeddedXADataSource40",
databaseName="myDB",
properties=
{
// Vendor properties for Derby Embedded JDBC driver:
"createDatabase=create",
"connectionAttributes=upgrade=true",
// Custom properties for WebSphere Application Server:
"connectionTimeout=60",
"dataStoreHelperClass=com.ibm.websphere.rsadapter.DerbyDataStoreHelper",
"validateNewConnection=true",
"validateNewConnectionRetryCount=5"
},
serverName=""
)
以下示例说明了如何将数据源定义包括在部署描述符中:<data-source>
<name>java:app/env/myDataSource</name>
<class-name>org.apache.derby.jdbc.EmbeddedXADataSource40</class-name>
<database-name>myDB</database-name>
<property><name>createDatabase</name><value>create</value></property>
<property><name>connectionAttributes</name><value>upgrade=true</value></property>
<property><name>connectionTimeout</name><value>60</value></property>
<property><name>dataStoreHelperClass</name><value>com.ibm.websphere.rsadapter.DerbyDataStoreHelper</value></property>
<property><name>validateNewConnection</name><value>true</value></property>
<property><name>validateNewConnectionRetryCount</name><value>5</value></property>
<server-name/>
</data-source>
以下是可以按此方式配置的 WebSphere Application Server 定制属性的列表:- 连接池属性:
- agedTimeout
- authDataAlias
- authMechanismPreference
- connectionTimeout
- defaultConnectionTypeOverride
- globalConnectionTypeOverride
- mappingConfigAlias
- purgePolicy
- reapTime
- stuckThreshold
- stuckTime
- stuckTimerTime
- surgeCreationInterval
- surgeThreshold
- testConnection
- testConnectionInterval
- XA_RECOVERY_AUTH_ALIAS
- 数据源定制属性:
- beginTranForResultSetScrollingAPIs
- beginTranForVendorAPIs
- connectionSharing
- enableMultithreadedAccessDetection
- errorDetectionModel
- freeResourcesOnClose
- oracleRACXARecoveryDelay(仅适用于 Oracle)
- preTestSQLString
- userDefinedErrorMap
- validateNewConnection
- validateNewConnectionRetryCount
- validateNewConnectionRetryInterval
- validateNewConnectionTimeout
资源引用
建议应用程序在访问数据源时始终使用资源引用,以便部署者更容易覆盖。
连接共享
缺省情况下,对于数据源定义,如果连接请求与最初为正在使用的现有连接所请求的设置相匹配 (connectionSharing=MatchOriginalRequest),那么该连接请求可以共享此连接。或者,可以通过使连接请求与该连接的当前状态相匹配 (connectionSharing=MatchCurrentState) 来完成连接共享。
生命周期
数据源定义的生命周期与用于定义它的应用程序的生命周期密切相关。因此,您可以更新应用程序以更改数据源定义,而不需要重新启动服务器。如果多个应用程序包括相同的数据源定义(例如,两个数据源定义具有完全相同的 java:global 名称、配置了完全相同的一组属性以及具有完全相同的属性值),那么在更新该数据源定义之前,必须卸载所有应用程序,然后再重新安装这些应用程序。
数据源定义之间存在冲突
应用程序、模块和组件应注意不要与另一个应用程序定义具有相同 java:global 名称的数据源,因为此过程会使应用程序无法共存。在应用程序中,模块和组件应注意不要与另一个模块或组件定义具有相同 java:app 名称的数据源。发生此冲突会导致应用程序安装失败。在模块中,组件应注意不要与其他组件定义具有相同 java:module 名称的数据源。发生此冲突会导致应用程序安装失败。在 Web 模块中,组件应注意不要与其他组件定义具有相同 java:comp 名称的数据源。发生此冲突会导致应用程序安装失败。