260 likes | 323 Views
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 ...
E N D
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 ... • 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)
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
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
A B B Stub Vejamos na Prática Cliente Servidor (1) (2) (3) a1 (A) B1_Stub (B Stub) B Skel b1 (B) (5) (4) (6) JVM 1 JVM 2
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.java import 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.java import 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 projeto 2. Selecionar Propriedades 3. Em Build Dentro de RMI Compiler Settings Marque Generate RMI stub/skeleton
Processo de Criação da Aplicação Compilar os arquivos Gerar o stub/skeleton Ativação do serviço de nomes Ativação as aplicações
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
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