Professional Documents
Culture Documents
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 as
excees especficas do aplicativo.
Aqui a definio de interface para a interface remota utilizada neste
exemplo, example.hello.Hello. Declara apenas um mtodo,sayHello, que
retorna uma seqncia de caracteres para o chamador:
package example.hello;
import java.rmi.Remote ;
import java.rmi.RemoteException ;
interface public Hello extend remoto {
void sayHello () throws RemoteException;
}
Invocaes de mtodo remoto pode falhar em muitas maneiras adicionais
em comparao com invocaes de mtodos locais (tais como problemas
de comunicao relacionados rede e problemas de servidor), e mtodos
remotos ir relatar tais falhas, lanando uma java.rmi.RemoteException.
Implementar o servidor
A classe "server", neste contexto, a classe que tem um principal mtodo que cria
uma instncia da implementao do objeto remoto, exporta o objeto remoto, e em
seguida, liga essa instncia para um nome em um registro Java RMI (rmiregistry). A
classe que contm esse principal mtodo poderia ser a prpria classe de
implementao, ou de outra classe inteiramente.
Neste exemplo, o principal mtodo para o servidor definida na classe
servidor que tambm implementa a interface remota Ol. O servidor
principal mtodo faz o seguinte:
Criar e exportar um objeto remoto
Registre o objeto remoto com um registro de Java RMI
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry ;
importjava.rmi.RemoteException ;
import classe java.rmi.server.UnicastRemoteObject;
public class Server implements Hello {
public Server() {}
public String sayHello () {
return "Ol, mundo!";
}
void main (args String []) {public static
experimentar {
Server obj = new Server ();
Hello stub = (Hello)
UnicastRemoteObject.exportObject (obj, 0);
// Vincular stub do objeto remoto no registro
Registry registro = LocateRegistry.getRegistry ();
registro.bind ("Ol", stub);
System.err.println ("Servidor pronto");
} Catch (Exception e) {
System.err.println ("Erro Server:" + e.toString());
e.printStackTrace ();
}
}
}
A classe de implementao do servidor implementa a interface remota
Hello, proporcionando uma implementao para o mtodo remoto
sayHello.
Nota: Uma classe pode definir mtodos no especificados na interface
remota, mas esses mtodos s pode ser invocada dentro da mquina virtual
executando o servio e no podem ser invocados remotamente.
Criar e exportar um objeto remoto
O principal mtodo de o servidor precisa para criar o objeto remoto que
fornece o servio. Alm disso, o objeto remoto deve ser exportado para o
tempo de execuo Java RMI para que ele pode receber chamadas remotas
de entrada. Isto pode ser feito como se segue:
Server obj = new Server ();
Implementar o cliente
O programa cliente obtm um esboo para o registro no host do servidor, faz um
lookup objeto remoto pelo nome no registro e, em seguida, chama o sayHello mtodo
no objeto remoto usando o topo.
Aqui est o cdigo fonte para o cliente:
package example.hello;
java.rmi.registry.LocateRegistry importao;
java.rmi.registry.Registry importao;
public class Cliente {
Cliente privado () {}
void main (String [] args) {public static
Acolhimento String = (args.length <1)? Nulo: args [0];
experimentar {
Registro Registro = LocateRegistry.getRegistry
(host);
Ol stub = (Ol) registry.lookup ("Ol");
Resposta String = stub.sayHello ();
System.out.println ("resposta:" + resposta);
} Catch (Exception e) {
System.err.println ("exceo Client:" + e.toString
());
e.printStackTrace ();
}
}
}
Este cliente obtm o primeiro esboo para o registro chamando o esttico
LocateRegistry.getRegistry mtodo com o nome do host especificado na
linha de comando. Se nenhum nome de host for especificado, ento nulo
usado como o nome da mquina indicando que o endereo host local deve
ser usado.
Em seguida, o cliente invoca o mtodo remoto de pesquisa no topo do
Registro para obter o stub para o objeto remoto do registro do servidor.
Finalmente, o cliente chama a sayHello mtodo no stub do objeto remoto, o
que faz com que as seguintes aes para acontecer:
O tempo de execuo do lado do cliente abre uma conexo com o
servidor usando o host e informaes de porta em stub do objeto
remoto e, em seguida, serializa os dados de chamadas.
O tempo de execuo do lado do servidor aceita a chamada, envia a
chamada para o objeto remoto, e serializa o resultado (a seqncia de
resposta "Ol, mundo!") Para o cliente.
O tempo de execuo do lado do cliente recebe, deserializes, e
retorna o resultado para o chamador.
A mensagem de resposta retornado da chamada remota no objeto remoto
ento impresso para System.out.