Sistemas Distribuídos
Introdução a Sistemas Distribuídos
São Paulo, 2011
Universidade Paulista (UNIP)
Java – Remote Method Invocation (RMI)
Prof. MSc. Vladimir Camelo
[email protected]
05/11/2015
[email protected]
1
Sistemas Distribuídos
Introdução
Introdução a Sistemas Distribuídos
 Sistemas distribuídos:
 Neste tipo de sistema existe uma necessidade de comunicação
entre sistemas em máquinas distintas.
 Sockets como solução?
 Não oferecem um modelo de programação transparente e flexível
tanto
para
o
usuário
quanto
para
o
desenvolvedor
respectivamente.
05/11/2015
[email protected]
2
Sistemas Distribuídos
Introdução
Introdução a Sistemas Distribuídos
 O principal objetivo em sistemas distribuídos é:
 Utilizar objetos ou componentes que estão localizados em outras
máquinas sem se preocupar com a camada de transporte, ou seja,
como será realizada essa comunicação entre as máquinas.
05/11/2015
[email protected]
3
Sistemas Distribuídos
Programação com sockets em Java
Introdução a Sistemas Distribuídos
 Sistemas modernos:
 Comunicam-se entre máquinas e algumas vezes entre processos
na mesma máquina, por meio do uso de sockets.
 O que é socket?
 É um canal de comunicação por meio do qual uma aplicação se
comunica com outra.
 É referenciado por um número de porta, de maneira que a camada
TCP possa identificar a aplicação de destino, ou seja, a aplicação
que realizou esta chamada.
05/11/2015
[email protected]
4
Sistemas Distribuídos
Programação com sockets em Java
Introdução a Sistemas Distribuídos
 Comunicação mais simples entre aplicativos localizados em máquinas
diferentes, porém pela simplicidade não é bem aplicado na
manipulação de tipos de dados ou de aplicações muito complexas,
principalmente quando o componente da aplicação está em máquinas
diferentes.
05/11/2015
[email protected]
5
Sistemas Distribuídos
Programação com sockets em Java
Introdução a Sistemas Distribuídos
 Existem três tipos de sockets:
 Datagram sockets: Envia o pacote sem a confirmação de que o
servidor recebeu; esta interface é implementada pelo protocolo
User Datagram Protocol (UDP).
 Stream sockets: Envia o pacote com o cuidado de que o servidor
receba e que a conexão deva estar ativa no momento da
comunicação; esta interface é implementada pelo protocolo
Transfer Control Protocol (TCP).
05/11/2015
[email protected]
6
Sistemas Distribuídos
Programação com sockets em Java
Introdução a Sistemas Distribuídos
 Existem três tipos de sockets:
 Raw sockets: Envia o pacote sem utilizar as camadas de
transporte, sendo utilizada a camada de rede Internet Protocol (IP)
e no Internet Control Message Protocol (ICMP).
05/11/2015
[email protected]
7
Sistemas Distribuídos
Programação com sockets em Java
Introdução a Sistemas Distribuídos
 A biblioteca para sockets:
 ServerSocket: esta classe possibilita criar um servidor de sockets,
sendo deste a obrigação de atender a uma demanda de conexão
via a rede.
 Socket: esta classe possibilita criar um cliente socket que é um
ponto final para a comunicação entre dois nós da rede
(computadores).
05/11/2015
[email protected]
8
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Programação com sockets em Java (Exemplo)
05/11/2015
[email protected]
9
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Programação com sockets em Java (Exemplo)
05/11/2015
[email protected]
10
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Programação com sockets em Java (Exemplo)
05/11/2015
[email protected]
11
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Programação com sockets em Java (Exemplo)
05/11/2015
[email protected]
12
Sistemas Distribuídos
Java para sistemas distribuídos
Introdução a Sistemas Distribuídos
 Banco de dados: JDBC, SQLJ, JDO;
 Objetos distribuídos: Java RMI, RMI-IIOP, Java IDL, Enterprise Java
Beans (EJB);
 Serviços distribuídos: JTA, JTS, JAAS, DGC, JNDI;
 Eventos distribuídos: JMS;
 Web e Web Services: JAXP, JAXB, JAXM, JAXR, JAX-RPC;
 E-mail: JavaMail;
05/11/2015
[email protected]
13
Sistemas Distribuídos
Objetos remotos com Java RMI
Introdução a Sistemas Distribuídos
 Java RMI (Remote Method Invocation) pode ser implementado usando
