Erzeugung von
Acknowledgment-Messages
Verwenden Sie für Ihren Adapter die Klasse Connection, wenn für asynchrone Messages das Zurücksenden von Acknowledgment-Messages veranlasst werden soll. Die Klasse stellt Methoden für die Erzeugung von Acknowledgment-Messages zur Verfügung
Methoden der Klasse Connection
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-Bearbeitung aufgerufen werden, nachdem sichergestellt ist, dass keine Exceptions mehr auftreten können, da dann automatisch Error-Delivery-Acknowledgments vom Adapter-Framework gesendet werden.
Ö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.
Ö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 Objekt der Klasse Connection zu instanziieren, gehen Sie analog zur MessageFactory vor. Dies wird im Beispieladapter in der XIMessageFactoryImpl-Klasse gezeigt.

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

Die Connection-Klasse bietet neben den Acknowledgment-Methoden noch weitere Methoden an. Diese dürfen jedoch von einer Adapter-Framework-konformen Adapterimplementierung nicht genutzt werden.
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.
Die Adapter-Implementierung öffnet zur Verarbeitung von Acknowledgments eine Verbindung der Form:
msConnectionFactory = (ConnectionFactory) initctx.lookup(ConnectionFactory.JNDI_NAME);
conn = msConnectionFactory.createConnection("AFW");
...
conn.ackNotSupported(messageKey, acksNotSupported);
Sie können diese Verbindung folgendermaßen ändern:
conn = msConnectionFactory.createConnection(adapterType + "_" + adapterNamespace);
Ändern Sie die Verbindung nicht, wird die Verarbeitung von Acknowledgments über den Thread-Pool des Adapter-Framework durchgeführt.

adapterType und adapterNamespace können sich ändern, wenn sie beispielsweise als MCF-Properties definiert sind.