Usando LocateRegistry e Registry

O pacote java.rmi.registry oferece uma classe e uma interface para que classes Java tenham acesso ao serviço de nomes RMI.

A interface Registry representa uma interface para o registro de objetos RMI operando em uma máquina específica. Através de um objeto dessa classe, é possível invocar o método bind() que associa um nome de serviço (um String) ao objeto que o implementa.

Para obter uma referência para um objeto Registry são utilizados os métodos da classe LocateRegistry, todos estáticos.

Para obter uma referência para um objeto Registry, o método getRegistry() da classe LocateRegistry é utilizado. Há quatro versões básicas desse método:

  1. getRegistry(): obtém referência para o registro local operando na porta padrão;

  2. getRegistry(int port): obtém referência para o registro local operando na porta especificada;

  3. getRegistry(String host): obtém referência para o registro remoto operando na porta padrão;

  4. getRegistry(String host, int port): obtém referência para o registro remoto operando na porta especificada.

O método estático createRegistry(int port) pode ser utilizado para iniciar um serviço de registro na máquina virtual Java corrente na porta especificada como argumento, retornando também um objeto da classe Registry.

Esse exemplo mostra essa forma de uma aplicação interagir com o rmiregistry. Inicialmente, é preciso obter uma referência para o serviço de registro, através da invocação do método:

       Registry r = LocateRegistry.getRegistry();
    

Observe que a referência para Registry é em si uma referência para um objeto remoto, uma vez que a interface Registry é uma extensão da interface Remote.

Uma vez que a referência para o serviço de registro tenha sido obtida, é possível acessar as funcionalidades desse serviço através dos métodos da interface Registry. Particularmente, para registrar um novo serviço utiliza-se o método bind():

      r.bind(serviceName, myCount);
    

O objeto que está sendo registrado deve implementar também a interface java.rmi.Remote, que identifica todos os objetos que podem ser acesados remotamente.

Outros serviços disponíveis através dos métodos de Register incluem atualização, remoção e busca dos serviços lá registrados. Para atualizar um registro já existente, o método rebind() pode ser utilizado. Para eliminar um registro, utiliza-se o método unbind(). Dado o nome de um serviço, o objeto Remote que o implementa pode ser obtido pelo método lookup(). O método list() retorna um arranjo de String com os nomes de todos os serviços registrados.