1 / 43

São Paulo, 2011 Universidade Paulista (UNIP) Java – Remote Method Invocation (RMI)

São Paulo, 2011 Universidade Paulista (UNIP) Java – Remote Method Invocation (RMI) Prof. MSc . Vladimir Camelo vladimir.professor@gmail.com. Introdução. Sistemas distribuídos : Neste tipo de sistema existe uma necessidade de comunicação entre sistemas em máquinas distintas.

Download Presentation

São Paulo, 2011 Universidade Paulista (UNIP) Java – Remote Method Invocation (RMI)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. São Paulo, 2011 Universidade Paulista (UNIP) Java – RemoteMethodInvocation (RMI) Prof. MSc. Vladimir Camelo vladimir.professor@gmail.com vladimir.professor@gmail.com

  2. Introdução • 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. vladimir.professor@gmail.com

  3. Introdução • 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. vladimir.professor@gmail.com

  4. Programação com sockets em Java • 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. vladimir.professor@gmail.com

  5. Programação com sockets em Java • 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. vladimir.professor@gmail.com

  6. Programação com sockets em Java • Existem três tipos de sockets: • Datagramsockets: Envia o pacote sem a confirmação de que o servidor recebeu; esta interface é implementada pelo protocolo UserDatagramProtocol (UDP). • Streamsockets: 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 TransferControlProtocol (TCP). vladimir.professor@gmail.com

  7. Programação com sockets em Java • Existem três tipos de sockets: • Rawsockets: Envia o pacote sem utilizar as camadas de transporte, sendo utilizada a camada de rede Internet Protocol (IP) e no Internet ControlMessageProtocol (ICMP). vladimir.professor@gmail.com

  8. Programação com sockets em Java • 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). vladimir.professor@gmail.com

  9. Programação com sockets em Java (Exemplo) vladimir.professor@gmail.com

  10. Programação com sockets em Java (Exemplo) vladimir.professor@gmail.com

  11. Programação com sockets em Java (Exemplo) vladimir.professor@gmail.com

  12. Programação com sockets em Java (Exemplo) vladimir.professor@gmail.com

  13. Java para 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; vladimir.professor@gmail.com

  14. Objetos remotos com Java RMI • Java RMI (RemoteMethodInvocation) 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). vladimir.professor@gmail.com

  15. Objetos remotos com Java RMI • JRMP - Java RemoteMethodProtocol: • Pacote java.rmi- RMI básico; • Ideal para aplicações 100% Java. vladimir.professor@gmail.com

  16. Objetos remotos com Java RMI • IIOP - Internet Inter-ORBProtocol: • Pacote javax.rmi- RMI sobre IIOP; • Ideal para ambientes heterogêneos. vladimir.professor@gmail.com

  17. Objetos remotos com Java RMI • 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 vladimir.professor@gmail.com

  18. Interface de programação Interface de comunicação em rede vladimir.professor@gmail.com

  19. Java RemoteMethodInvocation • 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); vladimir.professor@gmail.com

  20. Java RemoteMethodInvocation • 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. vladimir.professor@gmail.com

  21. Java RemoteMethodInvocation • 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. vladimir.professor@gmail.com

  22. Arquitetura Java RMI • 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 vladimir.professor@gmail.com

  23. Arquitetura Java RMI vladimir.professor@gmail.com

  24. Arquitetura Java RMI JVM “A” JVM “B” Gerados pelo desenvolvedor Aplicação Objeto remoto Skeleton Stub Gerados automaticamente Camada de referência remota Classes que Implementam o RMI (Java.rmi.*) Camada de transporte vladimir.professor@gmail.com

  25. Arquitetura Java RMI vladimir.professor@gmail.com

  26. Arquitetura Java RMI vladimir.professor@gmail.com

  27. Arquitetura Java RMI vladimir.professor@gmail.com

  28. Arquitetura Java RMI vladimir.professor@gmail.com

  29. Arquitetura Java RMI vladimir.professor@gmail.com

  30. Arquitetura Java RMI vladimir.professor@gmail.com

  31. Arquitetura Java RMI vladimir.professor@gmail.com

  32. Arquitetura Java RMI vladimir.professor@gmail.com

  33. Proxy • 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). vladimir.professor@gmail.com

  34. Proxy • Stub • Análogo ao RPC • Stub é a representação local do objeto remoto localizado no cliente; • É gerado automaticamente por meio do rmic • Ex.: rmicHello_Time Hello_Time_Stub.class vladimir.professor@gmail.com

  35. Stub • 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; vladimir.professor@gmail.com

  36. Stub • 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. vladimir.professor@gmail.com

  37. Stub • 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; vladimir.professor@gmail.com

  38. Stub • 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. vladimir.professor@gmail.com

  39. Stub • 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. vladimir.professor@gmail.com

  40. Execução no servidor • 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 . vladimir.professor@gmail.com

  41. Esquema da chamada unip.br lookup(.../Servidor) cliente Registry Servidor está aqui Solicitação de stub Servidor_Stub.class Stub Stub sayHello() “Oi cliente” Servidor..class vladimir.professor@gmail.com

  42. Como usar RMI em 10 passos • O objetivo deste módulo é oferecer apenas uma introdução básica a Java RMI. Isto será feito através de um exemplo simples: • Definir a interface • Implementar os objetos remotos • Implementar um servidor para os objetos • Compilar os objetos remotos • Gerar stubs com rmic • Escrever, compilar e instalar o(s) cliente(s) • Instalar o stub no(s) cliente(s) • Iniciar o RMI Registry no servidor • Iniciar o servidor de objetos • Iniciar os clientes informando o endereço do servidor. vladimir.professor@gmail.com

  43. São Paulo, 2011 Universidade Paulista (UNIP) Java – RemoteMethodInvocation (RMI) Prof. MSc. Vladimir Camelo vladimir.professor@gmail.com vladimir.professor@gmail.com

More Related