Remote Method Invocation RMI

Slides:



Advertisements
Apresentações semelhantes
Sistemas Distribuídos
Advertisements

Sistemas Distribuídos Baseados em Objetos
Java Remote Method Invocation Java RMI
Sistemas distribuídos
Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007.
Programa de Pós-Graduação Lato Sensu MBA em Gestão de Software
RMI-IIOP.
Java RMI Alcides Calsavara. Objetivos Permitir que um método de uma classe Java em execução em uma máquina virtual JVM chame um método de um objeto (instância.
Comunicação Distribuída
Desenvolvimento de Aplicações Distribuídas
Invocação de Métodos Remotos RMI
1 Comunicação Inter-Processos -> RMI -> RPC -> TCP -> UDP (Abstração de passagem de mensagem)
Alexandre Parra Site: Linguagem Java Alexandre Parra Site:
1 Arquitetura CORBA Repositório de Implementação Repositório de Interface cliente programa cliente proxy ORB Core ou invocação dinâmica servidor ORB Core.
1 Serviços CORBA. Serviços CORBA. Funcionalidades que podem ser utilizadas por objetos distribuídos. Naming Service (Serviço de Nomes) Event and Notification.
Comunicação Inter-Processos
DAS Sistemas Distribuídos para Automação Industrial
PROGRAMAÇÃO DISTRIBUÍDA EM JAVA Verão/2001
Introdução a EJB 3.0 Eduardo Martins Guerra Instituto Tecnológico de Aeronáutica Curso de Pós-Graduação em Engenharia de Software Programação Distribuída.
Objetos Distribuídos para WEB Prof. Paulo Fernando da Silva FURB – Universidade Regional de Blumenau Pós-Graduação em Desenvolvimento WEB.
Introdução à Programação Distribuída em Java
Funcionalidades e Protocolos da Camada de Aplicação
JAVA: Conceitos Iniciais
Aula prática 13 Orientação a Objetos – C++ Parte 1
Arquitetura CORBA e Objetos Distribuídos
Sistemas Distribuídos
Termo da Microsoft para designar um conjunto de serviços de directórios do Windows Server. Conceito utilizado a partir da versão do Windows Server 2000.
Chamada Remota de Procedimentos
Linguagem de Programação JAVA
Marcela Bezerra da Silva Cin - UFPE
Java Avançado Luiz Carlos d´Oleron SJCP Java Sockets.
Sistemas Distribuídos Carlos A. G. Ferraz DI/UFPE Aula 07.
Concorrência e Java RMI
Conceitos de J2EE para a WEB
Sistemas Distribuídos Carlos A. G. Ferraz DI/UFPE Aula 05.
Sistemas Distribuídos Estrutura de Redes
T. D. S. I. PARA WEB Prof. Emmanuel Nolêto. Java RMI.
Sistemas Distribuídos Introdução. Conceito Coleção de múltiplos processos que executam sobre uma coleção de processadores autônomos interligados em uma.
Afinal, o que é um SD? Ospróximospróximosslidesdeverãoserserexecutadosum servidor,executadosum servidor, continuamente para criarmos um cliente e ambos.
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
RMI x C# Remote Emilena Specht – 1113/01/9 2004/01
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
CORBA Apresentação do Padrão CORBA Maurício Maron Mendes Ramiro Pereira de Magalhães
FTIN Formação Técnica em Informática Módulo Sistema Proprietário Windows AULA 04 Prof. André Lucio.
Java RMI João Gabriel (jggxm).
RMI - JAVA.
Comunicação.
Objetos Distribuídos para WEB Prof. Paulo Fernando da Silva FURB – Universidade Regional de Blumenau Pós-Graduação em Desenvolvimento WEB.
Gestão SNMP. Planeamento Montagem e Manutenção de Redes e Equipamentos Informáticos 2 SNMP- Simple Network Management Protocol Nos primeiros dias da Arpanet,
RMI (Remote Method Invocation) Bruno Edson Plínio Tadeu
RMI Objetos Distribuídos Luiz C. D´oleron SCJP
Capítulo 4: Processos.
Java – Remote Method Invocation (RMI)
Programação Distribuída em Java Aula Na aula passada vimos: I/O Streams Filtros Readers and Writers.
Programação Distribuída em Java Aula Na aula passada vimos: I/O Sockets.
OO com Java Luiz Carlos d´Oleron Roteiro de aula.
Multiparadigma das Comunicações em Java para Grid Computing Fernanda R. Ramos Luiz Felipe Marco Eiterer Profº Alcides Calsavara, Ph.D.
Conceitos do Cliente Funcionamento Básico do Cliente Como Clientes acessam e usam Objetos Distribúidos.
1 Programação Distribuída em Java Aula Na aula de hoje veremos: Introdução Conceito de Rede Protocolos Modelo ISO/OSI Modelo TCP/IP Modelo Cliente/Servidor.
RMI Remote Method Invocation
Serviços de rede e internet Jackson Eduardo da Silva.
RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.
Sistemas Distribuídos Prof. Marcus Rodrigues
Banco de Dados Distribuídos Sílvia Cristina de Matos Soares
Laboratório B – Sistemas Supervisórios N8LB9 Prof. Dr. Cesar da Costa 3.a Aula: Driver de Comunicação e Comunicação OPC.
Desenvolvimento WEB II Professora: Kelly de Paula Cunha Apresentação baseada no material didático elaborado pelo Prof. Pasteur Ottoni de Miranda Junior.
Protocolos de Comunicação e Passagem de Mensagens
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
SOCKET - É um canal de comunicação entre processos que estabelece uma conexão entre eles na forma de cliente-servidor. Por meio de sockets, os computadores.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
Transcrição da apresentação:

Remote Method Invocation RMI Java Avançado Luiz Carlos d´Oleron lcadb@cin.ufpe.br SJCP Remote Method Invocation RMI

Sistemas Distribuídos “Um sistema distribuído é uma coleção de processadores pouco acoplados, interconectados por uma rede de comunicação” Sistemas Operacionais com Java Silberschatz, Galvin e Gagne Principais Vantagens: Compartilhamento de Recursos Aumento da Velocidade de Computação Confiabilidade Comunicação ... De Novo? Qual é o Problema com Sockets?

Midleware As aplicações que utilizam a rede são complexas A complexidade vêm normalmente por uma gama de serviços de infra-estrutura que são necessários para a execução do sistema propriamente dito Por exemplo: localização, chamadas de métodos, tolerância a falhas, etc... Por que são muito simples, com sockets podemos apenas enviar e receber dados Implementar todas as funcionalidades infra-estruturais utilizando diretamente sockets pode ser um trabalho custoso, repetitivo e, na maioria das vezes, complexo Para diminuir as responsabilidades das aplicações (e dos desenvolvedores delas), são utilizados plataformas de software que realizam funcionalidades de infra-estrutura que são comuns aos sistemas Tais plataformas são conhecidas como Midleware, que são basicamente, provedores de serviços

RMI - Remote Method Invocation RMI é um Midleware que fornece serviços para criação de aplicações Java Distribuídas. Ele disponibiliza apenas um único serviço, o Serviço de Nomes Entretanto, a principal função de RMI é permitir que métodos de objetos remotos sejam chamados de forma tão transparente como se os objetos estivessem localmente (tanto quanto possível) Todas as características de uma chamada de método (nome, lista de parâmetros, valores de retorno e lista de exceções) são fornecidas por RMI As chamadas de RMI são realizadas de forma síncrona

RMI - Remote Method Invocation RMI utiliza Sockets Java por baixo dos panos Visto que Sockets usam TCP, RMI utiliza TCP, se beneficiando de todas as qualidades do protocolo Um cliente RMI utilizará um proxy da referencia remota para chamar os métodos O proxy é chamado de STUB O STUB não é codificado pelo programador Usamos um aplicativo chamado rmic para criar o STUB

Stubs Toda classe que deverá ter métodos remotamente chamados por RMI, deverá ter um Stub O cliente possuirá uma instância do Stub, a qual receberá as chamadas do cliente e as enviará pela rede (usando Murshaling e Unmarshaling)

Serviço de Nomes São sistemas capazes de localizar um componente associado pelo nome desse componente. Exemplos de serviços de nomes são: DNS – Domain Name Service JNDI – Java Naming and Directory Interface RMIRegistry Corba Service Name

RMIRegistry RMIRegistry é o serviço de nomes de RMI Utilizamos para localizar instâncias de objetos remotos Java numa rede Existem várias formas de iniciar o RMIRegistry, uma delas é utilizando o aplicativo rmiregistry.exe, do diretório bin do jdk Existem outras formas melhores, via programação, que utilizaremos

RMI – Passo a Passo Definindo a Remote Interface Codificando Remote Class Gerando o Stub Criando o Remote Server Codificando o Cliente Executando todos os programas

Definindo a Remote Interface Tudo que um cliente sabe do objeto remoto é a sua interface. Nós definimos uma interface com os métodos que queremos chamar remotamente Esta interface, que chamamos de Interface Remota, deverá extender a interface java.rmi.Remote Remote não possui métodos Todos os métodos da Interface que criamos (a Interface Remota) deverão declarar que lançam java.rmi.RemoteException Os métodos da Interface Remota poderão lançar outras exceções, específicas do método

Definindo a Remote Interface

Codificando Remote Class A classe da referência remota deverá implementa nossa Interface Remota Além disso, deverá extender java.rmi.server. UnicastRemoteObject Observe que o objeto remoto poderá ter outros métodos que não constem na Interface Remota Logicamente, esses métodos não estarão disponíveis remotamente, mesmo que sejam public

Codificando Remote Class

serialVersionUID Algumas vezes, nos deparamos com o seguinte warning: The serializable class Cliente does not declare a static final serialVersionUID field of type long O serialVersionUID é utilizado para validar se a classe que a JVM conhece é compatível com o objeto que vem serializado. Se os serialVersionUID forem diferentes, será lançada um java.io.InvalidClassException Toda classe serializável possui um serialVersionUID, que pode ser codificado pelo programador ou gerado pelo compilador Diferenças entre compiladores podem gerar serialVersionUID diferentes para a mesma classe Então java avisa para você que o melhor é você gerar um serialVersionUID

serialVersionUID O QuickFix do Eclipse poderá ajudar a gerar um serialVersionUID para a classe Serializable

Gerando o Stub Como já foi dito, o STUB é o representante do objeto remoto É o STUB que receberá as chamadas de método do cliente, enviando elas para o objeto remoto, via rede, usando java sockets Entre outras coisas, o Stub é responsável por serializar os parâmentros, enviá-los via rede, receber o bytes com valores de retorno ou exceções lançadas e reestruturar tudo em objetos java, devolvendo para o cliente o resultado Codificar o Stub é uma tarefa ingrata, ainda bem que existe um programa chamado rmic que faz isso para o programador!

Gerando o Stub O rmic é um programa de linha de comando que fica na pasta bin do jdk. Um exemplo de chamada do rmic é: C:\Documents and Settings\luiz carlos\workspace> C:\Arquivos de programas\Java\jdk1.5.0_06\bin\rmic jornada.server.ServidorClientes –v1.2 –keep Aonde o –v1.2 é uma flag para definir a versão do protocolo rmi utilzado e – keep é a flag para manter o código fonte do stub gerado Se tudo ocorrer corretamente, será criado no mesmo pacote de jornada.server.ServidorClientes um stub para ser utilizado por um cliente remoto chamado jornada.server.ServidorClientes_Stub O Eclipse possui uma ferramenta para executar aplicações externas que também poderá ser utilizada para chamar o rmic

Gerando o Stub no Eclipse

Criando o Remote Server Entende-se como Remote Server a classe que irá instanciar e publicar o Remote Object, usando o RMIRegistry É comum fazer com que a própria classe do RemoteObject tenha as responsabilidades do Remote Server Por exemplo, codificando o método main:

Criando o Remote Server A interface java.rmi.registry.Registry representa um objeto que possui métodos para armazenar e encontrar referencias remotas ligadas a nomes Normalmente, usamos o método bind (ou rebind) para ligar um nome a uma referencia remota A classe java.rmi.registry.LocateRegistry é utilizada para obtermos referencias para Registry´s java.rmi.registry.LocateRegistry possui vários métodos para formas diferentes de se obter um Registry O acesso a objetos remotos, incluindo Registry´s, pode ser dificultado por políticas de seguranças locais ou de redes.

Codificando o Cliente O cliente é a classe que utilizará os métodos do objeto remoto Antes de fazer isso, ele terá que obter a referência para o Stub do objeto remoto. Para isso, ele utilizará o serviço de nomes de RMI No exemplo a seguir, utilizamos o método estático lookup da classe java.rmi.Naming para localizar o Stub Observe que localhost aponta para a máquina local, se o serviço de nomes estiver sendo executado em outra máquina, será necessário substituir localhost pelo nome do host ou número IP

Codificando o Cliente Após isso, o cliente poderá chamar os métodos do Objeto Remoto da mesma forma como eles fossem métodos de uma instância local:

Executando todos os programas Para executar o exemplo, basta executar os métodos main de cada classe (comece pelo servidor!)

Exercício Crie um Servidor que possua os métodos: void cadastrarCliente(Cliente) List<Cliente> listarClientes() void excluirCliente(int) void alterarCliente(Cliente) Não se esqueça de usar as exceções apropriadas Crie um cliente para chamar os métodos remotamente do servidor Utilize o esquema de persistência que preferir (armazenamento em memória, JDBC, etc...)