SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
Comunicação Distribuída - RMI
      Prof. Adriano Teixeira de Souza
   Estratégias diferentes que permitem a
    comunicação entre aplicações distribuídas.

   Tipos distintos de comunicação em um sistema
    distribuído:

    ◦ Sockets
    ◦ RMI - Remote Method Invocation
    ◦ CORBA – Commom Object Request Broker Architecture
    ◦ EJB – Enterprise Java Bean
    ◦ Web Services


                              Prof. Adriano Teixeira de Souza
•   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



                                    Prof. Adriano Teixeira de Souza
•   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

                                 Prof. Adriano Teixeira de Souza
•   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 Marshaling
    e Unmarshaling)



                            Prof. Adriano Teixeira de Souza
   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


                             Prof. Adriano Teixeira de Souza
   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


                            Prof. Adriano Teixeira de Souza
   Definindo a Remote Interface

   Codificando Remote Class

   Gerando o Stub

   Criando o Remote Server

   Codificando o Cliente

   Executando todos os programas

                            Prof. Adriano Teixeira de Souza
   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




                                       Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza
•   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


                                    Prof. Adriano Teixeira de Souza
Prof. Adriano Teixeira de Souza
   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



                                     Prof. Adriano Teixeira de Souza
•   O QuickFix do
    Eclipse poderá
    ajudar a gerar um
    serialVersionUID
    para a classe
    Serializable




                        Prof. Adriano Teixeira de Souza
   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!

                                 Prof. Adriano Teixeira de Souza
   O rmic é um programa de linha de comando que fica na pasta bin do
    jdk. Um exemplo de chamada do rmic é:

C:Documents and Settingsluiz carlosworkspace>
  C:Arquivos de programasJavajdk1.5.0_06binrmic
  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




                                   Prof. Adriano Teixeira de Souza
•   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:




                                Prof. Adriano Teixeira de Souza
•   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.


                                Prof. Adriano Teixeira de Souza
•   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




                                  Prof. Adriano Teixeira de Souza
•   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:




                                  Prof. Adriano Teixeira de Souza
•   Para executar o exemplo, basta executar os
    métodos main de cada classe (comece pelo
    servidor!)




                         Prof. Adriano Teixeira de Souza

Contenu connexe

Tendances

Système répartis avec RMI
Système répartis avec RMISystème répartis avec RMI
Système répartis avec RMIKorteby Farouk
 
SO-05 Gerenciamento de Memória e Alocação
SO-05 Gerenciamento de Memória e AlocaçãoSO-05 Gerenciamento de Memória e Alocação
SO-05 Gerenciamento de Memória e AlocaçãoEduardo Nicola F. Zagari
 
Sistemas Distribuídos - Aula 05
Sistemas Distribuídos - Aula 05Sistemas Distribuídos - Aula 05
Sistemas Distribuídos - Aula 05Arthur Emanuel
 
Sistemas Distribuídos - Comunicação Distribuída – CORBA
Sistemas Distribuídos - Comunicação Distribuída – CORBASistemas Distribuídos - Comunicação Distribuída – CORBA
Sistemas Distribuídos - Comunicação Distribuída – CORBAAdriano Teixeira de Souza
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et streamFranck SIMON
 
Apresentação Sistemas Distribuídos - Conceito
Apresentação Sistemas Distribuídos - ConceitoApresentação Sistemas Distribuídos - Conceito
Apresentação Sistemas Distribuídos - ConceitoThiago Marinho
 
Redes de Computadores - Camada de Aplicação
Redes de Computadores - Camada de AplicaçãoRedes de Computadores - Camada de Aplicação
Redes de Computadores - Camada de AplicaçãoLuís Felipe de Andrade
 
Verificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareVerificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareCamilo Almendra
 
Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Heithem Abbes
 
