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

Criando um Nó Input em Java

Um nó de entrada é utilizado para receber uma mensagem em um fluxo de mensagens, geralmente de uma origem que não é suportada pelos nós de entrada integrados.

Antes de começar

Um nó Java definido pelo usuário é distribuído como um arquivo .jar.

Criando um Projeto Java

Antes de poder criar nós Java no WebSphere Message Broker Toolkit, é necessário criar um projeto Java:

  1. Clique em Arquivo > Novo > Projeto, selecione Projeto Java e, em seguida, clique em Avançar.
  2. Forneça um nome para o projeto e, em seguida, clique em Avançar.
  3. Na área de janela Configurações Java, selecione a guia Bibliotecas e clique em Incluir JARs Externos.
  4. Selecione install_dir\classes\jplugin2.jar, em que install_dir é o diretório inicial de instalação do WebSphere Message Broker.
  5. Siga os prompts nas outras guias para definir quaisquer outras definições de construção.
  6. Clique em Concluir.
Agora é possível desenvolver a origem de seu nó Java nesse projeto.

Declarando a Classe do Nó Input

Cada classe que implementa MbInputNodeInterface e está contida no caminho de LIL do broker é registrada com o broker como um nó de entrada. Quando você implementa MbInputNodeInterface, é necessário também implementar um método run para esta classe. O método run representa o início do fluxo de mensagens, contém os dados que formulam a mensagem e a propaga pelo fluxo. O broker chama o método run quando encadeamentos tornam-se disponíveis de acordo com o modelo de encadeamento especificado.

O nome de classe deve terminar com a palavra "Node". Por exemplo, se o nome for BasicInput no WebSphere Message Broker Toolkit, o nome de classe deve ser BasicInputNode.

Por exemplo, para declarar a classe de nó input:

package com.ibm.jplugins;

import com.ibm.broker.plugin.*;

public class BasicInputNode extends MbInputNode implements MbInputNodeInterface
{
...

Siga estas etapas para concluir esta ação no WebSphere Message Broker Toolkit:

  1. Clique em Arquivo > Novo > Outro, selecione Classe e, em seguida, clique em Avançar.
  2. Defina o pacote e os campos de nome de classe para valores adequados.
  3. Exclua o texto no campo de texto Superclasse e clique no botão Procurar.
  4. Selecione MbInputNode.
  5. Clique no botão Incluir próximo ao campo de texto Interface e selecione MbInputNodeInterface.
  6. Clique em Concluir.

Definindo o Construtor de Nó

Quando o nó é instanciado, o construtor da classe do nó é chamado. Esta classe é onde você cria os terminais do nó e inicializa os valores-padrão para os atributos.

Um nó de entrada tem um número de terminais de saída associados a ele, mas em geral não tem nenhum terminal de entrada. Utilize o método createOutputTerminal para incluir terminais de saída a um nó quando o nó é instanciado. Por exemplo, para criar um nó com três terminais de saída:

public BasicInputNode() throws MbException
{
	createOutputTerminal ("out");
	createOutputTerminal ("failure");
	createOutputTerminal ("catch");
	setAttribute ("firstParserClassName","myParser");
	attributeVariable = "none"; 
}

Recebendo Dados Externos em um Buffer

Um nó de entrada pode receber dados de qualquer tipo da origem externa, tal como um sistema de arquivos, uma fila ou um banco de dados, da mesma maneira que todos os outros programas Java, se a saída do nó estiver no formato correto.

Forneça um buffer de entrada (ou fluxo de bits) para conter os dados de entrada e associe-o a um objeto de mensagem. Crie uma mensagem a partir de uma matriz de byte usando o método createMessage da classe MbInputNode e, em seguida, gere uma montagem da mensagem válida a partir desta mensagem. Por exemplo, para ler os dados de entrada a partir de um arquivo:

