• Nenhum resultado encontrado

COMPARTILHAMENTO DE ARQUIVOS EM DISPOSITIVOS MÓVEIS UTILIZANDO A PLATAFORMA JXTA/JXME

N/A
N/A
Protected

Academic year: 2021

Share "COMPARTILHAMENTO DE ARQUIVOS EM DISPOSITIVOS MÓVEIS UTILIZANDO A PLATAFORMA JXTA/JXME"

Copied!
34
0
0

Texto

(1)

OSVALDO JUNIOR

0502012

COMPARTILHAMENTO DE ARQUIVOS EM DISPOSITIVOS

MÓVEIS UTILIZANDO A PLATAFORMA JXTA/JXME

Jaguariúna

2008

(2)

1

OSVALDO JUNIOR

0502012

COMPARTILHAMENTO DE ARQUIVOS EM DISPOSITIVOS

MÓVEIS UTILIZANDO A PLATAFORMA JXTA/JXME

Monografia apresentada à disciplina Trabalho de Graduação III, do curso de Ciência da Computação da Faculdade de Jaguariúna, sob orientação do Prof. Ms. Peter Jandl Jr, como exigência parcial para conclusão do curso de graduação.

Jaguariúna

2008

(3)

2

SILVEIRA Junior, Osvaldo Batista da.

Compartilhamento de arquivos

em dispositivos móveis utilizando a plataforma JXTA/JXME.

Monografia defendida e aprovada na FAJ em 12 de dezembro de 2008

pela banca examinadora constituída pelos professores:

________________________________

Prof. Ms. Peter Jandl Jr – FAJ – orientador

________________________________

Prof. José Arnaldo – FAJ

________________________________

(4)

3

SILVEIRA Junior, Osvaldo Batista da.

Compartilhamento de arquivos

em dispositivos móveis utilizando a plataforma JXTA/JXME. 2008.

Monografia

(Bacharelado em Ciência da computação) – Curso de Ciência da computação da Faculdade de Jaguariúna, Jaguariúna.

RESUMO

Tendo em vista constante aumento das vendas de dispositivos móveis e o crescimento constante do tráfego de dados em redes de compartilhamento surge à necessidade de levar até a tecnologia móvel um produto que ofereça as mesmas features disponibilizadas em uma aplicação desktop aos celulares, handhelds e smartphones. Os dispositivos móveis nos últimos anos tiveram um considerável upgrade em sua capacidade de processamento e memória para armazenamento, facilitando o desenvolvimento de aplicações para estes devices, em paralelo a isso as aplicações de compartilhamento de arquivos tiveram um grande aumento em sua popularidade. Somando estas variáveis, obtém-se um ambiente perfeito para a criação de uma aplicação peer-to-peer para dispositivos móveis. Diante destas infomações, o objetivo deste trabalho de graduação é estudar aspectos relacionados às redes P2P voltados para as limitações que as redes móveis proporcionam construindo um protótipo híbrido que será capaz de trocar mensagens entre os peers, compartilhar arquivos separados por categorias e grupos, criar grupos de discussão e busca de arquivos pela rede.

Palavras-chave: PEER-TO-PEER, DISPOSITIVOS MÓVEIS, COMPARTILHAMENTO DE ARQUIVOS.

(5)

4

SUMÁRIO

Lista de Figuras ...5 Lista de Códigos ...6 Lista de Siglas...7 1. INTRODUÇÃO ...8 2. APLICAÇÕES P2P...10 2.1 Arquitetura P2P ...10

2.2 Protocolos de rede sem fio...11

2.3 Arquitetura Java ME...12

3. FRAMEWORK JXTA ...14 3.1 Arquitetura JXTA...15 4. JXME ...17 4.1 Arquitetura JXME ...17 4.2 Diagrama de classes...18 5. Protótipo...21 5.1 Descrição ...21 5.2 Requisitos ...21

5.3 Aplicação client Java ME...23

5.4 Aplicação Server...28

5.5 Resultados obtidos...28

6. CONCLUSÃO ...31

(6)

5

Lista de Figuras

Figura 1 Arquitetura híbrida Figura 2 Arquitetura pura Figura 3 Arquitetura Java ME Figura 4 Arquitetura JXTA Figura 5 Integração JXTA/JXME

Figura 6 Diagrama de classes do framework JXME Figura 7 Nokia N70

