JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

23
JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos

Transcript of JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

Page 1: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

JINI como Middleware para Sistemas Distribuídos

Prof. Diovani Milhorim

Sistemas distribuídos

Page 2: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

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

Page 3: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

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

Page 4: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

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

Page 5: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

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

Page 6: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

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

Page 7: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

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

Page 8: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

INFRA-ESTRUTURA: Register

Objeto Servidor

Servidor Lookup

Multicast

ServiceRegistrar

Register ( )Objeto Proxy

Page 9: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

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

Page 10: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

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

Page 11: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

INFRA-ESTRUTURA: LOOKUP

Objeto Cliente

Servidor Lookup

Multicast

ServiceRegistrar

lookup ( )

Objeto Proxy

Page 12: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

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

Page 13: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

INFRA-ESTRUTURA: PROXY

Objeto ClienteObjeto Proxy

Invocação local

Objeto Servidor

RMI

JVM Cliente

JVM Servidora

Page 14: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

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

Page 15: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

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

Page 16: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

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

Page 17: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

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

Page 18: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

PROGRAMAÇÃO: EXEMPLOpublic class Cliente {

public static void main ( String[] args ) {

Entry[] aeAttributes;LookupLocator lookup;ServiceRegistrar registrar;ServiceTemplate template;InterfaceServidor myServerInterface;

try {

// Procura Servidor Lookuplookup = new LookupLocator("jini://" + args[0]);

// Requesita ServiceRegistrarregistrar = 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 ) { }

}

}

Page 19: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

PROGRAMAÇÃO: EXEMPLO

import java.rmi.*;

public interface InterfaceServidor extends Remote {

String say_hello ( ) ;

}

Page 20: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

PROGRAMAÇÃO: EXEMPLOpublic 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 ) { }

}

}

Page 21: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

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)

Page 22: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

PROGRAMAÇÃO: INCA X

Page 23: JINI como Middleware para Sistemas Distribuídos Prof. Diovani Milhorim Sistemas distribuídos.

PROGRAMAÇÃO: INCA X