jpalmeida-pp-2016-01-aula04[rmi] - nemo · 2018. 7. 9. · jpalmeida-pp-2016-01-aula04[rmi].ppt...
TRANSCRIPT
29/3/16
1
Processamento Paralelo Middleware Orientado a
Objetos
Prof. João Paulo A. Almeida ([email protected])
Aplicações distribuídas: interação entre partes
Rede B
Rede C Rede A
Sistema operacional é a única infraestrutura para interação
Applications
Request reply protocol
External data representation
Operating System
Applications
Middleware é adicionado
Applications
Middleware layers Request reply protocol
External data representation
Operating System
RMI
Camadas da arquitetura
Applications, services
Computer &
Platform
Mi ddleware
OS: kernel,libraries & servers
network hardware
OS1
Computer & network hardware
Node 1 Node 2
Processes, threads,communication, .. .
OS2Processes, threads,communication, .. .
Fonte: Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Pearson Education 2005 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4
© Pearson Education 2005
(c) RPC/RMI (between computers)
User 1 User 2
Thread 1 Network Thread 2
Kernel 2 Kernel 1
29/3/16
2
Aplicações distribuídas: interação entre partes Middleware Orientado a Objetos • Sistema distribuído é uma série de objetos
interagindo • Baseado em protocolo de troca de mensagens
invisível para o programador • O objetivo é permitir deixar objetos residirem
em qualquer nó da rede para compartilhar recursos
Client - Server
client
Object reference = reference to object interface
server
Interface specified in IDL
op (args) result
Client – Server invocation
ORB
client
proxy
server op (args) result
Java RMI – Remote Method Invocation • Todos objetos em Java • Interfaces descritas em Java • Terminologia:
– Objeto cliente: objeto que invoca objetos remotos – Objeto remoto: objeto que pode ser acessado por
objetos em outros nós (ou outra JVM) – Objeto remoto pode ser cliente de outro
– Cliente: o processo que invoca métodos em objetos remotos
– Servidor: processo que roda o objeto remoto
Conceitos fundamentais • Separação explícita de interface e
implementação • Em Java: uso do construto “interface”
• Uso de referência a objeto remoto • Esta referência tem que ser encontrada
client object
Object reference = reference to object interface
remote object
Interface specified in Java
op (args) result
29/3/16
3
Distribuição de referência através de registry • Clientes obtém referências para objetos remotos
através do registry que é um servidor de nomes. – Os objetos tem que conhecer o registry
client object
remote object
registry resolução registro / binding
uso
Exemplo local /* Hello.java */ public class Hello { public String sayHello() {
return "Hello, world!"; } } /* Client.java */ public class Client {
public static void main() { Hello h = new Hello(); System.out.println(h.sayHello()); }
}
Exemplo local c/ interface explícita /* Hello.java */ public interface Hello { String sayHello() } /* Server.java */ public class Server implements Hello { public String sayHello() {
return "Hello, world!"; } } /* Client.java */ public class Client {
public static void main() { Hello h = new Server(); System.out.println(h.sayHello()); }
}
Criação local: quem invoca tem ref p/ obj /* Hello.java */ public interface Hello { String sayHello() } /* Server.java */ public class Server implements Hello { public String sayHello() {
return "Hello, world!"; } } /* Client.java */ public class Client {
public static void main() { Hello h = new Server(); System.out.println(h.sayHello()); }
}
Exemplo: Interface remota (Hello.java) // interface para uso local apenas public interface Hello {
String sayHello(); } // interface que permite uso remoto public interface Hello extends java.rmi.Remote {
String sayHello() throws java.rmi.RemoteException;
}
29/3/16
4
Outro exemplo de interface que permite uso remoto (note os 2 tipos de exceções) public interface BankAccount extends
java.rmi.Remote { public void deposit(float amount) throws java.rmi.RemoteException; public void withdraw(float amount) throws OverdrawnException,
java.rmi.RemoteException; public float getBalance() throws java.rmi.RemoteException;
}
Servidor (Server.java) import java.rmi.*; // … public class Server implements Hello {
public String sayHello() { return "Hello, world!"; }
public static void main(String args[]) { try { Server obj = new Server(); Hello objref = (Hello) UnicastRemoteObject.exportObject(obj,2000); // Bind the remote object in the registry Registry registry = LocateRegistry.getRegistry(); // opcional: host registry.bind("Hello", objref); System.err.println("Server ready"); } catch (Exception e) { System.err.println("Server exception: " + e.toString()); e.printStackTrace(); } } }
Cliente (Client.java) package example.hello; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class Client {
public static void main(String[] args) { String host = (args.length < 1) ? null : args[0]; try { Registry registry = LocateRegistry.getRegistry(host); Hello stub = (Hello) registry.lookup("Hello"); String response = stub.sayHello(); System.out.println("response: " + response); } catch (Exception e) { System.err.println("Client exception: " + e.toString()); e.printStackTrace(); }
} }
Por debaixo dos panos • Quando o cliente chama sayHello no “stub” do
objeto remoto: – O stub do cliente abre uma conexão com a
máquina onde está rodando o servidor usando a informação no stub e serializa os parâmetros
– O stub do lado do servidor aceita a conexão, envia o chamado ao objeto remoto e serializa o resultado (a string "Hello, world!") que é enviado ao cliente
– O stub do cliente recebe o resultado, deserialza e retorna o resultado para o cliente
Configuração de execução • For example, on the Solaris(tm) Operating
System: – rmiregistry &
• Or, on Windows platforms: – start rmiregistry
Servidor Cliente
Registry Name binding resolução
uso
java Server java Client 192.168.1.4
192.168.1.4 (port 1099)
192.168.1.3 192.168.1.4
29/3/16
5
Semântica das invocações • Para o cliente, chamadas a métodos locais são
iguais a chamadas a métodos remotos. Mas: – chamadas locais: passagem de parâmetros por
referência – chamadas remotas: passagem por valor se objeto
convencional (copia o objeto) ou por referência se for objeto remoto
• Classes que são passadas como parâmetro em Java RMI devem implementar java.io.Serializable. Isto permite que a JVM faça a serialização do estado dos objetos de forma que ele possa ser transferido através da rede. – Mudançasfeitasnoobjetodoladodoservidornãosãorefle6dasdoladodocliente.
http://www.ime.usp.br/~kon/MAC5759/aulas/Aula10.html
Passagem de parâmetros:semântica
Medidas contra falhas
Fault tolerance measures Invocation semantics
Retransmit request message
Duplicate filtering
Re-execute procedure or retransmit reply
No
Yes
Yes
Not applicable
No
Yes
Not applicable
Re-execute procedure
Retransmit reply At-most-once
At-least-once
Maybe
Tutorial • http://java.sun.com/j2se/1.5.0/docs/guide/rmi/
hello/hello-world.html#1
Leitura p/ discussão • P.A. Bernstein. Middleware. Communications of
the ACM, Vol. 39, No. 2, February 1996, 86-98. • Tragam esse texto impresso na próxima aula!