Figura 8 Nokia E61 Figura 9 BlackBery 7520 Figura 10 Protótipo

Figura 11 Tela de configuração da aplicação Figura 12 Tela principal da aplicação

Figura 13 Envio de mensagens Figura 14 Envio de arquivos

(7)

6

Lista de Códigos

Código 1 Criação de um peer na rede

Código 2 Método run da classe ConectorPeer Código 3 Criação de um objeto da classe Sender Código 4 Método run da classe Sender

Código 5 Criação de um objeto da classe Receiver Código 6 Método run da classe Receiver

(8)

7

Lista de Siglas

Wi-Fi Wireless Fidelity

GPRS General Packet Radio Service HTTP Hypertext Transfer Protocol

JXTA Plataforma de desenvolvimento peer-to-peer XM L Extensible Markup Language

Java ME Java Micro Edition

JXME Plataforma de desenvolvimento peer-to-peer para dispositivos móveis

DHT Distributed Hash Tables

WPAN Wireless Personal Area Network WLAN Wireless Local Area Network

WMAN Wireless Metropolitan Area Network WWAN Wireless Wide Area Network

PDA Personal Digital Assitants

IEEE Instituto de Engenheiros Eletricistas e Eletrônicos

GPS Global Positioning System

API Application Programing Interfaces IP Internet Protocol

UUID Universally Unique Identifier URI Uniform Resource Identifier TCP Transmission Control Protocol

(9)

8

1. INTRODUÇÃO

Os dispositivos móveis e as redes de compartilhamento chamadas peer-to-peer tem apresentado um grande crescimento no número de usuários. No entanto existe uma enorme variedade em relação às tecnologias e capacidades distintas para a comunicação sem fio (Wi-Fi, Wi-Max, BlueTooth, GPRS). As diversidades de protocolos de comunicação sem fio destacam um desafio para as redes de compartilhamento aplicadas aos dispositivos móveis. Com o crescimento dos diversos protocolos de comunicação e alteração dos antigos para atender as necessidades dos peers móveis, surge à necessidade de adaptar as idéias implantadas em diversos softwares de compartilhamento de arquivos tais como Emule, Kazaa e o pioneiro Napster aos dispositivos móveis. Estatísticas apresentam que o tráfego de dados referente a estes aplicativos, representam 37% do tráfego de dados da Internet, ficando apenas atrás do tráfego de dados realizado através do protocolo HTTP.

Dados divulgados pela Anatel indicam que o Brasil terminou o mês de setembro de 2008 com 140,8 milhões de celulares, isso representa um crescimento de 13 milhões de aparelhos em 5 meses, já que no mês de abril de 2008 a quantidade era de 127,7 milhões de celulares e uma densidade de 73,25 cel/100hab comparado ao mês de abril de 2008 houve um crescimento de 6.41 pontos percentuais. As adições líquidas de 2,4 milhões no mês de setembro superam as de setembro de 2007 que foram de 1,8 milhões (Anatel, 2008).

Na edição de julho de 2005 a revista Veja publicou: “A empresa de análise e pesquisa britânica Datamonitor prevê que, até 2009, pelo menos 13 milhões de consumidores europeus usarão a transmissão wireless para compartilhar arquivos de áudio e vídeo...” (Revista Veja, 2005). A Open Hand Set Aliance uma iniciativa do Google com a participação de um grupo de mais de trinta empresas do ramo de tecnologia móvel, lançou há pouco seu mais novo sistema operacional para dispositivos móveis chamado Android, este sistema operacional foi baseado em uma distribuição de um Kernel Linux.

Em Junho de 2001 a Sun MicroSystems’ lançou um projeto OpenSource chamado JXTA que consiste em um framework baseado em um protocolo XML que padroniza a maneira que os peers se organizam nos peersgroups, publicam e descobrem recursos de outros peers, comunicam e monitoram uns aos outros. Com o passar do tempo viu-se a necessidade de lançar uma versão desta plataforma para os celulares, smartphones e handhelds com

(10)

9

capacidade de rodar a plataforma Java ME (Java Micro Edition). O objetivo desta versão é permitir que o JXTA forneça funcionalidades compatíveis com o JME, usando o CLDC (Connected Limited Device Configuration) e o MIDP (Mobile Information Device Profile). Portanto qualquer dispositivo MIDP é capaz de participar de atividades de P2P com outro dispositivo MIDP.

