SIMON - Simple Invocation of Methods Over Network

super, werd ich morgen gleich mal testen :slight_smile:

Super das funktioniert jetzt :slight_smile:

Nur ich hab den Verdacht das nächste Problem steht an, aber das muss ich noch genauer untersuchen ob das nicht an mir liegt.

Hmm jetzt läuft alles wie es soll :slight_smile:

Na das sind doch mal gute Nachrichte freu

Dann kann ich mich jetzt dem “Server finden” Problem widmen. Könnte für dich vielleicht auch ne schicke Option sein.

Hintergrund: Wenn dein Watchdogserver ausfällt ist er weg.
Hast du mehrere Watchdogserver (wegen Ausfallsicherheit), so weiß der Alarmserver ja nicht immer gleich dass es noch welche gibt, oder dass Hans Müller eben nochmal schnell einen Watchdogserver aufgesetzt hat weil die zwei, die die Alarmserver bisher gekannt haben abgeraucht sind.

Mit dem “Server finden” feature wäre das dann kein Problem mehr (zumindest im lokalen Netzwerk das Multicast unterstützt).

  • Alex

Jo das würde vorallem auch weniger Konfigurationsaufwand sein, weil so musste ihm immer sagen “Da ist dein Watchdog meld dich bei dem an”.

Hatteste das Problem mit den Threads eigendlich schon gelöst? (Threads bleiben aktiv obwohl es hieß Registry ausschalten)

Hatteste das Problem mit den Threads eigendlich schon gelöst? (Threads bleiben aktiv obwohl es hieß Registry ausschalten)

Glaub schon. Kannst du ja ganz einfach mit JConsole nachvollziehen.

  • Alex

ich habs direkt in meinem Programm getestet und es klappt :smiley:

Na prima. So, ich werd jetzt dann für heute Feierabend machen. Bin vor lauter Meetings und anderem Zeugs gar nicht dazu gekommen mich um irgendwas zu kümmern. Egal. Für heute ist gut.

Ab Montag bin ich 2 Wochen in Urlaub. Wenn du noch was findest: In Mantis eintragen und mir zuweisen (assign: alex). Dann seh ich’s gleich nach meinem Urlaub im Emailpostfach.

So. Bis denndann,

Gruß
Alex

Alles klar mach ich, schönen Urlaub.

So, bin wieder aus dem Urlaub zurück. Zumindest aus der ersten hälfte.

Hast du auch Entwicklungspause eingelegt oder ist SIMON gerade „fehlerfrei“?! :wink:

  • Alex

na Urlauber :slight_smile:
Ne ich war fleißig und hab weiter gebastelt, bisher sind mir keine weiteren Fehler oder Probleme aufgefallen.
Einzig was mir immer wieder auffällt was vielleicht schön wäre (wenns nicht schon da ist) irgendwie ein Schalter der SIMON sagt außer Exceptions nix ausgeben. Weil diese 1. Nachrichti das die Simonlib geladen ist ist manchmal etwas störend.

Das lässt sich über’s Logging einstellen. Kann aber auch die erste Info aus dem Info-Level rausnehmen und ins FINE-Level reintun. Dann muss man nix umstellen.

  • Alex

Sodele. Der eine verbleibende Logoutput ist jetzt ins Level “fine” gewandert. D.h. ab sofort schwiegt Simon wenn man das Logging nicht explizit einschaltet.

Weitere “Neuerung”:

Registry#bindAndPublish() …

Damit lässt sich ein Remote-Objekt an die Registry binden und zusätzlich “veröffentlichen”. Mit der Klasse PublishClient kann man dann mit der “search()” Methode nach Servern im lokalen Netzwerk suchen, womit man dann eine List erhält, die dann InetAddress, Port und Name des veröffentlichten RemoteObjekts kennt…

Bin noch nicht ganz fertig, aber funktionieren tut’s schon prinzipiell.
Muss noch so feinheiten wie “Wie lange soll der Suchvotgang dauern?” parametrierbar machen.

