Você está na página 1de 17

Sistemas Distribu dos: Conceitos e Projeto Java RMI

Francisco Jos da Silva e Silva e


Laboratrio de Sistemas Distribu o dos (LSD) Departamento de Informtica / UFMA a http://www.lsd.deinf.ufma.br

19 de agosto de 2010

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

1 / 17

Introduo a Java RMI ca


Sistemas distribu dos requerem que aplicaes executando em co diferentes espaos de endereamento, potencialmente em mquinas c c a diferentes, sejam capazes de trocar dados; Java RMI o mecanismo que permite um objeto invocar um mtodo e e de outro objeto que existe em outro espao de endereamento; c c A invocao de mtodo remoto permite que um objeto executando ca e sobre uma determinada JVM invoque mtodos sobre um objeto e executando sobre outra JVM.
Fontes: http://java.sun.com/docs/books/tutorial/rmi/overview.html ou http://www.guj.com.br/java.tutorial.artigo.37.1.guj
Francisco Silva (UFMA/LSD) SD: Conceitos e Projeto 19 de agosto de 2010 2 / 17

Introduo a Java RMI ca


A denio do comportamento e a implementao do comportamento ca ca so conceitos separados: a denio do servio remoto codicado a ca c e usando uma interface (interface) Java, e a implementao do ca servio remoto codicado usando uma classe (class); c e A arquitetura RMI torna o uso de objetos Java distribu dos similar ao uso de objetos Java locais = transparncia de acesso. e

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

3 / 17

Implementao Java RMI ca


Camada Stub e Skeleton: intercepta as chamadas de mtodos feitas e pelo cliente para que a varivel de referncia da interface redirecione a e essas chamadas para o servio RMI remoto; c Camada Remote Reference Layer: interpreta e gerencias referncias e feitas dos clientes para os objetos do servio remoto. A conexo do c a cliente ao servidor Unicast (um-para-um); e Camada de transporte: baseada nas conexes TCP/IP entre as e o maquinas em uma rede.

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

4 / 17

Argumentos e Valores de Retorno

Podem ser passados de ou para um mtodo remoto qualquer entidade e que seja uma instncia de um tipo primitivo, objeto remoto ou objeto a serializvel (que implementa a interface java.io.Serializable; a Alguns objetos no atendem a estes critrios, normalmente por a e encapsular informao que faz sentido somente em um unico espao ca c de endereamento, como threads e descritores de arquivos; c Muitas classes core Java, incluindo as constantes dos pacotes java.lang e java.util implementam a interface Serializable.

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

5 / 17

Objetos Remotos e Locais

Objetos remotos so passados por referncia; a e Objetos locais so passados por cpia, utilizando-se o mecanismo de a o serializao; ca Por padro, todos os campos so copiados excetos aqueles marcados a a como estticos ou transientes. a

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

6 / 17

Localizando o Servio Remoto RMI c

Pode-se utilizar diferentes tipos de servios de diretrio, incluindo o c o JNDI (Java Naming and Directory Interface); O prprio RMI inclue um simples servio, chamado de RMI Registry; o c Ele executa em cada maquina que hospeda o servio remoto, por c denio na porta 1099; ca

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

7 / 17

Localizando o Servio Remoto RMI c


O servidor:
Cria um servio remoto, instanciando o objeto que implemente aquele c servio; c Exporta aquele objeto para o RMI. Quando o objeto exportado o RMI e cria um servio que aguarda as conexes do cliente; c o Registra o objeto no RMI Registry, com um nome pblico. u

O Cliente:
O RMI Registry acessado atravs da classe esttica Naming; e e a Ela provm o mtodo lookup(), que aceita a URL que especica o e e nome do servidor e o nome do servio desejado e retorna uma c referncia remota para o objeto do servio; e c A URL formada como seguinte: e rmi://<host_name>[:port_number]/<service_name>

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

8 / 17

Passos para o Desenvolvimento do Servidor

Criar a interface do servidor, que deve estender a classe Remote. Todo mtodo deve lanar a exceo RemoteException; e c ca Implementar a interface criada; Escrever o cdigo que instancia a implementao do servidor, exporta o ca o objeto para o RMI e o registra junto ao servio de nomes da c tecnologia Java (RMI registry).

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

9 / 17

Servio de Nomes RMI Registry c


LocateRegistry: classe responsvel por criar o stub para acesso ao a servio de registro (Registry); c Alguns Mtodos: e
createRegistry(int port): cria e exporta uma instncia de a Registry em uma mquina local que aceita pedidos em uma porta a espec ca; getRegistry(): retorna uma referncia para o objeto remoto Registry e para a mquina local no porta 1099, que a porta padro do servio a e a c de registro; getRegistry(String host): retorna um referncia para o objeto e remoto Registry na mquina espec a ca na porta 1099.

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

10 / 17

Servio de Nomes RMI Registry c


Mtodos da interface Registry: e void bind(String name, Remote obj): associa a referncia e remota ao nome especicado; String[] list(): retorna um array dos nomes registrados; Remote lookup(String name): retorna a referncia remota e correspondente ao nome especicado; void rebind(String name, Remote obj): substitui a amarrao ca para o nome especado, associando-o ` referncia remota a e especicada; void unbind(String name): remove a amarrao para ca o nome especicado.
Francisco Silva (UFMA/LSD) SD: Conceitos e Projeto 19 de agosto de 2010 11 / 17

Exemplo de Cdigo o

Exemplo de cdigo: calculadora o Calculator.java CalculatorImpl.java CalculatorServer.java

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

12 / 17

Implementando o Cliente

Obter uma referncia ao objeto remoto atravs de uma chamada ao e e mtodo lookup(servidor) da interface Registry; e Basta agora utilizar o objeto remoto como se fosse local.

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

13 / 17

Exemplo de Cdigo o

Exemplo de cdigo: cliente da calculadora. o CalculatorClient.java

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

14 / 17

Segundo Exemplo: Novas Funcionalidades do Servidor de Cotaoes c

Consultar a cotao de uma moeda; ca Cadastrar uma nova cotao para uma moeda; ca Alterar a cotao de uma moeda; ca Excluir a cotao de uma moeda. ca

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

15 / 17

Segundo Exemplo de Cdigo o

Servidor RMI do Sistema de Cotaes: co


BDCotacoes.java BDCotacoesImpl.java ServidorBDCotacoes.java

Cliente RMI do Sistema de Cotaes: co


ClienteBDCotacoes.java

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

16 / 17

Terceiro Exemplo de Cdigo o

Compute Engine.

Francisco Silva (UFMA/LSD)

SD: Conceitos e Projeto

19 de agosto de 2010

17 / 17