
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.
Ö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:
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:
MessageKey msgKey = msg.getMessageKey();
mf.deliveryAck(msgKey);
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.