|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.ObjectAMETAS.servicedev.AMETASResponseHandler
Diese Klasse dient dem Datenaustausch zwischen einem Klienten
(Stellennutzer) und einem
AMETASAsyncServiceProxy. Der Klient übergibt beim
Aufruf einer Dienstmethode im Proxy einen
AMETASResponseHandler, der als Callback-Objekt
dient. Die Dienstmethode kehrt sofort zurück, so daß der Klient
nicht blockiert wird und andere Dinge tun kann, während der Dienst
seine Anfrage bearbeitet. Der Klient überprüft dabei von Zeit
zu Zeit, ob der Dienst bereits geantwortet hat, indem er die
Methode getResponse() auf dem entsprechenden
ResponseHandler aufruft. Bekommt er dabei ein Antwortobjekt
zurück, so kann er es bearbeiten. Dieses Objekt enthält das
Ergebnis des Dienstaufrufs. Liefert getResponse()
null zurück, so hat der Dienst noch nicht geantwortet und der
Klient kann sich weiter mit anderen Dingen beschäftigen.
Der Proxy merkt sich bei einem Aufruf vom Klienten das übergebene
AMETASResponseHandler-Objekt und läßt die aufgerufene
Methode zurückkehren, so das der Klient deblockiert wird. Triff
eine Antwort des Dienstes ein, so übergibt der Proxy die
enthaltenen Daten über setResponse(Object) dem
ResponseHandler und löscht seine Referenz auf den Handler. Für ihn
ist der Dienstaufruf damit erledigt. Das Handlerobjekt entkoppelt
also Kleint und Proxy.
Wichtig ist hierbei, daß für jeden Aufruf ein anderes
Handlerobjekt zuständig ist. D.h. der Klient erstellt für jeden
Aufruf einen Handler und übergibt ihn an den Proxy. Gleichzeitig
hält er eine Referenz auf den Handler, um die Antwort abholen zu
können. Es sollte auch möglich sein, ResponseHandler
wiederzuverwenden. Allerdings muß dann darauf geachtet werden, daß
nicht der Handler eines noch aktiven Aufrufes verwendet wird; denn
wenn ein Handler gleichzeitig zweimal beim Proxy registriert wird,
dann kann es zu Datenverlust kommen, wenn die zuerst eingetroffene
Antwort von der zweiten überschrieben wird.
Der Einsatz eines AMETASAsyncServiceProxy und eines
AMETASResponseHandlers könnte etwa wie folgt
aussehen:
...
// Erstelle einen Handler speziell für den folgenden Aufruf.
AMETASResponseHandler rhGetLoadHandler = new AMETASResponseHandler();
// Die Dienstanfrage über den Proxy im Klientenobjekt.
m_proxy.getCounter("Load", rhGetLoadHandler);
while( bBlabla ) {
... Hier können irgendwelche Aktionen ausgeführt werden. ...
// Die Dienstmethode liefert ein Objekt von Typ Counter zurück.
// Schaue nach, ob es schon eingetroffen ist.
Counter cnt = (Counter)rhGetLoadHandler.getResponse();
if( cnt != null ) {
// Die Antwort ist eingetroffen. Bearbeite sie.
if( rhGetLoadHandler.getAge() > 10000 ) // Antwort ist älter als 10 Sekunden
m_Driver.output("Uiuiui, die Antwort ist aber ganz schön alt. Vergessen Wir sie lieber");
else {
... Hier wird der erhaltene Zähler bearbeitet. ...
}
}
}
| Field Summary | |
static int |
NO_EXCEPTION
Exception-Konstante für den internen Gebrauch. |
static int |
PARAM_MISMATCH_EXCEPTION
Exception-Konstante für den internen Gebrauch. |
static int |
SERVICE_ERROR_EXCEPTION
Exception-Konstante für den internen Gebrauch. |
| Constructor Summary | |
AMETASResponseHandler()
|
|
| Method Summary | |
long |
getAge()
Liefert das Alter der Antwort im Millisekunden zurück. |
java.lang.Object |
getResponse()
Wird vom Klienten aufgerufen, um zu testen, ob die Antwort bereits aingetroffen ist. |
long |
getTimeStamp()
Liefert den Zeitpunkt zurück, an dem der Proxy die Antwortdaten hier abgelegt hat. |
void |
setException(int nException,
java.lang.String sMessage)
Wird vom Proxy aufgerufen, um eine durch nException beschriebene Exception zu werfen, wenn
der Klient getResponse aufruft. |
void |
setResponse(java.lang.Object objResponseData)
Wird vom Proxy aufgerufen, sobald die Antwort des Dienstes eintrifft. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
public static final int NO_EXCEPTION
public static final int PARAM_MISMATCH_EXCEPTION
public static final int SERVICE_ERROR_EXCEPTION
| Constructor Detail |
public AMETASResponseHandler()
| Method Detail |
public java.lang.Object getResponse()
throws ProxyParamMismatchException,
ProxyServiceErrorException
null
zurückgeliefert.
null sonst
ProxyParamMismatchException - falls der Proxy die
Antwort aufgrund fehlerhafter Antwortparameter nicht auswerten
konnte. Was in diesem Zusammenhang fehlerhaft bedeutet,
hängt von Dienst und Proxy ab.
ProxyServiceErrorException - falls im Dienst bei der
Bearbeitung der Anfrage ein Fehler aufgetreten ist.public void setResponse(java.lang.Object objResponseData)
objResponseData - Ein Objekt, das die Antwortdaten des
Dienstes enthält. Welchen Typ dieses Objekt hat, häng vom
Proxy ab.
public void setException(int nException,
java.lang.String sMessage)
nException beschriebene Exception zu werfen, wenn
der Klient getResponse aufruft. Mit diesem
Mechanismus der verzögerten Ausnahmen wird eine
Fehlerbehandlung möglich, wie sie auch im synchronen Fall
vorgenommen wird. nException muß eine der in
dieser Klasse definierten Konstanten
PARAM_MISMATCH_EXCEPTION oder
SERVICE_ERROR_EXCEPTION sein. Wird durch den
Proxy kein Wert übergeben, dann enthält
m_nException standaradmäßig
NO_EXCEPTION.
nException - Eine der in dieser Klasse definierten
EXCEPTION-Konstanten.sMessage - Eine Textnachricht, die der Exception im
Konstruktor übergeben wirdpublic long getTimeStamp()
public long getAge()
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||