Criando stubs e skeletons

Uma vez que a interface e a classe do serviço tenham sido criadas e compiladas para bytecodes usando um compilador Java convencional, é possível criar os correspondentes stubs e skeletons. Para tanto, utiliza-se o aplicativo compilador RMI, rmic, disponibilizado juntamente com o kit de desenvolvimento Java.

Esse exemplo ilustra o processo de compilação RMI para o serviço do contador remoto.

Uma classe stub oferece implementações dos métodos do serviço remoto que são invocadas no lado do cliente. Internamente, esses métodos empacotam (marshall) os argumentos para o método e os envia ao servidor. A implementação correspondente no lado servidor, no skeleton, desempacota (unmarshall) os dados e invoca o método do serviço. A partir da versão 1.2 de Java, o skeleton deixou de ser necessário para a operação de RMI.

Obtido o valor de retorno do serviço, o servidor empacota e envia esse valor para o método no stub, que ainda estava aguardando esse retorno. Obtido o valor de retorno no stub, esse é desempacotado e retornado à aplicação cliente como resultado da invocação remota.

Internamente, o processo de marshalling utiliza o mecanismo de serialização de Java. Assim, argumentos e valores de retorno de métodos remotos invocados através de RMI estão restritos a tipos primitivos de Java e a objetos de classes que implementam Serializable.