A motivação para este trabalho originou-se do desafio que os ambientes sem fio trazem para as aplicações P2P, assim como a pesquisa de outras arquiteturas de compartilhamento que permitam a participação dos peers móveis.

O objetivo principal deste trabalho de graduação é estudar aspectos relacionados às redes P2P voltados para as limitações que as redes móveis proporcionam construindo um protótipo híbrido que será capaz de trocar mensagens entre os peers, compartilhar e busca de arquivos pela rede.

Como meta secundária pode-se descrever os seguintes itens:

1. Compreender problemas e requisitos dos dispositivos móveis para a participação de uma rede P2P móvel.

2. Identificar as aplicações existentes para dispositivos móveis.

3. Obter maior conhecimento na arquitetura P2P aplicada na estrutura de uma rede sem fio.

No capítulo 2 é apresentada uma breve descrição do funcionamento das redes peer-to-peer, suas arquiteturas e os benefícios que cada uma proporciona, bem como os diversos protocolos de rede sem fio existente e suas características. O framework JXTA é apresentado no capítulo 3 com uma rápida descrição de seu surgimento, sua história ao passar dos anos e como surgiu a plataforma JXME, também é apresentada uma explanação de sua arquitetura e principais componentes. O capítulo 4 descreve a história do framework JXME e detalhes de seu funcionamento e arquitetura, bem como suas principais características. No capítulo 5 é apresentado de uma forma detalhada o protótipo proposto para este trabalho de graduação, todos os detalhes técnicos e funcionamento de principais objetos são descritos neste capítulo. Finamente, no capítulo 6 são relatadas as conclusões deste trabalho. No capítulo 7 estão listadas as referências bibliográficas.

(11)

10

2. APLICAÇÕES P2P

2.1 Arquitetura P2P

Os sistemas P2P tradicionais podem ser implementados de maneira híbrida ou totalmente descentralizada (Sistema puro) conforme apresentado nas figuras 1 e 2. Um sistema P2P tradicional puro se subdivide em sistemas puros estruturados e não estruturados, que se diferenciam, respectivamente, pela capacidade de recuperar todas as informações disponíveis na rede ou apenas parte delas. Exemplos de sistemas estruturados são os sistemas baseados em tabelas hash distribuídas (DHT – Distributed Hash Tables).

Em artigo publicado por Schollmeier, 2001, a diferença mais distinta entre uma rede Cliente/Servidor e uma rede P2P é o conceito de uma entidade que age como Servent, que é utilizada nas redes Peer-toPeer. Servent é um neologismo derivado das palavras Servidor e Client, assim, este termo representa a capacidade dos nós de uma rede P2P agirem ao mesmo tempo como cliente e servidor.

(12)

11

Figura 2: Arquitetura pura

2.2 Protocolos de rede sem fio

Existem diferentes tipos de redes sem fio que variam em tecnologia e aplicação, sendo possível classificá-las em quatro tipos: WPANs, WLANs, WMANs e WWANs.

2.2.1 WPAN

As redes pessoais sem fio (Wireless Personal Area Network – WPAN) são voltadas, principalmente, para a conexão de um computador a dispositivos periféricos, como impressoras, PDAs (Personal Digital Assistants) e telefones celulares, eliminando a necessidade de cabos. As WPANs cobrem pequenas distâncias e oferecem baixas velocidades, se comparada a outras tecnologias wireless. O padrão para WPANs é conhecido como Bluetooth, sendo suportado por um grupo de mais de 2.000 empresas e, atualmente, incorporado ao IEEE 802.15 Personal Area Network Working Group.

2.2.2 WLAN

As redes locais sem fio (Wireless Local Area Network – WLAN) são redes que oferecem uma pequena dispersão geográfica e altas taxas de transmissão. As WLANs oferecem grande flexibilidade para seus usuários, principalmente os que utilizam computadores portáteis e PDAs. As WLANs são padronizadas pelo IEEE 802.11 Wireless Local Area Network Working Group.

2.2.3 WMAN

As redes metropolitanas sem fio (Wireless Metropolitan Area Network – WMAN) oferecem uma cobertura geográfica maior que as WLANs e altas taxas de transmissão. As WMANs são padronizadas pelo IEEE 802.16 Wireless Metropolitan Area Network Working Group.

(13)

12

2.2.4 WWMAN

