Escola Superior de Tecnologia de Castelo Branco

Disciplina de Sistemas Flexíveis de Fabrico – Março 2006

 

AMBIENTE DE COMPUTAÇÃO JINI: FUNCIONALIDADES E ARQUITECTURA DO SISTEMA

 

António Afonso, nº 177/01, aafonso@areadeservico.com

Ricardo Antunes, nº 160/01, ric_antunes@areadeservico.comm

 

http://www.jini.areadeservico.com

 

 

 


Abstract

 

In today’s world of networks, it´s very important that flexibility and adaptability are some of the most important qualities in a network. In some of them, this qualities are of the most importance due to the multitude of users, services and other networks that use them. To help construct and maintain these dynamic networks, as well as offer new functionalities, several architectures where created, and between them the JINI architecture emerged as one of the most important of them.

 

 

  1. Introdução aos sistemas distribuidos

 

Um sistema distribuído consiste em múltiplos computadores, independentes uns dos outros, mas interligados através de uma rede, utilizados para realizar computação paralela, ou seja, serem todos usados para chegar a um objectivo comum, como realizar uma determinada tarefa.

Dentro destes sistemas, o tipo de hardware, software, linguagens de programação e sistema operativo não necessita de ser igual entre os computadores, permitindo um maior dinamismo na realização das tarefas, com o uso das vantagens inerentes a cada componente.

 

 

  1. Introdução à arquitectura JINI

 

A arquitectura JINI é um middleware, criado pela Sun Microsystems em 1999, utilizado para construir sistemas distribuídos, recorrendo a linguagem JAVA. Ele utiliza os mecanismos desta linguagem, para poder oferecer um modo “plug and play” para a rede, onde novos serviços, utilizadores e/ou periféricos se podem ligar e ficar imediatamente prontos para ser utilizados, sem ser necessário recorrer a instalações ou configurações específicas, tanto de software como de hardware.

 

  1. Descrição da arquitectura

 

É uma arquitectura que oferece uma infra-estrutura flexível, altamente adaptativa às mudanças que permite criar sistemas distribuídos dinâmicos, escaláveis e evolutivos.

 

Permite que uma aplicação, rede, serviço, utilizador ou periférico possa anunciar a sua presença na rede e qualquer outro cliente que já está ligado (que, novamente, pode ser uma aplicação, rede, serviço, utilizador ou periférico) pode requerer a sua utilização, sem que seja necessário instalar ou configurar o que quer que seja.

 

Como foi criada recorrendo à linguagem JAVA, a arquitectura JINI usufrui de todas as funcionalidades e vantagens, como o JRMI (Java Remote Method Invocation) e sockets, a ideia de “garbage collector” e a programação orientada a objectos. Mas também herda as suas desvantagens, como a baixa performance em termos de velocidade, quando em comparação com outras arquitecturas. Basicamente, a arquitectura JINI implementa a máquina virtual da linguagem JAVA a toda a rede.

 

Apesar da arquitectura ter sido escrita em linguagem JAVA, nem os serviços nem os clientes necessitam de estar baseados nesta linguagem, devido a utilização da tecnologia CORBA (Common Object Request Broker Architecture).

 

É também uma arquitectura livre, disponibilizada gratuitamente pela Sun Microsystems, podendo ser utilizada por qualquer pessoa, podendo estas contribuir para a sua actualização e optimização.

 

 

  1. Especificações

 

A arquitectura JINI possuiu uma série de especificações que assumem que qualquer aspecto do sistema pode mudar sem aviso prévio. Então oferecem serviços de design e de desenvolvimento com os mecanismos necessários para criar sistemas que o permitam.

 

As especificações descrevem:

 

·   Mecanismos que descobrem se algum serviço é iniciado e que permitem aos clientes encontrar e conectar-se a esses serviços quando e como necessário;

 

·   Um modelo de programação que estende o modelo JAVA à rede para coordenar e para observar e corrigir o seu comportamento, como na existência de falhas;

 

·   Serviços chave, como memória partilhada e serviços que gerem as conexões na rede;

 

 

  1. Exemplos de utilização

 

Possíveis exemplos da utilização da arquitectura JINI:

 

1.        Uma nova impressora pode ser ligada a uma rede e anunciar a sua presença e capacidades. Um cliente dessa mesma rede pode então usar a impressora sem ter que configurar ou instalar qualquer software;

 

2.        Uma máquina fotográfica digital pode ser ligada a uma rede e fornecer ao utilizador desta uma interface que não só permite tirar fotos, como verificar e informar se existem impressoras na rede prontas para imprimir as fotos;

 

3.        Um ficheiro de configuração que é copiado e modificado nos computadores pode ser colocado num serviço na rede e ser apanhado pelos computadores que dele necessitem, reduzindo os custos e o trabalho da manutenção.

 

4.        Os serviços podem anunciar na rede qualquer mudança de estado que tenha acontecido na rede e quem estiver a “escutar”, nomeadamente administradores do sistema, podem tomar nota do que ocorreu e tomar as medidas necessárias.

 

 

 

  1. Conceitos importantes

 

Para perceber melhor como funciona a arquitectura JINI, existem conceitos que são importantes de ter em conta.

 

 

Federação

 

É o nome dado ao sistema distribuído constituído pela rede e por todos os componentes e utilizadores que a constituem. Quando um componente ou utilizador se liga ao sistema ele torna-se “federado”.

 

 

Java Remote Method Invocation (JRMI)

 

O Java Remote Method Invocation (Java RMI) permite criar aplicações distribuídas baseadas na linguagem JAVA, nas quais os métodos de objectos JAVA remotos podem ser invocados por outras máquinas virtuais JAVA, incluindo de outros utilizadores. O RMI suporta totalmente o polimorfismo orientado a objectos.

 

Basicamente, o RMI é uma extensão em linguagem JAVA para os mecanismos de chamadas a procedimentos remotos, que permite não só que sejam transferidos dados de objecto para objecto dentro da rede, como podem ser transferidos objectos inteiros, inclusive o seu código. Grande parte da simplicidade da arquitectura JINI é devida a esta habilidade de movimentar código na rede numa forma encapsulada como um objecto.

 

Naturalmente, a comunicação entre serviços é conseguida recorrendo a este RMI. A infra-estrutura que suporta a comunicação entre serviços não é um serviço que é descoberto e usado mas sim uma parte da arquitectura JINI.

 

Em conclusão, o RMI oferece mecanismos de encontrar, activar e fazer “garbage collect” em grupos de objectos.

 

Segurança

 

O design do modelo de segurança da tecnologia JINI é construído nas noções de um “principal” e uma ACL (Access Control List, ou em português lista de controlo de acessos). Os serviços na arquitectura JINI são acedidos em substituição à entidade “principal”, que geralmente encontra o caminho de volta ao utilizador do sistema. Os próprios serviços podem pedir acesso a outros serviços baseados na identidade do objecto que o implementa. Se o acesso ao serviço é permitido ou não depende dos conteúdos da lista de controlo de acessos que está associada ao objecto.

 

Transacções

 

Uma série de operações, tanto implementadas por um único serviço ou por vários, podem ser associados a uma transacção. A interface de transacções da arquitectura JINI oferece um protocolo necessário apenas para as coordenar. O modo como as transacções são implementadas, é deixado ao critério dos serviços.

 

 

Eventos

 

A arquitectura JINI suporta eventos distribuídos. Um objecto pode permitir que outros objectos ou utilizadores registem o interesse nos seus eventos e são posteriormente notificados da ocorrência desse evento.

 

 

  1. Componentes de um Sistema Jini

 

Os componentes de um sistema JINI podem ser segmentados em três categorias distintas: Infra-estrutura, Modelo de Programação, e Serviços.

Neste capítulo vamos abordar um pouco a ligação entre eles.

A infra-estrutura é um conjunto de componentes que permite construir um sistema federado JINI. Já os serviços são considerados entidades dentro de uma federação JINI. Por seu lado, o modelo de programação é um conjunto de interfaces que permitem a implementação de serviços fiáveis. Incluem aqueles serviços que fazem parte da infra-estrutura bem como aqueles que se irão juntar à federação.

Estas três categorias são completamente distintas e cada uma não implica a outra, de tal modo que podemos construir um sistema JINI com algumas das suas funcionalidades, sem que suporte efectivamente estas três categorias.

O poder de um sistema JINI baseia-se no facto de ser um arquitectura bastante particular e o modelo de programação descrito se basear na noção de serviço.

Ao segmentar estas três categorias permite-nos produzir um código standard que, com mínimas alterações, consegue tirar o máximo partido da infra-estrutura JINI implementada. Claro está que este modelo de programação deverá basear-se no modelo integrado das três categorias acima descritas.

Um sistema JINI pode ser visto como uma extensão de rede da infra-estrutura, do modelo de programação e dos serviços, permitindo tirar o máximo partido da tecnologia Java.

A figura seguinte ilustra como está segmentado um sistema JINI.

Figura 1 – Comparação entre o modelo de programação JAVA e o mesmo modelo mas associado à arquitectura JINI

 

 

Infra-Estrutura

 

A infra-estrutura da tecnologia JINI define o núcleo base do JINI que inclui o seguinte:

 

– Um sistema distribuído e seguro, integrado no RMI do Java.

– Os protocolos Discovery e Join, virados para o serviço, que permitem a descoberta, a associação e a divulgação / anúncio de um serviço para o resto da federação.

– Lookup service é o mecanismo central do sistema e oferece o ponto de contacto entre o sistema e os utilizadores.

 

Os protocolos Discovery e Join definem a maneira de como um serviço de qualquer tipo se torna parte de um sistema JINI.

 

O RMI define a linguagem base de comunicação entre os serviços existentes no sistema. Num sistema distribuído seguro, a sua implementação define os privilégios que os serviços têm no seu próprio domínio, bem como os privilégios que podem usufruir dos outros serviços existentes na rede.

 

 

Modelo de Programação

 

A infra-estrutura permite o uso de um modelo de programação bem como faz uso desse mesmo modelo.

 

As entradas existentes no lookup service são “alugadas”, permitindo que este serviço reflicta exactamente os serviços existentes actualmente no sistema JINI.

Quando um serviço deixa de estar disponível ou quando se regista no lookup service, o respectivo evento é registado e são enviadas notificações para os serviços existentes de modo a haver um sincronismo entre o sistema.

A infra-estrutura e os serviços que a usam são entidades computacionais que existem no ambiente físico do sistema JINI.

No entanto os serviços também constituem o conjunto de interfaces que definem os protocolos de comunicação que podem ser usados pelos serviços e infra-estrutura para comunicarem entre si.

Estas interfaces, em conjunto, implementam uma extensão para sistemas distribuídos do modelo da linguagem de programação JAVA, sendo esta a base do modelo de programação JINI. Entre as interfaces que constituem este modelo destacam-se:

- O interface de aluguer (leasing), que define uma maneira de alocar e libertar recursos usando um modelo baseado na duração do próprio aluguer concedido anteriormente ao serviço. Este estende o modelo de programação de Java, adicionado a noção de tempo a um recurso, permitindo este ser recuperado com segurança no caso de falhas na rede.

O Leasing assegura que os serviços registados continuam a estar disponíveis, já os administradores através dos registos dos eventos conseguem facilmente diagnosticar problemas na rede.

Não se requer que um serviço implemente o modelo de programação correcto, mas tais serviços necessitam de usar esse modelo para a sua interacção com a infra-estrutura da tecnologia JINI. Por exemplo, cada serviço interage com o lookup service usando o modelo de programação, e no caso de esse serviço ser alugado, este necessitará de ser renovado. O Lookup através do modelo de programação fará com que esta renovação seja efectuada de um modo genérico para qualquer tipo de serviço.

- A interface de eventos e notificação no JINI, é uma extensão do modelo de eventos usados pelos componentes do JAVABeans para ambientes distribuídos, que por sua vez permite comunicação baseada em eventos entre serviços JINI. Estas interfaces de eventos e notificação estendem os modelos padrão da linguagem JAVA (no caso de sistemas distribuídos), de modo a darem várias garantias da recepção da notificação. Este modelo reconhece também que pode existir um atraso nesta notificação.

- A interface de transacção, que permitem às entidades cooperar de tal forma que nenhuma das mudanças feitas ao grupo irá ocorrer em apenas uma dessas entidades isoladamente. Se isto chegar a acontecer, as mudanças nem chegam a ser aplicadas efectivamente no sistema JINI.

Esta interface introduz um protocolo orientado ao objecto que permite às aplicações JINI coordenarem as mudanças de estado entre si.

Este protocolo supõe dois estados de forma a coordenar acções entre os objectos distribuídos.

O primeiro estado é chamado de Votting, ou seja o objecto vota, indicando se já terminou a tarefa e se está pronto para aplicar qualquer alteração que tenha que ocorrer. Na segunda fase o sistema coordenador emite o pedido de alteração para todos os objectos.

 

As interfaces que definem o modelo de programação JINI são usadas pelos componentes apropriados da infra-estrutura. Por exemplo o serviço de Lookup implementa as interfaces de Leasing e Evento.

A combinação da infra-estrutura, do serviço, e do modelo de programação, todo projectado para trabalhar em conjunto, simplifica o sistema e torna-o mais fácil de compreender.

 

Serviços

 

É um conceito mais importante da arquitectura JINI. Um serviço é uma entidade que pode ser usada por um programa, uma pessoa, ou por um outro serviço. Um serviço pode ser um canal de comunicação, de armazenamento ou comunicação com outro utilizador, um filtro de software ou um dispositivo de hardware. Exemplos de serviços são imprimir um documento, ou converter um ficheiro de um formato para outro.

A infra-estrutura da tecnologia JINI e o seu modelo de programação foram construídos para permitir a um serviço ser oferecido e descoberto numa federação. Estes serviços usam a infra-estrutura para anunciar a sua presença e permitir a sua utilização por parte de outros serviços e utilizadores.

Num sistema baseado na arquitectura JINI, os serviços são agrupados para realizar uma certa tarefa. Os serviços podem usar outros serviços e o cliente de um serviço pode ele próprio ser um serviço com os seus próprios clientes. A natureza dinâmica de um sistema JINI permite que serviços possam ser adicionados ou retirados da “federação” a qualquer momento, dependendo dos objectivos actuais da rede.

Os serviços comunicam entre si usando um Service Protocol que, no caso desta arquitectura, é um protocolo programado recorrendo à linguagem JAVA, o JRMI (Java Remote Method Invocation).

Os serviços surgem como objectos escritos na linguagem de programação Java e possivelmente compostos por outros objectos. Um serviço através da sua interface, tem definido as operações que podem ser permitidas e alugadas. Algumas destas interfaces tem como objectivo serem utilizadas para interagir com o utilizador e outras têm como objectivos servir de interfaces para outros serviços. Deste modo um único serviço pode ser executado utilizando outros serviços, ou seja um serviço pode ser uma interface para operar vários serviços em simultâneo.

 

Servem como exemplos de serviços JINI:

- Um serviço de impressão que pode ser usado tanto em ambiente de programação Java como outros ambientes.

- Um serviço de JavaSpaces, que pode ser usado para uma comunicação simples e para o armazenamento de grupos de objectos escritos na linguagem de programação de Java.

- Um gerente de transacção, que permite aos grupos de objectos participar no protocolo de transacção definido pelo modelo de programação.

 

Arquitectura de um Serviço

 

Os serviços dão forma à base interactiva de um sistema de JINI nos níveis da programação e de interface do utilizador. Os detalhes da arquitectura são mais facilmente compreendidos quando os protocolos de Lookup e Discovery estão presentes.

O centro do sistema Jini é um trio dos protocolos chamados Discovery, Join, e Lookup. Os protocolos discovery/join ocorrem quando um dispositivo é ligado no sistema. A descoberta ocorre quando um serviço está à procura do Lookup para que se possa registar. Join ocorre quando um serviço encontrou um serviço do Lookup e deseja fazer parte dele. O Lookup ocorre quando um cliente ou utilizador necessita de encontrar e invocar um serviço. O seguinte diagrama esboça o processo de Discovery.

 

Figura 2 – O funcionamento do protocolo Discovery

 

Discovery/Join é o processo de adicionar um serviço a um sistema Jini. Um serviço pode ser um dispositivo, um software por exemplo. Inicialmente o serviço tenta encontrar o Lookup service através de multicasting. (Discovery).

