Sobre a Amostra DatabaseInput Node

Usando o nó DatabaseInput, é possível criar fluxos de mensagens que reagem rapidamente às mudanças nos dados do aplicativo mantidos nos bancos de dados. O nó recupera os dados atualizados diretamente a partir do banco de dados.

O diagrama a seguir mostra a sequência de eventos. Quando uma mudança é introduzida na tabela de dados do aplicativo, um acionador é disparado e a tabela de eventos é preenchida com informações suficientes para determinar quais linhas foram alteradas.

Estrutura de uma Implementação DatabaseInput Node

A estrutura das tabelas de dados do aplicativo usada nessa amostra é mostrada no seguinte diagrama:

Tabelas de Dados de Aplicativo de Amostra com registros de cliente e endereço

Por exemplo, se alguma entrada for inserida em uma tabela do cliente, as linhas inseridas nas tabelas do cliente e evento se parecerão com a seguinte tabela.

PKEY FIRSTNAME LASTNAME CCODE
cust1 Joe Bloggs sales

A tabela de eventos

A tabela de eventos é uma tabela de banco de dados criada pelo usuário, geralmente no mesmo esquema que a tabela ou tabelas de aplicativo nas quais os eventos devem ser armazenados. A tabela de eventos descreve o tipo da mudança feita para uma tabela de aplicativo e um identificador para a linha alterada. A tabela a seguir mostra algumas colunas típicas em uma tabela de eventos e as razões para incluí-la.

Nome da Coluna Função da coluna Valor de exemplo
EVENT_ID Necessário. A chave primária, que identifica qual evento está sendo processado a qualquer momento. 1
OBJECT_KEY Necessário. O elemento de identificação da linha alterada na tabela de aplicativo, normalmente o elemento da linha na coluna da chave primária. cust1
OBJECT_VERB Opcional. A mudança executada, normalmente um de CREATE, UPDATE ou DELETE. Esse evento é usado para diferenciar um evento DELETE, porque nesse caso, a tabela de aplicativo não contém nenhuma linha para recuperar quando a mensagem para o fluxo for construída. CREATE
OBJECT_NAME Opcional. O nome da tabela de aplicativo que foi alterada. Essa coluna será necessária se o nó DatabaseInput estiver sendo usado para suportar as atualizações para mais de uma tabela de Aplicativo. customer
EVENT_PRIORITY Opcional. A prioridade do evento, por exemplo, se pode ser usado para assegurar que as transações de alta prioridade são calculadas antes do valor inferior. 1
EVENT_TIME Opcional. A hora na qual a operação foi executada. Geralmente, usado para efetuar login ou para executar monitoramento de criação de log ou de desempenho do fluxo. 2010-10-19T17:10:00
EVENT_STATUS Opcional. Usado para determinar se o evento já foi processado. Necessário se os eventos não tiverem que ser excluídos ou arquivados após o processamento. 0
EVENT_COMMENT Opcional. Campo de formato livre, por exemplo, que pode ser usado para armazenar o resultado do processamento de mensagens se o evento não foi excluído após o processamento. Processado com exceções

Nota:

No exemplo a seguir, a tabela de eventos é muito básica, com apenas três colunas. Uma adição à tabela de aplicativos resulta na seguinte nova linha na tabela de eventos:

EVENT_ID OBJECT_KEY OBJECT_VERB
1 cust1 Criar

Um novo cliente foi criado com a chave primária cust1. O nó DatabaseInput responde à mudança e processa a nova linha em um fluxo de mensagens.

Opções de processamento na conclusão

Quando o fluxo concluir o processamento de um evento, uma das três formas é usada para concluir o processamento:

  1. Excluir o evento. Use essa opção se você não desejar armazenar o evento para referência futura.
  2. Atualizar a coluna de status. Use esta opção se quiser manter um registro dos eventos processados e a sua tabela de eventos tiver uma coluna de status (EVENT_STATUS).
  3. Arquivar o evento em uma tabela de eventos separada. Use essa opção se desejar manter um registro dos eventos e desejar manter a tabela de eventos em um tamanho mínimo.

Essa amostra usa a primeira opção e exclui os eventos na conclusão com sucesso.

Os detalhes do fluxo de mensagens e o processamento que ele desempenha são mostrados nas seções a seguir:

Fluxo de mensagens DatabaseInput

O fluxo de mensagens DatabaseInput usa as mudanças no banco de dados, as mapeia para um formato de mensagem de saída e coloca-as em uma fila do WebSphere MQ:

Captura de Tela do Fluxo de Mensagens DatabaseInput.

Note que o fluxo inclui um segundo nó MQOutput para capturar exceções que podem ter ocorridas. Essa ação evita novas tentativas e processamento repetitivo desnecessários de ESQL malformado ou de um banco de dados ou de tabela configurado incorretamente.

Scripts de Teste

Três scripts SQL são usados nesta amostra:

Script para inserir uma linha no banco de dados

INSERT INTO DBINPUT_CUSTOMER
      VALUES ('cust1', 'Fred', 'Flintstone', 'Dev');

Script para atualizar uma linha no banco de dados

UPDATE DBINPUT_CUSTOMER SET FIRSTNAME = 'Barney', LASTNAME = 'Rubble' WHERE PKEY='cust1';

Script para excluir uma linha no banco de dados

DELETE FROM DBINPUT_CUSTOMER WHERE PKEY='cust1';

Voltar para Home da Amostra