RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI)...

22
RMI Java Remote Method Invocation em Java

Transcript of RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI)...

Page 1: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

RMI Java

Remote Method Invocation em Java

Page 2: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Introdução Java Remote Method Invocation

(Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

RMI usa serialização de objetos para encapsular e desencapsular parâmetros suportando polimorfismo.

Page 3: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Interface Remota Um objeto remoto é uma instância de uma classe

que implementa uma interface remota. A interface remota declara cada um dos métodos

que podem ser chamados remotamente. A interface remota dever ser declarada como

“public”. Ela deve extender a interface “java.rmi.Remote”. Cada método deve declarar

“java.rmi.RemoteException” na sua cláusula “throws”.

O tipo de dado de qualquer objeto remoto que é passado como um argumento ou retornado deve ser declarado.

Page 4: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Exemplo: package examples.hello;

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

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

}

Page 5: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Objeto Remoto Declara que implementa uma interface

remota. Implementação de seu construtor. Implementação do método que pode ser

chamado remotamente. Uma classe “servidor”, que tem um método

principal que cria uma instância do objeto remoto e que registra o objeto no serviço de nomes “rmiregistry”. A classe que implementa o método main pode ser a própria classe do objeto.

Page 6: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Implementando uma Interface Remota A classe promete que irá prover o corpo

dos métodos para cada um das assinaturas declaradas na interface. Os métodos são publicos ou abstratos.

Exemplo de uma declaração:public class HelloImpl extends

UnicastRemoteObject implements Hello {

Page 7: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Definir um construtor Mesmas funções de um construtor

normal; Exportação do objeto:

UnicastRemoteObject.exportObject a partir do construtor da classe;

Construtor throws “remoteException

Page 8: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Exemplo public HelloImpl() throws RemoteException {

super(); } O método super invoca o construtor de

java.rmi.server.UnicastRemoteObject, que exporta o objeto remoto.

O construtor usa java.rmi.RemoteException, pois pode ocorrer uma falha durante a exportação do objeto.

Page 9: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Prover implementação métodos Todos os métodos que constam na

Interface remota devem ser implementados:

public String sayHello() throws RemoteException { return "Hello World!";

} Obs: java.io.Serializable

Page 10: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

O gerenciador de segurança O “servidor” deverá instalar um

geranciador de segurança:if (System.getSecurityManager() == null)

{ System.setSecurityManager(new RMISecurityManager());

} Garante que as classes carregadas

não vão realizar operações indesejadas.

Page 11: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Criando instâncias do objeto remoto

HelloImpl obj = new HelloImpl();

Depois de criado ele está pronto para receber chamadas remotas.

Page 12: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Registrar o objeto Para puder utilizar um objeto remoto o

cliente deverá obter sua referência RMI prover um “Registry” que permite

publicar o objeto através de um endereço no formato "//host/objectname“ (serviço de nomes)

Exemplo:Naming.rebind("//myhost/HelloServer", obj);

Page 13: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Exemplo Servidorpackage examples.hello;

import java.rmi.Naming;import java.rmi.RemoteException;import java.rmi.RMISecurityManager;import java.rmi.server.UnicastRemoteObject;public class HelloImpl extends UnicastRemoteObject implements Hello { public HelloImpl() throws RemoteException {super(); } public String sayHello() {return "Hello World!"; }

Page 14: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Exemplo Servidor (continuação)

public static void main(String args[]) {// Create and install a security managerif (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager());}try { HelloImpl obj = new HelloImpl(); // Bind this object instance to the name "HelloServer" Naming.rebind("//myhost/HelloServer", obj); System.out.println("HelloServer bound in registry");} catch (Exception e) { System.out.println("HelloImpl err: " + e.getMessage()); e.printStackTrace();} }}

Page 15: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Localizando o objeto O cliente utiliza o serviço provido

pelo Registry para localizar o objeto.

Exemplo:

obj = (Hello) Naming.lookup("//hostname/HelloServer");

Page 16: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Exemplo de um clientepackage examples.hello;import java.applet.Applet;import java.awt.Graphics;import java.rmi.Naming;import java.rmi.RemoteException;public class HelloApplet extends

Applet { String message = "blank"; Hello obj = null; public void init() {

try { obj = (Hello)Naming.lookup("//" + getCodeBase().getHost() + "/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 17: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Compilar as classes Verificar CLASSPATH Compilar os códigos fontes:

javac -d $HOME/public_html/myclasses Hello.java HelloImpl.java HelloApplet.java

Page 18: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Gerando Stubs e Skeletons Rmic – cria os stubs e os skeletons. Cria arquivos de classes nos formatos:

MyImpl_Skel.class MyImpl_Stub.class

Exemplo:rmic -d $HOME/public_html/myclasses

examples.hello.HelloImpl -d indica o diretório raiz das classes

Page 19: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Iniciando o “registry”

rmiregistry &

start rmiregistry

start rmiregistry 2001

Page 20: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Iniciando o Servidorjava

-Djava.rmi.server.codebase=http://myhost/~myusrname/myclasses/ -Djava.security.policy=$HOME/mysrc/policy examples.hello.HelloImpl

Onde: -Djava.rmi.server.codebase=http://myhost/~myusrname/

myclasses/ - determina a localização dos stubs e skeletons

-Djava.security.policy=$HOME/mysrc/policy – fornece a localização do arquivo com a política de segurança

Page 21: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

Atividade Elaborar no laboratório um Servidor

simples e um Cliente utilizando o RMI Java como suporte para a comunicação:

http://java.sun.com/j2se/1.4.2/docs/guide/rmi/index.html

Page 22: RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.

FIM