Para especificar um serviço oferecido através de um objeto remoto em RMI, é preciso definir inicialmente a interface remota. A especificação de uma interface remota é equivalente à definição de qualquer interface em Java, a não pelos seguintes detalhes:
java.rmi.Remote
;
java.rmi.RemoteException
(ou uma de suas
superclasses) pode ser gerada na execução do método.
Esse exemplo ilustra a definição de
uma interface remota para um objeto que contém um contador inteiro.
Esse contador é manipulado por quatro métodos, dois para definir o
valor do contador (set()
, para um valor específico; e
reset()
, para reiniciar o contador) e dois para consultar
o valor do contador armazenado no objeto remoto, (get()
,
sem alterar o valor; e increment()
, que lê o valor antigo
e incrementa-o).
O segundo passo envolve a implementação do serviço através da
definição de uma classe que implementa essa interface; um objeto dessa
classe poderá ser acessado remotamente. Essa classe deve, além de
implementar a interface especificada, estender a classe
java.rmi.server.UnicastRemoteObject
. Para o exemplo
acima, isso é ilustrado através dessa
classe.
A classe UnicastRemoteObject
é uma extensão da classe
java.rmi.server.RemoteServer
, que por sua vez estende a
classe java.rmi.server.RemoteObject
.
RemoteObject
é a classe abstrata base para todas as
classes remotas, que re-implementa alguns métodos chaves de
Object
, adequando-os para operação remota, e implementa a
interface java.rmi.Remote
. A classe abstrata
RemoteServer
estende RemoteObject
oferecendo
algumas facilidades específicas para servidores através de um conjunto
de métodos estáticos. Finalmente, a classe
UnicastRemoteObject
oferece uma concretização de
RemoteServer
operando de forma ponto-a-ponto com cada
cliente do serviço oferecido.
©
Ivan Luiz Marques Ricarte
DCA/FEEC/UNICAMP