Java RMI - Estudo de Caso - Objetos Distribuídos

Preview:

DESCRIPTION

Estudo de Caso - Objetos Distribuídos

Citation preview

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Java RMIEstudo de Caso – Objetos Distribuídos

• Prof. Hermes Irineu Del Monego• hmonego@utfpr.edu.br

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Objetivos

Aprender a desenvolver aplicações distribuídas usando JAVA RMI

Desenvolvimento de OlaMundo

Desenvolvimento de Jogos

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Introdução

Invocação remota de métodos (RMI)

Middleware para projetos de objetos distribuídos

Objetivo primário é permitir que programadores desenvolvam programas distribuídos com a mesma sintaxe e semântica utilizada em programas não distribuídos

Objetos podem ser compartilhados entre clientes

RMI é semelhante ao RPC, usado em C

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

O que é RMI

Máquina Local Máquina Remota

AplicaçãoObjeto

Objetos Locais

Objeto RemotoCliente

Objeto RemotoServidorX

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

O que é RMI

Máquina Remota

Objeto RemotoServidor

Máquina Local

AplicaçãoObjeto

Objeto RemotoCliente

Servidor p/ Registro

ServidorNome/Registro

Serviço x = 200.203.20.3

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Implementação de RMI

Cenário da invocação remota de métodos– Módulos envolvidos

object A object BskeletonRequest

proxy for B

Reply

CommunicationRemote Remote referenceCommunicationmodulemodulereference module module

for B’s class& dispatcher

remoteclient server

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Estudo de Caso: Java RMI

Java RMI estende o modelo de objetos para fornecer suporte a objetos distribuídos nalinguagem Java

Permite objetos Java invocar métodos em objetos Java remotos com a mesma sintaxe local.

Programadores deixam de mapear classes Java de uma JVM única para um novo modelo com um ambiente com múltiplas JVMs

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Passos para desenvolver um aplicativo Java RMI simples

Passo 1: Escrever e compilar as interfaces JavaPasso 2: Escrever e compilar as classes que

implementam a lógica de negócioPasso 3: Gerar os stubs (proxy) e skeletons para

as classes de Implementação (servants)Passo 4: Executar um gerenciador de nomesPasso 5: Escrever e compilar o programa que

abriga o serviço remoto (Servidor)Passo 6: Desenvolver o programa cliente RMIPasso 7: Colocar em execução o sistema RMI

Servidor e Cliente

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Estudo de Caso: Java RMI – Passo 1 - Interface

Desenvolver a Interface do aplicativo A interface não contém a lógica de negócio

“Clientes se preocupam com a definição de um serviço e servidores se preocupam em fornecer

esse serviço” Na interface é informado os métodos, os parâmetros e os

tipos de retornos

Os parâmetros são do tipo input e o resultado como output

Todo objeto que é serializable pode ser passado como argumento.

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Estudo de Caso: Java RMI – Passo 1 - Interface

Interfaces remotas em Java RMI Estender a inteface Remote (pacote java.rmi)

Os métodos devem lançar uma exceção RemoteException

Interface é compilada normalmente

import java.rmi.*;

public interface OlaMundo extends Remote {

public String digaOlaMundo(int vezes) throwsRemoteException;

}

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Estudo de Caso: Java RMI – Passo 1 - Interface

Três classes implementam a interface OlaMundoNo lado cliente:

classe de proxy (Stubs) Servant (classe que implementa a lógica do negócio)

No lado servidor:Servant (classe que implementa a lógica do negócio) skeleton

Proxy e Skeleton são gerados automaticamentoServant deve ser implementado (passo 2)

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Estudo de Caso: Java RMI – Passo 2 - Servant

Implementar o servantConsiste na implementação (codificação) da lógica do

negócioA implementação do servant é um classe que roda no

servidorO servant deve:

implementar a interface desenvolvida no passo 1 (OlaMundo)

estender a interface UnicastRemoteObject

public class OlaMundoImpl extends UnicastRemoteObject implements OlaMundo { … }

O servant também é compilado normalmente

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

• import java.rmi.*;• import java.rmi.server.*;

• public class OlaMundoImpl extends UnicastRemoteObject • implements OlaMundo {

• public OlaMundoImpl() throws RemoteException {• super();• }•• public String olaMundo(int vezes) throws RemoteException {• String aux = "";

• for( int i=1; i <= vezes; i++ ) {• aux = aux + "Ola Mundo... ";• }• return aux;• }•• }

