rmi java remote method invocation em java. introdução java remote method invocation (java rmi)...
TRANSCRIPT
![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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/1.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/2.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/3.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/4.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/5.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/6.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/7.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/8.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/9.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/10.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/11.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/12.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/13.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/14.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/15.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/16.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/17.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/18.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/19.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/20.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/21.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062310/570638641a28abb823901614/html5/thumbnails/22.jpg)
FIM