Mit einzelnen RMI-Registry
Habe ich mit Java-RMI-API für ein Projekt an dem ich gerade arbeite und ich binden wollen, die von mehreren hosts mit einem einzigen RMI-registry.
Jedoch, wenn ich versuche zu tun, so bekomme ich eine Fehlermeldung
java.rmi.AccessException: Registrierung.Registrierung.binden, nicht zulässig; Herkunft /192.168.0.9 ein nicht-lokalen host
Hab ich ja googeln und es scheint, dass die RMI-Stationen remote-hosts aus der Bindung standardmäßig, was ich wissen will gibt es eine Möglichkeit, zu überschreiben oder zu umgehen diese?
Wenn jemand irgendwelche Vorschläge auf, wie man Vergangenheit dieses Problem, Sie würde sehr geschätzt werden, ich habe versucht, mit verschiedenen policy-Dateien und das überschreiben des security-manger, aber keiner scheint zu funktionieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt einen Weg, um die Beschränkung, sondern es ist, was es ist: ein work-around. Jedenfalls fühlen Sie sich frei, um es auszuprobieren. Es funktioniert für uns.
Auf dem host ausgeführt wird die zentrale RMI-registry führen Sie einen kleinen service, binden Sie ein remote-Objekt mit nur einer Fernbedienung-Methode: proxyRebind. Die Implementierung dieser Methode einfach bindet das Objekt, zu dem geliefert wird es in das zentrale Testamentsregister (würde dies nicht scheitern, denn die Registrierung ist auf der gleichen Maschine wie dieser Dienst).
Alle anderen hosts würde einfach lookup das remote-Objekt und rufen Sie proxyRebind mit eigenen remote-Objekte.
Dies funktioniert, da sich-bis auf Remote gehostete Registern ist gestattet. Ihre ursprünglichen Verbindungsversuch ist fehlgeschlagen, da die Bindung auf Remote gehostete Register ist nicht erlaubt.
Lassen Sie mich wissen, wenn Sie benötigen keine weitere Klarheit.
/RS
java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is:
auch wenn das remote-Objekt beheben sollten, um die IP-192.168.126.137 ich Frage mich, ob es etwas gibt, was mir fehlt, könnten Sie bitte erweitern Sie Ihren Vorschlag wäre es, die großartige geschätzt.Diese perfekt funktioniert. Die einzige Sache zu kümmern wird im folgenden sollte immer korrekt eingestellt.
-Djava.rmi.server.hostname="LOCAL-HOST-IP"
java.rmi.server.hostname
in einem mehrfach vernetzten host oder, wenn es etwas falsch mit Ihrer DNS wie beschrieben im Artikel A. 1. der RMI-FAQ.Kann ich Missverständnisse deine Frage, wenn ja, bitte lassen Sie es mich wissen.
Habe ich nur wenig Erfahrung mit Java RMI, wir haben es in unserer Design-Patterns-Klasse mit dem Proxy-Pattern. (Lehrbuch: Kopfüber Design Patterns)
Waren wir nicht in der Lage, unsere Projekte, die von außerhalb des Uni-Netzwerk, aber Sie funktionierte perfekt, wenn Sie direkt an das Netzwerk angeschlossen. Laut unserem professor war es nicht möglich zu RMI in unserer Implementierung über das internet oder wan. Eine Lösung, die Sie vorgeschlagen wurde, dass ein VPN benötigt wird. Ich glaube, Wladimir ist richtig, dass es mit dem zu tun hat, dass es eine lokale naming-service.
Ich kann mich irren, aber es sieht aus wie rmiregistry Anwendung ist im wesentlichen ein wrapper über lokale naming-service. Was bedeutet, es gibt keinen Weg, um Sie zu remote-Objekten.
Was Sie brauchen, ist eine Benennung der Implementierung und Cluster an. Überlegen Sie, in zu bewegen J2EE clustering-Lösung. JNDI-Baum-shared innerhalb der cluster.
Danke für jede Antworten, die die Lösung kam ich mit in die end-zu nutzen, um die Cajo Rahmen dies ergibt ein sehr flexibles system für die Verteilung und die es erlaubt, für mich zu behandeln, die registry, wie ich es sah. Es kann auch arbeiten hinter NATs, firewalls und HTTP-proxies, die ist sehr nützlich.
Ich glaube, dass die Methode von Proxys vorgeschlagen von rndm.Boje wird in einigen Fällen arbeiten aber seine kann problematisch sein, auf einigen system. RMI zu haben scheint einige Probleme mit der Zuordnung zu dem falschen Netzwerk-Interface besonders ich hatte dieses Problem beim laufen auf Debian-basierten Linux-Distributionen.