protocolos e infra-estrutura do ambiente de desenvolvimento Java
(JRMP e RMI Registry) ou usando IIOP e ORBs (especificações do
ambiente CORBA).
05/11/2015
[email protected]
14
Sistemas Distribuídos
Objetos remotos com Java RMI
Introdução a Sistemas Distribuídos
 JRMP - Java Remote Method Protocol:
 Pacote java.rmi - RMI básico;
 Ideal para aplicações 100% Java.
05/11/2015
[email protected]
15
Sistemas Distribuídos
Objetos remotos com Java RMI
Introdução a Sistemas Distribuídos
 IIOP - Internet Inter-ORB Protocol:
 Pacote javax.rmi - RMI sobre IIOP;
 Ideal para ambientes heterogêneos.
05/11/2015
[email protected]
16
Sistemas Distribuídos
Objetos remotos com Java RMI
Introdução a Sistemas Distribuídos
 A forma de desenvolvimento é similar:
 Há poucas diferenças para a geração da infra-estrutura (Ex.:
proxies) e para o registro dos objetos remotos alocados no
servidor;
 RMI sobre IIOP possibilita programação Java RMI e comunicação em
ambiente CORBA, viabilizando integração entre o Java e outras
linguagens de programação sem a necessidade de aprender os
conceitos de implementação do OMG IDL
05/11/2015
[email protected]
17
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Interface de programação
Interface de comunicação em rede
05/11/2015
[email protected]
18
Sistemas Distribuídos
Java Remote Method Invocation
Introdução a Sistemas Distribuídos
 Possibilita a criação de aplicações Java para ambientes distribuídos;
 Com a obtenção da referência de um objeto remoto, sua utilização é
igual a de um objeto local;
 O RMI encapsula a interface com o protocolo de rede (socket);
05/11/2015
[email protected]
19
Sistemas Distribuídos
Java Remote Method Invocation
Introdução a Sistemas Distribuídos
 Complexidade de programação e ambiente:
 É muito simples construir aplicações RMI, comparando-se com
aplicações que utilizam tecnologia RPC e CORBA;
 Ambiente:
 Exige somente suporte TCP/IP e um serviço de nomes de objetos
(rmiregistry), disponibilizado gratuitamente com o JDK/SDK.
05/11/2015
[email protected]
20
Sistemas Distribuídos
Java Remote Method Invocation
Introdução a Sistemas Distribuídos
 O Java RMI é uma interface que possibilita a intercomunicação entre
objetos Java localizados em diferentes hosts;
 Cada objeto remoto implementa uma interface remota que especifica
quais de seus métodos podem ser invocados remotamente pelos
clientes;
 Os clientes invocam tais métodos exatamente como invocam métodos
locais.
05/11/2015
[email protected]
21
Sistemas Distribuídos
Arquitetura Java RMI
Introdução a Sistemas Distribuídos
 Uma aplicação distribuída com RMI tem acesso transparente ao objeto
remoto por meio de sua Interface remota:
 A "Interface remota" é uma interface que estende os métodos e
propriedades da API 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
05/11/2015
[email protected]
22
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Arquitetura Java RMI
05/11/2015
[email protected]
23
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Arquitetura Java RMI
JVM “A”
JVM “B”
Aplicação
Objeto remoto
Stub
Skeleton
Camada de referência remota
Gerados pelo
desenvolvedor
Gerados
automaticamente
Classes que
Implementam o RMI
(Java.rmi.*)
Camada de transporte
05/11/2015
[email protected]
24
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Arquitetura Java RMI
05/11/2015
[email protected]
25
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Arquitetura Java RMI
05/11/2015
[email protected]
26
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Arquitetura Java RMI
05/11/2015
[email protected]
27
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Arquitetura Java RMI
05/11/2015
[email protected]
28
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Arquitetura Java RMI
05/11/2015
[email protected]
29
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Arquitetura Java RMI
05/11/2015
[email protected]
30
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Arquitetura Java RMI
05/11/2015
[email protected]
31
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
Arquitetura Java RMI
05/11/2015
[email protected]
32
Sistemas Distribuídos
Proxy
Introdução a Sistemas Distribuídos
 A implementação RMI é um exemplo do padrão de projeto chamado
Proxy;
 Proxy é uma solução para situações onde o objeto de interesse está
inacessível diretamente, mas o cliente precisa operar em uma
interface idêntica para ter acesso a esse objeto;
 A solução via Proxy: criar uma classe que tenha a mesma interface
