WebSphere Message Broker, Versión 8.0.0.5 Sistemas operativos: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte la información sobre la última versión del producto en IBM Integration Bus, Versión 9.0

Interactuar con bases de datos utilizando el nodo JavaCompute

Acceda a las bases de datos desde el código Java™ incluido en el nodo JavaCompute.

Elija entre las siguientes opciones para la interacción de base de datos:

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.

Conexiones de JDBCProvider para tipo 4 del intermediario

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.

Utilice las conexiones de JDBCProvider para tipo 4 del intermediario para sacar provecho de las siguientes ventajas:
  • Utilice los recursos de configuración de intermediario para definir la conexión y para proporcionar seguridad opcional, antes que codificar estas acciones.
  • Configure el intermediario y las bases de datos para coordinar el acceso y las actualizaciones con otros recursos a los que se puede acceder desde los flujos de mensajes, excepto cuando el intermediario se ejecuta en z/OS.
  • Utilice la getJDBCType4Connection de API Java del intermediario para iniciar la conexión y, a continuación, realice operaciones SQL utilizando las API de JDBC estándar. El intermediario gestiona las conexiones, la afinidad de hebras, la agrupación de conexiones y el ciclo de vida. Si una conexión permanece desocupada durante aproximadamente un minuto, o si el flujo de mensajes finaliza, el intermediario cierra la conexión.

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:

  • MyDB2 es el nombre del servicio configurable JDBCProvider. Utilice el nombre del servicio que ha creado para conectarse a la base de datos.
  • MySchema es el nombre de esquema de la base de datos (no el nombre de la base de datos).
  • MB_TRANSACTION_AUTO define el nivel de coordinación de transacciones que el código necesita. Sólo se da soporte a este valor e indica que la coordinación en el nodo se hereda del configurado a nivel de flujo de mensajes.

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.

WebSphere Message Broker gestiona las conexiones JDBC de las maneras siguientes:
  • Conexiones no agrupadas:
    • WebSphere Message Broker crea una conexión JDBC a petición para cada instancia de flujo de mensajes que necesite una.
    • Cada conexión JDBC se asocia con la instancia de flujo de mensajes para la que se ha creado. Esta asociación se mantiene hasta que se cierra la conexión.
    • Cada conexión JDBC que está desocupada durante 60 segundos se cierra y ya no está asociada con una instancia de flujo de mensajes.
    • Después de cerrar una conexión JDBC que se ha asociado con una instancia de flujo de mensajes, si la misma instancia de flujo de mensajes requiere una conexión JDBC, WebSphere Message Broker crea una conexión JDBC nueva a petición.
  • Conexiones agrupadas:
    • Cuando una instancia de flujo de mensajes requiere una conexión JDBC, WebSphere Message Broker asigna una conexión no utilizada de la agrupación.
    • Si se están utilizando todas las conexiones JDBC agrupadas y no se ha alcanzado el tamaño de agrupación máximo, WebSphere Message Broker crea una nueva conexión JDBC agrupada. El tamaño de agrupación máximo se especifica en la propiedad maxConnectionPoolSize de Servicio configurable JDBCProviders.
    • Cada conexión JDBC agrupada permanece asociada a una instancia de flujo de mensajes sólo para el proceso de un mensaje de entrada.
    • Cuando una instancia de flujo de mensajes finaliza el proceso de un mensaje de entrada, se elimina la asociación con una conexión JDBC y se devuelve la conexión JDBC a la agrupación.
    • Cada conexión JDBC agrupada que está desocupada durante 15 minutos se cierra y se elimina de la agrupación.
    • Las conexiones JDBC agrupadas no son aplicables a los nodos DatabaseRetrieve y DatabaseRoute.
Al utilizar la llamada getJDBCType4Connection, el código debe cumplir con las restricciones siguientes:
  • No incluya código que realice llamadas de transacción explícita como COMMIT o ROLLBACK. Esta restricción incluye llamadas de transacción explícitas en un procedimiento almacenado de base de datos.
  • No cierre una conexión o almacene en memoria caché una conexión en el nodo JavaCompute.
Un uso secundario de la llamada getJDBCType4Connection se realiza en el método onitialize() de un nodo JavaCompute. El método onitialize()se llama una vez, durante el despliegue o en el arranque de intermediario, antes de que el flujo de mensaje empiece a procesar la entrada. Puede utilizar la llamada getJDBCType4Connection en el método onitialize() para completar el trabajo con una base de datos antes de que se inicie el flujo de mensajes; por ejemplo:
  • Para crear una caché en memoria de datos de sólo lectura que se recuperan de una base de datos, a fin de reducir la necesidad de consultar la base de datos en el flujo de mensajes
  • Para crear una base de datos con datos antes de que se inicie el flujo de mensajes

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.

MbSQLStatement

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.

Cree instancias de la clase MbSQLStatement utilizando el método createSQLStatement() de MbNode, pasando al método el origen de datos ODBC, una sentencia ESQL de intermediario y, de forma opcional, la modalidad de transacción.
  • Si se llama a select() en este objeto, se devolverán los resultados de la consulta.
  • Al llamar a execute() en este objeto, se ejecuta una consulta donde no se devuelven resultados, por ejemplo actualizar una tabla.
El siguiente código Java muestra cómo acceder a una base de datos utilizando MbSQLStatement:
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); 

La API de JDBC en un entorno no gestionado

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.

SQLJ

SQLJ es una extensión Java que se puede utilizar para incluir sentencias SQL estáticas dentro del código Java. Cree archivos SQLJ utilizando el WebSphere Message Broker Toolkit. El gestor de recursos de intermediario no coordina el acceso de base de datos al utilizar SQLJ.
  1. Habilite la función SQLJ en el WebSphere Message Broker Toolkit:
    1. Seleccione Ventana > Preferencias.
    2. Expanda General.
    3. Seleccione Prestaciones.
    4. Seleccione Datos.
    5. Pulse Aceptar.
  2. Cree un archivo SQLJ en un proyecto Java:
    1. Pulse con el botón derecho del ratón en Proyecto Java en el que desea crear el archivo.
    2. Seleccione Nuevo > Otro.
    3. Expanda Datos.
    4. Expanda Aplicaciones SQLJ.
    5. Seleccione Archivo SQLJ.
    6. Pulse Siguiente.
    7. Siga las instrucciones que aparecen en el asistente Asistente Archivo SQLJ nuevo para generar el archivo SQLJ.
Ahora puede hacer referencia a la clase de este archivo SQLJ desde una clase de nodo JavaCompute de este proyecto o de otro proyecto referenciado.
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Comentarios

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Última actualización:
        
        Última actualización: 2015-02-28 16:58:36


Tema de tareaTema de tarea | Versión 8.0.0.5 | ac30494_