SIMON - Simple Invocation of Methods Over Network

nene du hast mich falsch verstanden, das beim ping eine fliegt ist vollkommen richtig
ich hab diesen Code hier

    public void actionPerformed(ActionEvent e)
    {
      try
      {
        watchdogserver.ping();
      }
      catch(Exception ex)
      {
        logger.log(LoggingHandler.WARNING, "Error while ping watchdog", ex);
        try
        {
          rebind();
        }
        catch(Exception ex1)
        {
          logger.log(LoggingHandler.WARNING, "Error while rebind rmi", ex1);
        }
      }
    }



 private void rebind() throws LookupFailedException
  {
    Simon.bind(ApplicationConfiguration.getValue("clientname"), this);
    watchdogserver = (WatchDog)Simon.lookup(ApplicationConfiguration.getValue("watchdogaddress"), ApplicationConfiguration
        .getIntegerValue("watchdogport"), ApplicationConfiguration.getValue("watchdogname"));

    watchdogserver.login(ApplicationConfiguration.getValue("clientaddress"), ApplicationConfiguration.getValue("clientname"),
        ApplicationConfiguration.getIntegerValue("clientremoteport"));
  }

Beim ping fliegt wie zu erwarten die erste Exception, aber beim rebind fliegt die nächste, aber absolut identische Exception. Rebind soll eigentlich die Verbindung neu herstellen.

[QUOTE=tuxedo]
[update]

wie wäre es mit einer einfachen setGlobalRegistry Methode? damit umgehst du das alles

Hmm, die globale registry hab ich eigentlich deshlab, damit man sich die „arbeit“ mit der individuellen Registry sparen kann.Mal schauen, vielleicht kann ich da was vom RMI abschauen…[/QUOTE]

Ja dafür reicht sie ja aus und wenn man etwas „besonderes“ will dann kann man sich das zusammenbauen und als globale „markieren“

Ah so. Hmm, okay. Wieder ein fall für einen JUnit Test…

Bzgl. der globalen Registry: Ich glaub ich lass die einfach weg, bzw. mach sie deprecated. Bei RMI gibts sowas auch nicht, und der Code den man sich durch die glob.Reg. spart ist auch nicht wirklich viel. Und wenn man sowas doch haben will, hat mans mit zwei einfach statischen Wrapper-Methoden selbst gebaut.

  • Alex

Könnte es sein das du beim bind Aufruf nur neue Verbindungen herstellst? Bestand eine schon einmal kommts mir so vor als würde sie nicht wieder hergestellt werden.

Jepp, genau da sollte einer der Vorteile von SIMON liegen:

Benutzt man als Client mehrere Serverobjekte von der gleichen Registry, so wird nur eine einzige TCP Verbindung dafür benötigt.

Nur dummerweise hab ich noch nicht berücksichtigt, dass die Verbindung ja auch tot sein kann. Ich schau’s mir gerade genauer an.

  • Alex

[update]

Hab die Lösung schon fast. Nebenbei ist mir aufgefallen dass ich noch ein anderes Problem hab:

Wenn die Verbindung getrennt wird, kurz nachdem ein CLient eine Methode aufgerufen hat, wartet sich der Client zu tode …

Scheint etwas verzwickter zu sein. Aber ich werd’s wohl hinkriegen…

  • Alex

Also das Reconnect-Problem ist jetzt mal generell gelöst. Obs noch schwierigkeiten mit hängenbleibenden Methodenaufrufen gibt muss noch verifizieren, sollte aber keine Probleme mehr machen.

Weitere Details: http://root1.de/mantis/view.php?id=23

  • Alex

ich hätte da einen Vorschlag :wink:
wie wäre es wenn du die normale lookup drin lässt mit String und intern auf InetAddress umbaust?

Hmm, denke ich werde beides anbieten…

Bzgl der globalen und individuellen registry: hier meine überlegungen: http://root1.de/mantis/view.php?id=22

gruß
Alex

P.S. Willst du dich vllt. im Bugtracker anmelden? Dann kannst du dort Bugs schneller melden und man kann direkt zum Bug Notizen machen bzw. diskutieren.

Die Verbindungsgeschichten funktionieren jetzt super.

hab ich schon gemacht :wink:

Irgendwie ist das komisch, der der Verbindungsaufbau von den Clients zum Watchdog funktioniert nach Abbrüchen problemlos. Aber der Watchdog schafft es nie sich zu den Clients neu zu verbinden.