Estudo de Caso: Java RMI – Passo 2 - Servant

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Usa a herança para se ligar ao sistema RMIpublic class OlaMundoImpl

extends UnicastRemoteObject implements OlaMundo { … }

Precisa de um construtor que declare o lançamento de exceções remotaspublic OlaMundoImpl() throws RemoteException {

super();}

O super() ativa a ligação com o sistema RMI

Estudo de Caso: Java RMI – Passo 2 - Servant

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Stubs (proxy) e SkeletonIntercepta chamadas de métodos

• fazem o marshaling e unmashaling das requisições/respostas

São gerados a partir do servant (OlaMundoImpl.java)• implementação que está vincula a inteface OlaMundo

Compilador RMI (rmic) gera stub e skeleton Gerados a partir do servant (OlaMundoImpl)

• rmic OlaMundoImpl

Gera o arquivo OlaMundoImpl_Stub.class

Estudo de Caso: Java RMI – Passo 3 - stub/skeleton

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Registrando o Serviço em um servidor de nomes Como um cliente encontra um serviço remoto RMI

• Através de um serviço de diretórios ou de nomes

Como um cliente pode localizar um serviço usando um serviço?• Um serviço de nomes ou diretórios executa em um

host/porta conhecidos

Estudo de Caso: Java RMI – Passo 4 - rmiregistry

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Estudo de Caso: Java RMI – Passo 4 - rmiregistry

Máquina Remota

Objeto RemotoServidor

Máquina Local

AplicaçãoObjeto

Objetos Locais

Objeto RemotoCliente

Servidor p/ Registro

ServidorNome/Registro

Serviço x = 200.203.20.3

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Estudo de Caso: Java RMI – Passo 4 - rmiregistry

RMI pode utilizar vários serviços de diretórios, incluindo JNDI (Java Naming and Directory Interface)

Inclui também um serviço simples chamado RMI RegistryrmiregistryRoda em cada máquina que abriga serviços remotos e

aceita queries na porta 1099 (default)

Usaremos o rmiregistry

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Estudo de Caso: Java RMI – Passo 5 - Servidor

Desenvolvendo o aplicativo ServidorServiços remotos RMI precisam ser abrigados em

um processo servidorA classe do aplicativo servidor contém o mínimo

necessário para manter o serviço, incluindo o registro no servidor de nomes

Consiste de um servant e um método main().O método main() do servidor cria uma instância do

objeto servant e o liga ao RMIRegistry

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Estudo de Caso: Java RMI – Passo 5 - Servidor1. import java.rmi.Naming; 2.3. public class OlaMundoServidor {4.5. public OlaMundoServidor() {6. try {7. OlaMundo o = new OlaMundoImpl();8. Naming.rebind( "rmi://localhost:1099/OlaMundoService", o);9. } catch (Exception e) {10. System.out.println( "Erro:" + e );11. }12. }13.14. public static void main(String args[]) {15. new OlaMundoServidor();16. }17. }

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Estudo de Caso: Java RMI – Passo 6 - Cliente

Desenvolvendo o aplicativo ClienteO maior trabalho do cliente é localizar o objeto no

servidor de nomes (RMIRegistry)O serviço RMI Registry é acessado pela classe estática

NamingO método lookup() busca uma URL que especifica o

host servidor e o nome do serviço desejado, retornando uma referência para o objeto

rmi://<host>[:<porta>]/<serviço>

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Estudo de Caso: Java RMI – Passo 6 - Cliente1. import java.rmi.*;2. import java.net.*;3.4. public class OlaMundoCliente {5.6. public static void main(String[] args) {7.8. try {9.10. OlaMundo o = (OlaMundo)11. Naming.lookup("rmi://localhost:1099/OlaMundoService" );12.13. System.out.println( "Ola Mundo RMI " + o.digaOlaMundo( 2 ) );14.15. } catch( Exception e ) {16. System.out.println( "Erro: " + e.getMessage() );17. }18. }19.}

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Estudo de Caso: Java RMI – Passo 7

• Executar o aplicativo

rmiregistry

java OlaMundoServidor java OlaMundoCliente

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Trabalho

Desenvolver o Jogo da velha em Java RMIMas já podem começar a desenvolverTeremos as aulas para desenvolver o trabalho:

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Sugestões???Dúvidas???

Recommended