Rmi - Tecjorge

Propaganda
RMI – Remote Method Invocation


Mecanismo de Invocação de métodos
em um sistema de objetos distribuídos;
Exemplos:
Java RMI
 Java RMI – IIOP


Internet Inter-Orb Protocol
Corba
 DCOM

Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Remote Method Invocation




Mecanismo de Invocação de métodos para a
linguagem Java;
Suporta a invocação automática de objetos;
Permite carregamento dinâmico de classes;
Componentes:



Linguagem de definição de interface: Java;
Servidor de nomes: rmiregistry
Compilador usado: rmic
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Remote Method Invocation

Stubs e Skeletons
Objeto
Cliente
Objeto
remoto
stub
skeleton
os skeleton´s só são gerados pelo compilador java 1.4 e anterior, os
superiores não geram. Os próprios stub´s fazem os dois papéis
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Projeto e Compilação de
aplicação remota

Passos





Definição da interface
Implementação e
compilação da interface
Implementação e
compilação do Cliente
Geração dos Sutub´s
pelo compilador
Saídas




Interface.java
Server.java, server.class
Client.java, client.class
Server-skeleton.calss,
client-sutb.class
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Execução da Aplicação
Remota

Passos






Inicialização do servidor
de nomes
Inicialização do servidor
Servidor exporta
interface
Inicialização do cliente
Cliente importa
interface
Comandos





rmiregistry
java server
naming.rebind(serviço)
java client
naming.lookup(serviço)
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Visão Geral
serviço de nomes
(rmiregistry)
Obtenção de
referência da
interface
Exportação
de interface
Interface remota
objeto
remoto
objeto
cliente
Invocação de
método remoto
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Compilando rmic

Gera os clientes-stubs e server-skeletons (java1.4)


Cada classe que implementa uma interface remota.
Exem:


rmic HelloImpl (.class arquivo)
Ele cria os arquivos


HelloImpl_Skel.class (servidor – apenas java1.4)
HelloImpl_Stub.class (Cliente (Cliente e Servidor))
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Passagem de parâmetro

Objeto não remoto




Deve implementar interface java.io.Serializable
Objetos cujas instâncias podem ser copiadas entre
espaço de endereçamento diferentes.
Cópia passada por valor (como parâmetro ou valor de
retorno)
Objeto remoto



Deve implementar interface java.rmi.Remote
Objeto cujas instâncias podem ser usadas remotamente
Referência do objeto é passado (como parâmetro ou
valor de retorno)  Corresponde ao seu stub
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Interfaces e Classes RMI
Interface
Classes
Remote
Activatable
RemoteObject
IOException
RemoteServer
RemoteException
InicastRemoteObject
Implementação
Extensão
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Exemplo:
Impressão de uma mensagem
em um servidor

Será criado :

Interface:


Servidor:


ServidorInt.java
Servidor.java
Cliente:

Cliente.java
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Exemplo:
Impressão de uma mensagem
em um servidor

Interface: ServidorInt.java
import java.rmi.*;
public interface ServidorInt extends Remote {
void imprimeMensagem (String mensagem) throws RemoteException;
}
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Exemplo:
Impressão de uma mensagem
em um servidor

Programa: Servidor.java
import java.rmi.*;
import java.remi.server.*;
public class Servidor extends UnicastRemoteObject implements ServidorInt{
public Servidor() throws RemoteException{
super();
};
public void imprimeMensagem(String mensagem){
System.out.println(“Mensagem enviada é : ” + mensagem);
}
public sataic void main (String args[]){
try {
Servidor s = new Servidor();
Naming.rebind (“servidor”, s);
System.out.println(“Servidor resgistrado”);
} catch (Exception e){
System.out.println(“Erro ” + e.getMessage());
e.printStactTrace();
}
}
}
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Exemplo:
Impressão de uma mensagem
em um servidor

Programa: Cliente.java
import java.rmi.*;
import java.io.*;
public class Cliente implements Serializable{
public sataic void main (String args[]){
try {
ServidorInt s = (Servidor) Naming.lookup(“servidor”);
s.imprimeMensagem(“Oi pessoal”);
} catch (Exception e){
System.out.println(“Erro :” + e.getMessage());
e.printStactTrace();
}
}
}
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Exemplo:
Impressão de uma mensagem
em um servidor

Processo de criação da aplicação

Compilar os arquivos


javac ServidorInt.java Servidor.java Cliente.java
Geração do stub e skeleton -> (java1.4)

rmic Servidor


Ativação do serviço de nomes


Gera as classes Servidor_Stub.class e Servidor_Skel.class
Rmiregistry
Ativação das aplicações


java Servidor
java Cliente
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Coleta de Lixo (Garbage Collection)


Processo de destruição automática de objetos não
mais acessados por clientes;
Baseado na contagem de referências ao objeto
servidor



Uma referência seria uma conexão estabelecida entre o
cliente e o servidor
O cliente adquire o leasing da referência por um
período de tempo e deve renova-lo
Se o servidor falha, deve-se renovar a referência.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Carregamento dinâmico de classes


Baseado na anotação de classes durante a
serialização.
A anotação indica de onde conseguir as classes
objeto
cliente
Servidor de
Classes do
cliente
Classe MinhaClasse
http://200.17.144.50:9000
objeto
remoto
http
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Ativação de objeto Remoto


Evita o consumo de CPU por objetos inativos
Suporta referências persistentes de objetos
ativador
objeto
cliente
stub
3 Passa referência
1
4
2
ativa
objeto
ativo
objeto
inativo
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Security Manager

Todos os programas que usam RMI devem
instalar um módulo de segurança para:




Carregar objetos passados como parâmetros;
Valores retornados ou exceções.
Garantia de que o código carregado obedece à
requisitos de segurança.
RMISecurityManager
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Exemplo:
Impressão de uma mensagem
em um servidor

Programa: Cliente.java com Segurança
import java.rmi.*;
import java.io.*;
public class Cliente implements Serializable{
public sataic void main (String args[]){
if (System.getSecurityManager() == null) {
System.setSecurityManager( new RMISecurityManager() );
}
try {
ServidorInt s = (Servidor) Naming.lookup(“servidor”);
s.imprimeMensagem(“Oi pessoal”);
} catch (Exception e){
System.out.println(“Erro :” + e.getMessage());
e.printStactTrace();
}
}
}
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
RMI – Bibiografia


http://java.sun.com
Java
Remote
Method
Specification na tutoriais.
INvocation
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
Download