Sistemas Distribuídos - Comunicação Distribuída – Middleware
Sistemas Distribuídos - Comunicação Distribuída – MiddlewareSistemas Distribuídos - Comunicação Distribuída – Middleware
Sistemas Distribuídos - Comunicação Distribuída – MiddlewareAdriano Teixeira de Souza
 
Sistemas Distribuídos - Aula 01
Sistemas Distribuídos - Aula 01Sistemas Distribuídos - Aula 01
Sistemas Distribuídos - Aula 01Arthur Emanuel
 
Conceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosConceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosDaniel Arndt Alves
 
desafios na implementacao de sistemas distribuidos
desafios na implementacao de sistemas distribuidosdesafios na implementacao de sistemas distribuidos
desafios na implementacao de sistemas distribuidosHélio Jovo
 
Redes de computadores 2 - Aula 6 - DNS, DHCP
Redes de computadores 2 - Aula 6 - DNS, DHCPRedes de computadores 2 - Aula 6 - DNS, DHCP
Redes de computadores 2 - Aula 6 - DNS, DHCPCleber Fonseca
 
119239 programmation-en-java-api
119239 programmation-en-java-api119239 programmation-en-java-api
119239 programmation-en-java-apiWiem Ben Harrath
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programaçãorodfernandes
 

Tendances (20)

Système répartis avec RMI
Système répartis avec RMISystème répartis avec RMI
Système répartis avec RMI
 
SO-05 Gerenciamento de Memória e Alocação
SO-05 Gerenciamento de Memória e AlocaçãoSO-05 Gerenciamento de Memória e Alocação
SO-05 Gerenciamento de Memória e Alocação
 
Sistemas Distribuídos - Aula 05
Sistemas Distribuídos - Aula 05Sistemas Distribuídos - Aula 05
Sistemas Distribuídos - Aula 05
 
Sistemas Distribuídos - Comunicação Distribuída – CORBA
Sistemas Distribuídos - Comunicação Distribuída – CORBASistemas Distribuídos - Comunicação Distribuída – CORBA
Sistemas Distribuídos - Comunicação Distribuída – CORBA
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et stream
 
Apresentação Sistemas Distribuídos - Conceito
Apresentação Sistemas Distribuídos - ConceitoApresentação Sistemas Distribuídos - Conceito
Apresentação Sistemas Distribuídos - Conceito
 
Redes de Computadores - Camada de Aplicação
Redes de Computadores - Camada de AplicaçãoRedes de Computadores - Camada de Aplicação
Redes de Computadores - Camada de Aplicação
 
Design patterns
Design patternsDesign patterns
Design patterns
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
 
Fundamentos de arquitetura Web
Fundamentos de arquitetura WebFundamentos de arquitetura Web
Fundamentos de arquitetura Web
 
Verificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareVerificação, Validação e Teste de Software
Verificação, Validação e Teste de Software
 
Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Appels de procédures distants (RPC)
Appels de procédures distants (RPC)
 
Sistemas Distribuídos - Comunicação Distribuída – Middleware
Sistemas Distribuídos - Comunicação Distribuída – MiddlewareSistemas Distribuídos - Comunicação Distribuída – Middleware
Sistemas Distribuídos - Comunicação Distribuída – Middleware
 
Sistemas Distribuídos - Aula 01
Sistemas Distribuídos - Aula 01Sistemas Distribuídos - Aula 01
Sistemas Distribuídos - Aula 01
 
Conceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosConceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos Distribuidos
 
desafios na implementacao de sistemas distribuidos
desafios na implementacao de sistemas distribuidosdesafios na implementacao de sistemas distribuidos
desafios na implementacao de sistemas distribuidos
 
Socket
SocketSocket
Socket
 
Redes de computadores 2 - Aula 6 - DNS, DHCP
Redes de computadores 2 - Aula 6 - DNS, DHCPRedes de computadores 2 - Aula 6 - DNS, DHCP
Redes de computadores 2 - Aula 6 - DNS, DHCP
 
