|
Roblet®-Development-Kit 1.1 (10Juni10) API für Anwendungen |
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
Jede Instanz stellt einen Roblet®-Server-Kandidaten dar.
Pro Roblet®-Server kann es mehrere Kandidaten geben, da ein Roblet®-Server unter verschiedenen Namen und IP-Adressen verzeichnet sein kann.
NomineeListener
,
Server
Method Summary | |
Server |
getServer()
Gibt die zugehörige Server-Repräsentanz zur Benutzung zurück. |
Object |
run(Roblet roblet)
Deprecated. Zu ersetzen durch eine Kombination von getServer() , Server.getSlot()
und Slot.run(Roblet) .
Diese scheinbar einfache Methode ist zwar für Einsteiger
gut, hat aber in der Praxis oft den Blick für ein tieferes
Verständnis der Roblet®-Technik versperrt. |
Method Detail |
public Object run(Roblet roblet) throws InterruptedException, ClientException, Exception
getServer()
, Server.getSlot()
und Slot.run(Roblet)
.
Diese scheinbar einfache Methode ist zwar für Einsteiger
gut, hat aber in der Praxis oft den Blick für ein tieferes
Verständnis der Roblet®-Technik versperrt.
Zur Ausführung wird ein neues Fach auf dem Server eingerichtet
und das Roblet® kommt darin zum Laufen
- dessen Ausführung
beendet also keine Roblets® aus früheren Aufrufen
dieser Methode (anders als bei Slot.run(Roblet)
).
Das Roblet® wird für den Transport serialisiert
und zum Server geschickt.
Aus diesem Grund muß das Roblet den Typ
Serializable
implementierten.
Wird statt eines Roblets® null übergeben, so wird auch null zurückgegeben.
Ist das Roblet® nicht null, so wird vom
Roblet®-Server dessen Methode
Roblet.execute(org.roblet.Robot)
ausgeführt.
Nach deren Ende wird ihr Rückgabewert hier zurückgegeben.
Wird im Hauptthread, welcher Roblet.execute(org.roblet.Robot)
ausführt, eine Ausnahme abgeleitet von Exception
geworfen, so wird sie an dieser Stelle auch geworfen.
Schließt man diese Methode demnach in einen
try-Block ein, so kann man im catch-Block
direkt die selbst erzeugten Ausnahmen abfangen.
Wurde eine Ausnahme, abgeleitet von Exception
,
in einem beliebigen anderen Thread des Roblets® erzeugt
(und nicht abgefangen) während der Hauptthread
des Roblets® noch lief, so wird diese entsprechend hier geworfen
(während das Roblet® bereits vom Server beendet wurde).
Entsteht im Hauptthread oder einem beliebigen anderen eine
Ausnahme, welche nicht von Exception
abgeleitet ist,
so wird der Server nach Möglichkeit trotzdem Informationen
schicken, die vom Roblet®-Klienten dann jedoch
in eine ClientException
gepackt werden.
Sollte die Verbindung unbrauchbar werden, so wird
eine ClientException
geworfen.
Es bleibt in diesem Fall offen, ob das Roblet® erfolgreich ankam und
lief oder nicht.
Ein erneuter Aufruf der Methode baut eine neue Verbindung auf
und hat keinen Bezug zu vorhergehenden Aufrufen.
Wird der diese Methode aufrufende Thread unterbrochen,
so wird entweder eine Ausnahme vom Typ InterruptedException
geworfen oder das Unterbrechungssignal (interrupt flag)
des Threads gesetzt.
Ersteres wird gemacht, wenn die Netzwerkaktivität noch nicht oder
gerade ausgelöst wurde.
Letzteres geschieht, wenn die Aktivität bereits abgeschlossen
ist.
Im letzteren Fall sind die Ergebnisse zwar normal verwendbar, aber
es ist auch zu beachten, daß der Thread natürlich beim nächsten
Object.wait()
, Thread.sleep(long)
o.ä. eine Ausnahme
obigen Typs erzeugen wird.
Mehrmalige Aufrufe dieser Methode mit den gleichen Parametern kann in bestimmten Fällen verschiedene Server ansprechen. Gründe dafür können Load-Balancer und Änderungen im DNS sein, welches andere Server sichtbar werden läßt.
roblet
- Roblet®, welches auf dem Server zum Laufen
gebracht wird
)
ClientException
- falls die Verbindung nicht funktioniert
oder sonstige Probleme auftraten
- verkettet ist die Ursache
InterruptedException
- falls der aufrufende Thread
beim Warten auf das Resultat durch die Anwendung
zum Unterbrechen aufgefordert wird oder bereits
vorher sein Unterbrechungssignal (interrupt flag)
gesetzt war
Exception
- falls im Roblet® ein Fehler auftratpublic Server getServer() throws InterruptedException, ClientException
Es wird eine Verbindung zum Roblet®-Server aufgebaut,
um dessen Identität festzustellen,
da möglicherweise bereits eine Verbindung unter einem anderen
Namen besteht.
Ist letzeres der Fall, so wird die bereits bekannte Repräsentanz
zurückgegeben.
Pro Klient (Client
) wird für einen Server
immer die gleiche Repräsentanz (Instanz) zurückgegeben.
Man kann also bei Bedarf direkt auf Gleichheit prüfen.
Mehrmalige Aufrufe dieser Methode kann in bestimmten Fällen die Rückgabe verschiedener Server-Repräsentanzen zur Folge haben. Gründe dafür können Load-Balancer und Änderungen im DNS sein, welches andere Server sichtbar werden läßt.
InterruptedException
- falls der aufrufende Thread
beim Warten auf den Roblet®-Server durch die Anwendung
zum Unterbrechen aufgefordert wird oder bereits
vorher sein Unterbrechungssignal (interrupt flag)
gesetzt war
ClientException
- falls Probleme auftraten
- verkettet ist die Ursache
|
Roblet®-Development-Kit 1.1 (10Juni10) API für Anwendungen |
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |