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