As redes distribuídas sem fio (Wireless Wide Area Network – WWAN) são redes com grande dispersão geográfica, voltadas para aplicações móveis que utilizem telefones celulares, pagers, PDAs etc. Existem inúmeras tecnologias para WWANs que limitam a taxa de transmissão e, conseqüentemente, o tipo de serviço que poderá ser oferecido. As redes de celulares estão caminhando rapidamente para tornarem-se a maior aplicação de WWAN. Com o crescente uso de conexões de banda larga, celulares estão transmitindo emails, textos, imagens, som e vídeo, com a mesma qualidade e velocidade que os dispositivos ligados por fios.

2.3 Arquitetura Java ME

A arquitetura J2ME define configurações, perfis e pacotes opcionais como elementos para construir ambientes de execução completos que preenchem os requisitos para um bom número de dispositivos e mercados-alvo. Cada combinação é otimizada para a memória, capacidade de processamento e de I/O de uma determinada categoria de dispositivos.

Atualmente existem duas configurações no JME conforme apresentado na figura 3.

CLDC:

A CLDC é a menor das duas configurações, designada para dispositivos com conexões de rede intermitentes, processadores lentos e memória limitada (como celulares, pagers, e PDAs). Estes dispositivos possuem, geralmente, processadores de 16 ou 32 bits e memória disponível entre 128KB e 512KB para a implementação da plataforma JAVA e suas aplicações.

CDC:

A CDC foi feita para dispositivos que possuem mais memória processadores e conexões mais rápidos, como controles-remoto, gateways residenciais, etc.

A CDC inclui uma full-featured JVM e uma parte maior do J2SE que o CLDC. Como resultado, a maioria dos dispositivos compatíveis com CDC possui processadores de 32 bits e um mínimo de 2MB de memória disponíveis para a implementação da plataforma JAVA e suas aplicações.

(14)

13

(15)

14

3. FRAMEWORK 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 Java ME, ou JXME, especificamente desenvolvido para plataforma Java ME é 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.

(16)

15

3.1 Arquitetura 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. A plataforma JXTA pode ser dividida em três camadas conforme apresentado na figura 4.

Figura 4: Arquitetura JXTA

Dentre estas funcionalidades e elementos na primeira camada (JXTA Core) 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

(17)

16

criptografada ou aberta, etc. Estes controles são utilizados ou implementados nas camadas de aplicações e serviços, quando necessário.

A segunda camada (JXTA Services) desempenha o papel de suportar as funções de alto nível como a procura , compartilhamento, indexação e caching. Esta camada possibilita a colaboração independente de plataforma. 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. A terceira camada (JXTA Applications) tem acesso tanto à camada de serviços quanto à camada núcleo. Exemplos de aplicação são: gerenciamento de conteúdo, busca de compartilhamento, computação distribuída e mensagem instantânea.

(18)

17

4. 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 Java ME, 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 Java ME mais utilizado hoje em dia em telefones celulares.

4.1 Arquitetura JXME

Na tecnologia Java ME existem muitas limitações devido a enorme gama de aparelhos e suas variações de implementação, esta variação é comumente conhecida como fragmentação, ela geralmente ocorre em diferentes níveis:

• Nível de design: os dispositivos apresentam diversos recursos que outros não tem: câmera, GPS, touchscreen, sensor de movimento, etc.

• Nível de desenvolvimento: ocorre quando o dispositivo não apresenta um conjunto de API’s (Application Programming Interfaces) que permitem que o desenvolvedor crie uma aplicação utilizando um recurso físico do aparelho, porém os fabricantes não são obrigados a implementar todas as API’s

Baseado nisso, existem duas vertentes que podem ser seguidas:

a. Desenvolver uma solução para um número limitado de aparelhos, o que incondicionalmente atinge um número menor de usuários finais.

(19)

18

b. Customizar a aplicação para cada diferente tipo de aparelho e desta maneira atingir a todos os usuários que desejem utilizar a aplicação.

Segundo Blundo e Cristofaro (2007, p.2, tradução):

“Devido às limitações dos recursos, o JXME tem uma grande dependência dos JXTA relays. Relays são JXTA peers que são capazes de gerenciar os pipes, advertisements, groups e routing. Os mobile peers se comunicam com o relay através de uma conexão HTTP binária, utilizando mensagens compatíveis com JXTA. Os Relays peers são encarregados de criar os recursos, procurar recursos enviar e receber mensagens.”. Na figura 5 pode ser observar a arquitetura JXME e sua integração com a plataforma JXTA, nela, é possível visualizar a comunicação dos peers moveis com os JXTA relays que efetuam toda a troca de mensagens com os peers conectados à rede.

