|
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 |
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.
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 |
public Server getServer()
public Object run(Roblet roblet) throws ClientException, InterruptedException, Exception
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 Thread
s benutzt.
Ist auch dieser null, so wird der System-Klassenlader
(ClassLoader.getSystemClassLoader()
) eingesetzt.
roblet
- Roblet®, welches auf dem Server zum Laufen
gebracht wird
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 auftratpublic InputStream getInputStream()
null wird zurückgegeben, wenn der Server das Konzept nicht unterstützt.
public OutputStream getOutputStream()
null wird zurückgegeben, wenn der Server das Konzept nicht unterstützt.
public Object obtainProxy(Class clazz)
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.
clazz
- Schnittstelle, zu der eine lokale Instanz für den Zugriff
auf eine entsprechende ferne Instanz erzeugt wird
public void offerRemote(Object object)
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.
object
- Instanz, deren Methoden erreichbar werdenpublic void revokeRemote(Object object)
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.
object
- Instanz, deren Methoden erreichbar werden
|
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 |