• Save
Java RMI
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Java RMI

on

  • 701 views

Introdução ao Java RMI (Remote Method Invocation)

Introdução ao Java RMI (Remote Method Invocation)

Statistics

Views

Total Views
701
Views on SlideShare
700
Embed Views
1

Actions

Likes
1
Downloads
0
Comments
0

1 Embed 1

http://localhost 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Java RMI Presentation Transcript

  • 1. Universidade Presbiteriana Mackenzie   Aula  4:  Java  RMI   Prof. Ms. Daniel Arndt Alves Faculdade  de  Computação  e  Informá<ca   Computação e Informática Faculdade de Técnicas  de   Programação  Aplicada  III   Java  RMI   1  Daniel  Arndt  Alves  
  • 2. Tópicos  da  Aula   •  Problema  da  chamada  remota   de  métodos   •  Tecnologia  RMI   •  Interfaces  para  métodos  remotos   •  Stubs  e  esqueletos   •  Registros  de  métodos  remotos   Java  RMI   2  Daniel  Arndt  Alves  
  • 3. Chamada  Remota  de  Métodos   Daniel  Arndt  Alves   Java  RMI   3   class ... { String hello(){ ... } } PROCESSO   Chamada  remota   Cliente   Servidor  remoto  
  • 4. Arquiteturas  para  chamada  remota   Existem  algumas  arquiteturas  desHnadas  para   chamada  remota  de  métodos:     •  RPC  (Remote  Procedure  Call)   •  CORBA  (Common  Object  Request  Broker   Architeture)   •  JAVA  RMI  (Remote  Method  Invoca>on)     Daniel  Arndt  Alves   Java  RMI   4  
  • 5. Java  RMI   •  Arquitetura  de  acesso  a  objetos  distribuídos   suportada  pela  linguagem  Java.     •  Em  termos  de  complexidade  de  programação  e   ambiente,  é  muito  simples  construir  aplicações   RMI,  comparando-­‐se  com  RPC  e  CORBA.   •  Em  termos  de  ambiente,  exige  somente  suporte   TCP/IP  e  um  serviço  de  nomes  de  objetos   (rmiregistry),  disponilizado  gratuitamente  com  o   JDK/SDK.   Daniel  Arndt  Alves   Java  RMI   5  
  • 6. Arquitetura  Java  RMI   •  Na  realidade,  o  RMI  é  uma  interface  que   permite  a  intercomunicação  entre  objetos   Java  localizados  em  diferentes  hosts.  Cada   objeto  remoto  implementa  uma  interface   remota  que  especifica  quais  de  seus  métodos   podem  ser  invocados  remotamente  pelos   clientes.   •  Os  clientes  invocam  tais  métodos  exatamente   como  invocam  métodos  locais.   Daniel  Arndt  Alves   Java  RMI   6  
  • 7. Modelo  de  Camadas  do  RMI   Daniel  Arndt  Alves   Java  RMI   7  
  • 8. Interfaces  para  Métodos  Remotos   •  A  definição  do  serviço  remoto  é  feita  através   de  uma  interface  Java.   Daniel  Arndt  Alves   Java  RMI   8  
  • 9. Interfaces  para  Métodos  Remotos   •  O  primeiro  passo  para  disponibilizar  métodos   que  possam  ser  invocados  remotamente   consiste  na  preparação  de  uma  interface   remota  com  tais  métodos.   •  A  construção  desta  interface  pode  ser  feita   com  base  na  extensão  da  interface  Remote   do  pacote  java.rmi.   Daniel  Arndt  Alves   Java  RMI   9  
  • 10. Interfaces  para  Métodos  Remotos   •  A  arquitetura  RMI  suporta  duas  classes   implementando  a  mesma  interface:   •  Uma,  que  implementa  o  serviço  e  é   interpretada  no  servidor   •  Outra,  que  age  como  um  mecanismo  de  proxy   e  é  interpretada  no  cliente   Daniel  Arndt  Alves   Java  RMI   10  
  • 11. Interfaces  para  Métodos  Remotos   •  Um  cliente  faz  chamadas  de  métodos  ao   objeto  proxy,  RMI  envia  a  requisição  à  JVM   remota,  que  executa  o  método.   Daniel  Arndt  Alves   Java  RMI   11  
  • 12. Interfaces  para  Métodos  Remotos   •  Valores  retornados  pelo  serviço  remoto  são   enviados,  inicialmente,  ao  objeto  proxy,  que   os  repassa  para  a  aplicação  cliente.   •  Vários  servidores  podem  implementar  de   maneira  diferente  a  mesma  interface  de   acesso  ao  serviço.   Daniel  Arndt  Alves   Java  RMI   12  
  • 13. Exemplo   •  Suponha  que  se  queira  deixar  um  método   chamado  sayHello(),  que  devolve  uma   String,  disponibilizado  para  chamada  remota.   import java.rmi.*; public interface Hello extends Remote { public String sayHello() throws RemoteException; } Daniel  Arndt  Alves   Java  RMI   13  
  • 14. Implementação  do  Método  Remoto   •  Cada  classe  que  queira  disponibilizar  tal   método  remoto  precisa  implementar  a   interface  especificada  anteriormente.  Além   disto,  a  classe  precisa  extender  a  classe   UnicastRemoteObject,  que  é  uma   especialização  de  um  servidor  remoto  (classe   RemoteServer).   Daniel  Arndt  Alves   Java  RMI   14  
  • 15. Exemplo   import java.rmi.*; import java.rmi.server.*; import java.net.*; public class servidor extends UnicastRemoteObject implements Hello { /** * Construtor */ public servidor() throws RemoteException{ super(); } /** * Método remoto */ public String sayHello() throws RemoteException { return("Oi cliente"); } } Daniel  Arndt  Alves   Java  RMI   15  
  • 16. Exemplo   public static void main(String args[]){ try{ servidor serv = new servidor(); // Registra nome do servidor Naming.rebind("ServidorHello", serv); System.out.println("Servidor remoto pronto."); } catch(RemoteException e){ System.out.println("Exceção remota: " + e); } catch(MalformedURLException e){} } Daniel  Arndt  Alves   Java  RMI   16  
  • 17. Exemplo   •  A  parHr  deste  ponto,  o  objeto  chamado   ServidorHello  está  apto  a  aceitar  chamadas   remotas.   Daniel  Arndt  Alves   Java  RMI   17  
  • 18. Compilação  e  Execução  do  Servidor   •  Não  basta  apenas  compilar  e  executar  o  programa   anterior.  Toda  a  compilação  e  execução  necessita  de   um  ambiente  dado  pela  seguinte  sequência:   1.  Compilar  o  arquivo  .java   2.  Chamar  o  aplicaHvo  rmic  para  gerar  o  Stub  e  Skel   3.  AHvar  o  controlador  de  registros  (rmiregistry)   4.  Chamar  o  interpretador  com  o  servidor  compilado   Daniel  Arndt  Alves   Java  RMI   18  
  • 19. Stubs  e  Skels   •  O  cliente,  quando  invoca  remotamente  um   método,  não  conversa  diretamente  com  o  objeto   remoto,  mas  com  uma  implementação  da   interface  remota  chamada  stub,  que  é  enviada  ao   cliente.  O  stub,  por  sua  vez,  passa  a  invocação   para  a  camada  de  referência  remota.   •  Esta  invocação  é  passada  para  um  skel   (esqueleto)  ,  que  se  comunica  com  o  programa   servidor.   Daniel  Arndt  Alves   Java  RMI   19  
  • 20. Compilação  do  Exemplo  Anterior   Daniel  Arndt  Alves   Java  RMI   20   servidor.java   servidor.class   servidor_Stub.class   servidor_Skel.class   javac   rmic  
  • 21. Execução  do  Servidor   •  O  primeiro  passo  antes  de  executar  o  servidor  é   aHvar  uma  espécie  de  servidor  de  nomes  de   servidores  que  atendem  solicitações  de  métodos   remotos.  Isto  é  feito  chamando-­‐se  o  programa   rmiregistry.  Este  programa  pode  estar  ouvindo   portas  específicas,  como  por  exemplo:               % rmiregistry 2048 & •  Uma  vez  que  este  programa  está  executando,   pode-­‐se  chamar  o  interpretador  java  para  o   arquivo  servidor.class.   Daniel  Arndt  Alves   Java  RMI   21  
  • 22. Programação  do  Cliente   •  O  primeiro  passo  de  implementação  de  um   cliente  que  quer  invocar  remotamente   método  é  obter  o  stub  do  servidor  remoto.  A   localização  deste  stub  é  feita  com  o  método   lookup(endereço).   •  Este  método  devolve  uma  referência  remota   do  objeto,  através  do  envio  do  stub.     Daniel  Arndt  Alves   Java  RMI   22  
  • 23. Exemplo   import java.rmi.*; public class cliente { public static void main(String args[]){ try{ servidor serv = (servidor)Naming.lookup("rmi://localhost:2048/ ServerHello"); String retorno = serv.sayHello(); } catch(Exception e){} } } Daniel  Arndt  Alves   Java  RMI   23  
  • 24. Esquema  da  Chamada   Daniel  Arndt  Alves   Java  RMI   24   localhost   Registry   Servidor_Stub.class   Servidor_Skel.class   Servidor..class   cliente   Stub   lookup(.../Servidor)   Servidor  está  aqui   Solicitação  de  stub   Stub   sayHello()   “Oi  cliente”  
  • 25. Passagem  de  Parâmetros   •  Quando  se  passa  um  parâmetro  para  um   método  remoto,  podem  ocorrer  duas   situações:   •  Tipos  primi<vos:  RMI  faz  uma  cópia  do   parâmetro  e  a  envia  para  o  servidor.   •  Objetos:  RMI  uHliza  o  mecanismo  de   serialização  para  enviar  uma  cópia  do  objeto   para  o  servidor.   Daniel  Arndt  Alves   Java  RMI   25  
  • 26. Funcionalidades  Adicionais  do  RMI   •  É  possível  subsHtuição  dinâmica  da  interface   remota  enviada  ao  cliente   •  É  possível  o  servidor  invocar,  remotamente,   algum  serviço  do  cliente  sem  que  o  cliente   estenda  diretamente  a  classe   java.rmi.server.UnicastRemoteObject.   Daniel  Arndt  Alves   Java  RMI   26  
  • 27. Java  RMI   27  Daniel  Arndt  Alves  
  • 28. Java  RMI   28  Daniel  Arndt  Alves  
  • 29. Imagens   •  hnp://www.digitalprank.org/wp-­‐content/uploads/ 2008/03/ejb.png   •  hnp://sandersconsulHng.com/Portals/58319/images/ checklist.jpg     •  hnp://vip.cs.utsa.edu/classes/cs4393f2006/lectures/ images/overview-­‐j2eeArchitecture.gif     •  hnp://www.dave-­‐woods.co.uk/wp-­‐content/uploads/ 2010/02/screens.gif     •  hnp://www.ishopping.pk/product_images/y/423/iMac-­‐ Lion__45051_std.png     •  hnp://www.wegotserved.com/wp-­‐content/uploads/ 2011/08/MacMiniServer.jpg     Daniel  Arndt  Alves   Java  RMI   29  
  • 30. Obrigado     Daniel  Arndt  Alves   daniel.alves@mackenzie.br   Java  RMI   30  Daniel  Arndt  Alves