Roblet®-Development-Kit
1.1 (10Juni10)
API für Anwendungen

genRob.genControl.client
Interface Nominee


public interface Nominee

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.

See Also:
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

run

public Object run(Roblet roblet)
           throws InterruptedException,
                  ClientException,
                  Exception
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.

Platziert ein Roblet® auf dem zugehörigen Roblet®-Server, der es dann laufen läßt.  Diese Aktion ist mit Netzwerkaktivität verbunden und kann daher unbestimmte Zeit in Anspruch nehmen.

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.

Parameters:
roblet - Roblet®, welches auf dem Server zum Laufen gebracht wird )
Throws:
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 auftrat

getServer

public Server getServer()
                 throws InterruptedException,
                        ClientException
Gibt die zugehörige Server-Repräsentanz zur Benutzung zurück.  Diese Aktion ist mit Netzwerkaktivität verbunden und kann daher unbestimmte Zeit in Anspruch nehmen.  Es wird also nicht mit einem timeout gearbeitet, jedoch der Thread, der diese Methode aufruft, kann jederzeit unterbrochen werden.

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.

Returns:
zugehörige Server-Repräsentanz
Throws:
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

Copyright © 2001-2010, roblet®.org, Hagen Stanek, http://roblet.org/rdk