Figura 5: Integração JXTA/JXME

4.2 Diagrama de classes

Devido a compactabilidade do framewrok JXME, a API do framework JXME possui apenas três classes e todas elas estão no pacote net.jxta.jxme. A figura 6 apresenta o diagrama de classes do framework de acordo com a especificação UML.

(20)

19

Figura 6: Diagrama de classes do framework JXME

A API do framework JXME possui apenas três classes, todas elas estão no pacote net.jxta.jxme:

4.2.1

Element

:

Representa um elemento dentro de uma mensagem JXTA. Um elemento deve conter nome, namespace, MIMEType e um array binário para armazenamento dos dados.

4.2.2

Message

:

Representa uma mensagem JXTA que consiste em vários elementos, a classe Message contém métodos para acessar esses elementos.

4.2.3

PeerNetwork

:

É a classe mais utilizada, ela especifica tarefas que o mobile peer pode utilizar através do relay. Existem vários métodos úteis na classe PeerNetwork:

a) createInstance(): retorna uma instância de PeerNetwork com um nome

especifico para o peer;

b) connect(): conecta o peer a um relay através da URL especificada. Este

método retorna um array de bytes do estado de persistência da informação, esta informação deve ser passada através do método connect() em todas as conexões subseqüentes ao relay;

c) create(): responsável pela criação de peers, grupos e pipes na rede JXTA; d) search(): responsável pela busca de peers, grupos e pipes na rede JXTA;

(21)

20

e) pool(): responsável pelo recebimento de uma mensagem endereçada ao

peer, pode ser chamado iterativamente em uma Thread;

f) listen() e close(): responsáveis pela abertura e fechamento de um canal de

recebimento de mensagem;

g) send():responsável por enviar uma mensagem através de um pipe

(22)

21

5. PROTÓTIPO

5.1 Descrição

O protótipo deste projeto foi construído baseado na tecnologia Java voltada para dispositivos móveis (Java ME) e é capaz de ser instalado em qualquer dispositivo móvel que possua esta tecnologia embarcada e uma quantidade de créditos para efeito dos encargos de transferência de dados. Tem como objetivo principal efetuar a troca de mensagens e arquivos através da arquitetura P2P entre dois ou mais telefones celulares que estiverem conectados na rede.

5.2 Requisitos

A aplicação deverá prover aos usuários a capacidade de troca de mensagens entre os que estiverem online no grupo através de multicasting.

Ao acessar pela primeira vez a aplicação, uma tela de configuração será apresentada para que o usuário possa informar o nome que ele será identificado na rede, o endereço IP (Internet Protocol) e porta do servidor relay ao qual ele se conectará.

O menu principal da aplicação possui 5 opções:

• Enviar msg: envio de mensagens multicasting aos usuários online;

• Enviar arquivo: disponibilização de arquivos para download por outros usuários; • Receber msgs: recepção de mensagens enviadas ao grupo;

• Receber arquivo: recepção de arquivos disponibilizados por outros usuários; • Configuração: menu de configuração da aplicação, nesta tela o usuário poderá

configurar o endereço IP e porta do servidor relay ao qual ele se conectará;

Para atender a funcionalidade de envio de arquivos o aparelho onde será instalada a aplicação deverá implementar a JSR – 75 (PDAP PIM & File Data API), que é a especificação para acesso a arquivos e cartões de memória no aparelho (JCP, 2008) e a JSR 37 (MIDP 1.0) ou JSR118 (MIDP 2.0) (JCP, 2008).

(23)

22

Figura 7: Nokia N70

Figura 8: Nokia E61

(24)

23

5.3 Aplicação client Java ME

Conforme já citando anteriormente, a tecnologia escolhida para o desenvolvimento desta pesquisa foi a Java ME, plataforma Java voltada para dispositivos móveis.

A plataforma JXME proporciona de uma maneira simples, o desenvolvimento facilitado de uma aplicação P2P através dos métodos disponibilizados pelo framework.

5.3.1 Criação e conexão de um peer