Des weiteren sten ich noch vor den kleinen Problem, dass der Suchvorgang blockiert. Da hier Multicast zum einsatz kommt, MUSS ich eine gewisse Zeit auf Antworten warten. Je kleiner ich die Zeit wähle, desto weniger Server werde ich finden, und desto größer ich die Zeit einstelle, desto mehr “viel beschäftigte Server” werd ich finden, die eben etwas zeit brauchen um auf die Suche zu antworten.
Naja, jetzt überlege ich halt ob ich eine Methodik zur Verfügung stelle mit der die Suche nicht mehr blockiert und man dann eben die gefundenen Server, während die Suche im Hintergrund andauert “pollt”, oder ob ich das komplett dem Entwickler überlasse. Ich glaube ich werde ersteres realisieren. Hat auch noch den kleinen Vorteil dass man schon während die Suche läuft die ersten Ergebnisse bekommt, und nicht erst wenn die Suche komplett abgeschlossen ist.

  • Alex

Das klingt doch schonmal gut.
Mach doch beides, lass die normale Search blockieren und Methode “Backgroudsearch” (oder so komisch) die per Listener über neue Server informiert.

Bin gerade dabei das so zu lösen:

In der Simon-Klasse, welche ja ausschließlich “static” benutzt wird, gibts dann eine “search” Methode, der man eine Listenerimplementierung mitgibt.
Im Hintergrund startet dann die Suche, ohne das Programm zu blockieren. Mit dem Suchfortschritt-Listener wird dann informiert wie weit die Suche ist (gemäß abgelaufener suchzeit) und wieviele Remoteobjekte gefunden wurden. Des weiteren gibt es eine Methode zum auslesen der bisher gefundenen Remoteobjekte. Jeder aufruf leert die Liste, so dass man, wenn man will, bequem während der Suche, getriggert über den Suchfortschritt-Listener, die neu gefundenen Einträge bekommt.

D.h. wenn man am Ende der Suche (kann man abfragen) sich die Liste geben lässt, kriegt man alles auf einmal.

Frägt man nach 50% der Suche, kriegt man das, was bisher gefunden wurde. Frägt man dann am Ende der Suche nochmal, kriegt man alles, was zwischen 50% und 100% der Suche gefunden wurde. Find ich recht praktisch.

Wenns klappt hab ich’s in den kommenden 45min soweit fertig…

  • Alex

aber wie löst du jetzt das mit “ich will suchen wo welche sind und erst weiter wenn ich ein/mehrere Ergebnisse hab”, wenn man eine Queue (LinkedBlockingQueue) mitgeben könnte könnte man es so lösen aber wie mit Liste wüsste ich gerade nicht.

while (publicationSearcher.isSearching()) {
Thread.sleep(100);
}

So zum Beispiel. Wait und Notify etc. gibts ja auch noch, welche man über den Listener triggern kann/könnte. Das nachträglich “blockieren” ist einfacher, als das nachträgle “asynchronisieren”.

Und die meisten Programme haben wohl Clientseitig eine GUI oder sowas, was nicht blockieren soll.

  • Alex

jo hast schon recht, schön wäre nur wenn von hausaus schon was dabei wäre

Naja, hab darüber auch nachgedacht. Kann natürlich auch ein blockierendes suchen rein machen. Aber der Sinn entzieht sich mir. Asynchron ist da sowas von einfach zu benutzen. Und man hat auch gleich noch die Sache mit dem update des SearchProgress etc.

Okay, auch im blockierenden zustand kann ich den Listener mit updates zum Progress füttern? Aber wozu wenn der Thread eh blockiert?! Die GUI kriegt dann ja nix davon mit … Oder fällt dir eine Sinnvolle verwendung ein, den Main-Thread für mehrere Sekunden zu blockieren?! Und wenn man mehrere Threads hat, dann will man damit ja etwas “entblocken”. Und da dann doch wieder zu blocken?! Also ich weiß nicht…

Aber vielleicht fällt dir ja wirklich was “praktisches” dazu ein…

  • Alex

Naja aus meiner sicht ist nen blockierendes Suchen dafür brauchbar:
Ich weiß das ein Server existiert, daher sage ich meinem System starte und verbinde dich zum ersten den du findest.

Man könnte das auch mit soner Schleife machen aber ich fände das nicht so schön.