Acesse bancos de dados a partir do código Java™ incluído no nó JavaCompute.
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.
É 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.
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:
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.
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.
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.
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);
É 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.