WebSphere Message Broker, Versão 8.0.0.5 Sistemas operacionais: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte as informações sobre a versão mais recente do produto em IBM Integration Bus, Versão 9.0

Interagindo com Bancos de Dados Usando o Nó JavaCompute

Acesse bancos de dados a partir do código Java™ incluído no nó JavaCompute.

Escolha as seguintes opções para interação com o banco de dados:

Se você utilizar Provedor JDBC para conexões do tipo 4 ou MbSQLStatement, os bancos de dados que você acessa poderão participar de transações coordenadas globalmente. Em todos os outros casos, o acesso ao banco de dados não pode ser globalmente coordenado.

Intermediário JDBCProvider para Conexões Tipo 4

É possível estabelecer conexões JDBC tipo 4 para interagir com bancos de dados de seus nós JavaCompute. O intermediário suporta os drivers tipo 4, mas não fornece os mesmos. Você deve obter estes drivers a partir do fornecedor de seu banco de dados; para obter informações sobre drivers suportados, consulte Bancos de Dados Suportados.

Utilize o intermediário JDBCProvider para conexões tipo 4 para se beneficiar das seguintes vantagens:
  • Utilize os recursos de configuração do intermediário para definir a conexão e fornecer segurança adicional, como preferência a codificar essas ações.
  • Configure o broker e os bancos de dados para coordenar o acesso e as atualizações com outros recursos que você acessa de seus fluxos de mensagens, exceto quando o broker está executando em z/OS.
  • Use a API Java do broker getJDBCType4Connection para iniciar a conexão, em seguida, execute operações SQL usando as APIs JDBC padrão. O broker gerencia as conexões, a afinidade do encadeamento, a definição do conjunto de conexões e o ciclo de vida. Se uma conexão estiver inativa por aproximadamente 1 minuto ou se o fluxo de mensagens se completar, o broker irá fechar a conexão.

Se o intermediário estiver em execução em um sistema distribuído, é possível configurar os bancos de dados e as conexões a serem coordenados com outra atividade de recurso. A coordenação global em sistemas distribuídos é fornecida pelo WebSphere MQ e pode incluir interações com bancos de dados local e remoto, incluindo bancos de dados remotos que são definidos nos sistemas z/OS. Se você estabelecer uma conexão JDBC tipo 4 com um banco de dados a partir de um broker que esteja em execução no z/OS, a coordenação não será fornecida. Para obter informações sobre como configurar conexões e coordenação, consulte Ativando as Conexões JDBC para os Bancos de Dados.

Antes de poder incluir essa função no código gravado para o nó, você deve configurar o ambiente necessário. Decida se seu banco de dados requer segurança de acesso e se você deseja que as atualizações de banco de dados participem de transações coordenadas globalmente. Para as tarefas necessárias e opcionais, consulte Ativando as Conexões JDBC para os Bancos de Dados.

Quando tiver configurado o JDBCProvider, será possível estabelecer uma conexão JDBC tipo 4 com o banco de dados usando a chamada getJDBCType4Connection na interface MbNode. O código a seguir fornece um exemplo de sua utilização:

public class MyJavaCompute extends MbJavaComputeNode {
    public void evaluate(MbMessageAssembly inAssembly) throws MbException {
      MbOutputTerminal out = getOutputTerminal("out");
      MbMessage inMessage = inAssembly.getMessage();

      // criar nova mensagem
      MbMessage outMessage = new MbMessage(inMessage);
      MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly, outMessage);

      try {
        // Obtenha uma java.sql.Connection utilizando uma origem de dados JDBC Tipo 4 - neste exemplo para um 
        // serviço configurável do broker JDBC chamado "MyDB2"  

        Connection conn = getJDBCType4Connection("MyDB2",JDBC_TransactionType.MB_TRANSACTION_AUTO);

        // Exemplo de como utilizar a Conexão para criar um 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\"");
        .
        // Executar outras atualizações de banco de dados   
        . 

      } catch (SQLException sqx ){
        sqx.printStackTrace();
      } finally {
        // Limpar a outMessage
        outMessage.clearMessage();
      }     
    }  
  }  

