Definición de direcciones de direccionamiento en una cabecera de mensaje

Puede añadir funciones a un manejador de mediaciones preexistentes para establecer las direcciones de direccionamiento en la cabecera de mensaje.

Antes de empezar

Antes de iniciar esta tarea, debe crear el manejador de mediación básica en un proyecto EJB (consulte Escribir un manejador de mediación.

Acerca de esta tarea

Para trabajar con las direcciones de direccionamiento, utilice las API SIDestinationAddress y SIDestinationAddressFactory. SIDestinationAddress es la interfaz pública que representa un bus de integración de servicios y proporciona a la mediación acceso al nombre del destino y del nombre de bus. SIDestinationAddressFactory le permite crear una nueva SIDestinationAddress para representar un destino de bus de integración de servicios. Para obtener información de referencia acerca de estas API, consulte SIDestinationAddress y SIDestinationAddressFactory.

Procedimiento

  1. Localice el punto del manejador de mediación en el que desea insertar el código de mediación funcional, en el método handle (MessageContext context). La interfaz es MessageContext, y debe convertirla en SIMessageContext a menos que sólo esté interesado en los métodos proporcionados por MessageContext.
  2. Obtenga el SIMessage del objeto MessageContext. Por ejemplo:
    SIMessage message = ((SIMessageContext)context).getSIMessage();
  3. Cree la función de cabecera de mediación utilizando estos pasos básicos:
    1. Obtenga un manejador para el entorno de tiempo de ejecución. Por ejemplo:
      .... SIMediationSession mediationSession = mediationContext.getSession(); 
    2. Cree una ruta de direccionamiento de reenvío para establecerla en el objeto clonado. Por ejemplo, utilice la clase Vector para crear una matriz de objetos ampliables.
    3. Obtenga la SIDestinationAddressFactory que se debe utilizar para crear instancias SIDestinationAddress. Por ejemplo:
      SIDestinationAddressFactory destFactory = SIDestinationAddressFactory.getInstance();
    4. Cree una SIDestinationAddress nueva que represente un destino de bus de integración de servicios. Por ejemplo:
      SIDestinationAddress dest = destFactory.createSIDestinationAddress(remoteDestinationName(),false);
      En este caso, el segundo parámetro, el valor booleano "false", indica que no se debe localizar el destino en el motor de mensajería local, pero que puede estar en cualquier lugar del bus de integración de servicios.
    5. Utilice el método de adición de la clase Vector para añadir otro destino.
    6. Clone el mensaje y modifique la ruta de direccionamiento de reenvío en el mensaje clonado. Por ejemplo:
      clonedMessage.setForwardRoutingPath(forwardRoutingPath);
    7. Envíe el mensaje clonado utilizando el método de envío de la interfaz SIMediationSession para enviar el mensaje al bus de integración de servicios. Por ejemplo, si denomina "clonedMessage":
      mediationSession.send(clonedMessage, false);
  4. Devuelva true para garantizar que los mensajes pasados al método del manejador de la interfaz MediationHandler continúan por la cadena de manejadores.

Ejemplo

El código de función de mediación completo para cambiar la vía de acceso de direccionamiento de reenvío podría tener un aspecto parecido a este ejemplo:
/* Una mediación de ejemplo que clona un mensaje 
 * y envía el clon a otro destino  */

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(); 
				// Crear una vía de acceso de direccionamiento de reenvío que se establecerá en el mensaje clonado
				Vector forwardRoutingPath = new Vector();
				SIDestinationAddressFactory destFactory = 
        SIDestinationAddressFactory.getInstance();
				SIDestinationAddress dest = 
        destFactory.createSIDestinationAddress(remoteDestinationName,false);
				forwardRoutingPath.add(dest);
		
		try {
			// Clonar el mensaje
						clonedMessage = (SIMessage) message.clone();
						// Modificar la ruta de direccionamiento de reenvío para el clon
			clonedMessage.setForwardRoutingPath(forwardRoutingPath);						// Enviar el mensaje al siguiente destino del frp
			mediationSession.send(clonedMessage, false);		} catch (SIMediationRoutingException e1) {
						e1.printStackTrace();
		} catch (SIDestinationNotFoundException e1) {
						e1.printStackTrace();
		} catch (SINotAuthorizedException e1) {
						e1.printStackTrace();
		} catch (CloneNotSupportedException e) {
						// El clon de SIMessage debe ser correcto y no es necesario especificar este bloque
			e.printStackTrace();                                            
		}
				// permitir que el mensaje original continúe en su vía de acceso
		return true;
	}

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjy1505
File name: tjy1505.html