Após um trabalho sobre RMI, desejo compartilhar as seguintes lições aprendidas:
1. Não é possível registrar em um determinado registry um objeto que esteja em outra máquina
- Registry.rebind disallowed; origin /11.0.10.31 is non-local host
-
Is it possible to run rmiregistry on a different machine than the remote object?
http://www.jguru.com/faq/view.jsp?EID=417817
2. Quando houver problemas de conexão em relação ao endereço publicado pelo servidor (Connection refused to host: 127.0.1.1) deve-se passar a propriedade java.rmi.server.hostname para a máquina virtual Java:
java -Djava.rmi.server.hostname=192.168.0.116 LigadorImpl
java -Djava.rmi.server.hostname=192.168.0.117 ServidorTempoImpl 192.168.0.116
- http://stackoverflow.com/questions/2624752/starting-rmi-server-on-ubuntu-laptop
- Se essa propriedade não for especificada no Ubuntu, será publicado o endereço 127.0.1.1 (ver arquivo /etc/hosts). Já no Windows, o IP da máquina para acesso remoto foi publicado corretamente nos testes que fiz, não precisando definir a propriedade java.rmi.server.hostname.
3. Se for usado algum SecurityManager é preciso criar um arquivo que determina a política de segurança e dizer isso para o RMI através da propriedade java.security.policy:
java -Djava.rmi.server.hostname=192.168.0.116 -Djava.security.policy=security.policy LigadorImpl
Um exemplo de arquivo security.policy que garante todas as permissões é dado abaixo:
grant {
permission java.security.AllPermission;
};
Entretanto, se for para dar todas as permissões, é melhor não usar nenhum SecurityManager.
0sem comentários ainda