Show TOC Anfang des Inhaltsbereichs

Funktionsdokumentation Acknowledgments Dokument im Navigationsbaum lokalisieren

Verwendung

Mit Acknowledgments können Sie sich den Empfang von asynchronen Messages bestätigen lassen. Sie müssen Acknowledgments explizit im Anwendungsprogramm anfordern und können spezifizieren, welche Art der Rückmeldung sie erhalten möchten:

·        Positive oder negative Acknowledgments

·        System-Acknowledgments, über die die Laufzeitumgebung bestätigt, dass eine asynchrone Message den Empfänger erreicht hat.

·        Anwendungs-Acknowledgments, mit denen die erfolgreiche Verarbeitung der asynchronen Message beim Empfänger bestätigt wird.

Im Anwendungsprogramm können Sie den Status eines angeforderten Acknowledgments abfragen und auswerten.

Voraussetzungen

Folgende Empfänger unterstützen Acknowledgments:

·        ABAP und Java-Proxies (letztere zu XI 3.0 SP1)

·        Integrationsprozesse

·        IDocs, wobei diese nur dann Acknowledgments zurückgeben, wenn diese über das ALE audit konfiguriert wurden

·        Empfänger-Adapter unterstützen System-Acknowledgments, aber keine Anwendungs-Acknowledgments.

Funktionsumfang

Anfordern von Acknowledgments

Um ein oder mehrere Acknowledgments anzufordern, verwenden Sie die folgenden Methoden des MessageSpecifier-Interface:

Methoden zur Acknowledgement-Anforderung

Feld

Angefordertes Acknowledgment

public void setSystemAckRequested
(String ackListenerName);

Positives System-Acknowledgment

Der Empfänger wurde erfolgreich erreicht; für Server-Proxies bedeutet dies, dass die implementierende Klasse zum Server-Proxy gefunden wurde und die Methode zur Inbound-Verarbeitung aufgerufen werden konnte.

public void setSystemErrorAckRequested (String ackListenerName);

Negatives System-Acknowledgment

Die Laufzeit der Exchange Infrastructure meldet einen Fehler während der Übertragung beziehungsweise der Verarbeitung der Message auf dem Weg zum Empfänger. Beispielsweise kann ein Fehler in einem Mapping-Programm oder ein nicht im Empfängersystem vorhandenes Server-Proxy dieses Acknowledgment auslösen.

public void setApplicationAckRequested (String ackListenerName);

Positives Anwendungs-Acknowledgment

Die Message wurde vom Empfänger erfolgreich verarbeitet.

public void setApplicationErrorAckRequested (String ackListenerName);

Negatives Anwendungs-Acknowledgment

Während der Verarbeitung der Message beim Empfänger ist ein Fehler aufgetreten.

Hinweis

Wann eine Message von einem Empfänger erfolgreich verarbeitet worden ist, hängt vom Empfänger ab: Bei einem Server-Proxy ist dies der Fall, wenn die beim Empfänger ausgeführte Methode keine Ausnahme ausgelöst hat, bei einem Integrationsprozess können Sie im Sendeschritt explizit ein Acknowledgment versenden (siehe Abschnitt Acknowledgment senden unter StrukturlinkSendeschritt).

Dabei ist ackListenerName der Name einer Bean, die Sie zusammen mit dem Anwendungsprogramm auf Senderseite deployen, um das Acknowledgment abzufragen.

Die Empfänger-Bean

Der mit den Anforderungsmethoden übergebene Name ackListenerName ist der Name einer EJB 2.0 Empfänger-Bean, um das Acknowledgement abzufragen. Der Name folgt der gleichen Konvention wie Proxy-Beans, zum Beispiel:

sap.com/MyTest/MyTestAckBean or localejbs/MyTestAckBean.

Analog zur Proxy-Bean muss das home-, das remote-, das localHome- und das local-Interface der Empfänger-Bean in der folgenden Weise im Deployment-Deskriptor (Datei ejb-jar.xml) deklariert sein, damit sie von der Java-Proxy-Laufzeit gefunden wird:

com.sap.aii.proxy.xiruntime.ack.AckListenerHome
com.sap.aii.proxy.xiruntime.ack.AckListenerRemote
com.sap.aii.proxy.xiruntime.ack.AckListenerLocalHome
com.sap.aii.proxy.xiruntime.ack.AckListenerLocal

Die Bean muss folgendes Java-Interface der Java-Proxy-Runtime implementieren:

com.sap.aii.proxy.xiruntime.ack.AckListener

Das Interface hat nur eine Methode, die aufgerufen wird, sobald die Java-Proxy-Runtime ein Acknowledgment emfpängt:

onAck(com.sap.aii.proxy.xiruntime.ack.AckMessage ack).