119239 programmation-en-java-api
119239 programmation-en-java-api119239 programmation-en-java-api
119239 programmation-en-java-api
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programação
 

En vedette

Sistemas distribuídos com RMI
Sistemas distribuídos com RMISistemas distribuídos com RMI
Sistemas distribuídos com RMICharleston Anjos
 
Sistemas Distribuídos - Comunicação Distribuída – Web Services
Sistemas Distribuídos - Comunicação Distribuída – Web ServicesSistemas Distribuídos - Comunicação Distribuída – Web Services
Sistemas Distribuídos - Comunicação Distribuída – Web ServicesAdriano Teixeira de Souza
 
Artigo distribuidos programação java com rmi e cobra
Artigo distribuidos programação java com rmi e cobraArtigo distribuidos programação java com rmi e cobra
Artigo distribuidos programação java com rmi e cobraGoncalvinho
 
Sistemas Distribuidos Java
Sistemas Distribuidos JavaSistemas Distribuidos Java
Sistemas Distribuidos Javalimadavi
 
Tutorial passo a passo sobre RMI
Tutorial passo a passo sobre RMITutorial passo a passo sobre RMI
Tutorial passo a passo sobre RMISimão Neto
 
Sistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBSistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBAdriano Teixeira de Souza
 
Aula 2 introdução a sistemas distribuídos
Aula 2   introdução a sistemas distribuídosAula 2   introdução a sistemas distribuídos
Aula 2 introdução a sistemas distribuídosEduardo de Lucena Falcão
 
Java rmi example program with code
Java rmi example program with codeJava rmi example program with code
Java rmi example program with codekamal kotecha
 

En vedette (13)

Sistemas distribuídos com RMI
Sistemas distribuídos com RMISistemas distribuídos com RMI
Sistemas distribuídos com RMI
 
Sistemas Distribuídos - Comunicação Distribuída – Web Services
Sistemas Distribuídos - Comunicação Distribuída – Web ServicesSistemas Distribuídos - Comunicação Distribuída – Web Services
Sistemas Distribuídos - Comunicação Distribuída – Web Services
 
Computacao distribuida com rmi
Computacao distribuida com rmiComputacao distribuida com rmi
Computacao distribuida com rmi
 
Rmi
RmiRmi
Rmi
 
RMI em Java
RMI em JavaRMI em Java
RMI em Java
 
Artigo distribuidos programação java com rmi e cobra
Artigo distribuidos programação java com rmi e cobraArtigo distribuidos programação java com rmi e cobra
Artigo distribuidos programação java com rmi e cobra
 
Sistemas Distribuidos Java
Sistemas Distribuidos JavaSistemas Distribuidos Java
Sistemas Distribuidos Java
 
Middlewares
MiddlewaresMiddlewares
Middlewares
 
Tutorial passo a passo sobre RMI
Tutorial passo a passo sobre RMITutorial passo a passo sobre RMI
Tutorial passo a passo sobre RMI
 
Sistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBSistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJB
 
Aula 2 introdução a sistemas distribuídos
Aula 2   introdução a sistemas distribuídosAula 2   introdução a sistemas distribuídos
Aula 2 introdução a sistemas distribuídos
 
Java rmi
Java rmiJava rmi
Java rmi
 
Java rmi example program with code
Java rmi example program with codeJava rmi example program with code
Java rmi example program with code
 

Similaire à RMI - Remote Method Invocation

Similaire à RMI - Remote Method Invocation (20)

Funmentos de Objetos Remotos
Funmentos de Objetos RemotosFunmentos de Objetos Remotos
Funmentos de Objetos Remotos
 
Fundamentos de Objetos Remotos
Fundamentos de Objetos RemotosFundamentos de Objetos Remotos
Fundamentos de Objetos Remotos
 
Java RMI
Java RMIJava RMI
Java RMI
 
RMI (Remote Method Invocation)
RMI (Remote Method Invocation) RMI (Remote Method Invocation)
RMI (Remote Method Invocation)
 
