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.
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.
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.
É 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
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;
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.
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
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.
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.
As principais vantagens da arquitectura
JINI são:
[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