Acceda a las bases de datos desde el código Java™ incluido en el nodo JavaCompute.
Si utiliza JDBCProvider para conexiones de tipo 4 o MbSQLStatement, las bases de datos a las que se accede pueden participar en transacciones coordinadas globalmente. En los demás casos, el acceso a base de datos no se puede coordinar de forma global.
Puede establecer conexiones JDBC de tipo 4 para interactuar con bases de datos desde los nodos JavaCompute. El intermediario da soporte a controladores de tipo 4, pero no los proporciona. Debe obtener estos controladores del proveedor de la base de datos; para obtener información sobre los controladores soportados, consulte Bases de datos soportadas.
Si el intermediario se ejecuta en un sistema distribuido, puede configurar las bases de datos y las conexiones de modo que estén coordinadas con la actividad de otros recursos. La coordinación global en sistemas distribuidos la proporciona WebSphere MQ y puede incluir interacciones con bases de datos locales o remotas, incluidas las bases de datos remotas que se definen en sistemas z/OS. Si establece una conexión JDBC de tipo 4 a una base de datos desde un intermediario que se ejecuta en z/OS, no se proporciona coordinación. Para obtener información sobre cómo configurar conexiones y la coordinación, consulte Habilitación de conexiones JDBC con las bases de datos.
Para poder incluir esta función en el código que se escribe para el nodo, debe configurar el entorno necesario. Decida si la base de datos requiere la seguridad de acceso y si desea que las actualizaciones de la base de datos participen en transacciones coordinadas globalmente. Para las tareas necesarias y opcionales, consulte Habilitación de conexiones JDBC con las bases de datos.
Cuando haya configurado JDBCProvider, puede establecer una conexión JDBC de tipo 4 a la base de datos utilizando la llamada getJDBCType4Connection en la interfaz MbNode. En el siguiente código se proporciona un ejemplo de su uso:
public class MyJavaCompute extends MbJavaComputeNode {
public void evaluate(MbMessageAssembly inAssembly) throws MbException {
MbOutputTerminal out = getOutputTerminal("out");
MbMessage inMessage = inAssembly.getMessage();
// crear nuevo mensaje
MbMessage outMessage = new MbMessage(inMessage);
MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly,outMessage);
try {
// Obtener java.sql.Connection mediante un origen de datos JDBC Type4 - en este ejemplo, para un
// servicio configurable del intermediario JDBC denominado "MyDB2"
Connection conn = getJDBCType4Connection("MyDB2",
JDBC_TransactionType.MB_TRANSACTION_AUTO);
// Ejemplo del uso de la conexión para crear una java.sql.Statement
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet srs0 = stmt.executeQuery("SELECT NAME, CITY FROM MySchema.MyTable");
stmt.executeUpdate("UPDATE MySchema.MyTable SET CITY = \"Springfield\" WHERE Name = \"Bart\"");
.
// Realizar otras actualizaciones de base de datos
.
} catch (SQLException sqx ){
sqx.printStackTrace();
} finally {
// Borrar el contenido de outMessage
outMessage.clearMessage();
}
}
}
En este ejemplo:
Para indicar una anomalía (y retrotraer una transacción), emita una excepción desde el nodo JavaCompute y el intermediario gestionará la retrotracción.
El principal uso de la llamada getJDBCType4Connection se encuentra en el método evaluate() de un nodo JavaCompute, donde se utiliza para obtener una conexión JDBC gestionada por el intermediario.
Al utilizar getJDBCType4Connection en el método onitialize(), asegúrese de que se manejan las excepciones que se puedan producir en este proceso. Cualquier excepción no manejada hace que falle el despliegue o el arranque del flujo de mensajes. Para obtener más información, consulte Nodo JavaCompute.
La clase MbSQLStatement proporciona acceso de base de datos transaccional completo utilizando ESQL y ODBC. El gestor de recursos del intermediario coordina el acceso a la base de datos mediante MbSQLStatement. La coordinación global la proporciona WebSphere MQ en sistemas distribuidos y RSS en z/OS. Para obtener información sobre cómo configurar los recursos ODBC necesarios, consulte Habilitación de las conexiones ODBC con las bases de datos.
MbMessage newMsg = new MbMessage(assembly.getMessage());
MbMessageAssembly newAssembly = new MbMessageAssembly(assembly, newMsg);
String table = "dbTable";
MbSQLStatement state = createSQLStatement( "dbName",
"SET OutputRoot.XMLNS.integer[] = PASSTHRU('SELECT * FROM " + table + "');" );
state.setThrowExceptionOnDatabaseError(false);
state.setTreatWarningsAsErrors(true);
state.select( assembly, newAssembly );
int sqlCode = state.getSQLCode();
if(sqlCode != 0)
{
// Aquí realizar manejo de errores
}
getOutputTerminal("out").propagate(assembly);
Puede acceder a las API Java estándar en el código que se escribe para los nodos JavaCompute, incluidas las llamadas JDBC. Por ello puede utilizar las API de JDBC para conectarse a una base de datos, grabar en la base de datos o leer de la misma, y desconectarse de la base de datos. En sistemas operativos distintos de z/OS, el intermediario da soporte al código de conexión JDBC invocando los controladores JDBC de tipo 2 y de tipo 4 en este entorno, pero no los proporciona. Debe obtener estos controladores del proveedor de la base de datos. En z/OS, no se da soporte a los controladores de tipo 2.
Si elige utilizar este método para acceder a bases de datos, el intermediario no da soporte a la gestión de transacciones; el código debe gestionar las funciones de confirmación y retrotracción locales de los cambios realizados en la base de datos. El código también debe gestionar el ciclo de vida de conexión, la afinidad de hebra de conexión y la agrupación de conexiones. Cuando utiliza esta técnica también debe supervisar el acceso a bases de datos para asegurarse de que estas conexiones no causen ninguna interferencia con las conexiones que realiza el intermediario. En concreto, recuerde que los controladores de tipo 2 establecen un puente con una conexión ODBC que podría estar utilizándose en flujos de mensajes que acceden a bases de datos desde ESQL.