invocation - cic/unbjhcf/mybooks/itjava/slides/javarmi-24slides.pdfservidor rmi servidor de classes...

24
JavaTM RMI - Remote Method Invocation Java e Engenharia de Software Orientada a Objetos por Jorge H. C. Fernandes ([email protected]) CESAR-DI-UFPE Julho de 1999

Upload: others

Post on 13-Oct-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

JavaTM RMI - Remote Method InvocationJava e Engenharia de Software Orientada a Objetos

por Jorge H. C. Fernandes ([email protected])CESAR-DI-UFPEJulho de 1999

Page 2: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Objetivos desta Aula

�Mostrar o modelo de serialização/desserialicaçãode objetos Java

�Descrever o modelo computacional de RMI em Java

�Criar pequenos exemplos de uso de RMI�Integrar o uso de RMI com o applet

BancoDeJava

Page 3: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Referências

�Java RMI Tutorial�Página Java RMI

�http://java.sun.com/products/jdk/rmi/index.html

�Especificações Java RMI e Serialization

Page 4: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Especificação da API

� java.rmi�Principais classes

� java.rmi.activation �Ativação de objetos sob demanda

� java.rmi.dgc �Classes e interfaces para coletor de lixo distribuído

� java.rmi.registry �Registro de objetos

� java.rmi.server �Implementação básica de servidores RMI

Page 5: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Java RMI

�Serialização�Visão Geral: Objetos Distribuídos com RMI

�Registro de Objetos em um Servidor�Localização de Objetos Remotamente

Localizados�Comunicação com Objetos Remotos�Carga de Novas Classes

�Criando Aplicações Distribuídas com RMI

Page 6: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Serialização/Deserialização

�Serialização�Processo de gerar uma cadeia de bytes que

representa o estado de um objeto

�Deserialização�Processo de ler uma cadeia de bytes que

contém um objeto serializado e recriar em memória um novo objeto com o mesmo estado do objeto que foi serializado

Page 7: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Exercício: Serialização/Deserialização

Page 8: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

StubB

O Modelo Computacional RMI

HOST

StubA

StubA

registry

ClassServer

ServerA

StubB

RemoteB

ServerB

RemoteA

Naming

Remote

Remote

StubAStubB

RemoteB RemoteA

StubA

StubA

X

X

X

ServerA

ServerB

X

SerializableCliente RMI C1

C1

Naming

Cliente RMI C2

Remote

RemoteA

C2

Page 9: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Transferência de Código via RMI (Fonte: Java Tutorial, 1999)

ClienteRMI registry

ServidorRMI

Servidorde Classes

(http, ftp, etc)

1 - Objeto Servidor registra-se com um nome (String) conhecido pelo cliente

2 - Cliente busca no hostum proxy para o objeto remoto, através do nome

3 - O registry retorna uma instância do proxy

4 - Cliente busca a classedo proxy (stub)

5 - Servidor de classes(normalmente um servidor http) retorna a classe do proxy (stub)

Page 10: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Criando Aplicações com RMI

�Definindo interfaces entre servidor e clientes

�Implementando o servidor�Compilando o servidor e gerando tocos�Disponibilizando interface e tocos através

de um servidor http�Implementando e compilando um cliente�Executando o cliente

Page 11: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Definindo interfaces entre servidor e clientes

import java.rmi.Remote;import java.rmi.RemoteException;

public interface Hello extends Remote {String sayHello() throws RemoteException;

}

Page 12: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Implementando Servidor (1/3)import java.rmi.Naming;import java.rmi.RemoteException;import java.rmi.RMISecurityManager;import java.rmi.server.UnicastRemoteObject;import java.net.InetAddress;import java.net.UnknownHostException;

public class HelloImpl extends UnicastRemoteObjectimplements Hello {

public HelloImpl() throws RemoteException;public String sayHello() throws RemoteException;public static void main(String args[]);

}

Page 13: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Implementando Servidor (2/3)...public class HelloImpl extends UnicastRemoteObject

