Ich schreibe eine Anwendung, die RMI Connection Factories verwendet, so dass ich vor dem Aufruf einer Remote-Methode ein Timeout auf der Client-Seite festlegen kann. Ich möchte dies tun, damit der Client auf einen Anruf zu einem entfernten Verfahren für eine vorbestimmte Zeit warten kann, bevor er den Anruf aufgibt und aufgibt.Es scheint, dass ich die Socket-Factory nicht von einem RMI-Stub bekommen kann. Wieso ist es so?
Ich habe eine Socket Factory erstellt, die diesen Mechanismus erleichtert. Ich erstelle den Remote-Stub mit UnicastRemoteObject.exportObject(Remote, int, RMIServerSocketFactory, RMIClientSocetFactory)
, damit der Client den Stub mit der angepassten Socket-Factory verwenden kann, deren Klassendefinition beiden Geräten bekannt ist.
Die Socket Factory des Clients muss die Zeitüberschreitung festlegen, bevor der Server aufgerufen wird. Der Kunde entscheidet über die Länge dieses Timeouts. Ich kann eine Steckdosenfabrik herstellen, die auf diese Weise funktioniert. Es scheint jedoch, dass ich auf dem Client nicht sicherstellen kann, dass der Remote-Stub diese angepasste Socket-Factory hat, und daher kann ich nicht sicherstellen, dass die Client-Socket-Factory einen Client-Socket mit einer Zeitüberschreitung erstellt.
Ich frage mich, ob es eine Methode gibt, die auf eine Art funktionieren würde, wie ich es mir vorstellen würde Remote.getClientFactory()
sollte funktionieren? Dies scheint mir ein offensichtliches Merkmal zu sein, das von der RMI-Spezifikation nicht abgedeckt wird. Gibt es in Ermangelung dieser Methode vielleicht einen gut benutzten "Hack", um die Socket-Factory des Clients auf dem Client abzurufen, so dass eine Zeitüberschreitung festgelegt werden kann?
Danke nochmal EJP. Ich habe eine Vorliebe für Option 4. Es sieht so aus, als würde ich etwas herstellen, das diese Option verwendet, und dann auf eine aktualisierte RMI-Spezifikation warten, um mir zu sagen, dass ich unartig bin. –
Es ist schon unanständig, 'sun.rmi. *' Klassen zu verwenden. Ich würde nicht den Atem anhalten und auf irgendwelche Änderungen in RMI warten. Seit dem 1.5 im Jahr 2004 ist nichts mehr passiert. – EJP
Hmmm ... 'RemoteStub' ist veraltet ... Ich nehme an, das Zeug im wahren Fall ist rückwärtskompatibel ... Ich habe das nicht eingebaut Logik in meine Lösung. Es interessiert mich nur, dass mein Ding mit dem neuesten Java funktioniert. –