No primeiro acesso à aplicação uma tela de configuração é apresentada, nela o usuário informa o nome que ele será identificado na rede, o endereço IP e porta do servidor relay ao qual ele se conectará, a classe responsável por efetuar esta conexão é ConnectorPeer, ela é responsável por instanciar um peer JXME na rede, conectá-lo à esta rede salvar a configuração e fazer com que este peer “escute” um pipe específico, do tipo JXTA Propagate. Este tipo de pipe suporta multicasting, o que significa que todos os peers conectados a ele podem receber uma mensagem ou arquivo caso este esteja escutando o pipe no momento do envio, no código 1 pode se ver um exemplo da criação de um peer na rede:

Código 1: Criação de um peer na rede Este método recebe como parâmetro de entrada, quatro objetos:

• JxmePeer:midlet: Instância da classe principal da aplicação que é responsável por todo o controle de exibição de telas, mensagens enviadas e recebidas, esta classe contem os métodos de controle da aplicação Java ME, startApp(), pauseApp() e destroyApp();

• String:relayHost: Número de IP ou DNS (Domain Name Service) ao qual a aplicação irá se conectar para efetuar o registro do peer na rede;

• String:relayPort: Número da porta do servidor que é responsável pelo registro do peer na rede;

(25)

24

• String:pipeID: Identificação do pipe ao qual a aplicação irá se comunicar com o servidor e com outros peers que estiverem “escutando” este mesmo pipe. O formato de identificação deste objeto de comunicação são do tipo UUIDs, estas identificações são representadas por um conjunto de 64 bytes, sendo o último byte reservado para identificar o tipo de objeto conforme exemplo:

“urn:jxta:uuid-000000000000000000000000000000010000000000000000000000000000000104”

Segundo Oaks (JXTA in a Nutshell, p.340, tradução), este ID é representado da seguinte maneira: o ultimo byte é sempre identificado como o byte à posição #63, independente da quantidade de bytes definida no ID. No caso do exemplo acima, tem-se então o byte #63 com o valor 04, o que define um ID do tipo pipe. Na especificação do ID para pipes, os primeiros 16 bytes são utilizados para a identificação do peergroup ao qual o pipe pertence. Os 16 bytes subseqüentes definem a identificação do pipe propriamente dita. Os 31 bytes seguintes não são utilizados na identificação de pipes. Portanto não é necessário identifica-los. O sistema assume o valor zero para os mesmos quando não especificam.

No código 2 é exibido o método run da classe ConnectorPeer que realiza as tarefas descritas anteriormente. Para instanciar o peer é utilizado o método createInstance da classe PeerNetwork, passando como parâmetro uma string que define o nome do peer, este método retorna um objeto do tipo PeerNetwork, que representa o peer que acabou de ser criado. Após a instanciação do peer, a conexão é feita através do método connect do mesmo, este método recebe dois parâmetros, o primeiro define a URL do relay (endereço de IP e porta), o segundo especifica um array de bytes que identifica o peer na rede durante a sessão criada. Por se tratar da criação de um peer, o segundo parâmetro deve ser nulo devido à ainda não existir a identificação do peer, este método retorna uma nova identificação do peer.

Após o retorno da identificação do peer é necessário verificar se o pipe utilizado para a comunicação já foi criado ou não, para tanto, o método search() do objeto peer é utilizado passando como parâmetro um inteiro representando o objeto que está sendo buscado (PeerNetwork.PIPE), uma string para o critério de busca, a string de busca e um inteiro que define o numero máximo de respostas que se quer obter. Depois do inicio da busca é necessário à captura da mensagem de rede, esta captura é feita através do método poll(), este método recebe um parâmetro do tipo inteiro que representa o tempo em mili-segundos que o método deve aguardar pela resposta, este método retorna um objeto do tipo Message.

(26)

25

Caso não haja sucesso na busca pelo pipe, este deverá ser criado, essa criação é feita através do método create() do objeto peer que recebe como parâmetro o objeto que está sendo criado (PeerNetwork.PIPE), duas strings uma para o nome do objeto e outra para a identificação do recurso (UUID) e um inteiro que informa o tipo do pipe (PeerNetwork.PROPAGATE_PIPE), a captura de possíveis mensagens trafegando nesse pipe é feita de maneira similar à feita na busca pelo pipe.

(27)

26

5.3.2 Envio de mensagens/arquivos ao servidor

