25
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ Java RMI Estudo de Caso – Objetos Distribuídos Prof. Hermes Irineu Del Monego [email protected]

Java RMI - Estudo de Caso - Objetos Distribuídos

Embed Size (px)

DESCRIPTION

Estudo de Caso - Objetos Distribuídos

Citation preview

Page 1: Java RMI - Estudo de Caso - Objetos Distribuídos

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Java RMIEstudo de Caso – Objetos Distribuídos

• Prof. Hermes Irineu Del Monego• [email protected]

Page 2: Java RMI - Estudo de Caso - Objetos Distribuídos

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Objetivos

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

Desenvolvimento de OlaMundo

Desenvolvimento de Jogos

Page 3: Java RMI - Estudo de Caso - Objetos Distribuídos

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

Page 4: Java RMI - Estudo de Caso - Objetos Distribuídos

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

O que é RMI

Máquina Local Máquina Remota

AplicaçãoObjeto

Objetos Locais

Objeto RemotoCliente

Objeto RemotoServidorX

Page 5: Java RMI - Estudo de Caso - Objetos Distribuídos

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

Page 6: Java RMI - Estudo de Caso - Objetos Distribuídos

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

Page 7: Java RMI - Estudo de Caso - Objetos Distribuídos

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

Page 8: Java RMI - Estudo de Caso - Objetos Distribuídos

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

Page 9: Java RMI - Estudo de Caso - Objetos Distribuídos

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.

Page 10: Java RMI - Estudo de Caso - Objetos Distribuídos

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;

}

Page 11: Java RMI - Estudo de Caso - Objetos Distribuídos

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)

Page 12: Java RMI - Estudo de Caso - Objetos Distribuídos

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

Page 13: Java RMI - Estudo de Caso - Objetos Distribuídos

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

Page 14: Java RMI - Estudo de Caso - Objetos Distribuídos

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

Page 15: Java RMI - Estudo de Caso - Objetos Distribuídos

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

Page 16: Java RMI - Estudo de Caso - Objetos Distribuídos

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

Page 17: Java RMI - Estudo de Caso - Objetos Distribuídos

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

Page 18: Java RMI - Estudo de Caso - Objetos Distribuídos

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

Page 19: Java RMI - Estudo de Caso - Objetos Distribuídos

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

Page 20: Java RMI - Estudo de Caso - Objetos Distribuídos

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. }

Page 21: Java RMI - Estudo de Caso - Objetos Distribuídos

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>

Page 22: Java RMI - Estudo de Caso - Objetos Distribuídos

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.}

Page 23: Java RMI - Estudo de Caso - Objetos Distribuídos

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

Estudo de Caso: Java RMI – Passo 7

• Executar o aplicativo

rmiregistry

java OlaMundoServidor java OlaMundoCliente

Page 24: Java RMI - Estudo de Caso - Objetos Distribuídos

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:

Page 25: Java RMI - Estudo de Caso - Objetos Distribuídos

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

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