Exemplo Rmi

download Exemplo Rmi

of 7

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