Um objeto servidor RMI passível de ativação remota é definido através de classes do pacote java.rmi.activation. O ponto principal é que a classe desse servidor deve estender a classe Activatable, uma extensão de java.rmi.server.RemoteServer que usa o mecanismo de serialização para oferecer a persistência do serviço.
Um aspecto fundamental na implementação do servidor
Activatable
é a necessidade de especificar pelo
menos um construtor de inicialização. A classe
Activatable
oferece construtores com argumentos
específicos para o registro (no serviço de ativação) e a
ativação de objetos, que serão invocados a partir do construtor
de inicialização implementado.
O serviço de ativação irá procurar, na classe de implementação, o construtor com a assinatura, adequada para a ativação, contendo dois argumentos. O primeiro argumento é um identificador de ativação, um objeto da classe ActivationID que, além de identificar unicamente o serviço, encapsula a referência para o objeto remoto. O segundo argumento é um objeto da classe MarshalledObject, uma representação serializada de argumentos para a construção do objeto.
No exemplo do
contador remoto, a implementação tomaria
esta forma.
Como se percebe, as únicas diferenças em relação à
implementação anterior estão na superclasse e na definição
dos construtores. Estes, por sua vez, invocam o construtor de
Activatable
.
Uma vez criada a implementação do serviço, é preciso (como anteriormente) ter uma aplicação que realize o setup do serviço para a aplicação RMI.