2016-04-26 3 views
0

Ich entwickle ein System, das RMI-Aktivierung verwendet, um eine Reihe von ähnlichen, aber unabhängigen Komponenten in ihren eigenen JVMs zu isolieren, so dass, wenn man (a) stürzt nicht das gesamte System herunterfahren und (b) es wird beim nächsten Mal automatisch neu gestartet werden. Ich registriere eine Aktivierungsgruppe pro Komponente, und dann möchte ich das aktivierbare Objekt innerhalb dieser Gruppe registrieren. Mit Blick auf die öffentlichen APIs scheint es zwei Möglichkeiten, zu sein, wie ein ActivationDesc mit dem Aktivierungssystem registrieren:Wie erzeuge ich sowohl stub als auch die ActivationID bei der Registrierung aktivierbaren Objekts

  • ActivationGroup.getSystem().registerObject, die die ActivationID zurückgibt, die Sie benötigen, wenn Sie das Objekt
  • Activatable.register anschließend Registrierung aufgehoben werden soll, was einen Stub zurückgibt, durch den das entfernte Objekt aktiviert und aufgerufen werden kann.

Aber ich kann nicht einen Weg durch die öffentlichen APIs finden, um sowohl den Stummel und die ID für die gleiche Anmeldung - Ich kann keine offensichtliche Art und Weise sehen eine clientseitige Stub für eine ActivationID gegeben zu erhalten (ohne den Aktivator tatsächlich zu kontaktieren und das entfernte Objekt an diesem Punkt zu aktivieren, was ActivationID.activate tun würde), noch die ActivationID eines gegebenen Stubs zu erhalten.

Was fehlt mir? Gibt es eine Möglichkeit, dies zu tun, ohne sich in interne sun.* APIs vertiefen zu müssen?

Antwort

0

Gute Frage. Ich musste mein Buchkapitel neu lesen, um meine Erinnerung aufzufrischen. Sie sind einer der wenigen, die die Aktivierung nutzen, und ich habe in fast zwei Jahrzehnten nur wenige Fragen dazu hier oder in den Oracle/Sun Java-Foren gesehen.

Die Antwort ist, dass Sie richtig sind: Sie können nicht. Die ActivationID scheint wirklich für den internen Gebrauch bestimmt zu sein, zusammen mit registerObject(), die letztlich was register() intern ruft. Der aktivierte Server wird bei der Aktivierung mit dieser Funktion ausgestattet: Dies bedeutet, dass er die Registrierung selbst aufheben kann, was wiederum bedeutet, dass Sie eine externe Methode von außen anrufen können, wenn Sie ein Objekt von außen abmelden möchten bewirkt, dass es sich selbst abmeldet. Ich kenne keine anderen praktischen Anwendungen extern für eine ActivationID offhand aber wenn es eine ähnliche Technik wäre. Oder Sie können es natürlich mit einer Fern getActivationID() Methode bereitstellen.

Verwandte Themen