  1. Crie um fluxo de entrada para ler do arquivo:
    FileInputStream inputStream = new FileInputStream("myfile.msg");
  2. Crie uma matriz de bytes do tamanho do arquivo de entrada:
    byte[] buffer = new byte[inputStream.available()];
  3. Leia do arquivo para a matriz de bytes:
    inputStream.read(buffer);
  4. Feche o fluxo de entrada:
    inputStream.close();
  5. Crie uma mensagem para colocar na fila:
    MbMessage msg = createMessage(buffer);
  6. Crie uma montagem da mensagem para conter esta mensagem:
    msg.finalizeMessage(MbMessage.FINALIZE_VALIDATE);
    MbMessageAssembly newAssembly =
         new MbMessageAssembly( assembly, msg );

Propagando a Mensagem

Depois de criar um conjunto de mensagens, você pode propagá-lo para um dos terminais de saída definidos no nó.

Por exemplo, para propagar a montagem de mensagens para o terminal denominado out:
MbOutputTerminal out = getOutputTerminal("out");
out.propagate(newAssembly);
Para excluir a mensagem:
msg.clearMessage();

Para limpar a memória que está alocada para a árvore de mensagens, chame a função clearMessage() no bloco finally de try/catch.

Controlando o Encadeamento e a Transacionalidade

A infraestrutura do broker trata de problemas de transação, tal como controlar a confirmação de um WebSphere MQ ou unidade de trabalho de trabalho quando o processamento de mensagens é concluído. Entretanto, os recursos modificados em um nó definido pelo usuário não ficarão necessariamente sob o controle transacional do intermediário.

Cada encadeamento do fluxo de mensagens é alocado a partir de um conjunto de encadeamentos mantido para cada fluxo de mensagens e começa no método run.

O nó definido pelo usuário usa valores de retorno para indicar se uma transação foi bem-sucedida, para controlar se transações foram confirmadas ou revertidas e para controlar quando o encadeamento foi retornado ao conjunto. A infraestrutura do broker captura todas as exceções não manipuladas e retrocede a transação.

Você determina o comportamento das transações e encadeamentos usando o valor de retorno apropriado:

MbInputNode.SUCCESS_CONTINUE
A transação é confirmada e o broker chama o método run novamente usando o mesmo encadeamento.
MbInputNode.SUCCESS_RETURN
A transação é consolidada e o encadeamento é retornado ao conjunto de encadeamentos, supondo que ele não seja o único encadeamento para este fluxo de mensagens.
MbInputNode.FAILURE_CONTINUE
A transação é revertida e o broker chama o método run novamente usando o mesmo encadeamento.
MbInputNode.FAILURE_RETURN
A transação é retornada e o encadeamento é retornado ao conjunto de encadeamentos, supondo que ele não seja o único encadeamento para este fluxo de mensagens.
MbInputNode.TIMEOUT
O método run não deve bloquear indefinidamente enquanto aguarda que os dados de entrada cheguem. Enquanto o fluxo é bloqueado pelo código do usuário, não é possível encerrar ou reconfigurar o broker. O método run deve conceder controle ao intermediário periodicamente, retornando do método run. Se os dados de entrada não forem recebidos após um determinado período (por exemplo, 5 segundos), o método deverá ser retornado com o código de retorno TIMEOUT. Assumindo que o broker não precisa reconfigurar ou encerrar, o método run do nó de entrada é chamado novamente imediatamente.
Para criar fluxos de mensagens multiencadeados, chame o método dispatchThread depois da criação de uma mensagem, mas antes que a mensagem seja propagada para um terminal de saída. Essa ação garante que apenas um encadeamento esteja aguardando por dados enquanto outros encadeamentos estão processando a mensagem. Novos encadeamentos são obtidos do conjunto de encadeamentos até o limite máximo especificado pela propriedade Instâncias Adicionais do fluxo de mensagens. Por exemplo:
public int run( MbMessageAssembly assembly ) throws MbException
{
  byte[] data = getDataWithTimeout();  // usuário abasteceu método
                                       // retorna nulo se for tempo limite
  if( data == null )
    return TIMEOUT;

  MbMessage msg = createMessage( data );
  msg.finalizeMessage( MbMessage.FINALIZE_VALIDATE );
  MbMessageAssembly newAssembly =
       new MbMessageAssembly( assembly, msg );

  dispatchThread();

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

  return SUCCESS_RETURN;
}

Declarando o Nome do Nó

Você deve declarar o nome do nó para uso e identificação pelo WebSphere Message Broker Toolkit. Todos os nomes de nós devem terminar com os caracteres "Node". Declare o nome usando o seguinte método:

public static String getNodeName()
{
   return "BasicInputNode";
}
Se este método não for declarado, a estrutura da API Java criará um nome de nó padrão usando as seguintes regras:
  • O nome da classe é anexado ao nome do pacote.
  • Os pontos são removidos e a primeira letra de cada parte do pacote e do nome da classe são transformadas em maiúsculas.
Por exemplo, por padrão o nome de nó "ComIbmPluginsamplesBasicInputNode" é atribuído à seguinte classe:
package com.ibm.pluginsamples;
public class BasicInputNode extends MbInputNode implements MbInputNodeInterface
{
   ...

Declarando Atributos

Declare os atributos de nó usando o mesmo método usado para as propriedades Java Bean. Você é responsável por gravar métodos get e set para os atributos; a estrutura da API infere os nomes de atributos usando as regras de introspecção de Java bean. Por exemplo, se você declarar os dois métodos seguintes:

private String attributeVariable;

public String getFirstAttribute()
{
  return attributeVariable;
}

public void setFirstAttribute(String value)
{
  attributeVariable = value;
}

O broker inferirá que esse nó tem um atributo chamado firstAttribute. Esse nome é derivado dos nomes dos métodos get ou set, não dos nomes de variáveis de quaisquer membros de classe interna. Os atributos podem ser expostos apenas como cadeias, portanto, converta tipos numéricos para e a partir de cadeias nos métodos get ou set. Por exemplo, o método a seguir define um atributo chamado timeInSeconds:

int seconds;

public String getTimeInSeconds()
{
  return Integer.toString(seconds);
}

public void setTimeInSeconds(String value)
{
  seconds = Integer.parseInt(value);
}

Implementando a Funcionalidade do Nó

Como já foi descrito, o método run é chamado pelo intermediário para criar a mensagem de entrada. Este método deve fornecer toda a função de processamento para o nó de entrada.

Substituindo os Atributos Padrão do Analisador de Mensagem (Opcional)

Uma implementação de nó de entrada normalmente determina que o analisador de mensagem examina inicialmente uma mensagem de entrada. Por exemplo, o nó MQInput integrado dita que é necessário um analisador MQMD para analisar o cabeçalho MQMD. Um nó de entrada definido pelo usuário pode selecionar um analisador de cabeçalho ou de mensagem apropriado, e o modo no qual a análise é controlada, pela utilização dos seguintes atributos padrão que são incluídos e que podem ser substituídos:

rootParserClassName
Define o nome do analisador raiz que analisa os formatos de mensagem suportados pelo nó input definido pelo usuário. Seu padrão é GenericRoot, um analisador raiz fornecido que faz com que o broker aloque e encadeie analisadores juntos. É improvável que um nó modifique este valor de atributo.
firstParserClassName
Define o nome do primeiro analisador, naquilo que pode ser uma cadeia de analisadores responsáveis pela análise do fluxo de bits. Seu padrão é XML.
messageDomainProperty
Um atributo opcional que define o nome do analisador de mensagem necessário para analisar a mensagem de entrada. Os valores suportados são os mesmos que os valores que são suportados pelo nó MQInput.
messageSetProperty
Um atributo opcional que define o identificador do conjunto de mensagem, ou o nome do conjunto de mensagem, no campo Message Set, somente se o analisador MRM tiver sido especificado pelo atributo messageDomainProperty.
messageTypeProperty
Um atributo opcional que define o identificador da mensagem no campo MessageType, somente se o analisador MRM tiver sido especificado pelo atributo messageDomainProperty.
messageFormatProperty
Um atributo opcional que define o formato da mensagem no campo Message Format, somente se o analisador MRM tiver sido especificado pelo atributo messageDomainProperty.

Excluindo uma Instância do Nó

Uma instância do nó é excluída quando:
  • Você encerra o intermediário.
  • Você remove o nó ou o fluxo de mensagens que contém o nó e reimplementa a configuração.
Quando o nó é excluído, ele pode executar operações de limpeza, tal como fechar soquetes, se ele implementa o método onDelete opcional. Este método, se presente, é chamado pelo broker pouco depois que o nó é excluído.

Implemente o método onDelete da seguinte maneira:

public void onDelete()
{
  // executar limpeza do nó se necessário
}
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:30:26


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