Routing-Adressen in einem Nachrichtenheader definieren

Sie können einem bereits vorhandenen Mediationshandler Funktionen hinzufügen, die die Routing-Adressen im Nachrichtenheader setzen.

Vorbereitende Schritte

Zum Ausführen dieser Task müssen Sie den Basismediationshandler in einem EJB-Projekt (siehe Mediationshandler schreiben) erstellt haben.

Informationen zu diesem Vorgang

Für die Bearbeitung von Routing-Adressen verwenden Sie die APIs SIDestinationAddress und SIDestinationAddressFactory. SIDestinationAddress ist die allgemein zugängliche Schnittstelle, die einen Service Integration Bus darstellt, und Ihrer Mediation den Zugriff auf den Namen des Ziels und den Namen des Busses ermöglicht. Mit SIDestinationAddressFactory können Sie eine neue SIDestinationAddress für ein SIB-Ziel erstellen. Referenzinformationen zu diesen APIs finden Sie in den Artikeln SIDestinationAddress und SIDestinationAddressFactory.

Vorgehensweise

  1. Suchen Sie die Stelle in Ihrem Mediationshandler, an der Sie den funktionierende Mediationscode in der Methode handle (MessageContext context) einfügen möchten. Die Schnittstelle ist "MessageContext". Setzen Sie diese Schnittstelle nur dann in einen SIMessageContext um, wenn Sie die vom MessageContext bereitgestellten Methoden verwenden möchten.
  2. Rufen Sie die SIMessage aus dem MessageContext-Objekt ab. Beispiel:
    SIMessage message = ((SIMessageContext)context).getSIMessage();
  3. Erstellen Sie die Mediationsfunktion für Header wie folgt:
    1. Rufen Sie die Kennung für die Laufzeitumgebung ab. Beispiel:
      .... SIMediationSession mediationSession = mediationContext.getSession(); 
    2. Erstellen Sie einen Routing-Pfad für das geklonte Objekt. Verwenden Sie beispielsweise die Klasse Vector, um ein erweiterbares Array von Objekten zu erstellen.
    3. Rufen Sie die SIDestinationAddressFactory ab, die für das Erstellen von SIDestinationAddress-Instanzen verwendet werden soll. Beispiel:
      SIDestinationAddressFactory destFactory = SIDestinationAddressFactory.getInstance();
    4. Erstellen Sie eine neue SIDestinationAddress, die ein SIB-Ziel darstellt. Beispiel:
      SIDestinationAddress dest = destFactory.createSIDestinationAddress(remoteDestinationName(),false);
      In diesem Fall zeigt der zweite Parameter, der boolesche Wert "false" an, dass das Ziel nicht in der lokalen Messaging-Engine lokalisiert werden soll, sondern irgendwo im Service Integration Bus.
    5. Verwenden Sie die Methode "add" der Klasse "Vector", um dem Array einen weiteren Zielnamen hinzuzufügen.
    6. Klonen Sie die Nachricht, und ändern Sie den Routing-Pfad in der geklonten Nachricht. Beispiel:
      clonedMessage.setForwardRoutingPath(forwardRoutingPath);
    7. Senden Sie die geklonte Nachricht mit der Methode "send" der Schnittstelle "SIMediationSession" an den Service Integration Bus. Beispiel mit einer Nachricht "clonedMessage":
      mediationSession.send(clonedMessage, false);
  4. Geben Sie true zurück, um sicherzustellen, dass die Nachricht, die an die Methode "handle" der Schnittstelle "MediationHandler" übergeben wird, in der Handlerkette weitergeben wird.

Beispiel

Der vollständige Mediationsfunktionscode zum Ändern des Routing-Pfads kann wie folgt aussehen:
/* Eine Beispielmediation, die eine Nachricht klont
 * und den Klon an ein anderes Ziel weitersendet */

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();

		// Erstellen Sie einen Routing-Pfad, der in der geklonten Nachricht gesetzt wird
				Vector forwardRoutingPath = new Vector();
				SIDestinationAddressFactory destFactory = 
        SIDestinationAddressFactory.getInstance();
				SIDestinationAddress dest = 
        destFactory.createSIDestinationAddress(remoteDestinationName,false);
		forwardRoutingPath.add(dest);
		
		try  {    
						// Nachricht klonen
						clonedMessage = (SIMessage) message.clone();
						// Routing-Pfad für den Klon ändern
						clonedMessage.setForwardRoutingPath(forwardRoutingPath);
						// Nachricht an das nächste Ziel im Routing-Pfad senden
						mediationSession.send(clonedMessage, false);
		} catch (SIMediationRoutingException e1) {
			e1.printStackTrace();
				} catch (SIDestinationNotFoundException e1) {
			e1.printStackTrace();
				} catch (SINotAuthorizedException e1) {
			e1.printStackTrace();
				} catch (CloneNotSupportedException e) {
			   // Das Klonen von SIMessage sollte OK sein, deshalb muss dieser Block eigentlich nicht eingefügt werden
			e.printStackTrace();
		}
		// Weiterleitung der ursprünglichen Nachricht über ihren Pfad zulassen
		return true;
	}

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjy1505
Dateiname:tjy1505.html