Professional Documents
Culture Documents
Introduo
Sistemas Distribudos
O sistema de Remote Method Invocation da linguagem JAVA, permite invocar mtodos de objectos que esto a correr noutra mquina virtual. O RMI fornece mecanismos para comunicao remota, entre objectos criados na linguagem Java.
b1.m1("xpto")
a1 (A)
int
b1 (B)
JVM 1
JVM 2
15-01-2012
Sistemas Distribudos
O cliente
Obtm referncias para os objectos remotos a disponibilizados pelo servidor. Evoca os mtodos dos objectos como se estes fossem locais.
O sistema RMI fornece os mecanismos que permite a comunicao entre o cliente e o servidor. Este tipo de aplicaes designam-se normalmente por Aplicaes de Objectos Distribudos ou Aplicaes distribudas.
15-01-2012
Sistemas Distribudos
Carregar os dados (serializao) e o cdigo (bytecodes) dos objectos remotos (carregamento dinmico de cdigo).
15-01-2012
Sistemas Distribudos
semelhana de uma aplicao Java tradicional, uma aplicao distribuda, que usa RMI, constituda por interfaces e classes.
Interfaces definem os mtodos Classes implementam os mtodos definidos nas interfaces e, possivelmente, mtodos adicionais.
Objectos que possuem mtodos que podem ser evocados de outras mquinas virtuais so chamados Objectos Remotos . Os objectos de uma classe tornam-se remotos se esta implementar uma interface remota. Uma interface remota tem as seguintes caractersticas:
Deriva (estende) da interface java.rmi.Remote. Cada mtodo desta interface tem que declarar na clusula de throws a excepo java.rmi.RemoteException, alm das excepes especficas de cada mtodo.
15-01-2012
Sistemas Distribudos
O sistema RMI trata de forma diferente os objectos remotos dos restantes, quando estes so passados de uma mquina virtual (JVM) para outra.
Objectos no remotos
Enviada uma cpia para a JVM destino.
Objectos remotos
enviado um objecto stub (proxy) para o objecto remoto.
Stub
a referncia local para o objecto remoto. Implementa o mesmo conjunto de interfaces remotas que o objecto remoto.
Pode ser feito uma coero (cast) do objecto stub para qualquer uma das interfaces remotas. Apenas os mtodos definidos nestas interfaces podem ser evocados pelo cliente.
Skeleton
Recebe do stub, os parmetros de entrada do mtodo. Evoca o mtodo do objecto remoto com os parmetros recebidos. Recebe os parmetros de retorno do objecto remoto e retorna-os (serializao) ao stub.
15-01-2012
Sistemas Distribudos
A B_Stub B_Skel
(1)
b1_stub.m1("xpto")
a1 (A)
(2) b1_skel.m1("xpto")
b1_stub (B_Stub)
(3) b1.m1("xpto")
b1_skel (B_Skel)
(6) int
(5) int
(4) int
b1 (B)
JVM 1
JVM 2
15-01-2012
Sistemas Distribudos
Para gerar uma aplicao distribuda com o RMI, devem ser seguidos os seguintes passos:
1. Definir e implementar os componentes distribudos (remotos)
i. ii. Definir as interfaces remotas. Implementar as classes dos objectos remotos
Estas classes implementam uma ou mais interfaces remotas, e podem implementar outras interfaces (no remotas) que apenas tero visibilidade local. Implementar clientes. Os clientes podem ser implementados a partir do momento que as interfaces remotas estiverem definidas e compiladas.
2.
3. 4. 5.
15-01-2012
Sistemas 1. Definir e implementar componentes distribudos Distribudos i. Definio das interfaces Remotas
package serverInterfaces.remote; import java.rmi.Remote; import java.rmi.RemoteException; import java.math.BigInteger;
public interface Operator extends Remote { BigInteger add(BigInteger b1, BigInteger b2) throws RemoteException; BigInteger subtract(BigInteger b1, BigInteger b2) throws RemoteException; BigInteger divide(BigInteger b1, BigInteger b2) throws RemoteException; BigInteger multiply(BigInteger b1, BigInteger b2) throws RemoteException; }
15-01-2012
Sistemas Distribudos
15-01-2012
Sistemas Distribudos
15-01-2012
Sistemas Distribudos
As classes stub vo, numa primeira verso, ser disponibilizadas ao servidor atravs do protocolo file na directoria c:\ServerOperator
15-01-2012
4. Implementao do cliente
Sistemas Distribudos
public class OperatorClient { public static void main(String args[]) { System.setSecurityManager(new RMISecurityManager()); String name = "//localhost/OperatorServer"; try { Operator o = (Operator)Naming.lookup (name); BigInteger b1 = new BigInteger("1234567"); BigInteger b2 = new BigInteger("1"); BigInteger b3 = o.add(b1, b2); System.out.println("b3: " + b3); } catch( Exception e) { System.out.println(e); e.printStackTrace(); } } }
15-01-2012
Sistemas Distribudos
Esta aplicao o servio onde os objectos remotos se vo registar, e onde os clientes vo pedir referncias para os objectos remotos. Esta aplicao deve ser iniciada sem a varivel de ambiente CLASSPATH definida.
rmiregistry ii. O cdigo de registo do objecto servidor j est implementado no mtodo main da classe dos objecto servidor. C:\> C:\OperatorServer> java Djava.rmi.server.codebase=file:/c:\OperatorServer/ Djava.security.policy=java.policy OperatorServer iii. Iniciar o cliente C:\> C:\OperatorClient> java Djava.security.policy=java.policy OperatorClient
15-01-2012 Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt
Ficheiros java.policy
Sistemas Distribudos
15-01-2012