|
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 |
java.lang.Object genRob.genControl.client.Sieve
Ein Sieb filtert aus den vom zugehörigen
Klienten (Client
)
ermittelten Kandiaten (Nominee
)
passende Roblet®-Server-Repräsentanten (Server
)
heraus.
Es erlaubt daher einen selektiven Zugriff
auf Roblet®-Server bestimmter Typen,
d.h. mit bestimmten Einheiten (Unit
).
Das Sieb funktioniert nur, wenn der Klient für Verzeichnisdienste vorbereitet
wurde.
Die Vermittelung der Information geschieht über
Server-Interessenten (ServerListener
).
Die Server-Interessenten eines Siebs werden
über neu bekannt gewordene bzw. ausgetragene Server
unterrichtet, sofern sie den gewünschten Kriterien entsprechen.
Ein Beobachter wird per addListener(ServerListener, Class[][])
zum Sieb hinzugefügt.
Damit ein Sieb wirken kann, muß noch der Verzeichnisdienst genRob®-genMediator im Netz laufen. genRob®-genMediator ist eine Komponente des genRob®-Systems.
ACHTUNG:
Im Gegensatz zur einfachen Kombination Klient/Kandidaten-Interessent
(Client
/NomineeListener
)
baut ein Sieb zu sämtlichen Servern eine Verbindung auf und diese
wird in der Folge aktiv aufrecht erhalten.
Das beansprucht Systemressourcen, die in kleineren Umgebungen
(Handy o.ä.) anderwertig benötigt werden könnten.
import genRob.genControl.client.Client; import genRob.genControl.client.Server; import genRob.genControl.client.ServerListener; import genRob.genControl.client.Sieve; public class ObserveAll { public static void main (String[] args) throws Exception { Client client = new Client (); Sieve sieve = new Sieve (client); sieve. addListener ( new ServerListener () { public void addedServer (Server server) { System.out.println ("Found " + server); } public void removedServer (Server server) { System.out.println ("Lost " + server); } }, null // No criteria ); System.out.println ("Hit enter to end"); System.in.read (); sieve. close (); client. close (); } }
import genRob.genControl.client.Client; import genRob.genControl.client.Server; import genRob.genControl.client.ServerListener; import genRob.genControl.client.Sieve; import genRob.genControl.unit.log.Logger; import genRob.genControl.unit.log.Logger2; public class ObserveLogger { public static void main (String[] args) throws Exception { Client client = new Client (); Sieve sieve = new Sieve (client); sieve. addListener ( new ServerListener () { public void addedServer (Server server) { System.out.println ("Found " + server); } public void removedServer (Server server) { System.out.println ("Lost " + server); } }, new Class[][] // OR { new Class[] // AND { Logger2.class, }, new Class[] // AND { Logger.class, }, } ); System.out.println ("Hit enter to end"); System.in.read (); sieve. close (); client. close (); } }
Constructor Summary | |
Sieve(Client client)
Erzeugt ein Sieb. |
Method Summary | |
void |
addListener(ServerListener listener,
Class[][] criteria)
Fügt einen Server-Interessenten hinzu. |
void |
close()
Schließt das Sieb. |
void |
removeListener(ServerListener listener)
Entfernt einen Server-Interessenten. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
public Sieve(Client client)
Ein Sieb wird solange arbeiten, bis es per close()
geschlossen
wird.
client
- Klient, dessen Kandidaten verarbeitet werdenMethod Detail |
public void close()
Das Schließen eines Siebs umfaßt neben dem Ignorieren weiterer
Kandidaten vom Klienten auch das Beenden
laufender Aktivitäten (Beenden von Threads) und das Freigeben
von Ressourcen.
Das Einmelden von weiteren Server-Interessenten (ServerListener
)
wird von einem geschlossenen Sieb ignoriert.
Die Methode kann ohne Schaden mehrfach aufgerufen werden. Ein einmal geschlossenes Sieb läßt sich nicht wieder reaktivieren.
Das Schließen eines Siebes bedeutet keinesfalls, daß der zugehörige Klient geschlossen wird. Anders herum genauso.
public void addListener(ServerListener listener, Class[][] criteria)
removeListener(ServerListener)
wieder entfernt
oder das Sieb per close()
geschlossen wird.
Nach dem Einmelden wird zunächst der Interessent über alle bereits bekannten und passenden Server informiert. Danach nur noch, wenn der zugehörige Klient neue Server findet und das hier übergebene Kriterium paßt.
Wird als Kriterium null angegeben, so werden alle Server geliefert. Andernfalls wird das Kriterium auf dem Server abgeprüft. In jedem Fall wird Verbindung zum Server aufgenommen - mindestens um die Identität des Servers zu erfahren.
Das Kriterium ist ein Feld von Feldern, wobei das äußere Feld
(zugegriffen über den ersten Index) die oder-Varianten des Kriteriums
in Form von jeweils eingehängten inneren Feldern,
die und-Varianten, enthält.
Die schließlich eingehängten Klassen müssen von Unit
abgeleitet sein.
Sie werden vom Server erfragt.
Beispiel:
Die Logik zwischen dem Fall ohne Kriterium (null) und mit Kriterium (ungleich null) kehrt sich komplett um. Im ersten Fall wird quasi locker nicht geprüft - im zweiten Fall jedoch streng.Class[][] criteria = new Class [][] // OR { new Class [] // AND { dom.domain.unit.MyUnit.class, }, new Class [] // AND { dom.domain.unit.OtherUnit.class, dom.somewhere.unit.SomeUnit.class, }, }
Ein inneres Feld vom Wert null entspricht dem Fall, daß der Server die Einheiten dieses inneren Feldes nicht kennt. Gleiches gilt, wenn gar keine inneren Felder vorliegen.
Erfüllt der Server ein inneres Kriterium, so wird die Untersuchung abgebrochen. Ein leeres inneres Feld, bzw. leere Einheitendefinitionen (null) werden als nichterfüllend gewertet.
Wird ein Interessent ein weiteres Mal hinzugefügt,
so wird zunächst die existierende Zuordnung aufgelöst
(entspricht dem Aufruf von removeListener(ServerListener)
)
und danach erst die Hinzufügung durchgeführt.
listener
- Server-Interessentcriteria
- Kriterium oder null
NullPointerException
- falls der Interressent null istpublic void removeListener(ServerListener listener)
Ist der Interessent beim Aufruf dieser Methode gar nicht (mehr) enthalten oder gleich null, so wird nichts gemacht.
listener
- Server-Interessent
|
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 |