Exemplo Rmi
-
Upload
silvio-bacala -
Category
Documents
-
view
214 -
download
0
Transcript of Exemplo Rmi
-
7/23/2019 Exemplo Rmi
1/7
Definir a interface remota
Um objeto remoto uma instncia de uma classe que implementa uma interface
remota. A interface remota estende a interface java.rmi.Remote e declara um conjunto
de mtodos remotos. Cada mtodo remoto deve declarar java.rmi.RemoteException
(ou uma superclasse de RemoteException) em sua lances clusula! alm de todas asexce"#es espec$ficas do aplicativo.
Aqui a defini"%o de interface para a interface remota utili&ada neste
exemplo! example.'ello.ello. eclara apenas um mtodo!sa*ello! que
retorna uma seq+,ncia de caracteres para o c'amador-
paca/e example.'ello0
import java.rmi.Remote 0
import java.rmi.RemoteException 0
interface public ello extend remoto 1
void sa*ello () t'ro2s RemoteException0
3
4nvoca"#es de mtodo remoto pode fal'ar em muitas maneiras adicionais
em compara"%o com invoca"#es de mtodos locais (tais como problemas
de comunica"%o relacionados 5 rede e problemas de servidor)! e mtodos
remotos ir relatar tais fal'as! lan"ando uma java.rmi.RemoteException.
Implementar o servidor
A classe 6server6! neste contexto! a classe que tem um principal mtodo que cria
uma instncia da implementa"%o do objeto remoto! exporta o objeto remoto! e em
se/uida! li/a essa instncia para um nome em um re/istro 7ava R84 (rmire/istr*). A
classe que contm esse principal mtodo poderia ser a pr9pria classe de
implementa"%o! ou de outra classe inteiramente.
:este exemplo! o principal mtodo para o servidor definida na classe
servidor que tambm implementa a interface remota ;l. ; servidor
principal mtodo fa& o se/uinte-
Criar e exportar um objeto remoto
Re/istre o objeto remoto com um re/istro de 7ava R84
Aqui est o c9di/o
-
7/23/2019 Exemplo Rmi
2/7
import java.rmi.re/istr*.Re/istr*0
import java.rmi.re/istr*.=ocateRe/istr* 0
importjava.rmi.RemoteException 0
import classe java.rmi.server.UnicastRemote;bject0
public class >erver implements ello 1
public >erver() 13
public >trin/ sa*ello () 1 return 6;l! mundo?60 3
void main (ar/s >trin/ @) 1public static
experimentar 1
>erver obj B ne2 >erver ()0 ello stub B (ello)
UnicastRemote;bject.export;bject (obj! )0
DD incular stub do objeto remoto no re/istro
Re/istr* re/istro B =ocateRe/istr*./etRe/istr* ()0
re/istro.bind (6;l6! stub)0
>*stem.err.println (6>ervidor pronto6)0 3 Catc' (Exception e) 1
>*stem.err.println (6Erro >erver-6 F e.to>trin/())0 e.print>tacGrace ()0
3
3
3
A classe de implementa"%o do servidor implementa a interface remota
ello! proporcionando uma implementa"%o para o mtodo remoto
sa*ello.
Nota:Uma classe pode definir mtodos n%o especificados na interfaceremota! mas esses mtodos s9 pode ser invocada dentro da mquina virtual
executando o servi"o e n%o podem ser invocados remotamente.
Criar e exportar um objeto remoto
; principal mtodo de o servidor precisa para criar o objeto remoto que
fornece o servi"o. Alm disso! o objeto remoto deve ser exportadopara o
tempo de execu"%o 7ava R84 para que ele pode receber c'amadas remotas
de entrada. 4sto pode ser feito como se se/ue-
>erver obj B ne2 >erver ()0
-
7/23/2019 Exemplo Rmi
3/7
ello stub B (ello) UnicastRemote;bject.export;bject (obj! )0
; mtodo esttico UnicastRemote;bject.export;bject exporta o objeto
remoto fornecido para receber entrada de mtodo remoto invoca"#es em
uma porta GCH anInimo e retorna o stub para o objeto remoto para passar
para os clientes. Como resultado da c'amada a Export;bject! o tempo de
execu"%o podem come"ar a ouvir sobre um novo socet servidor ou pode
usar um soquete de servidor compartil'ado para aceitar c'amadas remotas
de entrada para o objeto remoto. ; stub retornado implementa o mesmo
conjunto de interfaces remotas como a classe do objeto remoto e contm o
nome do 'ost e porta atravs da qual o objeto remoto pode ser contactado.
Nota:A partir do J.! release de 7K>E! classes de stub para objetos remotos
n%o precisam mais ser pre/erados usando o compilador de stub rmic! a
menos que o objeto remoto precise suportar clientes que executam emverso#es anteriores a J.. >e o seu aplicativo precisa apoiar esses clientes!
voc, vai precisar para /erar classes de stub para os objetos remotos
utili&ados na aplica"%o e implantar essas classes stub para os clientes para
fa&er o do2nload. Hara obter detal'es sobre como /erar classes stub!
consulte a documenta"%o ferramentas para rmic @>olaris! Lindo2s.
Registre o objeto remoto com um registro de Java RMI
Hara um clienteser capa& de c'amar um mtodo em um objeto remoto! ele
deve primeiro obter um stub para o objeto remoto. Hor bootstrappin/! 7ava
R84 oferece uma AH4 de re/istro para aplica"#es! vinculando um nome de
stub de um objeto remoto! e os clientes devem procurar objetos remotos
por nome! a fim de obter suas instncias.
Um re/istro 7ava R84 um servi"o de nome simplificado que permite aos
clientes obter uma refer,ncia para um objeto remoto. Em /eral! um re/istro
usado (se 'ouver) s9 para locali&ar o primeiro objeto remoto um cliente
precisa de usar. Ent%o! normalmente! que o primeiro objeto! por sua ve&
fornecem suporte espec$fico do aplicativo para encontrar outros objetos.Hor exemplo! a refer,ncia pode ser obtido como um parmetro para! ou a
partir de um valor de retorno! uma outra c'amada de mtodo remoto.
Uma ve& que um objeto remoto re/istrado no servidor! os clientes podem
procurar o objeto pelo nome! obter uma refer,ncia objeto remoto! e em
se/uida! c'amar mtodos remotos do objeto.
; c9di/o a se/uir no servidor obtm um elemento para um re/istro e! em
se/uida! utili&a o stub re/istro para li/ar o nome 6;la6 para stub do objetoremoto em que o re/istro-
-
7/23/2019 Exemplo Rmi
4/7
Re/istro Re/istro B =ocateRe/istr*./etRe/istr* ()0
re/istr*.bind (6;la6! stub)0
; mtodo esttico =ocateRe/istr*./etRe/istr*! sem ar/umentos! retorna um
stub que implementa a interface remota java.rmi.re/istr*.Re/istr* e envia
invoca"#es ao re/istro no 'ost local do servidor na porta de re/istro padr%ode M!NN. ; mtodo ent%o c'amado no re/istro stub a fim de vincular stub
do objeto remoto para o nome 6;la6 no re/istro.
Nota: A c'amada para =ocateRe/istr*./etRe/istr* simplesmente retorna
um stub apropriado para um re/istro. A c'amada n%o verifica para ver se
um re/istro est atualmente em execu"%o. >e nen'um re/istro executado
na porta GCH MNN do 'ost local quando mtodo c'amado! o servidor ir
fal'ar com um RemoteException.
Implementar o cliente
; pro/rama cliente obtm um esbo"o para o re/istro no 'ost do servidor! fa& um
lookup objeto remoto pelo nome no re/istro e! em se/uida! c'ama o sa*ello mtodo
no objeto remoto usando o topo.
Aqui est o c9di/o fonte para o cliente-
paca/e example.'ello0
java.rmi.re/istr*.=ocateRe/istr* importa"%o0
java.rmi.re/istr*.Re/istr* importa"%o0
public class Cliente 1
Cliente privado () 13
void main (>trin/ @ ar/s) 1public static
Acol'imento >trin/ B (ar/s.len/t' OM)P :ulo- ar/s @0
experimentar 1
Re/istro Re/istro B =ocateRe/istr*./etRe/istr*
('ost)0
;l stub B (;l) re/istr*.looup (6;l6)0
Resposta >trin/ B stub.sa*ello ()0
>*stem.out.println (6resposta-6 F resposta)0
3 Catc' (Exception e) 1
>*stem.err.println (6exce"%o Client-6 F e.to>trin/
())0
e.print>tacGrace ()0 3 3
-
7/23/2019 Exemplo Rmi
5/7
3
Este cliente obtm o primeiro esbo"o para o re/istro c'amando o esttico
=ocateRe/istr*./etRe/istr* mtodo com o nome do 'ost especificado na
lin'a de comando. >e nen'um nome de 'ost for especificado! ent%o nulo
usado como o nome da mquina indicando que o endere"o 'ost local deveser usado.
Em se/uida! o cliente invoca o mtodo remoto de pesquisa no topo do
Re/istro para obter o stub para o objeto remoto do re/istro do servidor.
Qinalmente! o cliente c'ama a sa*ello mtodo no stub do objeto remoto! o
que fa& com que as se/uintes a"#es para acontecer-
; tempo de execu"%o do lado do cliente abre uma conex%o com o
servidor usando o 'ost e informa"#es de porta em stub do objetoremoto e! em se/uida! seriali&a os dados de c'amadas.
; tempo de execu"%o do lado do servidor aceita a c'amada! envia a
c'amada para o objeto remoto! e seriali&a o resultado (a seq+,ncia de
resposta 6;l! mundo?6) Hara o cliente.
; tempo de execu"%o do lado do cliente recebe! deseriali&es! e
retorna o resultado para o c'amador.
A mensa/em de resposta retornado da c'amada remota no objeto remoto
ent%o impresso para >*stem.out.
Compilar os arquivos de origem
;s arquivos de ori/em para este exemplo pode ser compilado da se/uinte forma-
javac erver.java Client.java
onde DestDir o diret9rio de destino para colocar os arquivos de classe
em.
Nota:>e o servidor precisa para suportar clientes em execu"%o no pr
-
7/23/2019 Exemplo Rmi
6/7
4niciar o re/istro do 7ava R84
4nicie o servidor
Execute o cliente
4niciar o re/istro do 7ava R84
Hara iniciar o re/istro! execute o rmire/istr* comando no 'ost do servidor.
Este comando n%o produ& sa$da (quando bem sucedido) e /eralmente
executado em se/undo plano. Hara obter mais informa"#es! consulte a
documenta"%o ferramentas para rmire/istr*@>olaris! o Lindo2s.
Hor exemplo! no (tm) >istema ;peracional >olaris-
rmire/istr*
;u! em plataformas Lindo2s-
iniciar rmire/istr*
Hor padr%o! o re/istro executado na porta GCH MNN. Hara iniciar um
re/istro em uma porta diferente! especifique o nSmero da porta a partir da
lin'a de comando. Hor exemplo! para iniciar o re/istro na porta KM em
uma plataforma Lindo2s-
iniciar rmire/istr* KM
>e o re/istro ser executado em uma porta diferente de MNN! voc,
precisar especificar o nSmero da porta nas c'amadas
para=ocateRe/istr*./etRe/istr* no servidor e cliente classes. Hor exemplo!
se o re/istro est sendo executado na porta KM! neste exemplo! a c'amada
para /etRe/istr* no servidor seria-
Re/istro Re/istro B =ocateRe/istr*./etRe/istr* (KM)0
4nicie o servidor
Hara iniciar o servidor! execute o servidor de classe usando o java comando
da se/uinte forma-
:o sistema operacional >olaris-
java erver
Em plataformas Lindo2s-
iniciar java erver
http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html#51http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html#52http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html#53http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/rmiregistry.htmlhttp://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html#51http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html#52http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html#53http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/rmiregistry.html -
7/23/2019 Exemplo Rmi
7/7
onde classDir o diret9rio rai& da rvore de arquivo de classe (ver DestDir
na se"%o "Compilando os arquivos de ori/em6).
A sa$da do servidor deve ser semel'ante a este-
>ervidor pronto
; servidor permanece em execu"%o at que o processo encerrado pelo
usurio (tipicamente por matar o processo).
Execute o cliente
Uma ve& que o servidor est pronto! o cliente pode ser executado como se
se/ue-
java