Nesse exemplo:

  • MyDB2 é o nome do serviço JDBCProvider configurável. Utilize o nome do serviço que foi criado para conectar a seu banco de dados.
  • MySchema é o nome do esquema do banco de dados (não o nome do banco de dados).
  • MB_TRANSACTION_AUTO define o nível de coordenação de transação necessário para o nó. Apenas esse valor é suportado e indica que a coordenação no nó é herdada da coordenação no nível do fluxo de mensagens.

Para indicar uma falha (e retroceder uma transação), emita uma exceção a partir do nó JavaCompute e o broker tratará o retrocesso.

O uso primário da chamada getJDBCType4Connection está no método evaluate() de um nó JavaCompute, no qual ela é usada para obter uma conexão JDBC que é gerenciada pelo broker.

O WebSphere Message Broker gerencia as conexões JDBC das seguintes maneiras:
  • Conexões não no conjunto:
    • O WebSphere Message Broker cria uma conexão JDBC sob demanda para cada instância de fluxo de mensagens que requer uma.
    • Cada conexão JDBC é associada à instância de fluxo de mensagens para a qual ela foi criada. Essa associação será mantida até que a conexão seja fechada.
    • Cada conexão JDBC que ficar inativa por 60 segundos será fechada e não mais associada a uma instância de fluxo de mensagens.
    • Depois que uma conexão JDBC que foi associado a uma instância de fluxo de mensagens for fechada, se a mesma instância de fluxo de mensagens exigir uma conexão JDBC, o WebSphere Message Broker criará uma nova conexão JDBC sob demanda.
  • Conexões no conjunto:
    • Quando uma instância de fluxo de mensagens requer uma conexão JDBC, o WebSphere Message Broker designa uma conexão não usada do conjunto.
    • Se todas as conexões JDBC do conjunto estiverem sendo usadas, e o tamanho máximo do conjunto não tiver sido atingido, o WebSphere Message Broker criará uma nova conexão JDBC do conjunto. O tamanho máximo do conjunto é especificado na propriedade maxConnectionPoolSize do Serviço Configurável JDBCProviders.
    • Cada conexão JDBC do conjunto permanece associada a uma instância de fluxo de mensagens apenas para o processamento de uma mensagem de entrada.
    • Quando uma instância de fluxo de mensagens conclui o processamento de uma mensagem de entrada, a associação a uma conexão JDBC é removida e a conexão JDBC é retornada ao conjunto.
    • Cada conexão JDBC do conjunto que ficar inativa por 15 minutos será fechada e removida do conjunto.
    • Conexões JDBC de conjunto não são aplicáveis aos nós DatabaseRetrieve e DatabaseRoute.
Ao usar a chamada getJDBCType4Connection, seu código deve estar em conformidade com as restrições a seguir:
  • Não inclua código que faça chamadas de transação explícita, como COMMIT ou ROLLBACK. Essa restrição inclui chamadas de transação explícita em um procedimento armazenado do banco de dados.
  • Não feche uma conexão nem armazene em cache uma conexão no nó JavaCompute.
Um uso secundário da chamada getJDBCType4Connection está no método onitialize() de um nó JavaCompute. O método onitialize() é chamado uma vez, durante a implementação ou na inicialização do broker, antes do fluxo de mensagens iniciar o processamento de entrada. É possível usar a chamada getJDBCType4Connection no método onitialize() para concluir o trabalho com um banco de dados antes de o fluxo de mensagens ser iniciado; por exemplo:
  • Para criar um cache de memória de dados somente leitura que são recuperados de um banco de dados, para reduzir a necessidade de consultar o banco de dados no fluxo de mensagens
  • Para preencher um banco de dados com dados antes de o fluxo de mensagens ser iniciado

