socket x rmi
DESCRIPTION
Socket x RMI. Aula de Monitoria: Bruno Pereira - bpe Davi Pires - dpr Guilherme Barros – gbs2 Thiago Cavalcanti - trc. Roteiro. Conceitos de Sockets Conceitos de RMI Comparação Exemplo de Implementação Exercício (NOTA). Conceitos de Sockets. Relembrando ... - PowerPoint PPT PresentationTRANSCRIPT
Socket x RMI
Aula de Monitoria:Bruno Pereira - bpe
Davi Pires - dprGuilherme Barros – gbs2Thiago Cavalcanti - trc
Roteiro
Conceitos de Sockets Conceitos de RMI Comparação Exemplo de Implementação Exercício (NOTA)
Conceitos de Sockets
Relembrando ... Uma porta de um canal de
comunicação que permite a um processo executando num computador enviar/receber mensagens para/de outro processo.
Usado para representar uma conexão entre um cliente e um servidor
Conceitos de Sockets
Interface entre o processo da aplicação e a camada de transporte
Cada processo é identificado por uma porta e um ip
Principais tipos de Sockets: stream sockets (UDP) datagram sockets (TCP)
Descrição do fluxo (sockets)
Conceitos de RMI Remote Method Invocation Orientado à objetos Comunicação remota Componentes
Interface Remota Classe remota que implementa a
interface Rmiregistry Stubs e Skeletons
Observações Importantes(1/2) Tratar exceções Servidor de
Nomes
Observações Importantes(2/2)
Os métodos remotos podem receber e retornar objetos
Estes objetos devem implementar a interface Serializable
Tipos primitivos são passados por valor e objetos por referência nas chamadas dos métodos
Descrição do fluxo (RMI)
Como funciona RMI
O cliente chama o método remoto usando um Stub
O Stub então envia uma mensagem para o Skeleton na máquina remota, contento os argumentos da chamada ao método remoto
O Skeleton empacota a resposta e envia ela de volta para o stub na máquina do cliente
Vejamos na Prática
JVM 1 JVM 2
Cliente Servidor
a1(A)
B1_Stub(B Stub)
B Skelb1(B)
A BB Stub
(1) (2) (3)
(4)(5)(6)
Comparações
Socket RMI
Transporte UDP / TCP JRMP
Descrição do Serviço Não existe Java Interface
Localização Conhece endereço RMI Naming Service
Look Up matching Não existe Exact String Match
Remote reference Socket Proxy object
Synchronicity Synchronous Synchronous
Garbage Collection Não existe Não existe
Language paradigm Streams Method call
Execution Local Remote Local Remote Local Remote Local Remote Local Remote
No Sockets Sockets CorbaSII(*)CorbaSII(*)CorbaSII(**)CorbaSII(**)CorbaDII CorbaDII RMI RMI
1 0,340 0,521 1,021 1,031 1,022 1,071 1,061 1,071 0,941 1,122
2 0,350 0,520 1,021 0,982 1,111 1,101 1,512 1,101 0,931 1,111
3 0,351 0,511 1,021 1,022 1,051 1,081 1,142 1,082 0,931 1,152
4 0,370 0,520 1,061 1,011 1,382 1,031 1,513 1,152 0,931 1,152
5 0,351 0,551 1,312 1,011 1,101 1,122 1,181 1,102 0,941 1,152
6 0,351 0,530 1,332 1,022 1,382 1,112 1,061 1,071 0,931 1,101
7 0,350 0,510 1,212 1,001 1,102 1,142 1,462 1,202 0,921 1,132
8 0,371 0,521 1,182 1,021 1,042 1,081 1,162 1,102 0,931 1,102
9 0,351 0,531 1,082 1,061 1,052 1,161 1,132 1,072 0,932 1,151
10 0,350 0,541 1,062 1,021 1,382 1,141 1,131 1,152 0,941 1,102
Local Remote Local Remote Local Remote Local Remote Local Remote
Stadistics Sockets Sockets CorbaSII(*)CorbaSII(*)CorbaSII(**)CorbaSII(**)CorbaDII CorbaDII RMI RMI
average 0,354 0,526 1,131 1,018 1,163 1,104 1,236 1,111 0,933 1,128
max 0,371 0,551 1,332 1,061 1,382 1,161 1,513 1,202 0,941 1,152
min 0,340 0,510 1,021 0,982 1,022 1,031 1,061 1,071 0,921 1,101
stdev 0,010 0,013 0,121 0,020 0,154 0,039 0,184 0,044 0,006 0,023
Notes:
CorbaSII(*) = Corba static invocation using the Visigenic osagent location service
CorbaSII(**) = Corba static invocation using the standard Naming service
Comparando a Velocidade
Implementação
Exemplo: Envio de mensagens para um servidor
Interface: ServidorInt.java Servidor:
Servidor.java Cliente:
Cliente.java
ServidorInt.java
import java.rmi.*;
public interface ServidorInt extends Remote{
void imprimeMensagem(String mensagem) throws RemoteException;
}
Servidor.javaimport java.rmi.*; import java.rmi.server.*; import sun.rmi.registry.RegistryImpl;
public class Servidor extends UnicastRemoteObject implements ServidorInt {
public Servidor() throws RemoteException {
super();
RegistryImpl impl = new RegistryImpl(1099);
}
public void imprimeMensagem(String mensagem) {
System.out.println("A mensagem enviada foi : " + mensagem);
}
public static void main(String args[]) {
try {
Servidor s = new Servidor();
Naming.rebind("servidor", s);
System.out.println("Servidor Registrado");
}
catch (Exception e) {
System.out.println("Erro : Mensagem : " + e.getMessage());
e.printStackTrace();
}
}
}
Cliente.javaimport java.rmi.*;import java.io.*;
public class Cliente implements Serializable {
public static void main(String args[]) { try { ServidorInt s = (ServidorInt) Naming.lookup("servidor"); s.imprimeMensagem(“Hello CIn!"); } catch (Exception e) { System.out.println("Erro: Mensagem: " + e.getMessage()); e.printStackTrace(); } }}
Dicas
Tutorial de como Gerar Stub/Skeleton do Servidor.java
Passo-a-Passo:1. No JBuilder, clicar com o botão direito no
arquivo Servidor.java, na janela do projeto2. Selecionar Propriedades3. Em Build
Dentro de RMI Compiler SettingsMarque Generate RMI stub/skeleton
Processo de Criação da Aplicação
Compilar os arquivosGerar o stub/skeletonAtivação do serviço de nomesAtivação as aplicações
Exercício
Exercício
Mini-Projeto:Solução para uma rede de locadoras usando RMI.Descrição: Cada filial tem as informações (número, nome e
débito) de seus clientes. O cliente pode locar filmes em qualquer
locadora. As locadoras possuem ligação com um servidor
central, o qual tem uma lista da localização (em qual filial) de todos os clientes cadastrados
Existirão 4 locadoras, 1 servidor central e 8 clientes (dois em cada locadora)
Exercício
Exemplo:O cliente 1, chega na locadora A e pede
para locar um DVD. O cliente 1 foi, anteriormente, cadastrado na locadora B, logo, a locadora A, vai requisitar as informações do cliente 1 para o servidor central. O servidor central localizará o cliente e solicitará as informações do mesmo à sua locadora de cadastro. Com as informações em mãos, o funcionário decidirá se o cliente pode ou não locar o DVD.
Exercício
Observações: É necessário apenas o nome do cliente e
saber o valor do débito. Logo, se ele estiver devendo, não será possível locar outro DVD.
As operações realizadas pela locadora serão: Consultar débito Atualizar débito Adicionar Cliente Remover Cliente
Não é necessário ter GUI´s
Entrega 20/07/2005
Referências http://www-asc.di.fct.unl.pt/rc/aulas-praticas/aulas/
aula1/docs/ProgSocketsTCPJava.pdf http://www.inf.unisinos.br/~cac/java/material/
aula12pr.pdf http://asc.di.fct.unl.pt/sd1/aulas-praticas/materiais/
aula3/docs/Aula3-RMI.pdf http://atlas.ucpel.tche.br/~dubois/progavancada/05-
RMI.pdf http://twiki.im.ufba.br/pub/MAT570/Material/mat570-
rmi-6pp.pdf http://ltodi.est.ips.pt/nribeiro/Lecturing/SD_01-02/4 http://www-ece.engr.ucf.edu/~jza/publications/
munoz.doc http://www.huihoo.com/middleware/compare.html