Montag, 19. März 2007

RMI Client Callbacks

RMI (Remote Method Invocation) Client Callbacks können einem ganz schön den Tag schwer machen. Mir ist es gelungen einen ordentlichen Deadlock zu erzeugen, beim Einsatz von RMI Callbacks.

Folgendes Szenario:
  1. Ein Client ruft mittels RMI eine synchronized Methode am Server auf.

  2. Diese synchronized Methode führt Zustandsveränderungen am Server aus und sieht im Anschluss vor, dass die Beobachter (Observer oder Listener) davon in Kenntnis gesetzt werden.

  3. Der Client wartet nun auf die Beendigung der entfernt aufgerufenen Methode.

  4. In der Zwischenzeit bekommt der Client (der Beobachter sein muss) aber vom Server eine Update Nachricht über RMI (Callback).

Dieser Ablauf birgt nun die Möglichkeit eines Deadlock.

  • Die Update-Methode am Client versucht eine weitere synchronized Methode innerhalb der selben Klasse am Server zu starten.
Deadlock wegen zyklischen Wartens.

1 Kommentar:

Anonym hat gesagt…

Was Du da schreibst, das verstehe ich nicht ganz.