Uma das classes principais da aplicação é a classe Sender, ela é responsável pelo envio de todas as mensagens digitadas e arquivos selecionados para o compartilhamento na rede, no código 3 é possível visualizar um objeto da classe Sender, que é instanciado em uma Thread toda vez que o usuário seleciona a opção Ok na tela onde o texto da mensagem é digitado ou um arquivo é selecionado para o envio.

Código 3: Criação de um objeto da classe Sender Este método recebe como parâmetro de entrada quatro objetos:

• JxmePeer:midlet: Instância da classe principal da aplicação que é responsável por todo o controle de exibição de telas, mensagens enviadas e recebidas, esta classe contem os métodos de controle da aplicação Java ME, startApp(), pauseApp() e destroyApp();

• byte[]:msg: Array de bytes representando a mensagem a ser enviada;

• String:peerName: Nome do usuário informado na tela de configuração da aplicação;

• String: MIMEtype: Identificação do MIMEtype da mensagem que está sendo enviada;

Para criar a mensagem/arquivo a ser enviado, que é um objeto da classe Message, é necessária a definição dos elementos que irão compor a mensagem, estes elementos são armazenados em um array de objetos da classe Element. O construtor da classe Element recebe como parâmetros uma string que representa o nome do elemento, um array de bytes que representa o conteúdo do elemento a ser enviado, uma string que representa o namespace ao qual o elemento pertence e uma string que representa o MIMEtype associado ao conteúdo do elemento.

Após a definição dos elementos, é necessária a criação do objeto Message passando como parâmetro o array de Element criado anteriormente, o envio da mensagem é feito através do metod send() do objeto peer, passando como parâmetro a string que representa a identificação

(28)

27

(UUID) do pipe criado anteriormente e o objeto Message que representa a mensagem à ser enviada, conforme apresentada no código 4.

Código 4: método run da classe Sender

5.3.3 Recebimento de mensagens/arquivos

Outra classe de extrema importância na aplicação é a classe Receiver, ela é responsável pelo recebimento de todas as mensagens/arquivos a ser recebidos pela aplicação através do pipe, no código 5 é apresentado o objeto da classe Receiver que é instanciado em um Thread separada toda vez que o usuário seleciona a opção Buscar na tela de menu de mensagens.

Código 5: Criação de um objeto da classe Receiver Este método recebe como parâmetro de entrada apenas um objeto:

(29)

28

• JxmePeer:midlet: Instância da classe principal da aplicação que é responsável por todo o controle de exibição de telas, mensagens enviadas e recebidas, esta classe contem os métodos de controle da aplicação Java ME, startApp(), pauseApp() e destroyApp();

Conforme apresentado no código 6, para o recebimento da mensagem o peer executa o método pool() que tem como objetivo “escutar” o pipe ao qual está conectado enquanto o conteúdo do array de bytes for igual a vazio. Quando uma mensagem é recebida através do pipe, um objeto Message é valorizado e através da classe MessageParser os dados são extraídos para persistência caso seja um arquivo de mídia ou imagem e caso seja do tipo mensagem de texto haverá adição na lista de mensagens.

Código 6: Método run da classe Receiver

5.4 Aplicação Server

Para a conexão com o servidor foi utilizada uma aplicação pronta que implementa um peer JXTA que trabalha como um relay, esta aplicação é o jxtashell, disponível no site oficial do JXTA. Nesta aplicação toda a configuração do servidor é feita nela, pode-se configurar a porta que servirá de comunicação com os peers móveis, e as configurações de comunicação TCP e HTTP.

(30)

29

Após o desenvolvimento deste trabalho pode se observar que a aplicação exige alguns requisitos mínimos que nem todos os aparelhos que suportam MIDP/CLDC possuem, um desses requisitos é a especificação JSR-75 que trata do acesso aos arquivos do device. Apesar desta ‘limitação’ um ponto que deve ser ressaltado é a flexibilidade da plataforma JXME, que independe de modelo de celular e plataforma, tornando uma ferramenta poderosa para desenvolvimento de aplicações P2P móveis.

As figuras 07, 08, 09 e 10 apresentam o protótipo.

Figura 10: Protótipo

(31)

30

Figura 11: Configuração da aplicação Figura12: Menu principal da aplicação

Figura 13: Envio de mensagens Figura 14: Envio de arquivos

