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

genRob.genControl.client
Interface Slot


public interface Slot

Eine Instanz dieser Klasse stellt ein Fach auf einem Roblet®-Server dar (Fach-Repräsentanz).

Ein Fach ermöglicht das Platzieren und Verwalten von Roblets®.  Dabei kann zu jedem Zeitpunkt höchstens ein Roblet® pro Fach platziert sein.

Verwaltung des Roblets® meint im wesentlichen das vorzeitige Beenden und die Kommunikation mit seiner Anwendung.  Ein Roblet® kann vermittels der Methode run(Roblet) beendet werden.  Die Kommunikation kann per fernen Instanzen mit den Methoden offerRemote(Object), revokeRemote(Object) und obtainProxy(Class) oder vermittels Strömen mit den Methoden getInputStream() und getOutputStream() erfolgen.

Ein Roblet® kann durch eine Anwendung direkt nur dann vermittels run(Roblet) beendet werden, wenn sie es über eine Instanz des hier beschriebenen Typs an ein Fach geschickt hat.  Wurde das Roblet® per Client.run(String, Roblet) oder Server.run(Roblet) verschickt, so besteht diese Möglichkeit nicht.

See Also:
Server

Method Summary
 InputStream getInputStream()
          Gibt eine Strom-Instanz zurück, mit der Daten vom Roblet® abgeholt werden können.
 OutputStream getOutputStream()
          Gibt eine Strom-Instanz zurück, mit der Daten zum Roblet® gesandt werden können.
 Server getServer()
          Gibt die Server-Repräsentanz zurück, zu der dieses Fach gehört.
 Object obtainProxy(Class clazz)
          Zur angebenen Schnittstelle (interface) wird eine Vertreter-Instanz zurückgegeben, mit deren Hilfe auf eine ferne Instanz des Roblets® zugegriffen werden kann.
 void offerRemote(Object object)
          Nach Aufruf dieser Methode sind die Methoden der übergebenen Instanz von den Roblets® dieses Faches aus erreichbar.
 void revokeRemote(Object object)
          Die Methoden der übergebenen Instanz werden wieder unerreichbar.
 Object run(Roblet roblet)
          Platziert eine Roblet®-Instanz in diesem Fach des Roblet®-Servers, der es dann laufen läßt.
 

Method Detail

getServer

public Server getServer()
Gibt die Server-Repräsentanz zurück, zu der dieses Fach gehört.

Returns:
Roblet®-Server

run

public Object run(Roblet roblet)
           throws ClientException,
                  InterruptedException,
                  Exception
Platziert eine Roblet®-Instanz in diesem Fach des Roblet®-Servers, der es dann laufen läßt.  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 kann nur immer je ein Roblet® zu einem jeden Zeitpunkt in diesem Fach laufen.  Wird eine weiteres Roblet®-Instanz oder null vermittels dieser Methode an dieses Fach geschickt, so wird das bereits laufende Roblet® vorher durch den Server abgebrochen.

Die dieser Methode übergebene Roblet®-Instanz wird für den Transport serialisiert und zum Server geschickt.  Aus diesem Grund muß die Roblet®-Klasse den Typ Serializable implementieren.

Wird statt einer Roblet®-Instanz null übergeben, so wird auch null zurückgegeben.

Ist die Roblet®-Instanz 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 auf Seiten des Roblet®-Servers 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.

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.

Wurde der Thread, der diese Methode aufrief, unterbrochen, so bleibt in diesem Fall offen, ob das Roblet® erfolgreich ankam und lief oder nicht.  Die Rückgabedaten eines solchen Aufrufs werden von der Bibliothek verworfen.

Anfragen nach Klassen und Ressourcen für bzw. durch das Roblet® werden über den bei Aufruf dieser Methode gesetzten Kontext-Klassenladers (Thread.getContextClassLoader()) befriedigt.  Ist keiner gesetzt, so wird der Klassenlader der Klasse des Roblets® verwendet.  Ist dieser null, so wird der der Klasse des diese Methode aufrufenden Threads benutzt.  Ist auch dieser null, so wird der System-Klassenlader (ClassLoader.getSystemClassLoader()) eingesetzt.

Parameters:
roblet - Roblet®, welches auf dem Server zum Laufen gebracht wird
Returns:
Resultat, welches vom Roblet® kommt
Throws:
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
ClientException - falls sonstige Probleme auftraten - verkettet ist die Ursache
Exception - falls im Roblet® ein Fehler auftrat

getInputStream

public InputStream getInputStream()
Gibt eine Strom-Instanz zurück, mit der Daten vom Roblet® abgeholt werden können.

null wird zurückgegeben, wenn der Server das Konzept nicht unterstützt.

Returns:
Strom-Instanz oder null

getOutputStream

public OutputStream getOutputStream()
Gibt eine Strom-Instanz zurück, mit der Daten zum Roblet® gesandt werden können.

null wird zurückgegeben, wenn der Server das Konzept nicht unterstützt.

Returns:
Strom-Instanz oder null

obtainProxy

public Object obtainProxy(Class clazz)
Zur angebenen Schnittstelle (interface) wird eine Vertreter-Instanz zurückgegeben, mit deren Hilfe auf eine ferne Instanz des Roblets® zugegriffen werden kann.  Die Methoden der Instanz entsprechen den Methoden der Schnittstelle.  Wird eine Methode der hiesigen Instanz aufgerufen, so wird dieser Aufruf an das Roblet dieses Faches vermittelt.  Dort wird dann die passende Methode der zugehörigen Instanz aufgerufen.

Die zugehörige Instanz auf Seiten des Roblets® mußte vorher dort per Einheit genRob.genControl.unit.Remotes bereitgestellt worden sein.  Die Klasse der dortigen Instanz implementiert die hier übergebene Schnittstelle.

Zu beachten ist, daß sämtliche Parameter(typen) und Rückgabewerte der Schnittstelle serialisiserbar sein müssen.

Parameters:
clazz - Schnittstelle, zu der eine lokale Instanz für den Zugriff auf eine entsprechende ferne Instanz erzeugt wird
Returns:
lokale Instanz, welche auf die entsprechende ferne Instanz zugreift oder null, wenn der Server das Konzept nicht unterstützt

offerRemote

public void offerRemote(Object object)
Nach Aufruf dieser Methode sind die Methoden der übergebenen Instanz von den Roblets® dieses Faches aus erreichbar.

Zu beachten ist, daß sämtliche Parameter(typen) und Rückgabewerte serialisiserbar sein müssen.

Der Vorgang kann über revokeRemote(Object) wieder rückgängig gemacht werden.

Diese Funktion ist wirkungslos, wenn der Server das Konzept nicht unterstützt.  Der Server unterstützt die Funktionalität nicht, wenn die zugehörige Einheit genRob.genControl.unit.Proxies nicht verfügbar ist.

Parameters:
object - Instanz, deren Methoden erreichbar werden

revokeRemote

public void revokeRemote(Object object)
Die Methoden der übergebenen Instanz werden wieder unerreichbar.

Ist die Instanz vorher nicht per offerRemote(Object) hinzugefügt worden, so passiert nichts.

Diese Funktion ist wirkungslos, wenn der Server das Konzept nicht unterstützt.  Der Server unterstützt die Funktionalität nicht, wenn die zugehörige Einheit genRob.genControl.unit.Proxies nicht verfügbar ist.

Parameters:
object - Instanz, deren Methoden erreichbar werden

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

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