Escolar Documentos
Profissional Documentos
Cultura Documentos
MC704
Aplicaes distribudas
Aplicao distribuda: conjunto de processos que cooperam entre si para prover um servio ou realizar uma computao
normalmente processos precisam invocar operaes em processos remotos para realizar o servio/computao
Modelos de programao
RPC - Chamada de procedimento remoto
Extenso de chamada de procedimento local
Middleware
Software que fornece uma abstrao de mais alto nvel que os servios bsicos do sistema operacional ou de rede
Isola aplicao de detalhes como protocolos de comunicao, sistema operacional, hardware; s vezes, isola at de linguagem de programao.
Interface
Aplicao dividida em mdulos que se comunicam.
A interface de um mdulo define os meios de acesso ao mdulo Enquanto interface no muda, acesso pode ser feito da mesma maneira, mesmo que a implementao do mdulo mude IDLs - linguagens de definio de interfaces
RMI - projeto
Semntica da invocao
Talvez
Falhas no so consideradas
RMI - implementao
Proxy - criado para cada objeto remoto referenciado
Implementa transparncia
Local para o invocador, oculta detalhes da comunicao remota
RMI - implementao
Esqueleto - implementa os mtodos da interface remota
Desempacota requisio, chama mtodo local, espera completar, envia resposta.
Proxy, Despachante e Esqueleto so gerados pelo compilador RMI java a partir de um objeto remoto
RMIRegistry
Uma instncia para cada computador servidor que tenha objetos remotos Argumento na forma //nomeComputador:porta/nomeObjeto
void rebind (String name, Remote obj) Usado para servidor registrar (vincular) objeto pelo nome. void bind (String name, Remote obj) Mesmo que acima. Se nome j est sendo usado, levanta exceo. void unbind (String name, Remote obj) Remove vnculo. Remote lookup(String name) Usado por clientes para procurar objeto pelo nome. Uma referncia remota retornada. String [] list() Retorna um array de strings com os nomes registrados.
Interfaces remotas
package examples.RMIShape; import java.rmi.*; import java.util.Vector; public interface Shape extends Remote { int getVersion() throws RemoteException; GraphicalObject getAllState() throws RemoteException; }
package examples.RMIShape; import java.rmi.*; import java.util.Vector; public interface ShapeList extends Remote { Shape newShape(GraphicalObject g) throws RemoteException; Vector allShapes()throws RemoteException; int getVersion() throws RemoteException; }
Classe ShapeListServer
package examples.RMIShape; import java.rmi.*; //import java.rmi.server.UnicastRemoteObject; public class ShapeListServer { public static void main(String args[]){ System.setSecurityManager(new RMISecurityManager()); System.out.println("Main OK"); try { ShapeList aShapelist = new ShapeListServant(); System.out.println("After create"); Naming.rebind("ShapeList", aShapelist); System.out.println("ShapeList server ready"); }catch(Exception e) { System.out.println("ShapeList server main " + e.getMessage()); } } }
Classe ShapeListServant
package examples.RMIShape; import java.rmi.*; import java.rmi.server.UnicastRemoteObject; import java.util.Vector; public class ShapeListServant extends UnicastRemoteObject implements ShapeList{ private Vector theList; private int version; public ShapeListServant()throws RemoteException{ theList = new Vector(); version = 0; } public Shape newShape(GraphicalObject g) throws RemoteException{ version++; Shape s = new ShapeServant( g, version); theList.addElement(s); return s; } public Vector allShapes()throws RemoteException{ return theList; } public int getVersion() throws RemoteException{ return version; } }
Tutorial
http://java.sun.com/docs/books/tutorial/rmi/