Configurando Endereços de Roteamento em um Cabeçalho da Mensagem

É possível incluir uma função em um manipulador de mediação preexistente para que ele configure endereços de roteamento no cabeçalho da mensagem.

Antes de Iniciar

Antes de iniciar essa tarefa, você deve ter criado o manipulador de mediação básico em um projeto EJB (consulte Gravando uma Rotina de Tratamento de Mediações.

Sobre Esta Tarefa

Para trabalhar com o roteamento de endereços, serão usadas as APIs SIDestinationAddress e SIDestinationAddressFactory. SIDestinationAddress é a interface pública que representa um barramento de integração de serviços e permite que a mediação acesse o nome do destino e o nome do barramento. SIDestinationAddressFactory permite criar um novo SIDestinationAddress, para representar um destino do barramento de integração de serviços. Para obter informações de referência sobre essas APIs, consulte SIDestinationAddress e SIDestinationAddressFactory.

Procedimento

  1. Localize o ponto no manipulador de mediação no qual você insere o código de mediação funcional, no método handle (Contexto MessageContext). A interface é MessageContext e você deve lançar isso em SIMessageContext, a menos que esteja interessado apenas nos métodos fornecidos por MessageContext.
  2. Obtenha o SIMessage a partir do objeto MessageContext. Por exemplo:
    SIMessage message = ((SIMessageContext)context).getSIMessage();
  3. Construa a função do cabeçalho da mediação usando estas etapas básicas:
    1. Obtenha uma manipulação para o ambiente de tempo de execução. Por exemplo:
      .... SIMediationSession mediationSession = mediationContext.getSession(); 
    2. Crie um caminho de roteamento de encaminhamento a ser configurado no objeto clonado. Por exemplo, use a classe Vetor para criar uma matriz extensível de objetos.
    3. Obtenha o SIDestinationAddressFactory a ser usado para a criação de instâncias SIDestinationAddress. Por exemplo:
      SIDestinationAddressFactory destFactory = SIDestinationAddressFactory.getInstance();
    4. Crie um novo SIDestinationAddress, representando um destino do barramento de integração de serviços. Por exemplo:
      SIDestinationAddress dest = destFactory.createSIDestinationAddress(remoteDestinationName(),false);
      Nesse caso, no segundo parâmetro, o booleano "false", indica que o destino não deve estar localizado no mecanismo do sistema de mensagens local, mas pode estar em qualquer local do barramento de integração de serviços.
    5. Use o método de inclusão da classe Vetor para incluir outro nome de destino na matriz.
    6. Clone a mensagem e modifique o caminho de roteamento de encaminhamento na mensagem clonada. Por exemplo:
      clonedMessage.setForwardRoutingPath(forwardRoutingPath);
    7. Envie a mensagem clonada, usando o método de envio da interface SIMediationSession para enviar a mensagem para o barramento de integração de serviços. Por exemplo, se o nome for "clonedMessage":
      mediationSession.send(clonedMessage, false);
  4. Retorne true, para assegurar-se de que a mensagem passada no método de manipulação da interface MediationHandler continue juntamente com a cadeia do manipulador.

Exemplo

O código de função de mediação completo para alteração do caminho de roteamento de encaminhamento pode ser parecido com o desse exemplo:
/* A sample mediation that clones a message 
 * and sends the clone off to another destination  */

public class RoutingMediationHandler implements MediationHandler {

	public String remoteDestinationName="newdest";

	public boolean handle(MessageContext context) throws MessageContextException {
		SIMessage clonedMessage = null;
		SIMessageContext mediationContext = (SIMessageContext) context;
		SIMessage message = mediationContext.getSIMessage();
		SIMediationSession mediationSession = mediationContext.getSession();

		// Create a forward routing path that will be set on the cloned message
		Vector forwardRoutingPath = new Vector();
		SIDestinationAddressFactory destFactory = 
        SIDestinationAddressFactory.getInstance();
		SIDestinationAddress dest = 
        destFactory.createSIDestinationAddress(remoteDestinationName,false);
		forwardRoutingPath.add(dest);
		
		try {
			// Clone the message
			clonedMessage = (SIMessage) message.clone();
			// Modify the forward routing path for the clone
			clonedMessage.setForwardRoutingPath(forwardRoutingPath);
			// Send the message to the next destination in the frp
			mediationSession.send(clonedMessage, false);
		} catch (SIMediationRoutingException e1) {
			e1.printStackTrace();
		} catch (SIDestinationNotFoundException e1) {
			e1.printStackTrace();
		} catch (SINotAuthorizedException e1) {
			e1.printStackTrace();
		} catch (CloneNotSupportedException e) {
			// SIMessage should clone OK so you shouldn't need to enter this block
			e.printStackTrace();
		}
		// allow original message to continue on its path
		return true;
	}

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjy1505
Nome do arquivo: tjy1505.html