Escolar Documentos
Profissional Documentos
Cultura Documentos
Java RMI
Sockets - reviso
2
Uma porta de um canal de comunicao que permite a um processo executando num computador enviar/receber mensagens para/de outro processo. Usado para representar uma conexo entre um cliente e um servidor Interface entre o processo da aplicao e a camada de transporte Cada processo identificado por uma porta e um ip Principais tipos de Sockets:
guardada em algum tipo de estrutura formada por uma sequncia de bytes transformada em bytes antes da transmisso remontada ao formato original depois da recepo Possui diferentes tipificaes ASCII Unicode Big-Endian (byte mais significativo vem primeiro) Little-endian
Inteiros:
Objetos Distribudos
A mensagem de invocao deve conter uma referncia ao objeto remoto que ter seu mtodo invocado Independncia dos detalhes dos protocolos de comunicao, SO e hardware
A Interface especifica os mtodos e variveis que podem ser acessados por outros mdulos de programa
Define os tipos de parmetros de entrada/sada e como passar os parmetros Esconde toda a lgica de informao, sendo acessado apenas pela Interface (impedindo acesso direto s variveis) Pode-se alterar a lgica implementada, bastando manter a mesma Interface
Objetos Distribudos
Alocar objetos em processos distintos e executados no mesmo computador ou em computadores distintos que podem receber invocaes locais ou remotas: Locais: entre objetos do mesmo processo Remotas: entre objetos de diferentes processos (objetos remoto), atravs da Interface Remota
Java RMI
Remote Method Invocation Orientado objetos Comunicao remota Componentes Interface Remota - Especifica os mtodos de um objeto que
so disponveis para invocao remota por outros objetos
objetos por nome e permitir aos clientes descobrirem as referncias aos objetos remotos antes de fazer a invocao
8
Classe remota que implementa a interface RMIregistry - Usado pelos servidores para registrar seus Stubs e Skeletons
Java RMI
Tratar excees Servidor de Nomes Os mtodos remotos podem receber e retornar objetos Estes objetos devem implementar a interface Serializable
Fluxo RMI
Java RMI
O cliente chama o mtodo remoto usando um Stub O Stub ento envia uma mensagem para o Skeleton na mquina remota, contento os argumentos da chamada ao mtodo remoto O Skeleton empacota a resposta e envia ela de volta para o stub na mquina do cliente
Stubs e Skeletons
Cliente A B Stub Servidor B
JVM 1
JVM 2
Interface: CalcInt.java
CalcInt.java
import java.rmi.*; public interface CalcInt extends Remote{ int somar(int x, int y) throws RemoteException; int subtrair(int x, int y) throws RemoteException; }
ServCalc.java
public class ServCalc extends UnicastRemoteObject implements CalcInt { public ServCalc() throws RemoteException { super(); RegistryImpl impl = new RegistryImpl(1099); } public int somar(int x, int y) { return x + y; } public int subtrair(int x, int y) { return x - y; } public static void main(String args[]) throws RemoteException, MalformedURLException { ServCalc servicos = new ServCalc(); Naming.rebind("rmi://127.0.0.1:1099/calc", servicos); System.out.println("Servidor registrado"); } }
ClienteCalc.java
public class ClienteCalc implements Serializable { public static void main(String args[]) { try { CalcInt metodos = (CalcInt) Naming.lookup("rmi://127.0.0.1:1099/calc"); int resSoma = metodos.somar(11, 20); int resSubtrair = metodos.subtrair(7, 3); System.out.println("Soma: " + resSoma + " Subtrao: " + resSubtrair); } catch (Exception e) { System.out.println("Erro: Mensagem: " + e.getMessage()); e.printStackTrace(); } } }