De seguida o serviço é carregado, protocolo Join. Um serviço é um objecto que contem informações acerca dos seus métodos e funcionalidades.

Figura 3 – Protocolo Join

 

A partir deste momento o objecto encontra-se registado no Lookup e pode ser utilizado, conforme podemos analisar a partir da figura seguinte:

 

Figura 4 – Lookup Service

 

Lookup Service revisto e em detalhe

 

O Lookup Service é o mecanismo central do sistema e oferece o ponto de contacto entre o sistema e os utilizadores. Mais concretamente, o Lookup Service mapeia as interfaces e os serviços, indicando a funcionalidade de cada um. Adicionalmente, existem entradas associadas a cada serviço que permitem uma selecção mais cuidada por parte dos utilizadores.

 

Este serviço funciona da seguinte forma: um serviço é adicionado a um Lookup Service por um par de protocolos chamados de “discovery” e “join”. Primeiro o serviço procura o Lookup Service apropriado (usando o protocolo “discovery”) e depois junta-se a ele (usando o protocolo “join”).

 

Os objectos num Lookup Service podem conter outros Lookup Services. E para alem disso, um destes serviços pode conter objectos que encapsulam outros serviços, oferecendo uma maneira de construir pontes entre o Lookup Service da arquitectura JINI com outros Lookup Services, da mesma arquitectura ou de outras.

 

Etapa Final

 

A etapa final é a possível invocação do serviço.

Figura 5 – Invocação de um Serviço

 

Exemplo Prático:

 

O exemplo seguinte exemplifica o uso de um serviço de impressão por parte de uma câmara digital (cliente). O serviço começa por juntar (Join) a um sistema JINI, configura-se e por fim imprime a imagem.

 

1 – Registar o Serviço de Impressão

A impressora é ligada ao Sistema Jini, e procura o lookup de modo a poder registar o serviço na rede. Esta é a fase de Discovery e Join.

 

2 – Descobrir o Serviço de Lookup

As operações básicas de descobrir o serviço do lookup são executadas por uma classe do software de Jini Neste exemplo a impressora regista-se primeiramente com um exemplo local dessa classe. Depois são originados Multicasts para descobrir um serviço de lookup. Se existirem serviços à escuta deste serviço de impressão passa a disposição e pode ser utilizado.

 

3- Ligar-se ao Lookup Service

Depois de descobrir o serviço a impressa regista os seus métodos no lookup. Desde modo as aplicações e serviços sabem como invocar este serviço de impressão. E também específicas as suas capacidades e atributos. (exemplo: p/b, cores). A partir desde momento a impressora está efectivamente registada no serviço de Lookup.

 

A partir desde momento a impressora existe. A câmara digital ao ligar-se ao JINI procura por um Lookup Service que tenha disponível / registado o serviço de impressão.

 

O conceito de Aluguer está patente neste exemplo. O leasing da impressora no sistema JINI será prolongado automaticamente se assim estiver configurada.

 

Depois da câmara digital enviar o pedido de impressão, a impressora executa-o e gera um evento. No fim notifica o sistema acerca do processo concluído (ou não), e a câmara digital recebe a notificação de impressão concluída ou do erro ocorrido.

 

  1. Vantagens e desvantagens

 

As principais vantagens da arquitectura JINI são:

 

  1. Permite que a rede se configure e se repare automaticamente, no caso de serem ligados novos componentes ou se ocorrer alguma falha nos já existentes;
  2. Movimenta os dados na rede utilizando tecnologias baseadas nas da linguagem JAVA como as ligações baseadas em sockets e o protocolo JRMI (Java Remote Method Invocation), e apesar de ter sido construída nesta linguagem, não exige que os seus clientes, serviços e tarefas utilizem esta linguagem;
  3. Permite a rápida e simples integração de componentes antigos, actuais ou futuros;
  4. A tecnologia JINI é grátis e open-source;

 

  1. Bibliografia

 

[1] Jan Newmarch’s Guide to JINI Technologies, 2003

 

[2] Jini, A Programmer’s Guide, 2000

 

[3]  JINI and JAVASpaces, 2001

 

[4]  The Jini Specifications, 2000

 

  1. Sites consultados

 

 

www.sun.com

 

www.wikipedia.com