Um nó de processamento de mensagem é utilizado para processar uma mensagem e um nó de saída é utilizado para enviar uma mensagem para a saída como um fluxo de bits.
O WebSphere Message Broker fornece a origem para dois nós de amostra definidos pelo usuário chamados SwitchNode e TransformNode. Você pode utilizar esses nós em seus estados atuais ou poderá modificá-los.
Ao codificar um nó de processamento de mensagens ou um nó de saída, os dois tipos fornecem basicamente as mesmas funções. Você pode desempenhar o processamento de mensagens em um nó de saída e, da mesma forma, pode propagar uma mensagem de saída para um fluxo de bits a partir de um nó do processamento de mensagens. Para simplificar, este tópico refere-se principalmente ao nó como um nó de processamento de mensagens, mas não discute a funcionalidade dos dois tipos de nó.
Um nó Java definido pelo usuário é distribuído como um arquivo .jar.
O painel Configurações Java exibido.
Qualquer classe que implemente MbNodeInterface e que esteja contida no caminho da LIL do intermediário é registrada com o intermediário como um nó de processamento de mensagem. Ao implementar MbNodeInterface, você também deve implementar um método evaluate para essa classe. O método evaluate é chamado pelo intermediário para cada mensagem que é transmitida pelo fluxo.
package com.ibm.jplugins; import com.ibm.broker.plugin.*; public class BasicNode extends MbNode implements MbNodeInterface
Quando o nó é instanciado, o construtor da classe de nó do usuário é chamado. Crie os terminais do nó e inicialize quaisquer valores padrão para os atributos nesse construtor.
Um nó de processamento de mensagem tem um número de terminais de entrada e de terminais de saída associados a ele. Utilize os métodos createInputTerminal e createOutputTerminal para incluir terminais em um nó quando ele é instanciado.
Por exemplo, para criar um nó com um terminal de entrada e dois terminais de saída:
public MyNode() throws MbException { // criar os terminais aqui createInputTerminal ("in"); createOutputTerminal ("out"); createOutputTerminal ("failure"); }
Em muitos casos, o nó definido pelo usuário necessita acessar o conteúdo da mensagem recebida em seu terminal de entrada. A mensagem é representada como uma árvore de elementos de sintaxe. Utilize a função de utilitário fornecida para os métodos evaluatepara gerenciamento de mensagem, acesso ao buffer de mensagem, navegação de elemento da sintaxe e acesso ao elemento da sintaxe.
A classe MbElement fornece a interface para os elementos de sintaxe.
Por exemplo:
A mensagem de entrada recebida é somente leitura, portanto, para que uma mensagem possa ser transformada, é preciso gravá-la para uma nova mensagem de saída. É possível copiar elementos da mensagem de entrada ou criar novos elementos na mensagem de saída.
A classe MbMessage fornece os construtores de cópia e os métodos para obter o elemento raiz da mensagem. A classe MbElement fornece a interface para os elementos de sintaxe.
MbMessage newMsg = new MbMessage(assembly.getMessage()); MbMessageAssembly newAssembly = new MbMessageAssembly(assembly, newMsg);
MbElement rootElement = newAssembly.getMessage().getRootElement(); MbElement switchElement = rootElement.getFirstElementByPath("/XML/data/action");
String elementValue = (String)switchElement.getValue(); if(elementValue.equals("add")) switchElement.setValue("change"); else if(elementValue.equals("change")) switchElement.setValue("delete"); else if(elementValue.equals("delete")) switchElement.setValue("hold"); else switchElement.setValue("failure");
MbElement tag = switchElement.createElementAsLastChild(MbElement.TYPE_NAME, "PreviousValue", elementValue);
tag.createElementAsFirstChild(MbElement.TYPE_NAME_VALUE, "NewValue", switchElement.getValue()); MbOutputTerminal out = getOutputTerminal("out");
createElementAfter(String) createElementAsFirstChild(String) createElementAsLastChild(String) createElementBefore(String) createElementAsLastChildFromBitstream(byte[], String, String, String, String, int, int, int)
createElementAfter(int) createElementAfter(int, String, Object) createElementAsFirstChild(int) createElementAsFirstChild(int, String, Object) createElementAsLastChild(int) createElementAsLastChild(int, String, Object) createElementBefore(int) createElementBefore(int, String, Object)
Antes de propagar a mensagem, decida sobre quais dados do fluxo de mensagens você deseja propagar e se propagar para um terminal do nó ou para um nó Label.
MbOutputTerminal out = getOutputTerminal("out"); out.propagate(newAssembly);
MbRoute label1 = getRoute ("label1"); Label1.propagate(newAssembly);
Chame a função clearMessage() no bloco finally de try/catch para limpar a memória que é alocada para a árvore de mensagens.
O nome do nó deve ser o mesmo utilizado no ambiente de trabalho. Todos os nomes de nós devem terminar com "Node". Declare o nome utilizando o seguinte método:
public static String getNodeName() { return "BasicNode"; }
package com.ibm.pluginsamples; public class BasicNode extends MbNode implements MbNodeInterface { ...
Declare atributos do nó da mesma forma que propriedades de Java Bean. Você deve gravar métodos getter e setter para os atributos. A estrutura da API infere os nomes dos atributos utilizando as regras de introspecção do 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 de nenhum nome de variável de membro de classe interna. Os atributos somente podem ser expostos como cadeias, portanto é preciso converter qualquer tipo numérico em cadeias e 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); }
O método evaluate, definido em MbNodeInterface, é chamado pelo intermediário para processar a mensagem. Toda a função de processamento do nó é incluída nesse método.
public void evaluate(MbMessageAssembly assembly, MbInputTerminal inTerm) throws MbException { // add message processing code here getOutputTerminal("out").propagate(assembly); }
Os dados do fluxo de mensagens, que consiste em mensagem, Environment, LocalEnvironment e ExceptionList, são recebidos no terminal de entrada do nó.
public void onDelete() { // executar limpeza do nó se necessário }
Esse método é chamado pelo intermediário imediatamente antes de ele excluir o nó.