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
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
Exemple
/* 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;
}