Académique Documents
Professionnel Documents
Culture Documents
Contedo Programtico
Serializao de Objetos Objetos distribudos: Java RMI
Referncia:
captulo 12 do livro do Fernando Albuquerque, TCP/IP Internet programao de sistemas distribudos HTML, Javascript e Java, Axcel Books
Aplicaes
Desenvolvimento de um quadro de avisos
fevereiro de 07
Serializao de Objetos
Stream java transmitem cadeias de bytes Java possibilita que objetos serializveis sejam transmitidos via streams Um objeto serializvel se implementa a interface Serializable Na serializao os atributos de um objeto so convertidos numa seqncia de bytes e na desserializao o objeto recuperado a partir da seqncia de bytes.
fevereiro de 07 Raul Ceretta Nunes 3
void setTipo(String t) { tipo = t; } String getTipo() { return tipo; } void setNumero(short n) { numero = n; } short getNumero() { return numero; }
fevereiro de 07
fevereiro de 07
Carregar bytecodes de objetos mveis - como o RMI permite que objetos remotos sejam passados como parmetros num mtodo, ele fornece os mecanismos necessrios para carregar o cdigo dos objetos remotos (serializao/desserializao implcitas).
fevereiro de 07 Raul Ceretta Nunes 9
Stubs
Quando um objeto local invoca um mtodo num objeto remoto, o stub fica responsvel por enviar a chamada ao mtodo para o objeto remoto. Passos do stub quando invocado:
1. iniciar conexo com a mquina virtual que contm o objeto remoto. 2. escrever e transmitir os parmetros para a mquina virtual remota. 3. esperar pelos resultados da invocao do mtodo. fevereiro de 4. ler os resultados retornados. 07 Raul Ceretta Nunes 10 5. retornar os valores ao objeto que executou a
O stub esconde a serializao dos parmetros e toda a comunicao a nvel de rede com o objetivo de simplificar o mecanismo de realizao da invocao do mtodo. Resultado: TRANSPARNCIA
fevereiro de 07
11
Stub e Skeleton
Cliente Servidor
Stub
Skeleton
fevereiro de 07
13
stub
skeleton
Stub (lado cliente) Transforma parmetros (serializados) Envia requisio pela rede (sockets); Esqueleto (lado servidor) Recebe a requisio; desserializa os parmetros; e chama o mtodo no objeto remoto (local para ele).
fevereiro de 07 Raul Ceretta Nunes Compilador RMI (rmic) gera stub e skeleton 14
Caractersticas de Implementao
Para ser um objeto remoto, um objeto deve:
implementar uma interface que extende a interface java.rmi.Remote, que no possui definio de mtodos derivar da classe java.rmi.server.UnicastRemoteObject que gerencia as chamadas dos mtodos remotos e habilita a exportao do objeto. (UnicastRemoteObject utiliza TCP) Caso objeto no possa herdar, ele pode ser exportado invocando o mtodo exportObject().
fevereiro de 07 Raul Ceretta Nunes 15
Caractersticas de Implementao
Exemplo:
public interface IObjetoRemoto extends Remote public class ObjetoRemoto extends java.rmi.server.UnicastRemoteObject implements IObjetoRemoto ou public interface ObjetoRemoto extends Remote public class ObjetoRemotoImpl extends java.rmi.server.UnicastRemoteObject implements ObjetoRemoto
fevereiro de 07 Raul Ceretta Nunes 16
Caractersticas de Implementao
Passagem de parmetros
Um objeto, para ser passado por valor para um mtodo remoto, deve implementar java.io.Serializable.
public class MeuObjeto implements Serializable
Um objeto, para ser passado por referncia, deve extender a sua interface java.rmi.Remote.
interface IObjetoRemoto extends Remote
fevereiro de 07 Raul Ceretta Nunes 17
Caractersticas de Implementao
Invocao de mtodos
Os mtodos que podem ser invocados em um objeto remoto devem ser obrigatoriamente pblicos estar declarados na interface remota que esse objeto implementa obrigatoriamente tratar a exceo java.rmi.RemoteException.
public int inc() throws java.rmi.RemoteException
(esta exceo tambm deve ser colocado na interface e na aplicao que implementa o mtodo)
fevereiro de 07 Raul Ceretta Nunes 18
Caractersticas de Implementao
Localizao de objetos distribudos
Duas alternativas:
Receber referncia como um valor retornado por um mtodo Consultar um servio de registro chamado registry
O servio usado tanto por clientes como por servidores O servio mantm um banco de dados de todos os objetos remotos Quando o cliente deseja usar um objeto remoto, ele questiona o servio de registro rmi usando o nome do objeto
fevereiro de 07 Raul Ceretta Nunes 19
Caractersticas de Implementao
Localizao de objetos distribudos (cont.)
Servidor registra o objeto usando
Naming.rebind(rmi://localhost:2020/nomeServid or, servidor) Protocolo, host e porta so opcionais.
(Default = rmi://localhost:1099/)
fevereiro de 07
20
Caractersticas de Implementao
Localizao de objetos distribudos (cont.)
Antes de utilizar o servio necessrio ativ-lo: Executando o comando
c:\> rmiregistry
fevereiro de 07
21
Caractersticas de Implementao
LocateRegistry.createRegistry(port)
Permite criar o rmiregistry na inicializao do programa, no sendo necessria sua execuo em separado.
LocateRegistry.getRegistry()
fevereiro de 07
23
fevereiro de 07
24
fevereiro de 07
25
fevereiro de 07
26
fevereiro de 07
27
fevereiro de 07
28
fevereiro de 07
29
fevereiro de 07
30
fevereiro de 07
31
deve ser utilizado para que o cliente possa fazer o download de classes serializveis que no estejam em seu CLASSPATH.
fevereiro de 07 Raul Ceretta Nunes 32
fevereiro de 07
33
Comunicao Cliente/Servidor
(servidor atuando como cliente)
Retorna resultado
Retorna dado
fevereiro de 07
34
Expresso de busca
Nvel de dados
35
RMI Callback
Outra ocasio que faz servidor parecer cliente. Callback uma chamada assncrona normalmente utilizada para informar sobre a ocorrncia de um evento de interesse. Por exemplo: um cliente deseja saber se outro cliente realizou alguma atualizao no valor do contador mantido pelo objeto remoto.
Incrementa x
servidor
Servidor avisa alterao em x
fevereiro de 07 Raul Ceretta Nunes
Cliente 1 Cliente 2
36
RMI Callback
Callback uma tcnica tipicamente utilizada quando a aplicao cliente requer um retorno do servidor mas no quer permanecer bloqueado aguardando a resposta. Atravs dessa tcnica, o servidor obtm uma referncia para o cliente de forma que pode invocar remotamente um mtodo do objeto cliente. Assim, quando a execuo do servio solicitado concluda, o servidor pode notificar o cliente atravs da invocao do mtodo disponibilizado pelo cliente para uso remoto.
fevereiro de 07 Raul Ceretta Nunes 37
fevereiro de 07
38
Problema de permisso para conexes foi resolvido adicionando -Djava.security.policy=rmi.policy aos parmetros de execuo, onde rmi.policy pode ser:
grant{ permission java.security.AllPermission; };
<NomeDaClasse>
39
Exemplo-CallBack
fevereiro de 07
40
fevereiro de 07
41
fevereiro de 07
42
O Prximo Passo Implementar os Mtodos das Interfaces. No exemplo, os mtodos sero implementados dentro da classe cliente e servidor
fevereiro de 07
43
Criando o Servidor
1- No devemos esquecer que onde os mtodos da interface so implementados, a classe deve herdar a classe: java.rmi.UnicastRemoteObject 2- A classe tambm deve implementar a interface com o comando implements. 3- Instalao de um gerenciador de segurana. RMISecurityManager() 4- Criar o objeto remoto [classe que implementa o mtodo] Tserver server = new Tserver() 5- Registrar o objeto.
//evita a utilizao do rmiregistry LocateRegistry.createRegistry(Registry.REGISTRY_PORT); Naming.rebind("rmi://"+args[0]+"/TServer",server);
fevereiro de 07 Raul Ceretta Nunes 44
fevereiro de 07
45
Criando o Cliente
Os passos 1, 2 e 3 so executados no cliente tambm. 4- Criar o objeto remoto [da interface do servidor]
IServer server = (IServer) Naming.lookup("URL");
5- Recuperar o objeto
Naming.lookup("URL")
fevereiro de 07
46
fevereiro de 07
47
fevereiro de 07
48
fevereiro de 07
49
Consideraes Finais
Positivo
Facilidade de implementao e manuteno por ser orientado objetos. Outro aspecto positivo a portabilidade, pois se tratando de cdigo totalmente escrito em Java, qualquer computador que possua uma JVM pode rodar estes programas.
Negativo
Ineficincia da serializao, pois atributos private e static no so serializados. A necessidade de extender java.rmi.Remote para um objeto ser passado como referncia uma limitao de Java em no permitir a herana mltipla. Assim, um objeto remoto no pode herdar de outro objeto.
fevereiro de 07 Raul Ceretta Nunes 50