Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Java RMI
Introdução
RPC vs RMI
Objectivos do Java RMI
Aplicações RMI
Arquitectura Java RMI
Interfaces remotas, Stubs, Esqueletos, Interfaces
remotas e Classes, Localização de Servidores
Como usar o Java RMI: step-by-step
Passagem de Parâmetros e Retorno
Segurança RMI
Introdução
Os Java sockets possibilitam um nível de comunicação muito flexível. No
entanto, é necessário que o cliente e o servidor estabeleçam os
protocolos ao nível da aplicação de modo a codificar e a descodificar as
mensagens.
Invocação Local
OperacoesMat obj=new OperacoesMat();
System.out.println("O produto de 100 com 10 é: "+obj.produto(100, 10));
Invocação Remota
OperacoesMat obj=(OperacoesMat)Naming.lookup("//127.0.0.1/OpMath");
System.out.println("O produto de 100 com 10 é: "+obj.produto(100, 10));
2) RMI
Cliente RMI 1)
3)
RMI Servidor
RMI
Visão simplificada
Cliente RMI
Servidor RMI
lookup bind
(”impressora") (”impressora")
Rmiregistry
Skeleton
Stub
Servidor RMI
“João”
Skeleton
Stub
Servidor RMI
3 4
“João”
“João”
Interface Remota
Implementa Implementa
Interfaces Classes
RemoteServer RemoteException
UnicastRemoteObject
Classe RemoteException:
É a super-classe das excepções geradas pelo runtime RMI durante a
invocação de métodos remotos.
Esta excepção é gerada quando ocorre uma falha na invocação remota
dos métodos:
Falhas na comunicação.
Erros de protocolo.
(InterfaceObj.java)
(InterfaceObjImpl.java) (Servidor.java)
Implementar o
Cliente Javac
(InterfaceObjImpl.class)
javac
ContaBanco.java ContaBanco.class
rmiregistry 6234)
No Linux/Unix
rmiregistry 6234)
8 - Lançar o servidor e o cliente RMI
No directório das classes do servidor usar o comando java
java ServidorContaBanco
Lado Cliente
java ClienteContaBanco <name>
Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011
Passagem de Parâmetros e Retorno
Em Java RMI os parâmetros de um método são
assumidos como parâmetros de entrada
não é necessário especificar a direcção
parâmetro de saída
Regra geral, todo o objecto serializable – i.e., que
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
Ficheiro security.policy
grant {
permission java.security.AllPermission;
// Other options:
// permission java.net.SocketPermission "127.0.0.1:1024-", "accept, connect, listen, resolve";
// permission java.net.SocketPermission "localhost:1024-", "accept, connect, listen, resolve”;
// permission java.net.SocketPermission "*:1024-65535", "connect,accept";
// permission java.net.SocketPermission "*:80", "connect”;
// permission java.net.SocketPermission "*:1024-65535", "connect,accept";
// permission java.io.FilePermission "c:\\home\\ann\\public_html\\classes\\-", "read";
// permission java.io.FilePermission "c:\\home\\jones\\public_html\\classes\\-", "read";
};