Verwenden der einzelnen RMI-Registry

8

Ich habe RMI für ein Projekt verwendet, an dem ich gerade arbeite, und ich möchte von mehreren Hosts an eine einzige RMI-Registrierung binden.

Wenn ich dies jedoch versuche, bekomme ich eine Fehlermeldung mit

java.rmi.AccessException: Registry.Registry.bind nicht erlaubt; Herkunft / 192.168.0.9 ist nicht lokaler Host

Ich habe so gegoogelt und es sieht so aus, als ob RMI das Blockieren von Remote-Hosts standardmäßig stoppt. Was ich wissen möchte, ist, ob es eine Möglichkeit gibt, dies zu umgehen oder zu umgehen?

Wenn irgendjemand irgendwelche Vorschläge, wie man über dieses Problem hinwegkommt, würden sie sehr geschätzt werden, ich habe versucht, verschiedene Richtliniendateien zu verwenden und den Sicherheitsmanager zu übergehen, aber keiner scheint zu funktionieren.

    
Mark Davidson 04.05.2009, 16:05
quelle

5 Antworten

0

Danke für die Antworten von jedem, die Lösung, die ich am Ende gefunden habe, war, das Cajo-Framework zu verwenden, das gibt eine sehr flexible Lösung System für die Verteilung und es erlaubt mir, die Registrierung zu handhaben, wie ich es für richtig hielt. Es kann auch hinter NATs, Firewalls und HTTP-Proxies arbeiten, was sehr nützlich ist.

Ich glaube, dass die von rndm.buoy vorgeschlagene Proxying-Methode in einigen Fällen funktionieren wird, aber auf einigen Systemen problematisch sein kann. RMI scheint Probleme bei der Zuordnung zur falschen Netzwerkschnittstelle zu haben Ich hatte dieses Problem besonders, wenn ich auf Debian-basierten Linux-Distributionen lief.

    
Mark Davidson 14.06.2009, 15:15
quelle
7

Es gibt einen Weg, um die Begrenzung zu umgehen, aber es ist, was es ist: ein Workaround. Wie auch immer, fühlen Sie sich frei, es auszuprobieren. Es funktioniert für uns.

Führen Sie auf dem Host, auf dem die zentrale RMI-Registrierung ausgeführt wird, einen kleinen Dienst aus, der ein entferntes Objekt mit nur einer Remote-Methode bindet: proxyRebind. Die Implementierung dieser Methode bindet das Objekt, das in der zentralen Registrierung bereitgestellt wird, einfach ein (dies würde nicht fehlschlagen, da sich die Registrierung auf demselben Computer wie dieser Dienst befindet).

Alle anderen Hosts suchen einfach dieses Remote-Objekt und rufen proxyRebind mit ihren eigenen Remote-Objekten auf.

Dies funktioniert, weil die Suche in remote gehosteten Registries erlaubt ist. Ihr ursprünglicher Versuch ist fehlgeschlagen, da die Bindung an remote gehostete Registrys nicht zulässig ist.

Lassen Sie es mich wissen, wenn Sie weitere Klarheit darüber brauchen.

/ RS

    
user40552 19.05.2009 20:07
quelle
2
  

2 Es gibt eine Möglichkeit, sich fortzubewegen   die Begrenzung aber es ist was es ist: a   Umgehung. Wie auch immer, zögern Sie nicht, es zu versuchen   es aus. Es funktioniert für uns.

     

Auf dem Host, auf dem die   zentrale RMI-Registrierung einen kleinen ausführen   Dienst, der eine Fernbedienung bindet   Objekt mit nur einer Remote-Methode:   ProxyRebind. Die Implementierung von   Diese Methode bindet das Objekt einfach   das wird ihm in der Mitte geliefert   Registrierung (dies würde nicht scheitern, weil   Die Registrierung befindet sich auf demselben Computer wie   dieser Service).

     

Alle anderen Hosts suchen einfach nach   dieses Remote-Objekt und aufrufen   ProxyRebind mit ihrer eigenen Fernbedienung   Objekte.

     

Dies funktioniert, weil Sie remote nachsehen können   gehostete Registries sind erlaubt. Ihre   ursprünglicher Versuch gescheitert, weil   Bindung an remote gehostete Registrys   ist nicht erlaubt.

     

Lass es mich wissen, wenn du weiter brauchst   Klarheit darüber.

Das funktioniert perfekt. Das einzige, was zu beachten ist, sollte immer korrekt eingestellt sein. -Djava.rmi.server.hostname="LOCAL HOST IP"

    
Biswa 30.08.2009 15:54
quelle
1

Ich kann Ihre Frage missverstehen, wenn ja, lassen Sie es mich wissen.

Ich habe wenig Erfahrung mit Java RMI, wir haben es in unserer Design Patterns Klasse mit dem Proxy Pattern verwendet. (Lehrbuch: Headfirst Design Patterns)

Wir konnten unsere Projekte nicht von außerhalb des Universitätsnetzwerks beziehen, aber sie funktionierten perfekt, wenn sie direkt mit dem Netzwerk verbunden waren. Laut unserem Professor war es nicht möglich, RMI in unserer Implementierung über das Internet oder Wan zu verwenden. Eine von ihr vorgeschlagene Lösung war, dass ein VPN benötigt würde. Ich glaube, Vladimir hat Recht damit, dass es sich um einen lokalen Namensdienst handelt.

    
Aaron 19.05.2009 19:16
quelle
0

Ich mag mich irren, aber es sieht so aus, als wäre die Anwendung von rmiregistry im Wesentlichen ein Wrapper über den lokalen Naming Service. Das bedeutet, dass es keine Möglichkeit gibt, auf entfernte Objekte zu zeigen.

Was Sie brauchen, ist eine Naming-Implementierung, die an dieser Stelle gebündelt ist. Ziehen Sie in Erwägung, in die J2EE AS ​​Clustering-Lösung zu wechseln. JNDI-Struktur wird innerhalb des Clusters freigegeben.

    
Vladimir Dyuzhev 04.05.2009 17:58
quelle