Aplique la extensión de WebSphere, la clase GenericDataStoreHelper, para
crear su propia clase de ayudante de almacén de datos para orígenes de datos a los que el
servidor de aplicaciones no da soporte. Con esta clase ayudante, la configuración JDBC puede utilizar funciones específicas de base de datos durante las transacciones.
Antes de empezar
Si está utilizando una configuración con un origen de datos que no está soportado
por el servidor de aplicaciones, es posible que desee crear un ayudante de almacén de
datos personalizado.
Este ayudante le permitirá reforzar la base de datos para que pueda realizar funciones durante una transacción que, de otro modo, no están disponibles. Tendrá que crear una clase
DataStoreHelper definida por el usuario y existe información para crear un nuevo manejador de excepciones para capturar excepciones que se pueden crear con el uso del manejador de datos personalizado.
Acerca de esta tarea
Deprecated feature: El campo de constantes
CUSTOM_HELPER de la API de la clase com.ibm.websphere.rsadapter.DataStoreHelper
está en desuso.
Si crea su propia clase de implementación DataStoreHelper, no invoque setHelperType(DataStoreHelper.CUSTOM_HELPER). En su lugar, permita que el valor de
HelperType se establezca mediante la clase de implementación de la que hereda.
depfeat
Procedimiento
- Cree una clase que amplíe los ayudantes del almacén de
datos existentes. Utilice el siguiente código como ejemplo; este tipo de
origen de datos está basado en un proveedor de JDBC definido por el usuario:
package com.ibm.websphere.examples.adapter;
import java.sql.SQLException;
import javax.resource.ResourceException;
import com.ibm.websphere.appprofile.accessintent.AccessIntent;
import com.ibm.websphere.ce.cm.*;
import com.ibm.websphere.rsadapter.WSInteractionSpec;
/**
* Ejemplo de clase DataStoreHelper, donde se muestra cómo crear un DataStoreHelper definido
por el usuario.
* La implementación de cada método se proporciona sólo como ejemplo. Probablemente se necesitará más
* información para un DataStoreHelper personalizado creado para su uso en una aplicación real.
* En este ejemplo, se alterará temporalmente doStatementCleanup(),getIsolationLevel() y se establecerá
* la correlación de excepciones userDefined.
*/
public class ExampleDataStoreHelper extends com.ibm.websphere.rsadapter.GenericDataStoreHelper
{
public ExampleDataStoreHelper(java.util.Properties props)
{
super(props);
// Actualizar los valores de DataStoreHelperMetaData para este ayudante.
getMetaData().setGetTypeMapSupport(false);
// Actualizar las correlaciones de excepciones para este ayudante.
java.util.Map xMap = new java.util.HashMap();
// Añadir un Código de error que se correlacione con StaleConnectionException.
xMap.put(new Integer(2310), StaleConnectionException.class);
// Añadir un Código de error que se correlacione con DuplicateKeyException.
xMap.put(new Integer(1062), DuplicateKeyException.class);
// Añadir una correlación de Estado de SQL con la ColumnNotFoundException definida por el usuario
xMap.put("S0022", ColumnNotFoundException.class);
// deshacer una correlación de Estado de SQL StaleConnection heredada.
xMap.put("S1000", Void.class);
setUserDefinedMap(xMap);
// Si está ampliando la clase de ayudante, normalmente no es
// necesario emitir 'getMetaData().setHelperType(...)' porque el
// ayudante personalizado heredará el tipo de ayudante de su clase
// padre.
}
public void doStatementCleanup(java.sql.PreparedStatement stmt) throws SQLException
{
// Limpiar la sentencia para que se pueda guardar en la memoria caché y reutilizar.
stmt.setCursorName("");
stmt.setEscapeProcessing(true);
stmt.setFetchDirection(java.sql.ResultSet.FETCH_FORWARD);
stmt.setMaxFieldSize(0);
stmt.setMaxRows(0);
stmt.setQueryTimeout(0);
}
public int getIsolationLevel(AccessIntent intent) throws ResourceException
{
// Determinar el nivel de aislamiento a partir de AccessIntent.
// establecer nivel de aislamiento predeterminado de WebSphere en TRANSACTION_SERIALIZABLE.
if (intent == null) return java.sql.Connection.TRANSACTION_SERIALIZABLE;
return intent.getConcurrencyControl() == AccessIntent.CONCURRENCY_CONTROL_OPTIMISTIC ?
java.sql.Connection.TRANSACTION_READ_COMMITTED :
java.sql.Connection.TRANSACTION_REPEATABLE_READ;
}
public int getLockType(AccessIntent intent) {
if ( intent.getConcurrencyControl() == AccessIntent.CONCURRENCY_CONTROL_PESSIMISTIC) {
if ( intent.getAccessType() == AccessIntent.ACCESS_TYPE_READ ) {
return WSInteractionSpec.LOCKTYPE_SELECT;
}
else {
return WSInteractionSpec.LOCKTYPE_SELECT_FOR_UPDATE;
}
}
return WSInteractionSpec.LOCKTYPE_SELECT;
}
}
- Opcional: Cree su propia clase de manejador de excepciones. Utilice el código siguiente como guía:
package com.ibm.websphere.examples.adapter;
import java.sql.SQLException;
import com.ibm.websphere.ce.cm.PortableSQLException;
/**
* Ejemplo de subclase PortableSQLException, donde se muestra cómo crear una excepción definida
* por el usuario para la correlación de excepciones.
*/
public class ColumnNotFoundException extends PortableSQLException
{
public ColumnNotFoundException(SQLException sqlX)
{
super(sqlX);
}
}
- Compile la o las nuevas clases DataStoreHelper que acaba de crear. Para compilarlas, necesitará los siguientes archivos JAR en la classpath:
- Si está utilizando un entorno de desarrollo como, por ejemplo, Eclipse, necesita establecer estos archivos JAR en la classpath para la
compilación. A continuación, cree un archivo JAR del proyecto cuando haya terminado de editar los archivos. Consulte la documentación de ayuda del entorno de desarrollo para obtener las instrucciones específicas.
- Si no tiene un entorno de desarrollo y está utilizando el compilador
javac:
- Cree su archivo .java que amplíe GenericDataStoreHelper o cualquier helper del
almacén de datos como se muestra en el
Paso 1.
- Vaya al directorio inicial cuando haya terminado de editar el archivo o archivos con el programa de utilidad de línea de mandatos.
- Establezca la classpath utilizando el mandato siguiente:
- Compile la clase o las clases. Por ejemplo, en sistemas operativos Windows escriba el mandato siguiente. Esto compilará todos los
archivos java del directorio que especifique:
C:\javac su_directorio\*.java
- Desde el directorio Java, cree un archivo JAR de todos los archivos de clases compilados del directorio. Por ejemplo, escriba el mandato siguiente en sistemas operativos Windows (cambie
miArchivo por el nombre de su archivo JAR):
C:\Java> jar cf myFile.jar *.class
Para obtener más información acerca de cómo utilizar el compilador javac, vaya al sitio
Web de Oracle del compilador Java™.
- Coloque los archivos JAR compilados en un directorio y
actualice la classpath para que el proveedor JDBC incluya dicha ubicación. Por ejemplo, si el archivo JAR es c:\myFile.jar,
a continuación, asegúrese de que modifica la classpath JDBC para que incluya c:\myFile.jar.
- Pulse .
- En el campo Classpath, añada la ubicación de los
archivos JAR que ha compilado. Por ejemplo, pulse Intro en el campo y
añada una línea nueva:
c:\myFile.jar
- Configure el servidor de aplicaciones para utilizar la clase nueva personalizada DataStoreHelper.
- Desde la consola administrativa, seleccione Recursos >
JDBC > Orígenes de datos.
- Seleccione el origen de datos que desee configurar con la clase
DataStoreHelper personalizada.
- En la sección Nombre de clase de ayudante del almacén de datos,
seleccione Especifique un ayudante del almacén de datos definido por el usuario.
- Escriba el nombre de la clase para el ayudante del almacén de datos que ha creado.
- Aplique los cambios y seleccione Aceptar.