|
Roblet®-Development-Kit 2.1 (01Mrz12) API für Anwendungen |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
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)
erfolgen.
Ein Roblet® kann durch eine Anwendung direkt vermittels
run(Roblet)
beendet werden,
wenn sie es über eine Instanz des hier beschriebenen Typs
an das zugehörige Fach des Servers geschickt hat.
Server
Method Summary | |
---|---|
InputStream |
getInputStream()
Deprecated. Wird bei der nächsten großen Version gestrichen. Ersatz sind dann wie schon jetzt die fernen Instanzen (vgl. obtainProxy(java.lang.Class>) und offerRemote(Object) ).
|
OutputStream |
getOutputStream()
Deprecated. Wird bei der nächsten großen Version gestrichen. Ersatz sind dann wie schon jetzt die fernen Instanzen (vgl. obtainProxy(java.lang.Class>) und offerRemote(Object) ).
|
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 |
---|
Server getServer()
Object run(Roblet roblet) throws InterruptedException, ClientException, 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 später eingehenden Rückgabedaten eines solchen Aufrufs werden vom Klienten 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®-Instanz, welche auf dem Server als Roblet®
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 Klient-seitige Probleme auftraten
- verkettet ist die Ursache
Exception
- falls im Roblet® ein Fehler auftratInputStream getInputStream()
obtainProxy(java.lang.Class>)
und offerRemote(Object)
).
null wird zurückgegeben, wenn der Server das Konzept nicht unterstützt.
OutputStream getOutputStream()
obtainProxy(java.lang.Class>)
und offerRemote(Object)
).
null wird zurückgegeben, wenn der Server das Konzept nicht unterstützt.
Object obtainProxy(Class<?> clazz)
Die zugehörige Instanz auf Seiten des Roblets® mußte vorher dort per
Einheit 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
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 Proxies
nicht verfügbar ist.
object
- Instanz, deren Methoden erreichbar werdenvoid 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 Proxies
nicht verfügbar ist.
object
- Instanz, deren Methoden erreichbar werden
|
Roblet®-Development-Kit 2.1 (01Mrz12) API für Anwendungen |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |