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.
Um nó Java definido pelo usuário é distribuído como um arquivo .jar.
Antes de poder criar os nós Java no ambiente de trabalho, você deve criar um novo projeto Java:
Qualquer classe que implemente MbInputNodeInterface e que esteja contida no caminho da LIL do intermediário é registrada com o intermediário como um nó input. Ao implementar a MbInputNodeInterface, é necessário implementar também um método run para essa 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 intermediário chama o método run quando encadeamentos tornam-se disponíveis de acordo com o modelo de encadeamento especificado.
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 ambiente de trabalho:
Quando o nó é instanciado, o construtor da classe de nó do usuário é chamado. É nessa classe que são criados os terminais do nó e inicializados quaisquer 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"; }
Um nó de entrada pode receber dados de qualquer tipo de origem externa, como um sistema de arquivos, uma fila ou um banco de dados, da mesma maneira que qualquer outro programa Java, contanto que a saída do nó esteja 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 bytes utilizando o método createMessage da classe MbInputNode e, em seguida, gere uma montagem de mensagem válida a partir dessa mensagem. Por exemplo, para ler a entrada de um arquivo:
Quando tiver criado um conjunto de mensagem, você poderá propagá-lo para um dos terminais de saída do nó.
MbOutputTerminal out = getOutputTerminal("out"); out.propagate(newAssembly);
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.
A infra-estrutura do intermediário trata de questões de transação, tais como controlar a consolidação de qualquer unidade de trabalho do WebSphere MQ ou de banco de dados quando o processamento da mensagem estiver 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 utiliza valores de retorno para indicar se uma transação obteve êxito, para controlar se as transações foram confirmadas ou recuperadas e para controlar quando o encadeamento é retornado ao conjunto. A infra-estrutura do intermediário captura qualquer exceção não-manipulada e recupera a transação.
Você determina o comportamento das transações e encadeamentos utilizando o valor de retorno apropriado:
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; }
Você deve declarar o nome do nó para uso e identificação pelo ambiente de trabalho. Todos os nomes de nós devem terminar com os caracteres "Node". Declare o nome utilizando o seguinte método:
public static String getNodeName() { return "BasicInputNode"; }
package com.ibm.pluginsamples; public class BasicInputNode extends MbInputNode implements MbInputNodeInterface { ...
Declare os atributos do nó utilizando o mesmo método que você utiliza para as propriedades Java Bean. Você é o responsável por gravar os métodos get e set para os atributos; a estrutura API infere os nomes de atributos utilizando as regras de introspecção Java bean. Por exemplo, se você declarar os dois métodos seguintes:
private String attributeVariable; public String getFirstAttribute() { return attributeVariable; } publc void setFirstAttribute(String value) { attributeVariable = value; }
O intermediário 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. Atributos podem ser expostos somente como cadeias, portanto, converta quaisquer 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); }
Como já foi descrito, o método run é chamado pelo intermediário para criar a mensagem de entrada. Esse método deve fornecer toda a função de processamento para o nó input.
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:
Implemente o método onDelete da seguinte maneira:
public void onDelete() { // executar limpeza do nó se necessário }