2016-05-09 4 views
0

Ich brauche eine Möglichkeit, einen statischen Port für rmi-Clients einzustellen. Der Server verwendet einen festen Port für seine Verbindungen, aber die Clientseite erstellt einen dynamischen Port, obwohl ich eine Client-Socket-Factory eingerichtet habe.Wie wird der statische Client-Port für rmi Clients eingestellt?

Die Ursache, die ich gefunden habe, ist in der Klasse "TCPChannel". In dieser Klasse sehe ich diesen Code:

TCPEndpoint.getLocalEndpoint(0, (RMIClientSocketFactory)null, (RMIServerSocketFactory)null);

Dies wird eindeutig nicht funktionieren, da dieser Code nicht bewusst meine Socket-Factory ist. Offensichtlich ist diese Klasse nicht RMI-spezifisch.

Frage ist - Gibt es eine Möglichkeit, die TCP-Socket-Erstellung zu überschreiben, so dass es überhaupt keine dynamischen Ports erstellt?

Antwort

0

Client-Seite erstellt einen dynamischen Port, obwohl ich eine Client-Socket-Fabrik festgelegt.

Sie legen es wie fest? Was auch immer du getan hast, du hast es nicht richtig gemacht.

Aber warum überhaupt? Es gibt viele Nachteile. Zum einen bewirkt dies, dass alle RMI-Aufrufe von diesem Client möglicherweise in Intervallen von zwei Minuten sequenziell ausgeführt werden, oder dass möglicherweise alle Anrufe in häufigeren Intervallen mit BindExceptions fehlschlagen.

Zum anderen kann es negative Auswirkungen auf DGC haben.

Und es gibt keinen tatsächlichen Nutzen überhaupt.

Offensichtlich ist diese Klasse nicht RMI-spezifisch.

Welche Klasse? Und was ist daran offensichtlich?

+0

Einstellen der Client-Socket-Factory wie folgt: RMISocketFactory.setSocketFactory (new RMIClientSocketFactoryWithSocketAdaptor (opts)); RMIClientSocketFactoryWithSocketAdaptor ist meine impl für Socket-Factory. Wir müssen statische Ports als Teil einer Sicherheitsanforderung haben, die alle offenen dynamischen Ports einschränkt. Die Klasse, die nicht RMI-spezifisch ist, bezog sich auf 'TCPChannel'. – YaOg

+0

Das ist ungefähr 18 Jahre alt. Die moderne Art, dies zu tun, besteht darin, eine 'RMIClientSocketFactory' bereitzustellen, wenn Sie * das Objekt * auf dem * Server * exportieren, was auch bedeutet, dass es serialisierbar sein muss. 'TCPChannel' ist 100% RMI-spezifisch und wird für keinen anderen Zweck verwendet. Die Sicherheitsanforderungen, die Sie erhalten haben, sind zu 100% sinnlos und sollten von einer kompetenten Person überprüft werden. Nur weil Sie eine Firewall-Regel für ausgehende Ports festlegen können, bedeutet ** NICHT **, dass es eine gute Idee ist. Es ist nicht. Ich habe das hier und anderswo seit fast 20 Jahren gesagt, und ich habe noch nie ein Gegenargument oder eine Gegeninstanz gesehen. – EJP

+0

gültige Punkte. wir werden es noch einmal überdenken. Vielen Dank. – YaOg