Você está na página 1de 25

Java RMI

Estudo de Caso Objetos Distribudos

Prof. Hermes Irineu Del Monego


hmonego@utfpr.edu.br

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Objetivos
Aprender a desenvolver aplicaes distribudas

usando JAVA RMI

Desenvolvimento de OlaMundo
Desenvolvimento de Jogos

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Introduo
Invocao remota de mtodos (RMI)
Middleware para projetos de objetos distribudos
Objetivo primrio permitir que programadores

desenvolvam programas distribudos com a


mesma sintaxe e semntica utilizada em
programas no distribudos

Objetos podem ser compartilhados entre clientes


RMI semelhante ao RPC, usado em C

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

O que RMI

Objetos
Locais

Aplicao
Objeto
Objeto
Remoto
Cliente

Mquina Local

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Objeto
Remoto
Servidor

Mquina Remota

O que RMI

Objeto
Remoto
Servidor

Servidor
p/ Registro

Aplicao
Objeto

Mquina Remota
Objeto
Remoto
Cliente

Mquina Local

Servio x = 200.203.20.3

Servidor
Nome/Registro

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Implementao de RMI
Cenrio da invocao remota de mtodos

Mdulos envolvidos

server

client
object A proxy for B

skeleton
& dispatcher
for Bs class

Request

remote
object B

Reply

Communication
Remote
reference module
module
UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Communication
module

Remote reference
module

Estudo de Caso: Java RMI


Java RMI estende o modelo de objetos para

fornecer suporte a objetos distribudos na


linguagem Java
Permite objetos Java invocar mtodos 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 mltiplas JVMs

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Passos para desenvolver um aplicativo Java RMI simples

Passo 1: Escrever e compilar as interfaces Java


Passo 2: Escrever e compilar as classes que

implementam a lgica de negcio


Passo 3: Gerar os stubs (proxy) e skeletons para
as classes de Implementao (servants)
Passo 4: Executar um gerenciador de nomes
Passo 5: Escrever e compilar o programa que
abriga o servio remoto (Servidor)
Passo 6: Desenvolver o programa cliente RMI
Passo 7: Colocar em execuo o sistema RMI
Servidor e

Cliente

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Estudo de Caso: Java RMI Passo 1 - Interface


Desenvolver a Interface do aplicativo
A interface no

contm a lgica de negcio

Clientes se preocupam com a definio de um


servio e servidores se preocupam em fornecer
esse servio
informado os mtodos, os parmetros e os
tipos de retornos

Na interface

Os parmetros so do
Todo

tipo input e o resultado como output

objeto que serializable pode ser passado como


argumento.

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Estudo de Caso: Java RMI Passo 1 - Interface


Interfaces remotas em Java RMI

Estender a inteface Remote (pacote java.rmi)

Os mtodos devem lanar uma exceo

RemoteException
import java.rmi.*;

public interface OlaMundo extends Remote {


public String digaOlaMundo(int vezes) throws
RemoteException;
}

Interface compilada normalmente


UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Estudo de Caso: Java RMI Passo 1 - Interface


Trs classes implementam a interface OlaMundo
No lado cliente:
classe de proxy (Stubs)
Servant (classe que implementa a lgica do negcio)
No lado servidor:
Servant (classe que implementa a lgica do negcio)
skeleton
Proxy e Skeleton so gerados automaticamento
Servant deve ser implementado (passo 2)
UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Estudo de Caso: Java RMI Passo 2 - Servant


Implementar o servant
Consiste na implementao (codificao) da lgica do
negcio
A implementao do servant um classe que roda no
servidor
O servant deve:
implementar a interface desenvolvida no passo 1
(OlaMundo)
estender a interface UnicastRemoteObject
public class OlaMundoImpl
extends UnicastRemoteObject
implements OlaMundo { }

O servant tambm compilado normalmente


UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Estudo de Caso: Java RMI Passo 2 - Servant

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

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Estudo de Caso: Java RMI Passo 2 - Servant


Usa a herana para se ligar ao sistema RMI
public class OlaMundoImpl
extends UnicastRemoteObject
implements OlaMundo { }

Precisa de um construtor que declare o

lanamento de excees remotas

public OlaMundoImpl() throws RemoteException {


super();
}
O super()

ativa a ligao com o sistema RMI

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

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


Stubs (proxy) e Skeleton
Intercepta chamadas

de mtodos

fazem o marshaling e unmashaling das


requisies/respostas
So gerados

a partir do servant (OlaMundoImpl.java)

implementao 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


UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Estudo de Caso: Java RMI Passo 4 - rmiregistry


Registrando o Servio em um servidor de nomes
Como um cliente encontra um

servio remoto RMI


Atravs de um servio de diretrios ou de nomes

Como um cliente pode

localizar um servio usando um

servio?
Um servio de nomes ou diretrios executa em um
host/porta conhecidos

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Estudo de Caso: Java RMI Passo 4 - rmiregistry

Objeto
Remoto
Servidor

Objetos
Locais

Servidor
p/ Registro

Aplicao
Objeto

Mquina Remota
Objeto
Remoto
Cliente

Mquina Local

Servio x = 200.203.20.3

Servidor
Nome/Registro

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Estudo de Caso: Java RMI Passo 4 - rmiregistry


RMI pode utilizar vrios servios de diretrios,

incluindo JNDI (Java Naming and Directory


Interface)
Inclui tambm um servio simples chamado RMI
Registry
rmiregistry
Roda

em cada mquina que abriga servios remotos e


aceita queries na porta 1099 (default)

Usaremos o rmiregistry

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Estudo de Caso: Java RMI Passo 5 - Servidor


Desenvolvendo o aplicativo Servidor
Servios remotos RMI precisam ser abrigados em

um processo servidor
A classe do aplicativo servidor contm o mnimo
necessrio para manter o servio, incluindo o
registro no servidor de nomes
Consiste de um servant e um mtodo main().
O mtodo

main() do servidor cria uma instncia do


objeto servant e o liga ao RMIRegistry

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Estudo de Caso: Java RMI Passo 5 - Servidor

1. import java.rmi.Naming;
2.
3. public class OlaMundoServidor {
4.
5. public OlaMundoServidor() {
6.
try {
7.
OlaMundo o = new OlaMundoImpl();
Naming.rebind( "rmi://localhost:1099/OlaMundoService", o);
8.
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 TECNOLGICA FEDERAL DO PARAN

Estudo de Caso: Java RMI Passo 6 - Cliente


Desenvolvendo o aplicativo Cliente
O maior

trabalho do cliente localizar o objeto no


servidor de nomes (RMIRegistry)
O servio RMI Registry acessado pela classe esttica
Naming
O mtodo lookup() busca uma URL que especifica o
host servidor e o nome do servio desejado,
retornando uma referncia para o objeto

rmi://<host>[:<porta>]/<servio>

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Estudo de Caso: Java RMI Passo 6 - Cliente


1. 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 TECNOLGICA FEDERAL DO PARAN

Estudo de Caso: Java RMI Passo 7


Executar o aplicativo

rmiregistry

java OlaMundoServidor
UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

java OlaMundoCliente

Trabalho
Desenvolver o Jogo da velha em Java RMI
Mas j podem comear a desenvolver
Teremos as aulas para desenvolver o trabalho:

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Sugestes???
Dvidas???

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

Você também pode gostar