Show TOC

Erzeugung von Acknowledgment-MessagesLocate this document in the navigation structure

Wenn für asynchrone Messages das Zurücksenden von Acknowledgment-Messages veranlasst werden soll, verwenden Sie für Ihren Adapter die Klasse PublicAPIAccess . Mit PublicAPIAccess erzeugen Sie ein Objekt, das das Interface AckFactory (Paket com.sap.engine.interfaces.messaging.api.ack ) implementiert.

Die AckFactory stellt Methoden für die Erzeugung von Acknowledgment-Messages zur Verfügung.

Methoden des Interface AckFactory

Name Verwendung

ackNotSupported

Der Adapter muss hier pro Message angeben, welche Acknowledgment-Typen er nicht unterstützt. Im Beispieladapter sind dies die Application-Acknowledgment-Typen.

Diese Methode sollte erst am Ende der Message-Verarbeitung aufgerufen werden, nachdem sichergestellt ist, dass keine Exceptions mehr auftreten können, da dann automatisch Error-Delivery-Acknowledgments vom Adapter-Framework gesendet werden.

Hinweis

Öffnen Sie hierzu CCIInteraction.java und suchen Sie nach der Zeichenkette CS_ACKNS.

deliveryAck

Das Delivery-Acknowledgment zeigt an, ob eine Message erfolgreich an den letzten Knoten (den Endpunkt) in der Kommunikationskette an die dortige Message-Schicht ausgeliefert wurde. Im Beispieladapter wird angenommen, dass dies der Fall ist, sobald die Datei mit der Message erfolgreich im Dateisystem geschrieben worden ist.

Hinweis

Öffnen Sie hierzu CCIInteraction.java und suchen Sie nach der Zeichenkette CS_ACKDEL.

deliveryErrorAck

Wenn eine Message nicht an den Endpunkt ausgeliefert werden kann und der Adapter kann diesen Zustand mit Hilfe des angebunden externen Protokolls erkennen, dann kann er asynchron ein Error-Delivery-Acknowledgment zurücksenden.

Wird noch innerhalb der Message-Bearbeitung eine Java-Exception ausgelöst, so sendet das Adapter-Framework automatisch (sofern dies von XI angefordert wurde) ein Error-Delivery-Acknowledgment mit einem aus der Exception gewonnenen Fehlertext zurück. Der Adapter darf in diesem Fall nicht explizit deliveryErrorAck() aufrufen. Daher ist im Beispieladapter kein explizites Setzen des Error-Delivery- Acknowledgments enthalten.

applicationAck

Das Application-Acknowledgment zeigt an, ob eine Message erfolgreich von der Anwendung im Endpunkt bearbeitet wird. Da der Beispieladapter dies nicht erkennen kann, unterstützt er diesen Typ nicht und deklariert dies mit der Methode ackNotSupported .

applicationErrorAck

Analog zu Application-Acknowledgment, jedoch für den Fehlerfall

Um ein AckFactory -Object zu instanziieren, gehen Sie analog zur MessageFactory vor. Dies wird im Beispieladapter in der Klasse XIMessageFactoryImpl gezeigt.

Hinweis

Öffnen Sie hierzu XIMessageFactoryImpl.java und suchen Sie nach der Zeichenkette CS_MSGFCT.

API-Methode

Es gibt folgende API-Methoden, über die ein Adapter ein Acknowledgment erkennen kann:

  • Message.isAck()
  • Message.isAck(Ack Type ack Type)
  • Message.isAckRequested()
  • Message.is AckRequested(AckType ack Type)

Weitere Informationen finden Sie in der JavaDoc.

Message-Richtung in der Acknowledgment-Message

In der Adapterimplementierung muss die Message-Richtung im Schlüssel der Acknowledgment-Message gleich der Message-Richtung in der Message sein, auf die sich die Acknowledgment-Message bezieht.

Halten Sie sich an das Implementierungsmuster des Beispieladapters:

  • Richtig ist (Die Message ist die XI-Message, für die ein Acknowledgment erzeugt wird):

    MessageKey msgKey = msg.getMessageKey();

    mf.deliveryAck(msgKey);

  • Falsch ist beispielsweise:

    MessageKey msgKey = msg.getMessageKey();

    MessageKey ackMsgKey = new MessageKey(msgKey.getMessageId(), MessageDirection.INBOUND);

Die Verwendung der Message-Richtung ist nicht auf das Erzeugen von Acknowledgment-Messages beschränkt. Sie kann auf alle Adapter-Framework APIs angewendet werden, die MessageDirectio n kennen.