6-RMI.pdf
6-RMI.pdf6-RMI.pdf
6-RMI.pdf
 
J530 4 rmi
J530 4 rmiJ530 4 rmi
J530 4 rmi
 
JustJava 2005: Web Services em Java com o JWSDP 1.5
JustJava 2005: Web Services em Java com o JWSDP 1.5JustJava 2005: Web Services em Java com o JWSDP 1.5
JustJava 2005: Web Services em Java com o JWSDP 1.5
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
 
Mini aula-java
Mini aula-javaMini aula-java
Mini aula-java
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
 
Linguagem Java OO | Curso 3WAY Networks
Linguagem Java OO | Curso 3WAY NetworksLinguagem Java OO | Curso 3WAY Networks
Linguagem Java OO | Curso 3WAY Networks
 
Unidade iii aula 02 - introdução ao java
Unidade iii   aula 02 - introdução ao javaUnidade iii   aula 02 - introdução ao java
Unidade iii aula 02 - introdução ao java
 
Introdução ao java
Introdução ao javaIntrodução ao java
Introdução ao java
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Ruby e Rails
Ruby e RailsRuby e Rails
Ruby e Rails
 
Java 01
Java 01Java 01
Java 01
 
Conhecendo o Spring
Conhecendo o SpringConhecendo o Spring
Conhecendo o Spring
 
Rmi (remote method invocation)
Rmi (remote method invocation)Rmi (remote method invocation)
Rmi (remote method invocation)
 

Plus de Adriano Teixeira de Souza

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Adriano Teixeira de Souza
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasAdriano Teixeira de Souza
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSAdriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaAdriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)Adriano Teixeira de Souza
 

Plus de Adriano Teixeira de Souza (20)

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
 

RMI - Remote Method Invocation

  • 1. Comunicação Distribuída - RMI Prof. Adriano Teixeira de Souza
  • 2. Estratégias diferentes que permitem a comunicação entre aplicações distribuídas.  Tipos distintos de comunicação em um sistema distribuído: ◦ Sockets ◦ RMI - Remote Method Invocation ◦ CORBA – Commom Object Request Broker Architecture ◦ EJB – Enterprise Java Bean ◦ Web Services Prof. Adriano Teixeira de Souza
  • 3. 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 Prof. Adriano Teixeira de Souza
  • 4. 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 Prof. Adriano Teixeira de Souza
  • 5. 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 Marshaling e Unmarshaling) Prof. Adriano Teixeira de Souza
  • 6. 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 Prof. Adriano Teixeira de Souza
  • 7. 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 Prof. Adriano Teixeira de Souza
  • 8. Definindo a Remote Interface  Codificando Remote Class  Gerando o Stub  Criando o Remote Server  Codificando o Cliente  Executando todos os programas Prof. Adriano Teixeira de Souza
  • 9. 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 Prof. Adriano Teixeira de Souza
  • 11. 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 Prof. Adriano Teixeira de Souza
  • 13. 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 Prof. Adriano Teixeira de Souza
  • 14. O QuickFix do Eclipse poderá ajudar a gerar um serialVersionUID para a classe Serializable Prof. Adriano Teixeira de Souza
  • 15. 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! Prof. Adriano Teixeira de Souza
  • 16. O rmic é um programa de linha de comando que fica na pasta bin do jdk. Um exemplo de chamada do rmic é: C:Documents and Settingsluiz carlosworkspace> C:Arquivos de programasJavajdk1.5.0_06binrmic 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 Prof. Adriano Teixeira de Souza
  • 17. 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: Prof. Adriano Teixeira de Souza
  • 18. 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. Prof. Adriano Teixeira de Souza
  • 19. 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 Prof. Adriano Teixeira de Souza
  • 20. 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: Prof. Adriano Teixeira de Souza
  • 21. Para executar o exemplo, basta executar os métodos main de cada classe (comece pelo servidor!) Prof. Adriano Teixeira de Souza