Upload
alxfromplanetx
View
260
Download
3
Embed Size (px)
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• [email protected]
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???