que o objeto de interesse e que implemente, em seus métodos, a
lógica de comunicação com o objeto inacessível;
 Em RMI, o proxy é o Stub são gerados automaticamente pelo
ambiente de desenvolvimento (rmic).
05/11/2015
[email protected]
33
Sistemas Distribuídos
Proxy
Introdução a Sistemas Distribuídos
 Stub
 Análogo ao RPC
 Stub é a representação local do objeto remoto localizado no
cliente;
 É gerado automaticamente por meio do rmic
 Ex.: rmic Hello_Time
Hello_Time_Stub.class
05/11/2015
[email protected]
34
Sistemas Distribuídos
Stub
Introdução a Sistemas Distribuídos
 Camada de referência remota (RRL):
 Responsável pela parte semântica da ativação remota;
 Uma chamada do Stub é repassada a essa camada que faz uso da
camada de transporte;
05/11/2015
[email protected]
35
Sistemas Distribuídos
Stub
Introdução a Sistemas Distribuídos
 Camada de referência remota (RRL):
 Tratamento dos diferentes tipos de referência remota:
 Unicast: apenas um objeto
 Multicast: existe um conjunto de objetos e a RRL é quem faz as
chamadas necessárias a todos eles por meio da camada de
transporte.
 Implementa as estratégias para reconectar:
 Caso o objeto remoto torna-se inacessível.
05/11/2015
[email protected]
36
Sistemas Distribuídos
Stub
Introdução a Sistemas Distribuídos
 Camada de transporte:
 Trata da criação / manutenção das conexões;
 Efetua os envios / recebimentos de dados entre a máquina cliente
e servidora;
05/11/2015
[email protected]
37
Sistemas Distribuídos
Stub
Introdução a Sistemas Distribuídos
 Camada de transporte:
 Padrão é utilizar sockets (java.net.Socket e ServerSocket) que são
obtidos de uma fábrica (java.RMISocketFactory) através do
métodos:
 CreateSocket;
 CreatServerSocket;
 Oferece também um mecanismo via HTTP para solucionar
problemas com firewalls.
05/11/2015
[email protected]
38
Sistemas Distribuídos
Stub
Introdução a Sistemas Distribuídos
 O cliente, quando invoca remotamente um método, não conversa
diretamente com o objeto remoto, mas com uma implementação da
interface remota chamada stub, que é enviada ao cliente.
 O stub, por sua vez, passa a invocação para a camada de referência
remota.
05/11/2015
[email protected]
39
Sistemas Distribuídos
Execução no servidor
Introdução a Sistemas Distribuídos
 O primeiro passo antes de executar o servidor é ativar uma espécie de
servidor de nomes de servidores que atendem solicitações de métodos
remotos. Isto é feito chamando-se o programa rmiregistry.
 Este programa pode estar ouvindo portas específicas, como por
exemplo: % rmiregistry 2048 & e outras;
 Uma vez que este programa está executando, pode-se chamar o
interpretador java para o arquivo servidor.class .
05/11/2015
[email protected]
40
Sistemas Distribuídos
Esquema da chamada
Introdução a Sistemas Distribuídos
unip.br
cliente
lookup(.../Servidor)
Servidor está aqui
Registry
Solicitação de stub
Stub
Stub
sayHello()
“Oi cliente”
05/11/2015
Servidor_Stub.class
[email protected]
Servidor..class
41
Sistemas Distribuídos
Como usar RMI em 10 passos
Introdução a Sistemas Distribuídos

O objetivo deste módulo é oferecer apenas uma introdução básica a Java
RMI. Isto será feito através de um exemplo simples:
1.
Definir a interface
2.
Implementar os objetos remotos
3.
Implementar um servidor para os objetos
4.
Compilar os objetos remotos
5.
Gerar stubs com rmic
6.
Escrever, compilar e instalar o(s) cliente(s)
7.
Instalar o stub no(s) cliente(s)
8.
Iniciar o RMI Registry no servidor
9.
Iniciar o servidor de objetos
10.
Iniciar os clientes informando o endereço do servidor.
05/11/2015
[email protected]
42
Sistemas Distribuídos
Introdução a Sistemas Distribuídos
São Paulo, 2011
Universidade Paulista (UNIP)
Java – Remote Method Invocation (RMI)
Prof. MSc. Vladimir Camelo
[email protected]
05/11/2015
[email protected]
43
Download

Vladimir Camelo