uras para computação Peer-to-Peer (P2P) têm sido intensamente utilizadas nos últimos anos na construção de aplicações e serviços que se tornaram extremamente úteis e populares, tanto no âmbito do uso pessoal como corporativo. Serviços de mensagens instantâneas, colaboração, troca e compartilhamento de arquivos, e jogos multi-player são alguns exemplos.
Com a explosão do mercado de telefonia móvel e a massificação dos aparelhos capazes de implementar algum tipo de comunicação em rede e de rodar aplicações, um novo leque de oportunidades se abre para o desenvolvimento de novos serviços, ou integração de serviços existentes que utilizam infra-estrutura para computação P2P.
Este artigo irá explorar a utilização do framework JXTA para a criação de uma infra-estrutura de comunicação P2P através da demonstração de um aplicativo simples de mensagens instantâneas desenvolvido para plataformas J2ME que utiliza a API JXTA para J2ME (também conhecida por JXME).
Apesar deste artigo explorar os principais conceitos do framework JXTA e da implementação de clientes JXME mostrando um exemplo prático de utilização, o foco não é o aprofundamento técnico nestas tecnologias e nem o detalhamento de como desenvolver a aplicação J2ME. Ao longo do artigo serão referenciados os links apropriados para a busca de informações mais detalhadas sobre a tecnologia JXTA.
O projeto JXTA surgiu a partir de pesquisas da Sun Microsystems com o intuito de criar soluções para problemas relacionados à computação distribuída, mais especificamente na área denominada computação peer-to-peer, e tem evoluído desde então em uma série de projetos independentes, em diversas categorias, que vão desde os componentes básicos do framework, até aplicações e serviços P2P implementados sobre este framework. O JXTA para J2ME, ou JXME, especificamente desenvolvido para plataforma J2ME é um exemplo de um destes projetos.
Em Abril de 2001 a Sun Microsystems abriu o projeto JXTA num modelo de desenvolvimento e licenciamento Open Source, mantido em conjunto por uma comunidade aberta de desenvolvedores e a própria Sun.
O nome JXTA vem da palavra juxtaposition, ou justaposição em português, pelo fato de que a tecnologia JXTA cria um modelo de arquitetura oposto ao modelo hierárquico da arquitetura cliente-servidor. Ou seja, na arquitetura JXTA todas as entidades participantes são “clientes” e ao mesmo tempo “servidores”, numa configuração muito mais colaborativa e orientada à comunicação.
As principais características que direcionam o desenvolvimento da tecnologia JXTA são:
· Interoperabilidade: a tecnologia JXTA é desenhada de forma a permitir que os peers que estão interconectados se localizem, se comuniquem, e ofereçam serviços uns aos outros de maneira fácil através de diferentes sistemas P2P.
· Independência de plataforma: a tecnologia JXTA não depende de plataforma de hardware ou sistema operacional (como Microsoft Windows ou sistemas operacionais UNIX), e nem de uma linguagem de programação específica (como C ou Java). Também não depende de uma plataforma de rede específica (como TCP/IP ou Bluetooth).
· Ubiqüidade: a tecnologia JXTA é projetada para ser implementada em qualquer dispositivo que possua alguma capacidade de processamento e comunicação, como sensores, equipamentos de rede, telefones celulares, PDAs, microcomputadores, sistemas de armazenamento em disco, servidores, etc.
O framework JXTA
O framework JXTA é extremamente flexível e modular, disponibilizando uma série de funcionalidades e elementos básicos sobre os quais é possível a criação de serviços e aplicações JXTA (ver Figura 1).
Figura 1. Arquitetura JXTA.
Dentre estas funcionalidades e elementos na camada básica temos:
· Peer Groups: estabelecem um conjunto de peers e os mecanismos e políticas para criação e remoção dos peers, gerenciamento da participação dos peers nos diversos grupos, mecanismos para divulgação e descoberta de grupos e peers, serviços de comunicação, segurança, e compartilhamento de conteúdo.
· Peer Pipes: proporcionam um canal virtual de comunicação entre peers, no qual trafegam mensagens. Estas mensagens são estruturadas em XML e suportam a transferência de informações de maneira independente de protocolos de rede.
· Peer Monitoring: possibilita o controle do comportamento e atividades dos peers num grupo e pode ser utilizado para implementar funções de gerenciamento como controle de acesso e prioridade, monitoração de tráfego na rede, e controle de utilização de banda de rede.
· Segurança: possibilita a implementação de controles de segurança em diversos níveis, como a utilização de usuários anônimos ou registrados, comunicação criptografada ou aberta, etc. Estes controles são utilizados ou implementados nas camadas de aplicações e serviços, quando necessário.
A camada de serviços JXTA oferece serviços que expandem as funcionalidades básicas, assim como bibliotecas de sistema operacional suportam serviços de mais alto nível do que aqueles proporcionados pelo kernel. Dentre estes serviços, temos mecanismos de busca, compartilhamento, indexação, e caching de conteúdo.
As aplicações JXTA podem ser construídas utilizando os serviços tanto da camada de serviços quanto da camada de funcionalidades básicas. Exemplos de aplicações que podem ser construídas com a tecnologia JXTA incluem: sistemas de processamento distribuído, serviços de mensagem instantânea, e-mail, calendário, jogos multiplayer, etc.
JXTA para J2ME (JXME)
O projeto de desenvolvimento da tecnologia JXTA para dispositivos móveis foi iniciado pela Sun Microsystems, e rapidamente transferido para a comunidade de desenvolvimento JXTA, dada a percepção geral da comunidade de que esta tecnologia poderia ter conseqüências importantes no desenvolvimento da computação para dispositivos como telefones celulares e PDAs. E a plataforma adotada para isso foi o J2ME, a plataforma Java voltada aos dispositivos móveis, devido a sua já consagrada aceitação como padrão entre os diversos fabricantes de dispositivos e também entre a comunidade de desenvolvedores.
As principais características que direcionam o desenvolvimento da tecnologia JXME são:
· Criar uma infra-estrutura para computação P2P adequada aos dispositivos móveis;
· Proporcionar interoperabilidade com JXTA em outras plataformas como estações de trabalho e servidores;
· Ser simples e fácil de utilizar pelos desenvolvedores;
· Ser pequena o suficiente para ser utilizada nos dispositivos que implementam J2ME (a grande maioria deles sendo telefones celulares e PDAs simples);
· Ser compatível com MIDP (Mobile Information Device Profile), o perfil da plataforma J2ME mais utilizado hoje em dia em telefones celulares.
A implementação JXME mais simples, e a que utilizaremos neste artigo, é desenvolvida sobre a plataforma CLDC/MIDP do J2ME. Devido às características desta plataforma, desenhada para dispositivos tão pequenos quanto processadores de 16 bits com 160KB de memória, e com limitações como bibliotecas Java limitadas, inexistência de um parser XML nativo, inexistência de suporte a HTTP listeners, e inexistência de suporte a segurança, a implementação JXME permite que peers na plataforma J2ME atuem apenas como o que denominamos de edge peers. Além destas limitações, a própria natureza móvel dos dispositivos cria um desafio adicional para implementação do JXTA nesta plataforma, pois o endereçamento de rede de um peer JXME pode variar de acordo com a localização do peer.
Dentro das implementações para J2ME existe também uma implementação um pouco mais sofisticada, voltada para a plataforma CDC/FP (CDC com Foundation Profile), que não depende de um proxy. Além de Java, existem também implementações para outras plataformas.
A plataforma JXME
Devido às limitações descritas anteriormente, um peer JXME para CLDC/MIDP não pode executar as mesmas tarefas que peers mais sofisticados executam, como oferecer serviços para outros membros do grupo, ou mesmo executar tarefas que exigem um processamento mais intensivo como a busca por recursos na rede. Para que um peer JXME CLDC/MIDP possa participar numa rede JXTA, ele utiliza os serviços de outros peers que atuam como relays na rede JXTA (ver Figura 2).
Figura 2. Arquitetura JXME.
Os peers JXME se comunicam com os relays JXTA através de conexões HTTP e trocam mensagens binárias com estes de acordo com o formato denominado JXTA Binary Message. Um peer que atua como um relay JXTA oferece uma série de serviços aos peers JXME, entre eles:
· Filtrar e otimizar anúncios propagados pela rede a fim de otimizar o processamento e consumo de memória dos peers JXME;
· Rotear as mensagens vindas de e para os peers JXME;
· Converter as mensagens XML para o formato binário e vice-versa, a fim de proporcionar interoperabilidade entre os peers JXME e os peers JXTA convencionais;
· Atuar como um proxy para os peers JXME, realizando todo o processamento intensivo de descoberta de peers e grupos, criação de grupos e pipes, e comunicação. ...