O protótipo que foi desenvolvido atende aos propósitos deste trabalho, através dele é possível trocar mensagens e arquivos entre os usuários conectados na rede P2P.

(32)

31

6. CONCLUSÃO

Pode se concluir que o framework JXTA/JXME é uma ferramenta poderosa para o desenvolvimento de aplicações P2P para dispositivos móveis, devido à simplicidade e facilidade de utilização da API JXME.

Esta plataforma tem muito a crescer com a difusão das redes 3G e o crescimento da capacidade de processamento dos celulares.

Para o protótipo desenvolvido existem muitas melhorias a serem implementadas futuramente, tendo em vista que o objetivo principal foi alcançado, no futuro poderão ser desenvolvidas funcionalidades de cadastramento e autenticação de peers, gerenciamento de lista de contatos, gerenciamento de grupos de peers, notificação de usuário online ou offline, thread de sincronismo de mensagens automáticas e gerenciamento de conteúdos entre outras capacidades.

Contudo, muitas dificuldades ainda servem como barreira para o desenvolvimento de uma aplicação P2P utilizando JXTA, a falta de documentação, a escassez de livros e referencias e a pouca quantidade de pessoas que adotaram esta plataforma para desenvolvimento são algumas das dificuldades encontradas.

(33)

32

7. REFERÊNCIAS BIBLIOGRÁFICAS

BLUNDO, Carlo e Cristofaro, Emiliano de, A Bluetooth-based JXME

infrastructure, 2007 – Disponível em: http://aeolus.ceid.upatras.gr/scientific-reports/2nd%20Year/ Recuperado em 18/11/2008

BRENDON, J. Wilson, JXTA New Riders Publishing, 2002.

JCP. JSR-37. J2ME Mobile Information Device Profile. disponível em:

http://jcp.org/en/jsr/detail?id=37. recuperado em: 11/05/2008.

JCP. JSR-75. Java Specification Requests.disponivel em:

http://jcp.org/en/jsr/detail?id=75, recuperado em: 11/05/2008.

JXME, página do projeto JXME disponível em https://jxta-jxme.dev.java.net/,

recuperado em 04/05/2008.

JXTA FREE, Disponível em http://jxta.free.fr/JXTA-J2ME/, recuperado em

04/05/2008

JXTA ZONE. Demystifying Pipes, JxtaSockets, JxtaMulticastSocket, and JxtaBiDiPipes, Disponível em:

http://blogs.sun.com/hamada/entry/pipes_jxtabidipipes_and_jxtasockets, recuperado em 03/04/2008.

OAKS SCOTT, Travaset Bernard, Gong Li, JXTA in a Nutshell, O'Reilly, 2002 SCHOLLMEIER, Rüdiger, A Definition of Peer-to-Peer Networking for the

Classification of Peer-to-Peer Architectures and Applications. Peer-to-Peer Computing, 2001

SUN Microsystems. JavaME API Documentation. Disponível em

http://java.sun.com/javame/reference/apis.jsp, recuperado em 09/04/2008.

(34)

33

TELECO, informação em telecomunicações, disponível em

http://www.teleco.com.br/ recuperado em 29/03/2008.

Unified Modeling Language, UML: disponível em http://www.uml.org/

Referências

Documentos relacionados

• bloqueio hidráulico na posição alta (no caso de falta de corrente) com chave de desbloqueio especial • estrutura de sustentação para cimentar com tratamento de

• The definition of the concept of the project’s area of indirect influence should consider the area affected by changes in economic, social and environmental dynamics induced

Este trabalho, seguindo o método Design Science Research, fez uma revisão da literatura, uma análise bibliométrica e o estudo de uma empresa para encontrar os elementos da

Nestas circunstâncias, 11 Estados-Membros (Bélgica, Alemanha, Estónia, Grécia, Espanha, França, Itália, Áustria, Portugal, Eslovénia e Eslováquia) apresentaram à

Este estudo registra pela primeira vez a espécie Beckianum beckianum para o estado do Ceará, além de ampliar o conhecimento sobre a ocorrência do táxon para o

[r]

Em uma pesquisa de Ghedini (2009) observam-se dados do IBGE (Instituto Brasileiro Geografia e Estatística) que apresentam resultados sobre o segundo semestre de 2006,

O objetivo da investigação é identificar através da análise dos dados e registros coletados os desafios da colaboração da informação, pontuando-os para que sejam tratados