Diese Methode muss Teil der local- und localHome-Interfaces der Empfänger-Bean sein und in der Bean implementiert sein. Wenn ein Acknowledgment über eine der oben angegebenen Methoden angefordert wird, registriert die Java-Proxy-Laufzeit beim Senden der Message den Namen der Empfänger-Bean zusammen mit der Message-ID in einer Tabelle.

Abfragen und Auswerten von Acknowledgments

Bei Empfang einer Acknowledgment-Message ermittelt die Java-Proxy-Laufzeit die Empfänger-Bean über die Message-ID, auf die die Acknowledgment-Message verweist, instanziiert die Bean und ruft die Methode onAck() auf. Über das Interface AckMessage übergibt die Java-Proxy-Laufzeit der Methode Detail-Informationen über das Acknowledgment.

Hinweis

Die Java-Proxy-Laufzeit aggregiert keine Ackknowledgments. Die Methode onAck() wird für jede angeforderte Acknowledgement-Message aufgerufen.

Methoden des Interface AckMessage

Methode

Rückgabewert(e)

String getStatus();

Status des Acknowledgment:

·        OK, falls ein positives Acknowledgment empfangen wurde

·        Error, falls ein negatives Acknowledgment empfangen wurde oder

·        AckRequestNotSupported, wenn das angeforderte Acknowledgment nicht unterstützt wird beziehungsweise die Message, für die ein Acknowledgment angefordert wurde, auf Grund einer Verzweigung an mehrere Empfänger ging.

Für die letzten beiden Werte gibt es weitere Methoden, um die Fehlerursache genauer zu bestimmen (siehe unten).

String getCategory();

Fehlerkategorie transient oder permanent.

Nur relevant, wenn getStatus() den Wert Error zurückgegeben hat. Falls getCategory() den Wert transient hat, wurde die asynchrone Message noch nicht erfolgreich übermittelt (zum Beispiel, weil der Empfänger nicht erreichbar ist), die Übermittlung könnte aber noch zu einem späteren Zeitpunkt erfolgreich sein.

String getType();

Einer der folgenden Acknowledgment-Typen (siehe oben):

ApplicationAck, ApplicationError, SystemAck oder SystemError.

IGUID getRefToMsgId();

ID der Message, für die Sie das Acknowledgment angefordert haben.

String getRefToMsgIdAsString();

ID der Message als String, für die Sie das Acknowledgment angefordert haben.

Fehleranalyse

Wenn getStatus() den Wert Error zurückgegeben hat, können Sie die folgenden Methoden verwenden, um mehr Informationen über die Fehlerursache zu bekommen:

AckMessage-Methoden für getStatus() == „Error“

Methode

Rückgabewert

String getErrorCode();

Fehlerkode

String[] getErrorParameters();

Bis zu vier Fehlermeldungen oder null, falls keine Meldung mitgegeben wurde.

String getApplicationFaultMessage();

Fault-Message. Nur relevant für den Fall getStatus() =Error” und getType() = “ApplicationError” (siehe auch: Fehlerbehandlung).

String
getApplicationFaultMessageNamespace();

Namensraum der Fault-Message. Nur relevant für den Fall getStatus() =Error” und getType() = “ApplicationError”.

Wenn getStatus() den Wert AckRequestNotSupported zurückgegeben hat, können sie die folgenden Methoden verwenden, um herauszufinden, welcher Acknowledgment-Typ vom Empfänger nicht unterstützt wird. Jede dieser Methoden gibt true zurück, wenn eine der XI Laufzeitkomponenten beziehungsweise der Empfänger das angeforderte Acknowledgment nicht unterstützt:

AckMessage-Methoden für getStatus() == „AckRequestNotSupported“

               boolean systemNotSupported();

               boolean systemErrorAckNotSupported();

               boolean applicationAckNotSupported();

               boolean applicationErrorAckNotSupported();

Konstanten

Die oben angegebenen Rückgabewerte lassen sich auch über Konstanten auswerten:

Konstanten der Klasse com.sap.aii.proxy.xiruntime.ack.AckConstant

Konstante

Wert

static AckConstant CATEGORY_PERMANENT

“permanent”

static AckConstant CATEGORY_TRANSIENT

“transient”

static AckConstant STATUS_ERROR

“Error”

static AckConstant STATUS_NOT_SUPPORTED

“AckRequestNotSupported”

static AckConstant STATUS_OK

“OK”

static AckConstant TYPE_APPLICATION_ACK

“ApplicationAck”

static AckConstant TYPE_APPLICATION_ERROR

“ApplicationError”

static AckConstant TYPE_SYSTEM_ACK

“SystemAck”

static AckConstant TYPE_SYSTEM_ERROR

“SystemError”

Die Klasse hat außerdem die Methoden toString(), valueOf() und geerbte Methoden der Klasse java.lang.Object.

 

 

 

Ende des Inhaltsbereichs