Callback

Nas aplicações em uma arquitetura de objetos distribuídos, nem sempre a comunicação no estilo cliente-servidor é suficiente para atender aos requisitos da aplicação. É usual que o servidor RMI aja algumas vezes como cliente, invertendo os papéis com o cliente RMI original.

Considere o exemplo do applet cliente RMI. Nesse applet, não há como saber se outro cliente do mesmo objeto remoto realizou alguma atualização no valor do contador a não ser pressionando o botão Get e verificando se houve mudança. Essa é uma situação típica em muitas aplicações, sendo clara a necessidade de realizar tais notificações de forma automática.

O mecanismo para atingir esse objetivo é utilizar a estratégia de callback. Esta técnica é tipicamente utilizada quando a aplicação cliente requer um retorno do servidor mas não quer permanecer bloqueado aguardando a resposta. Através dessa técnica, o servidor obtém uma referência para o cliente de forma que pode invocar remotamente um método do objeto cliente. Assim, quando a execução do serviço solicitado é concluída, o servidor pode notificar o cliente através da invocação do método disponibilizado pelo cliente para uso remoto.

Basicamente, assim como para o objeto de serviço RMI, deve-se oferecer uma interface remota para o cliente a fim de permitir que o servidor tenha acesso ao "serviço" de atualização do cliente. Esse exemplo ilustra tal situação, com um método que será invocado pelo servidor quando seu valor for alterado, quando passará um valor inteiro para o cliente com a valor atualizado. Observe que neste exemplo a interface remota do serviço também foi atualizada de forma a permitir o cadastro dos clientes interessados na atualização.

Com callback, ambos cliente e servidor deverão implementar o serviço remoto especificado, como nesse exemplo para o código do servidor e do cliente. Também devem ser criados os stubs e skeletons para ambos os serviços.

O código do servidor não sofre alteração em relação ao exemplo anterior, assim como a forma de execução da aplicação.