Definición de recurso de origen de datos en aplicaciones
Las aplicaciones pueden definir orígenes de datos en anotaciones o en el descriptor de despliegue. En este tema se revisan las similitudes y la compatibilidad con los orígenes de datos de WebSphere Application Server definidos en el nivel de servidor, nodo, clúster o célula. También se describen características opcionales de la definición de un origen de datos.
Propiedades estándar de la definición de un origen de datos
Elemento de la anotación | Elemento del descriptor | Comentarios |
---|---|---|
nombre | nombre | Nombre JNDI del origen de datos. El nombre debe estar en uno de los espacios de nombres java:global, java:app, java:module o java:comp. |
className | class-name | Nombre de clase plenamente cualificado del controlador JDBC que implementa javax.sql.XADataSource, javax.sql.ConnectionPoolDataSource o javax.sql.DataSource. |
databaseName | database-name | El valor se proporciona al controlador JDBC. |
descripción | descripción | El valor se proporciona al MBean del origen de datos. |
initialPoolSize | initial-pool-size | El valor de la propiedad se ignora. En WebSphere Application Server, el tamaño de la agrupación inicial es siempre 0. |
isolationLevel | isolation-level | Equivalente a la propiedad personalizada de origen de datos de WebSphere Application Server webSphereDefaultIsolationLevel. Es el nivel de aislamiento de transacción predeterminado para nuevas conexiones. |
loginTimeout | login-timeout | El valor se proporciona al controlador JDBC. |
maxIdleTime | max-idle-time | Equivalente a la propiedad de agrupación de conexiones de WebSphere Application Server, unusedTimeout. Esta propieddad se ignora en el contenedor de cliente donde no se proporciona ninguna agrupación de conexiones. |
maxPoolSize | max-pool-size | Equivalente a la propiedad de agrupación de conexiones de WebSphere Application Server maxConnections. Esta propieddad se ignora en el contenedor de cliente donde no se proporciona ninguna agrupación de conexiones. |
maxStatements | max-statements | Define el número máximo de sentencias para la agrupación de conexiones. En WebSphere Application Server, cada conexión agrupada tiene su propia memoria caché de sentencias. Por lo tanto, maxStatements se divide (por igual, redondeando hacia abajo) entre el maxPoolSize de la agrupación. Si maxPoolSize es ilimitado, la agrupación de sentencias está inhabilitada. |
minPoolSize | min-pool-size | Equivalente a la propiedad de agrupación de conexiones de WebSphere Application Server minConnections. Esta propieddad se ignora en el contenedor de cliente donde no se proporciona ninguna agrupación de conexiones. |
password | password | Contraseña predeterminada de las solicitudes de conexión que no especifican una contraseña. Considere utilizar un alias de autenticación en lugar de codificar el nombre de usuario y la contraseña en la aplicación. |
portNumber | port-number | El valor se proporciona al controlador JDBC. |
serverName | server-name | El valor se proporciona al controlador JDBC. |
transactional | transactional | En WebSphere Application Server, la propiedad transactional controla si la conexión se lista en las transacciones JTA. Cuando transactional=false, las conexiones no se listan en las transacciones JTA, pero aún puede ejecutar transacciones en la base de datos utilizando autocommit=true o connection.commit/rollback con autocommit=false. Equivalente al opuesto de la propiedad personalizada de origen de datos de WebSphere Application Server nonTransactionalDataSource. |
url | url | El valor se proporciona al controlador JDBC.Cuando se especifica un URL, los valores databaseName, serverName, portNumber se ignoran. |
user | user | Nombre de usuario predeterminado de las solicitudes de conexión que no especifican un nombre de usuario. Considere utilizar un alias de autenticación en lugar de codificar el nombre de usuario y la contraseña en la aplicación. |
Propiedades de proveedor y propiedades personalizadas
Las propiedades de proveedor del controlador JDBC pueden incluirse en la definición del origen de datos. La mayoría de las propiedades personalizadas de WebSphere Application Server también se pueden incluir en la definición del origen de datos.
@DataSourceDefinition
(
name="java:app/env/myDataSource",
className="org.apache.derby.jdbc.EmbeddedXADataSource40",
databaseName="myDB",
properties=
{
// Propiedades de proveedor para controlador JDBC Derby Embedded:
"createDatabase=create",
"connectionAttributes=upgrade=true",
// Propiedades personalizadas de WebSphere Application Server:
"connectionTimeout=60",
"dataStoreHelperClass=com.ibm.websphere.rsadapter.DerbyDataStoreHelper",
"validateNewConnection=true",
"validateNewConnectionRetryCount=5"
},
serverName=""
)
En el ejemplo siguiente se muestra cómo se incluye la definición del origen de datos en el descriptor de despliegue: <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>
A continuación se muestra una lista de propiedades personalizadas de
WebSphere Application Server que pueden configurarse de esta manera: - Propiedades de la agrupación de conexiones:
- agedTimeout
- authDataAlias
- authMechanismPreference
- connectionTimeout
- defaultConnectionTypeOverride
- globalConnectionTypeOverride
- mappingConfigAlias
- purgePolicy
- reapTime
- stuckThreshold
- stuckTime
- stuckTimerTime
- surgeCreationInterval
- surgeThreshold
- testConnection
- testConnectionInterval
- XA_RECOVERY_AUTH_ALIAS
- Propiedades personalizadas del origen de datos:
- beginTranForResultSetScrollingAPIs
- beginTranForVendorAPIs
- connectionSharing
- enableMultithreadedAccessDetection
- errorDetectionModel
- freeResourcesOnClose
- oracleRACXARecoveryDelay (sólo Oracle)
- preTestSQLString
- userDefinedErrorMap
- validateNewConnection
- validateNewConnectionRetryCount
- validateNewConnectionRetryInterval
- validateNewConnectionTimeout
Referencias de recursos
Se recomienda que las aplicaciones utilicen siempre las referencias de recursos al acceder a orígenes de datos, lo que facilita al desplegador su sustitución.
Compartimiento de conexiones
De forma predeterminada, para la definición de origen de datos, una solicitud de conexión puede compartir una conexión en uso existente si coincide con los valores solicitados originalmente para esa conexión (connectionSharing=MatchOriginalRequest). Como alternativa, se puede realizar la compartición de conexiones correlacionando la solicitud de conexión con el estado actual de la conexión (connectionSharing=MatchCurrentState).
Ciclo de vida
El ciclo de vida de una definición de origen de datos está vinculado al ciclo de vida de las aplicaciones que lo definen. Por consiguiente, puede actualizar la aplicación para cambiar la definición de origen de datos sin necesidad de reiniciar el servidor. Si varias aplicaciones incluyen la misma definición de origen de datos, por ejemplo, ambas definiciones de origen de datos tienen nombre java:global idénticos, conjuntos de propiedades idénticos configurados y valores idénticos de propiedades, todas las aplicaciones deben desinstalarse antes de actualizar la definición del origen de datos y volver a instalar las aplicaciones.
Conflictos entre definiciones de orígenes de datos
Las aplicaciones, módulos y componentes deben tener cuidado de no definir orígenes de datos con el mismo nombre java:global que otra aplicación, porque ese proceso hace que sea imposible que las aplicaciones coexistan. En una aplicación, los módulos y componentes deben tener cuidado de no definir los orígenes de datos con el mismo nombre java:app que otro módulo o componente. El conflicto hace que la instalación de la aplicación falle. En un módulo, los componentes deben tener cuidado de no definir orígenes de datos con el mismo java:module que otros componentes. El conflicto hace que la instalación de la aplicación falle. En el módulo web, los componentes deben tener cuidado de no definir orígenes de datos con el mismo nombre java:comp que otros componentes. El conflicto hace que la instalación de la aplicación falle.