Définition des adresses de routage dans un en-tête de message

Vous pouvez ajouter une fonction à un gestionnaire de médiations préexistant pour définir les adresses de routage dans l'en-tête du message.

Avant de commencer

Avant de commencer cette tâche, vous devez avoir créé le gestionnaire de médiations de base dans un projet EJB (voir Création d'un gestionnaire de médiations.

Pourquoi et quand exécuter cette tâche

Pour utiliser les adresses de routage, utilisez les API SIDestinationAddress et SIDestinationAddressFactory. L'API SIDestinationAddress correspond à l'interface publique qui représente un bus d'intégration de services et permet à votre médiation d'accéder au nom de la destination et au nom du bus. L'API SIDestinationAddressFactory permet de créer une API SIDestinationAddress pour représenter une destination de bus d'intégration de services. Pour des informations de référence sur ces API, voir SIDestinationAddress et SIDestinationAddressFactory.

Procédure

  1. Recherchez le point d'insertion du code de médiation fonctionnel dans votre gestionnaire de médiations, dans la méthode handle (contexte MessageContext). L'interface est MessageContext ; vous devez la transtyper en SIMessageContext sauf si vous n'êtes intéressé que par les méthodes fournies par MessageContext.
  2. Extrayez l'interface SIMessage de l'objet MessageContext. Exemple :
    SIMessage message = ((SIMessageContext)context).getSIMessage();
  3. Créez votre fonction d'en-tête de médiation en effectuant la procédure de base suivante :
    1. Obtenez un indicateur dans l'environnement d'exécution. Exemple :
      .... SIMediationSession mediationSession = mediationContext.getSession(); 
    2. Créez un chemin de routage de transmission à définir sur l'objet cloné. Utilisez par exemple la classe Vector pour créer une matrice d'objets extensible.
    3. Extrayez l'interface SIDestinationAddressFactory qui doit être utilisée pour la création d'instances SIDestinationAddress. Par exemple :
      SIDestinationAddressFactory destFactory = SIDestinationAddressFactory.getInstance();
    4. Créez une API SIDestinationAddress représentant une destination de bus d'intégration de services. Par exemple :
      SIDestinationAddress dest = destFactory.createSIDestinationAddress(remoteDestinationName(),false);
      Dans ce cas, le second paramètre, la valeur booléenne "false", indique que la destination ne peut pas se trouver dans le moteur de messagerie local, mais, en revanche, à n'importe quel emplacement du bus d'intégration de services.
    5. A l'aide de la méthode d'ajout de la classe Vector, ajoutez un autre nom de destination au tableau.
    6. Clonez le message et modifiez le chemin de routage de transmission du message cloné. Exemple :
      clonedMessage.setForwardRoutingPath(forwardRoutingPath);
    7. Envoyez le message cloné à l'aide de la méthode d'envoi de l'interface SIMediationSession pour transmettre le message au bus d'intégration de services. Par exemple, si le message cloné s'intitule "clonedMessage" :
      mediationSession.send(clonedMessage, false);
  4. Renvoyez la valeur true pour que le message transmis dans la méthode du descripteur de l'interface MediationHandler poursuive son chemin le long de la chaîne des gestionnaires.

Exemple

Le code complet de la fonction de médiation permettant de modifier le chemin de routage de transmission peut se présenter comme dans l'exemple suivant :
/* Exemple de médiation qui clone un message 
 * et envoi le clone à une autre 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();

		// Création d'un chemin de routage de transmission à définir sur le message cloné
		Vector forwardRoutingPath = new Vector();
		SIDestinationAddressFactory destFactory = 
        SIDestinationAddressFactory.getInstance();
		SIDestinationAddress dest = 
        destFactory.createSIDestinationAddress(remoteDestinationName,false);
		forwardRoutingPath.add(dest);
		
		try {
			// Cloner le message
			clonedMessage = (SIMessage) message.clone();
			// Modification du chemin de routage de transmission du clone
			clonedMessage.setForwardRoutingPath(forwardRoutingPath);
			// Envoi du message à la destination suivante du chemin de routage de transmission
			mediationSession.send(clonedMessage, false);
		} catch (SIMediationRoutingException e1) {
			e1.printStackTrace();
		} catch (SIDestinationNotFoundException e1) {
			e1.printStackTrace();
		} catch (SINotAuthorizedException e1) {
			e1.printStackTrace();
		} catch (CloneNotSupportedException e) {
			// SIMessage doit être correctement cloné ; ce bloc n'est donc pas vraiment nécessaire.
			e.printStackTrace();
		}
		// Permet au message d'origine de poursuivre son chemin
		return true;
	}

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjy1505
Nom du fichier : tjy1505.html