• Nenhum resultado encontrado

O que são objetos remotos?

N/A
N/A
Protected

Academic year: 2022

Share "O que são objetos remotos?"

Copied!
21
0
0

Texto

(1)

2

Objetivos

§ Explorar os conceitos acerca da criação e uso de objetos

objetos remotosremotos em Java com RMI

§ Por que e quando usar objetos remotos, principais classes e métodos da API Java, pré-condições,

tecnologias, características, vantagens de se usar RMI e boas práticas de programação.

§ Apresentar uma demonstração de uma aplicaaplicaççãoão simples que usa objetos distribuídos

§ O que é necessário para acessar um objeto remoto via uma rede de computadores e alguns erros comuns de programadores ao trabalharem com RMI

(2)

3

Motivação

§ Até aqui, todas as chamadas de métodos têm sido realizadas em objetos no mesmo heap de memória

§ Ou seja, não só o objeto que invoca o método, mas o que recebe a mensagem estão rodando na mesma JVM

§ A JVM é responsável por “saber” onde os objetos estão localizados no heap

§ Ela sabe como gerenciar estes objetos e acessá-los via suas referências, adequadamente.

§ Porém, uma JVM não tem como saber sobre referências ou objetos em uma outra JVM

§ Ainda que duas instâncias de JVM distintas estejam rodando em uma mesma máquina

(3)

4

Motivação

§ E o que fazer quando temos que invocar um método em um objeto que reside em uma outra máquina?

§ Uma aplicação distribuída (e-commerce, jogos…) onde partes desta executam simultaneamente em vários

computadores distintos

§ Aplicações distribuídas são, hoje, uma realidade!

§ São compostas de diversos processos rodando em

diversas máquinas, trocando mensagens e trabalhando de forma cooperativa para realizar uma tarefa

§ Ex.: acesso a um banco de dados remoto, a própria Web! (um browser acessando o servidor Web)

(4)

5

Motivação

§ Uma solução inicial seria procurar (estudar) alguma API da linguagem Java para, por exemplo:

§ Estabelecer conexões de rede entre máquinas, enviar e receber dados via rede, fechar conexões, esperar por conexões em uma determinada porta da máquina

§ Classe Socket (e ServerSocket) no pacote java.net

§ Sockets escondem os detalhes de baixo nível das redes (tipo de transmissão, tamanho de pacote da rede,

retransmissão, etc.)

§ Mas, será que existe alguma forma de interagir com um objeto remoto localizado em uma outra máquina como se ele fosse local?

(5)

6

O que são objetos remotos?

§ Objetos remotos são objetos cujos métodos ser chamados remotamente, como se fossem locais

§ Cliente precisa, de alguma forma, localizar e obter uma instância do objeto remoto (geralmente através de um proxy intermediário gerado automaticamente)

§ Depois que o cliente tem a referência, faz chamadas nos métodos do objeto remoto (através do proxy) usando a mesma sintaxe que usaria se o objeto fosse local

§ Objetos remotos abstraem toda a complexidade da comunicação em rede

§ Estende o paradigma OO além do domínio local

§ Torna a rede transparente

(6)

7

Tecnologias de mercado

§ É preciso ter uma infra-estrutura que cuide da geração das classes, comunicação e outros detalhes

§ Há duas soluções disponíveis para implementar objetos remotos em Java:

§ CORBA: requer uso de uma linguagem genérica IDL, mas suporta integração com outras linguagens

§ Java RMI: para soluções 100% Java

§ As duas diferem principalmente na forma de implementação

§ Mas permitem que um programa cliente chame um método em um objeto

remoto como faz com um objeto local

(7)

8

Objetos remotos com Java RMI

§ O principal objetivo da tecnologia RMI é prover um mecanismo de programação o mais próximo possível da programação convencional

§ Porém, oferecendo poderosos serviços que permitem a distribuição de aplicações e de objetos de sistemas

§ Como RMI é baseado em Java, ele trás a reboque todos os benefícios da linguagem Java

§ Separação entre comportamento e implementação

§ Clientes: só se interessam pelos serviços “anunciados”

§ Servidor: implementa cada um dos serviços oferecidos

(8)

9

RMI: funcionamento básico

