Domanda

Sto usando RMI per un progetto su cui sto attualmente lavorando e voglio associare più host a un unico registro RMI.

Tuttavia, quando provo a farlo, viene visualizzato un messaggio di errore

java.rmi.AccessException: Registry.Registry.bind non consentito; origin / 192.168.0.9 è host non locale

L'ho fatto su Google e sembra che RMI impedisca agli host remoti di legarsi per impostazione predefinita, cosa voglio sapere c'è un modo per sovrascrivere o bypassare questo?

Se qualcuno avesse qualche suggerimento su come superare questo problema, sarebbe molto apprezzato, ho provato a usare diversi file di criteri e sovrascrivere il gestore della sicurezza, ma nessuno sembra funzionare.

È stato utile?

Soluzione 5

Grazie per la risposta di tutti, la soluzione che mi è venuta alla fine era quella di utilizzare Cajo Framework questo offre un sistema di distribuzione molto flessibile e mi ha permesso di gestire il registro come meglio credevo. Può anche funzionare dietro NAT, firewall e proxy HTTP, il che è molto utile.

Credo che il metodo di proxy suggerito da rndm.buoy funzionerà in alcuni casi, ma potrebbe essere problematico su alcuni sistemi. RMI sembra avere dei problemi con l'associazione all'interfaccia di rete sbagliata Ho riscontrato questo problema in particolare quando eseguivo distribuzioni Linux basate su Debian.

Altri suggerimenti

C'è un modo per aggirare il limite ma è quello che è: una soluzione. Comunque, sentiti libero di provarlo. Funziona per noi.

Sull'host che esegue il registro RMI centrale eseguire un piccolo servizio che associ un oggetto remoto con un solo metodo remoto: proxyRebind. L'implementazione di questo metodo lega semplicemente l'oggetto che gli viene fornito nel registro centrale (ciò non fallirebbe perché il registro si trova sullo stesso computer di questo servizio).

Tutti gli altri host cercano semplicemente questo oggetto remoto e invocano proxyRebind con i propri oggetti remoti.

Funziona perché è consentita la ricerca su registri ospitati in remoto. Il tuo tentativo originale non è riuscito perché non è consentito il bind su registri ospitati in remoto

Fammi sapere se hai bisogno di ulteriori chiarimenti al riguardo.

/ RS

  

2 C'è un modo per aggirare   il limite ma è quello che è: a   work-around. Comunque, sentiti libero di provare   fuori. Funziona per noi.

     

Sull'host che esegue   il registro centrale RMI esegue un piccolo   servizio che vincolerà un telecomando   oggetto con un solo metodo remoto:   proxyRebind. L'implementazione di   questo metodo lega semplicemente l'oggetto   che gli viene fornito al centro   registro (questo non fallirebbe perché   il registro si trova sullo stesso computer di   questo servizio).

     

Tutti gli altri host avrebbero semplicemente cercato   questo oggetto remoto e invoca   proxyRebind con il proprio telecomando   oggetti.

     

Funziona perché cerca da remoto   i registri ospitati sono consentiti. Il tuo   tentativo originale fallito perché   vincolante per i registri ospitati in remoto   non è consentito.

     

Fammi sapere se hai bisogno di ulteriori   chiarezza su questo.

Funziona perfettamente. L'unica cosa da fare è seguire sempre deve essere impostato correttamente. -Djava.rmi.server.hostname = " LOCAL HOST IP "

Potrei fraintendere la tua domanda, in tal caso, per favore fatemelo sapere.

Ho un'esperienza limitata con Java RMI, l'abbiamo usato nella nostra classe Design Patterns con Proxy Pattern. (Libro di testo: Headfirst Design Patterns)

Non siamo riusciti a far funzionare i nostri progetti al di fuori della rete universitaria, ma hanno funzionato perfettamente quando sono stati collegati direttamente alla rete. Secondo il nostro professore, non è stato possibile utilizzare RMI nella nostra implementazione su Internet o debole. Una soluzione che suggerì fu che sarebbe stata necessaria una VPN. Credo che Vladimir abbia ragione nel fatto che ha a che fare con il fatto che è un servizio di denominazione locale.

Potrei sbagliarmi, ma sembra che l'applicazione rmiregistry sia essenzialmente un wrapper sul servizio di denominazione locale. Ciò significa che non c'è modo di farlo puntare a oggetti remoti.

Ciò di cui hai bisogno è un'implementazione di denominazione e raggruppata in questo. Considerare di passare alla soluzione di clustering J2EE AS. L'albero JNDI è condiviso all'interno del cluster.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top