Download - 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
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
Objeto Servidor
Servidor Lookup
Multicast
ServiceRegistrar
Register ( )Objeto Proxy
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
Objeto Cliente
Servidor Lookup
Multicast
ServiceRegistrar
lookup ( )
Objeto Proxy
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
Objeto ClienteObjeto Proxy
Invocação local
Objeto Servidor
RMI
JVM Cliente
JVM Servidora
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: 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 ) { }
}
}
PROGRAMAÇÃO: EXEMPLO
import java.rmi.*;
public interface InterfaceServidor extends Remote {
String say_hello ( ) ;
}
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 ) { }
}
}
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