§ Um objeto remoto previamente registrado é obtido, através de servidor de nomes especial: RMI Registry

§ Permite que os objetos publicamente acessíveis através da rede sejam referenciados através de um nome.

§ Serviço de nomes: classe java.rmi.Naming

§ Método Naming.lookup() consulta um servidor de nomes RMI e obtém uma instância de um objeto remoto (o proxy)

§ Exemplo:

Jogo jogo = (Jogo)

Naming.lookup(“rmi://200.139.151.37/paciencia”);

§ Agora, podemos chamar os métodos do jogo:

jogada[i] = jogo.embaralhar();

(9)

10

Arquitetura RMI

§ Uma aplicação distribuída com RMI tem acesso transparente ao objeto remoto através de sua Interface remota

§ A Interface Remota é uma interface que estende de java.rmi.Remote

§ A partir da Interface Remota e implementação do objeto remoto o sistema gera objetos (proxies) que realizam todas as tarefas

necessárias para viabilizar a comunicação em rede

(10)

11

Como usar RMI passo-a-passo

§ Um dos objetivos deste módulo é oferecer uma

introdução prática à Java RMI. Isto será feito através de um exemplo simples (deve ser replicado em casa)

ΠDefinir a interface remota

 Implementar o objeto remoto

Ž Implementar um servidor para o objeto

 Compilar o objeto remoto

 Gerar stubs e skeletons com rmic

‘ Escrever, compilar e instalar o cliente

’ Instalar o stub no cliente

“ Iniciar o RMI Registry no servidor

” Iniciar o servidor de objetos

• Iniciar o cliente que vai acessar o servidor

(11)

12

1. Definir a interface remota

§ Declare todos os métodos que o programa cliente poderá chamar remotamente em uma interface que estenda de java.rmi.Remote

§ Todos os métodos devem declarar throws java.rmi.RemoteException

§ Isto deve ser feito para cada objeto que será acessível através da rede

import java.rmi.Remote;

import java.rmi.RemoteException;

interface Mensagem_IF extends Remote {

public String getMensagem() throws RemoteException;

public void setMensagem(String mensagem)

throws RemoteException;

}

(12)

13

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

public class ServicoDeMensagens extends UnicastRemoteObject

implements Mensagem_IF { private String mensagem = “Não há nenhuma mensagem”;

public ServicoDeMensagens() throws RemoteException {}

public String getMensagem() throws RemoteException { return this.mensagem;

}

public void setMensagem(String mensagem) throws RemoteException{

this.mensagem = mensagem;

} }

2. Implementar o objeto remoto

§ Cada objeto remoto é uma classe que estende a classe java.rmi.server.UnicastRemoteObject e que implementa a interface remota criada no passo 1.

§ Todos os métodos declaram causar java.rmi.RemoteException

§ Inclusive o construtor, mesmo que seja vazio.

(13)

14

3. Implementar um servidor

§ Crie uma classe que:

§ Crie uma instância do objeto a ser servido

§ Registre (rebind) o objeto (com um nome) no servidor de nomes RMI Registry

import java.rmi.Naming;

public class Servidor {

public static void main( String[] args ){

try {

Mensagem_IF servidor = new ServicoDeMensagens();

Naming.rebind("servidormsg", servidor);

System.out.println("Servidor de mensagens no ar.");

} catch (Exception e ) { e.printStackTrace();

} } }

(14)

15

4. Compilar o objeto remoto

§ Compile todas as classes e interfaces utilizadas para definir a interface java.rmi.Remote

javac Mensagem_IF.java

ServicoDeMensagens.java

§ [obs.] no Eclipse, este passo não é tão crítico. Basta apenas salvar os arquivos que os bytecodes .class

serão gerados (facilmente) de forma automática

(15)

16

5. Gerar stubs e skelektons

§ Use a ferramenta do J2SDK: rmic

§ Será gerado um arquivo stub (o proxy)

ServicoDeMensagens_Stub.class

e um arquivo skeleton

ServicoDeMensagens_Skel.class

para cada objeto remoto (neste caso, apenas um)

§ RMIC = RMI Compiler

§ Use opção -keep se quiser manter código-fonte

§ Execute o rmic sobre as implementações do objeto remoto já compiladas

% rmic ServicoDeMensagens

(16)

17

6. Compilar e instalar o(s) cliente(s)

§ Agora, escreva uma classe (o cliente) que irá

procurar, no sistema de nomes java.rmi.Naming, o(s) objeto(s) remotos desejado(s):

§ Obtenha uma instância remota do objeto (lookup)

§ Use o objeto, chamando seus métodos

import java.rmi.Naming;

public class Cliente {

public static void main( String[] args ){

try {

Mensagem_IF obj = (Mensagem_IF) Naming.lookup(

"rmi://192.168.0.1/servidormsg" );

System.out.println(“Recebido:“ + obj.getMensagem());

obj.setMensagem(“Bom dia!”);

} catch (Exception e ) { e.printStackTrace();

} } }

(17)

18

7. Instalar os stubs no cliente

§ Distribua os clientes para as máquinas-cliente. A distribuição deve conter:

ΠClasse(s) que implementa(m) o(s) cliente(s)

Cliente.class

 O(s) stub(s)

ServicoDeMensagens_Stub.class

Ž A(s) interface(s) remota(s) (Mensagem_IF.class)

(18)

19

8. Iniciar o RMI Registry no servidor

§ No Windows

% start rmiregistry

(o RMI Registry fica "calado" quando está rodando)

§ Neste exemplo será preciso iniciar o RMI Registry no diretório onde estão os stubs e interface Remote

§ Isto é para que o RMI Registry veja o mesmo CLASSPATH que o resto da aplicação

(19)

20

9. Iniciar o servidor de objetos

§ O servidor é uma aplicação executável que registra os objetos no RMIRegistry. Rode a aplicação:

% java ServidorDeMensagens

“Servidor de mensagens no ar.”

§ Neste exemplo será preciso iniciar o servidor no diretório onde estão os stubs e interface Remote

§ Isto é para que o RMI Registry veja o mesmo CLASSPATH que o resto da aplicação

(20)

21

10. Rode o cliente

§ Finalmente, chame a máquina virtual Java para inicializar o Cliente. Neste exemplo, ele procura pelo serviço de nomes e usa o objeto remoto via rede.

java Cliente

Exercício

Implemente o exemplo mostrado, passando mensagens diferentes para o objeto remoto. Tente acessar o objeto

remoto na máquina de um colega

(21)

22

Para um bom aproveitamento:

Para um bom aproveitamento:

§ Codifique os exemplos mostrados nestes slides e verifique pontos de dúvidas

§ Resolva todas as questões da lista de objetos lista de objetos remotos com RMI

remotos com RMI

§ Procure o professor ou monitor da disciplina e questione conceitos, listas, etc.

§ Não deixe para codificar tudo e acumular assunto para a primeira avaliação.

§ Este é apenas um dos assuntos abordados na prova!

Referências

Documentos relacionados

Os dados contínuos ou de contagem geralmente podem ser convertidos para dados de classificação ou hierarquização, mas não na direção inversa. Por exemplo, as medições

Os novos processos desenvolvidos de reciclagem química permitem a reciclagem de misturas de plásticos diferentes, com aceitação de determinado grau de contaminantes como, por

As TIC nas Escolas: Multimídia, hipermídia e redes nas escolas Programa Mídias na Educação (2005):. Convergência de distintas mídias para a tecnologia digital; Integração

A mineração de criptomoedas, a grosso modo, é adicionar registros de novas transações no livro razão público da moeda (Bitcoin, por exemplo) em troca de pequenas taxas e

Para Chiavenato inúmeros fatores estão provocando profundos impactos sobre as empresas:. As empresas estão continuamente se adaptando aos seus

A espectrofotometria é uma técnica quantitativa e qualitativa, a qual se A espectrofotometria é uma técnica quantitativa e qualitativa, a qual se baseia no fato de que uma

Figura 8 – Isocurvas com valores da Iluminância média para o período da manhã na fachada sudoeste, a primeira para a simulação com brise horizontal e a segunda sem brise

Tecle SHIFT TAB, utilize a seta para baixo e para cima para localizar a pasta em que o arquivo está gravado, tecle ENTER para abrir a pasta, TAB para ir para a lista de arquivos