Pergunta

Eu quero entender como a implementação de proxy stub dinâmica é realmente feito por trás da cena. De acordo com o que eu li, no momento em que um objeto remoto é exportado se nenhuma classe de stub pré-gerada for encontrada, o tempo de execução RMI geraria um proxy dinâmico para atuar como o topo. Esse esboço é então ligado ao RMI Registry e, posteriormente, acessível por algum cliente RMI.

A questão é: uma vez que o stub é realmente um proxy gerado dinamicamente, sua definição de classe não estaria disponível no lado do cliente, então como é que o cliente ainda é capaz de recuperar a ponta do RMI Registry? Existe algum tipo de classe-carregamento dinâmico acontecendo por trás da cena ou não RMI usar outra técnica para trabalho em torno este?

Foi útil?

Solução

Java.lang.reflect.Proxy é serializável e tem suporte especial em ObjectOutputStream e ObjectInputStream. Basicamente apenas as interfaces implementadas ea invocação manipulador são serializados, e um novo proxy dinâmico é construído a partir de que durante a desserialização.

Outras dicas

RMI faz uso classloading dinâmica - o classpath é enviado alongwith a chamada como uma 'anotação classpath' a partir do qual as cargas de clientes da classe. Você pode olhar para a implementação RMI para mais informações - é disponível como parte da fonte JDK. Especificamente, as classes ObjectOutputStream e RMIClassloader.

Update: RMI não inicia um servidor HTTP - na verdade, você precisaria de sua solução personalizada para isso. Um deles como você menciona pode ser um servidor HTTP que você correr, fazer as classes disponíveis através do servidor, e passar a base de código com o endereço / porta do servidor HTTP em seus topos, de modo que seus clientes podem baixá-los.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top