[Edit: Ich habs hinbekommen das er garkeine Verbindungen mehr entgegen nimmt :smiley:

Ich hab dir in deinen Bugtracker man nen neuen Eintrag gemacht. Wenn sich ein Server zu meinem Watchdog verbindet läuft das ohne Probleme mit dem Reconnect, aber sobald der Server mal weg ist und wieder kommt kackt der Simon-Teil beim Watchdog ab.

[QUOTE=EagleEye]Irgendwie ist das komisch, der der Verbindungsaufbau von den Clients zum Watchdog funktioniert nach Abbrüchen problemlos. Aber der Watchdog schafft es nie sich zu den Clients neu zu verbinden.

[Edit] Ich habs hinbekommen das er garkeine Verbindungen mehr entgegen nimmt :D[/QUOTE]

Das musst du jetzt etwas genauer erläutern…

Weil:

Aber der Watchdog schafft es nie sich zu den Clients neu zu verbinden.

Du willst den Server zu den Clients verbinden lassen? Das geht dann aber nur dann, wenn am Client auch eine Registry läuft. Aber mal davon abgesehen seh ich nich cnith wirklich den SInn dahinter, einen Server zu den Clients verbinden zu lassen. Wo kämen wir denn da hin wenn sich ein Apache zu einem Firefox verbindet :smiley:

Ich hab den Watchdog, bei ihm läuft ne Registry, alle Clients (Server die zu überwachen sind) melden sich bei ihm “Hallo ich bin da”. Damit der Watchdog die Clients richtig überprüfen kann merkt er sich wer sich bei ihm gemeldet hat und fragt diese über eine Remote Methode ab.
Bei den Clients läuft auch eine Regsitry. Starte ich alle das erste mal gibts keine Probleme, alles läuft wie es soll. Schalte ich den Watchdog aus und wieder an verbinden sich die Clients mittlerweile ohne Probleme, aber schalte ich einen der Clients aus und wieder an stürzt der Simon Part vom Watchdog irgendwie ab.

[QUOTE=EagleEye]Ich hab den Watchdog, bei ihm läuft ne Registry, alle Clients (Server die zu überwachen sind) melden sich bei ihm „Hallo ich bin da“. Damit der Watchdog die Clients richtig überprüfen kann merkt er sich wer sich bei ihm gemeldet hat und fragt diese über eine Remote Methode ab.
[/quote]

Okay, soweit ist das auch korrektes „watch dogging“ :wink:

Bei den Clients läuft auch eine Regsitry.

Warum? Der Server kann auch ohne Registry bei den Clients Methoden auf dem Client aufrufen. Stichwort: Callback
Mit einer weiteren registry bei den Clients kriegst du ja auch das Problem, dass wenn die Clients hinter einem Router sitzen, du da nochmal ein Portforwarding brauchst und zudem insgesamt zwei Netzwerkverbindungen benutzt werden. Eine reicht jedoch vollkommen aus. Gibt im übrigen auch nicht wirklich einen Grund warum der Client sich beim Server meldet, die Verbindung dann trennt und der Server dann in einem Intervall auf einer anderen Netzwerkverbindung wieder was vom Client will. Benutze die erste Verbindung die der Client aufgebaut hat und gut ist.

Starte ich alle das erste mal gibts keine Probleme, alles läuft wie es soll. Schalte ich den Watchdog aus und wieder an verbinden sich die Clients mittlerweile ohne Probleme,

Jupp, hab ich ja erst kürzlich gefixt.

aber schalte ich einen der Clients aus und wieder an stürzt der Simon Part vom Watchdog irgendwie ab.

Gibt’s zu „stürzt irgendwie ab“ eine Fehlermeldung? Weil in der Regel sagt mir „stürzt irgendwie ab“ so rein gar nix :confused: Was sagt das Logging? Kannst du ein Minimalbeispiel erstellen damit ich das lokal reproduzieren kann?

Gruß
Alex

Stimmt das mit dem Callback hab ich komplett vergessen, ich dachte da wäre auch beim Client ne Registry gewesen. Werd ich gleich mal probieren.

Ne es ist einfach tot http://root1.de/mantis/view.php?id=24
da ist auch die Logdatei dazu.

Ich werd mal probieren ob ichs als kleines Prog reproduzieren kann und dir das dann geben.

Ich bin gerade dabei meine Sache hier zu verkleinern, dabei ist mir was aufgefallen

java.lang.ClassCastException: de.root1.simon.exceptions.LookupFailedException
	at de.root1.simon.Simon.lookup(Simon.java:329)

kann es sein das bei nicht vorhandenen Servern in der Registry noch Probleme gibt?

so hier ist mal eine Testumgebung, witzigerweise verhält sie sich nicht so wie das andere Programm. Sie hängt sich nicht auf sondern wirft Exceptions. Ich hoffe ich hab in der Eile keine Fehler reingemacht.

Oh mir fällt ein, erst WatchDog, dann Alarmserver starten mitm WatchDogClient könntest du dir das alles noch ansehen wobei er nicht viel zeigt

[QUOTE=EagleEye]Ich bin gerade dabei meine Sache hier zu verkleinern, dabei ist mir was aufgefallen

java.lang.ClassCastException: de.root1.simon.exceptions.LookupFailedException
	at de.root1.simon.Simon.lookup(Simon.java:329)

kann es sein das bei nicht vorhandenen Servern in der Registry noch Probleme gibt?[/QUOTE]

Tatsache. Hab das Problem gefixt: http://root1.de/mantis/view.php?id=26

Wär klasse wenn du solche Bugs gleich in Mantis meldest. Ist vollkommen egal ob du dir sicher bist oder nicht obs tatsächlich ein Bug ist oder nicht. Einfach rein damit und gut ist.

Schau mir jetzt das andere Zeugs mal an.

Danke. Wäre aber schön gewesen, wenn du die File in Mantis hochgeladen/angehängt hättest. So springe ich jetzt ständig hin und her und muss schauen wer was wo postet…

Ich schau’s mir an.

  • Alex