implements Hello {public HelloImpl() throws RemoteException { super();

} public String sayHello() { String localHost = "Unknown Host!";try {

localHost = InetAddress.getLocalHost().toString(); } catch ( UnknownHostException uhe) {}return "Hello World!"+"\nYou are receiving text from "+localHost;

}

Page 14: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Implementando Servidor (3/3)public static void main(String args[]) {// Cria e instala um security manager if (System.getSecurityManager() == null) {

System.setSecurityManager(new RMISecurityManager());}try {

HelloImpl obj = new HelloImpl();// Liga este objeto ao nome "HelloServer”Naming.rebind("HelloServer", obj);System.out.println("HelloServer bound in registry");

} catch (Exception e) {System.out.println("HelloImpl err: " + e.getMessage());e.printStackTrace();

}}

Page 15: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Compilando o Servidor e Gerando os tocos

>javac HelloImpl.java

>dir

HelloImpl.java

HelloImpl.class

Hello.class

>rmic -d . HelloImpl

>dir

HelloImpl.java

HelloImpl.class

Hello.class

HelloImpl_Stub.class

HelloImpl_Skel.class

Page 16: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Disponibilizando interface e tocos através de um servidor>cp Hello.class HelloImpl_*.class

~jhcf/public_html/rmi

>

Page 17: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Implementando um cliente RMI (Applet) 1/3

import java.applet.Applet;import java.awt.Graphics;import java.rmi.Naming;import java.rmi.RemoteException;public class HelloApplet extends Applet {String message = "blank";// "obj" is the identifier that we'll use to refer// to the remote object that implements the "Hello”// interfaceHello obj = null;public void init() {...}public void paint(Graphics g) {...}

}

Page 18: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Implementando um cliente RMI (2/3)

public void init() {try {obj = (Hello)Naming.lookup("//" +

getCodeBase().getHost() +":1099/HelloServer");message = obj.sayHello();

} catch (Exception e) {System.out.println("HelloApplet exception: " + e.getMessage());e.printStackTrace();

}}public void paint(Graphics g) {

g.drawString(message, 25, 50);}

}

Page 19: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Implementando um cliente RMI (3/3)

HelloApplet.html<HTML> <title>Hello World Applet com RMI</title><center><h1> Hello World Applet com RMI </h1></center> A Mensagem Vinda do HelloServer é: <p> <applet code="HelloApplet”

width=500 height=120>

</applet> </HTML>

Page 20: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Compilando e instalando o Cliente

>javac HelloApplet.java

>dir

HelloApplet.java

Hello.class

HelloApplet.html

>dir

HelloApplet.java

HelloApplet.class

Hello.class

HelloApplet.html

>

>cp HelloApplet.*Hello.class~/public_html/jhcf/rmi

>

Page 21: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Executando o servidor e o cliente

�Servidor>setenv CLASSPATH>cd>rmiregistry &>source .cshrc>java -Djava.rmi.server.codebase=http://www.di.ufpe.br/~jhcf/rmi/-Djava.security.policy=policy HelloImpl

�Cliente>appletviewer http://~jhcf/rmi/HelloApplet.html

Page 22: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Exercícios: Hello World

� Crie e compile a interface Hello� Crie o servidor HelloImpl� Compile o servidor, gere os stubs e os coloque na área

publica do servidor de classes� Crie o cliente (applet e página HTML) e o coloque em

uma área pública do servidor de classes� Execute o servidor HelloImpl na mesma máquina do

registry e do servidor de classes� Execute o applet em uma máquina qualquer

Page 23: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])

Um Exemplo mais Complexo: O Banco de Java

�Applet�~jhcf/JavaDeployment/bancov1

�Servidor RMI�~jhcf/ JavaDeployment/ServerBancoRMI

Page 24: Invocation - CIC/UnBjhcf/MyBooks/itjava/slides/JavaRMI-24slides.pdfServidor RMI Servidor de Classes (http, ftp, etc) 1 - Objeto Servidor registra-se com um nome (String) conhecido

FIM