APRESENTAÇÃO - Professor Diovani

Propaganda
Sistemas distribuídos
JINI como Middleware para Sistemas
Distribuídos
Prof. Diovani Milhorim
CONCEITOS BÁSICOS

Middleware para Sistemas Distribuídos

Solução portável baseada em Java

Arquitetura baseada em serviços, sem distinção entre
software ou hardware

Extende a perspectiva de uma única JVM para uma
rede (ou federação) de JVMs
PERCEPÇÃO DO USUÁRIO

Dispositivos “JINI Enabled” ao serem plugados
na rede tornam-se serviços disponíveis

Rede plug-and-play: dispensam administração
e configuração prévia de clientes e servidores

Serviços descentralizados oferecidos por
federações
PERCEPÇÃO DO PROGRAMADOR

Middleware que oferece suporte a registro e busca de
objetos que implementem a interface desejada

Permite a criação de federações de serviços

Não é necessário aprender RMI para programar o
objeto cliente; comunicação e protocolo são abstraídos
por um objeto Proxy do servidor
COMPONENTES OFERECIDOS

Infra-Estrutura: Descoberta (Discovery) e Busca
(lookup) de serviços

Programação: Leasing, Eventos Distribuídos e
Comunicação entre objetos através de RMI

Serviços: Segurança e Transaction Managers
INFRA-ESTRUTURA: DISCOVERY

Objeto servidor descobre Servidores Lookup
disparando uma requisição multicast (ou unicast caso
o Servidor Lookup for conhecido)

Servidores lookups disponíveis respondem a
requisição enviando um objeto ServiceRegistrar

ServiceRegistrar é o 'passaporte' para a utilização do
Servidor Lookup
INFRA-ESTRUTURA: JOIN

O ServiceRegistrar contém uma referência para o
Servidor Lookup e uma API para o acoplamento do
Objeto Servidor ao Servidor Lookup

Objeto acopla-se ao servidor invocando o método
register( ) oferecido pelo ServiceRegistrar, que
serializa e envia para o servidor um objeto proxy
INFRA-ESTRUTURA: Register
Multicast
ServiceRegistrar
Register ( )
Objeto
Proxy
Objeto Servidor
Servidor Lookup
INFRA-ESTRUTURA: DISCOVERY

Objeto cliente descobre Servidores Lookup disparando
uma requisição multicast

Servidores Lookup disponíveis respondem a
requisição enviando um objeto ServiceRegistrar

O ServiceRegistrar contém uma referência para o
Servidor Lookup e uma API para a busca de serviços
disponíveis
INFRA-ESTRUTURA: LOOKUP

Objeto cliente invoca o método lookup( ) oferecido
pelo objeto ServiceRegistrar para localizar o serviço
desejado

O servidor retorna um objeto proxy do serviço, que
permite invocações RMI ao objeto servidor

O objeto cliente invoca métodos do objeto servidor
como se estivessem na mesma JVM
INFRA-ESTRUTURA: LOOKUP
Multicast
ServiceRegistrar
lookup ( )
Objeto Cliente
Objeto
Proxy
Servidor Lookup
INFRA-ESTRUTURA: PROXY

O objeto Proxy deve ser escrito em java; porém o
objeto servidor pode ser escrito em outra linguagem e
encapsulado através de JNI

Se encarrega de traduzir as invocações de métodos
realizadas pelo cliente em chamadas RMI ao objeto
servidor

Abstrai o protocolo de comunicação
INFRA-ESTRUTURA: PROXY
JVM Servidora
Invocação local
Objeto Cliente
RMI
Objeto
Proxy
JVM Cliente
Objeto Servidor
PROGRAMAÇÃO: LEASING

Leases são fornecidos periodicamente pelo objeto
servidor para garantir que ainda está disponível

Caso o Servidor Lookup não receba leases periódicos,
o objeto proxy do servidor é apagado

Permite que a federação detecte falhas nos serviços e
as contorne redirecionando clientes para outros
servidores disponíveis
PROGRAMAÇÃO: EVENTOS

Objetos precisam ser notificados sobre mudanças nos
serviços da federação

JINI utiliza eventos distribuídos (RemoteEvent) para
fazer notificações assíncronas

Não há garantia da entrega do evento

Objetos possuem um RemoteEventListener que pode
delegar o tratamento a terceiros
PROGRAMAÇÃO: TRANSAÇÕES

Transações com commit de 2 fases gerenciadas por
um Transaction Manager

Transaction Managers são serviços como quaisquer
outros de uma federação

Caso deseje iniciar uma transação, o cliente localiza
um serviço Transaction Manager e os demais serviços
que desejar
PROGRAMAÇÃO: FACILIDADES

Sun oferece o JINI Starter Kit; sua implementação da
especificação 2.0 do JINI

JINI Starter Kit oferece uma implementação do
Servidor Lookup e das classes necessárias para
desenvolvimento (ServiceRegistrar, etc.)

Extensa documentação e exemplos de códigos
PROGRAMAÇÃO: EXEMPLO
public class Cliente {
public static void main ( String[] args ) {
Entry[] aeAttributes;
LookupLocator lookup;
ServiceRegistrar registrar;
ServiceTemplate template;
InterfaceServidor myServerInterface;
try {
// Procura Servidor Lookup
lookup = new LookupLocator("jini://" + args[0]);
// Requesita ServiceRegistrar
registrar = lookup.getRegistrar ( );
// Pesquisa pelo serviço "Servidor"
aeAttributes = new Entry[1];
aeAttributes[0] = new Name ( "Servidor" );
template = new ServiceTemplate ( null, null, aeAttributes );
myServerInterface = ( InterfaceServidor ) registrar.lookup( template );
if ( myServerInterface instanceof InterfaceServidor ) {
System.out.println (myServerInterface.say_hello ( ) );
}
} catch ( Exception e ) { }
}
}
PROGRAMAÇÃO: EXEMPLO
import java.rmi.*;
public interface InterfaceServidor extends Remote {
String say_hello ( ) ;
}
PROGRAMAÇÃO: EXEMPLO
public class Servidor extends UnicastRemoteObject implements InterfaceServidor, ServiceIDListener, Serializable {
public Servidor() throws RemoteException { super ( ); }
public String say_hello ( ) { return "Hello World!!!"; }
public void serviceIDNotify ( ServiceID serviceid ) { System.out.println ( "ID do Serviço: " + serviceid ); }
public static void main (String [ ] args) {
Servidor ss;
LookupLocator lookup;
Entry [ ] aeAttributes;
JoinManager joinmanager;
ServiceRegistrar registrar;
try {
System.setSecurityManager ( new RMISecurityManager ( ) );
aeAttributes = new Entry[1];
aeAttributes[0] = new Name("Servidor");
ss = new Servidor ( );
joinmanager = new JoinManager (ss, aeAttributes, ss, null, new LeaseRenewalManager ( ) );
lookup = new LookupLocator ( "jini://" + args[0] );
registrar = lookup.getRegistrar ( );
try { Thread.sleep ( 2000 ); } catch ( Exception e ) { }
} catch ( Exception e ) { }
}
}
PROGRAMAÇÃO: INCA X

Ferramenta IDE para desenvolvimento completo de
serviços e clientes

Compilação e execução integrada

Possibilita ativação seletiva dos serviços de
infraestrutura graficamente

Versão gratuita (community edition)
PROGRAMAÇÃO: INCA X
PROGRAMAÇÃO: INCA X
Download