Pergunta

Estou usando RMI para um projeto que estou trabalhando atualmente e quero vincular a partir de múltiplos hosts para um registro RMI único.

No entanto, quando eu tento fazê-lo eu recebo um erro dizendo

java.rmi.AccessException: Registry.Registry.bind anulado; origem / 192.168.0.9 é anfitrião não-local

Eu fiz assim googling e parece que RMI pára hosts remotos de ligação por padrão, o que eu quero saber se há alguma maneira de substituir ou contornar isso?

Se alguém alguma sugestão sobre como superar este problema que seria muito apreciada, eu tentei usar diferentes arquivos de política e substituindo a manjedoura de segurança, mas nada parece funcionar.

Foi útil?

Solução 5

Obrigado por everyones responde a solução que eu vim com, no final, era usar a Cajo Framework isso dá um sistema muito flexível para a distribuição e permitiu-me a lidar com o registro como eu bem entendesse. Ele também pode trabalhar atrás de NATs, firewalls, e HTTP proxies, que é muito útil.

Eu acredito que o método de proxy sugerido por rndm.buoy vai funcionar em alguns casos, mas a sua pode ser problemático em algum sistema. RMI parece ter alguns problemas com associando ao errada de Interface de Rede Eu particularmente tive esse problema quando executado em distribuições Linux baseadas em Debian.

Outras dicas

Há uma maneira de contornar a limitação, mas é o que é: um trabalho em torno. De qualquer forma, não hesite em experimentá-lo. Ele funciona para nós.

No host que está executando o RMI Registos Centrais executar um pequeno serviço que vai ligar um objeto remoto com apenas um método remoto: proxyRebind. A aplicação deste método simplesmente se liga o objecto que é fornecido a ele no registo central (esta não iria falhar porque o registo é na mesma máquina que este serviço).

Todos os outros hosts que simplesmente pesquisar esse objeto remoto e invocar proxyRebind com seus próprios objetos remotos.

Isso funciona porque look-up em registros hospedados remotamente é permitido. Sua tentativa original falhou porque vinculativo sobre registros hospedados remotamente não é permitido.

Deixe-me saber se você precisar de mais clareza sobre isso.

/ RS

2 Existe uma maneira de contornar a limitação, mas é o que é: um Gambiarra. De qualquer forma, fique à vontade para tentar -lo. Ele funciona para nós.

No host que está executando o registo central RMI executar um pequeno serviço que vai ligar um controle remoto objeto com apenas um método remoto: proxyRebind. A implementação de este método simplesmente se liga o objecto que é fornecido a ele no centro Registro (isso não seria um fracasso porque o registo é na mesma máquina como este serviço).

Todos os outros hosts simplesmente lookup este objeto remoto e invocar proxyRebind com seu próprio controle remoto objetos.

Isso funciona porque look-up remotamente registros hospedados é permitido. Seu tentativa original falhou porque vinculativo sobre registros hospedados remotamente não é permitido.

Deixe-me saber se você precisar de mais clareza sobre isso.

Este funciona perfeitamente. A única coisa a cuidar está a seguir deve ser sempre correctamente definidas. -Djava.rmi.server.hostname = "IP host local"

I podem ser mal-entendido a sua pergunta, em caso afirmativo, por favor me avise.

eu não tenha muita experiência com Java RMI, que usamos em nosso projeto classe Patterns com o padrão Proxy. (Textbook: Headfirst Design Patterns)

Não fomos capazes de obter os nossos projetos de trabalho de fora da rede da universidade, mas eles funcionou perfeitamente quando conectado diretamente à rede. De acordo com nosso professor, não foi possível usar RMI em nossa implementação através da internet ou WAN. Uma solução ela sugeriu foi que uma VPN seria necessário. Eu acredito que Vladimir está correto em que ele tem a ver com ele ser um serviço de nomes local.

Posso estar errado, mas parece que a aplicação rmiregistry é essencialmente um wrapper sobre serviço de nomes local. Que significa que não há nenhuma maneira de fazê-lo apontar para objetos remotos.

O que você precisa é uma implementação Naming, e agrupados com isso. Considere a mover-se em solução de cluster J2EE AS. JNDI árvore é compartilhada dentro do cluster.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top