java rmi - estudo de caso - objetos distribuídos
DESCRIPTION
Estudo de Caso - Objetos DistribuídosTRANSCRIPT
![Page 1: Java RMI - Estudo de Caso - Objetos Distribuídos](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042615/563dbb78550346aa9aad6d80/html5/thumbnails/25.jpg)
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
Sugestões???Dúvidas???