Ao usar o getJDBCType4Connection no método onitialize(), assegure-se de que quaisquer exceções que possam ocorrer nesse processamento sejam manipuladas. Qualquer exceção não manipulada causará falha na implementação ou inicialização do fluxo de mensagens. Para obter informações adicionais, consulte Nó JavaCompute.

MbSQLStatement

A classe MbSQLStatement fornece acesso ao banco de dados transacional completo usando ESQL e ODBC. O gerenciador de recursos do intermediário coordena acesso ao banco de dados ao utilizar MbSQLStatement. A coordenação global é fornecida pelo WebSphere MQ em sistemas distribuídos e pelo RRS no z/OS. Para obter informações sobre como configurar os recursos ODBC necessários, consulte Ativando as Conexões ODBC para os Bancos de Dados.

Crie instâncias da classe MbSQLStatement usando o método createSQLStatement() de MbNode, passando para o método a origem de dados ODBC, uma instrução EQSL do broker e, opcionalmente, o modo de transação.
  • Chamar select() nesse objeto retorna os resultados da consulta.
  • Chamar execute() nesse objeto executa uma consulta na qual nenhum resultado é retornado, como atualizar uma tabela.
O seguinte código Java mostra como acessar um banco de dados usando 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)
{
	// Fazer tratamento de erros aqui 
}

getOutputTerminal("out").propagate(assembly); 

API do JDBC em um Ambiente não Gerenciado

É possível acessar APIs Java padrão no código gravado para seus nós JavaCompute, incluindo chamadas JDBC. Portanto, é possível utilizar APIs JDBC para conectar a um banco de dados, gravar ou ler a partir do banco de dados e desconectar do banco de dados. Nos sistemas operacionais que não sejam z/OS, o broker suporta seu código de conexão JDBC chamando os drivers JDBC tipos 2 e 4 nesse ambiente, mas não os fornece. Você deve obter esses drivers a partir de seu fornecedor de banco de dados. No z/OS, os drivers tipo 2 não são suportados.

Se você escolher este método para acessar os bancos de dados, o broker não fornecerá suporte para gerenciar as transações; seu código deverá gerenciar a consolidação e retrocesso locais das mudanças do banco de dados. Seu código também deve gerenciar o ciclo de vida da conexão, a afinidade do encadeamento da conexão e a definição do conjunto de conexões. Você também deve monitorar o acesso aos bancos de dados quando usar essa técnica para assegurar que essas conexões não provoquem interferência nas conexões feitas pelo broker. Especificamente, esteja ciente de que os drivers tipo 2 fazem a ponte com uma conexão ODBC que pode estar em utilização nos fluxos de mensagens que acessam bancos de dados a partir de ESQL.

SQLJ

SQLJ é uma extensão Java que pode ser utilizada para incorporar instruções SQL estáticas ao código Java. Crie arquivos SQLJ usando o WebSphere Message Broker Toolkit. O gerenciador de recursos do intermediário não coordena o acesso ao banco de dados ao utilizar SQLJ.
  1. Ative o recurso SQLJ no WebSphere Message Broker Toolkit:
    1. Selecione Janela > Preferências.
    2. Expanda Geral.
    3. Selecione Recursos.
    4. Selecione Dados.
    5. Clique OK.
  2. Crie um arquivo SQLJ em um projeto Java:
    1. Clique com o botão direito do mouse no Projeto Java no qual deseja criar o arquivo.
    2. Selecione Novo > Outro.
    3. Expanda Dados.
    4. Expanda os Aplicativos SQLJ.
    5. Selecione Arquivo SQLJ.
    6. Clique em Avançar.
    7. Siga as instruções fornecidas pelo assistente de Novo Arquivo SQLJ para gerar o arquivo SQLJ.
Agora é possível fazer referência à classe neste arquivo SQLJ a partir de uma classe do nó JavaCompute neste projeto ou em outro projeto referido.
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback

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

        
        Última atualização:
        
        Última atualização: 2015-02-28 18:28:34


Tópico de TarefaTópico de Tarefa | Versão 8.0.0.5 | ac30494_