A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java."— Transcrição da apresentação:

1 RMI Java Remote Method Invocation em Java

2 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.

3 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.

4 Exemplo: package examples.hello; import java.rmi.Remote; import java.rmi.RemoteException; public interface Hello extends Remote { String sayHello() throws RemoteException; }

5 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.

6 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 {

7 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

8 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.

9 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

10 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.

11 Criando instâncias do objeto remoto HelloImpl obj = new HelloImpl(); Depois de criado ele está pronto para receber chamadas remotas.

12 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);

13 Exemplo Servidor package 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!"; }

14 Exemplo Servidor (continuação) public static void main(String args[]) { // Create and install a security manager if (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(); }

15 Localizando o objeto O cliente utiliza o serviço provido pelo Registry para localizar o objeto. Exemplo: obj = (Hello) Naming.lookup("//hostname/HelloServer");

16 Exemplo de um cliente package 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); }

17 Compilar as classes Verificar CLASSPATH Compilar os códigos fontes: javac -d $HOME/public_html/myclasses Hello.java HelloImpl.java HelloApplet.java

18 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

19 Iniciando o “registry” rmiregistry & start rmiregistry start rmiregistry 2001

20 Iniciando o Servidor java -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/myclasse s/ - 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

21 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/gui de/rmi/index.html http://java.sun.com/j2se/1.4.2/docs/gui de/rmi/index.html

22 FIM


Carregar ppt "RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java."

Apresentações semelhantes


Anúncios Google