249 Desenvolvimento de Aplicativos Gráficos Distribuídos para

Propaganda
1
Desenvolvimento de Aplicativos Gráficos Distribuídos
para Redes Bluetooth Empregando a J2ME
Leonardo P. Silva, Ivan R. S. Casella
CECS, Universidade Federal do ABC
Av. dos Estados, 5001, Santo André, SP
A tecnologia Bluetooth é um padrão de rede WPAN (Wireless Personal Area Network) voltada para a comunicação multimídia
(e.g. dados, voz, imagem, vídeo) de curto alcance entre dispositivos pessoais através de ondas de rádio. O alcance das redes Bluetooth
pode ser ampliado, aumentando a potência do sinal transmitido, entretanto, isso faz crescer o consumo de energia do dispositivo móvel
e aumentar a interferência em outros sistemas e redes. O consumo de energia é uma área importante a se considerar ao trabalhar com
esta tecnologia, pois esta especificação foi desenvolvida visando à portabilidade.
Neste contexto, este trabalho visa o desenvolvimento de aplicativos, utilizando a plataforma J2ME (Java 2 Micro Edition) e
a tecnologia Bluetooth, para a comunicação multimídia entre dois ou mais dispositivos.
Palavras chave: J2ME, Bluetooth, Java.
I. INTRODUÇÃO
A plataforma J2ME (Java 2 Micro Edition) é a plataforma
da tecnologia JAVA destinada ao desenvolvimento de
aplicativos para dispositivos portáteis, como por exemplo,
celulares, pagers, PDAs (Personal Digital Assistant), sistemas
de navegações e set-up Box para sistemas de TV [2]. Ela
associa os benefícios da tecnologia Java, como a portabilidade
do código, a orientação a objetos e o rápido ciclo de
desenvolvimento, às limitações de capacidade de
processamento, de memória e das interfaces de entrada e saída
de dados dos dispositivos portáteis.
Para lidar com uma gama ampla de arquiteturas diferentes
de dispositivos, a plataforma J2ME define configurações,
perfis e API's (Application Protocol Interface) opcionais [2].
Uma configuração define o conjunto mínimo de API's, ou
seja, o conjunto mínimo de bibliotecas de classes
indispensáveis para a execução de um aplicativo em uma
determinada família de dispositivos e a VM (Virtual Machine)
correspondente. A J2ME oferece fundamentalmente duas
configurações de dispositivos: a CLDC (Connected, Limited
Device Configuration) e a CDC (Connected Device
Configuration). A CLDC é voltado para dispositivos com
baixa velocidade de processamento e pouca memória como
celulares e PDA's. Por ser usado em dispositivos muito
pequenos, as bibliotecas são muito limitadas e é utilizada uma
máquina virtual mais simples, o Kilo Virtual Machine (KVM).
Já a CDC é destinado às famílias de dispositivos com uma
capacidade maior de processamento e memória. Isto permite a
utilização de um número maior de bibliotecas de classes e de
uma máquina virtual com mais recursos, a CVM (Compact
Virtual Machine).
Um perfil é uma coleção de API's que suplementa a
configuração do dispositivo e oferece, assim, um serviço
completo para que os aplicativos possam ser rodados em uma
determinada linha de dispositivos. Para os dispositivos usando
a CLDC, o perfil mais utilizado é o MIDP (Mobile
Information Device Profile). Já para os dispositivos usando a
configuração CDC, o perfil mais utilizado é o FD (Foundation
Profile).
O rápido crescimento da internet mudou o cenário da
computação moderna. Na era da informação, o acesso aos
dados em qualquer lugar e a qualquer hora passa a ser
indispensável para o sucesso de qualquer negócio. Neste
contexto, a tecnologia de redes sem fio Bluetooth passa a ter
uma posição de destaque.
O Bluetooth é uma especificação padronizada, que suporta
a transmissão de informação multimídia, de forma pública e
gratuita, através de um sistema de transmissão digital por
ondas de rádio de curto alcance e baixo custo.
Para que dois ou mais dispositivos possam estabelecer
comunicação numa rede Bluetooth, é preciso que eles utilizem
o protocolo de comunicação definido pelo padrão. Assim, para
permitir o desenvolvimento de aplicativos para comunicação
Bluetooth com a J2ME, de acordo com o protocolo
estabelecido pelo padrão, foi criada a JSR 82 (Java
Specification Request 82) [1].
Neste contexto, esse trabalho apresenta um aplicativo,
desenvolvido com a plataforma J2ME para dispositivos
compatíveis com a configuração CLDC 1.1 e com o perfil
MIDP 2.0, para a comunicação sem fio entre um dispositivo
celular e um computador pessoal utilizando o padrão
Bluetooth.
II. DESENVOLVIMENTO DO PROJETO
Para a melhor compreensão das tecnologias J2ME e
Bluetooth e dos seus potenciais no desenvolvimento de
sistemas para comunicação entre dispositivos, foram
desenvolvidos três aplicativos. O primeiro foi baseado no
protocolo RFCOMM (Radio Frequency Communication), o
segundo utilizou o protocolo OBEX (Object Exchange) e o
terceiro foi uma adaptação deste segundo aplicativo para a
comunicação entre um dispositivo móvel e um computador
pessoal com conexão Bluetooth.
O terceiro aplicativo é o mais completo, pois utiliza uma
interface gráfica [3-16] para a apresentação das informações
na tela do dispositivo e a camada de transporte de dados
RFCOMM [1]. Assim, ele será o foco das discussões que
serão apresentadas a seguir.
2
Um dispositivo requer, para se comunicar através do
protocolo Bluetooth, um conjunto de API´s definidas na
JABWT (JAVA API´s for Bluetooth Wireless Technology) [1].
A forma mais simples de se desenvolver aplicativos para
comunicação Bluetooth, é utilizar conjuntamente o protocolo
RFCOMM com a JABWT. A comunicação através da camada
de transporte RFCOMM é similar a uma comunicação através
de sockets, ou seja, os dados são enviados através de streams,
o que simplifica significativamente o protocolo de
comunicação RFCOMM [1].
Uma outra forma de desenvolvimento de aplicativos para
comunicação Bluetooth é empregando o protocolo OBEX.
Esse protocolo utiliza um modelo de cliente-servidor e é
independente do mecanismo de transporte e da API de
transporte. Um dispositivo que deseja iniciar uma sessão
OBEX com outro dispositivo é considerado cliente.
O protocolo OBEX é construído em cima de seis operações
básicas: CONNECT, SETPATH, GET, PUT, ABORT, e
DISCONNECT. Qualquer uma dessas operações é iniciada
pelo cliente, que fica esperando uma resposta do servidor.
Toda conexão OBEX trabalha com o conceito de sessões.
Toda sessão é iniciada com a operação CONNECT e finalizada
com a operação DISCONNECT. Entre essas operações o
cliente pode enviar qualquer outra operação ao servidor
quantas vezes ele quiser. A cada requisição ou resposta de
uma operação, são enviados cabeçalhos (headers) [1].
Os principais passos para estabelecer uma comunicação
Bluetooth e os principais cabeçalhos definidos pela
especificação OBEX são:
• O primeiro passo para que uma sessão seja iniciada é
a estabilização da conexão. Para isso o cliente ou o
servidor deve passar uma String de conexão ao
método Connector.open(). Essa String tem a
seguinte forma:
{esquema)://{alvo}{parâmetros}
• Caso o protocolo de transporte seja o RFCOMM o
perfil utilizado é o GOEP, por isso o {esquema}
utilizado neste caso é btgoep. O {alvo} no cliente é
o endereço Bluetooth e o número do canal
RFCOMM, já no servidor é o UUID do serviço.
Todos os {parâmetros} válidos para o protocolo
RFCOMM são válidos para o protocolo OBEX
caso a camada de transporte seja a RFCOMM.
• Após o método Connector.open() ser chamado no
cliente, um objeto ClientSession é retornado.
Entretanto, uma conexão na camada OBEX ainda
não foi criada. Para que a conexão seja estabilizada
é preciso que o ClientSession.connect() seja
chamado e para que a camada de transporte seja
finalizada é preciso que o ClientSession.
disconnect() seja chamado.
• No servidor, o objeto SessionNotifier retornado pelo
Connector.open() é utilizado para aceitar conexões
vindas dos clientes através do método
acceptAndOpen() que recebe como argumento um
objeto do tipo ServerRequestHandler e um do tipo
Authenticator, este ultimo é opcional. O
desenvolvedor precisa criar uma classe que herde
ServerRequestHandler e nesta implementar
métodos que tratem os pedidos que o servidor
deverá lidar.
• O protocolo OBEX faz toda a comunicação através
de headers e a JABWT permite que eles sejam
lidos e escritos através de diferentes métodos.
• Os
Clientes
OBEX
utilizam
o
método
createHeaderSet()
definido
na
interface
ClientSession para criar headers. Por outro lado, os
servidores implementam o HeaderSet quando
sobrescrevem métodos onXXX() na classe que
herda ServerRequestHandler.
• Depois que a conexão na sua camada de transporte é
estabelecida é preciso que um pedido de conexão
seja enviado ao servidor através do método
connect().
• As operações GET e PUT transferem um corpo de
dados entre o cliente e o servidor. Os métodos
put() e get() retornam um objeto do tipo Operation.
Para restaurar um corpo de dados basta abrir um
stream
de
entrada
com
os
métodos
openInputStream()
e
openDataInputStream()
respectivamente. Para enviar dados basta fazer o
mesmo
com
openOutputStream()
e
openDataOutputStream().
A
implementação
OBEX converte os headers de corpo de dados em
pacotes.
• Os servidores OBEX necessitam herdar a classe
ServerRequestHandler para lidar com solicitações
dos clientes. Não é preciso sobrescrever nenhum
método desta classe, somente devem ser
sobrescritos os métodos relacionados aos tipos de
solicitação que o servidor espera que o cliente faça.
Por exemplo, caso o cliente faça solicitações do
tipo PUT e GET ele sobrescreverá somente os
métodos onPut() e onGet().
III. RESULTADOS E DISCUSSÃO
No programa desenvolvido, um cliente pode enviar uma
mensagem com um destinatário e um corpo de texto que ficam
armazenados no servidor. Em seguida, outro cliente pode se
conectar ao servidor usando como nome de usuário o
destinatário para qual a mensagem foi enviada. Fazendo isto,
pode-se escolher a opção de receber as mensagens e assim
receber todas as mensagens armazenadas no servidor, uma a
uma pela ordem de envio. O servidor armazena quantas
mensagens forem necessárias e de quantos destinatários
existirem.
3
A figura abaixo mostra a tela principal do cliente, com as
opções de escolha de envio ou recebimento de mensagens.
Esta tela foi criada utilizando um objeto do tipo List.
A versatilidade e o fato de ser uma tecnologia barata
provem inúmeras possibilidades em diversas áreas, pois a
conexão é estabelecida de forma segura e relativamente
simples podendo assim ser uma alternativa para pequenas
redes e aplicativos que antes utilizavam a tecnologia sem fio
IEEE 802.11, por exemplo.
V. REFERÊNCIAS
Figura 1 - Tela de Escolha do Cliente
O servidor foi inicialmente desenvolvido para dispositivos
portáteis e posteriormente para computadores pessoais com
suporte à tecnologia Bluetooth.
Em função dessa mudança e das diferenças intrínsecas entre
os aplicativos para dispositivos portáteis e computadores
pessoais, foi necessário o desenvolvimento de um novo
servidor utilizando a plataforma J2SE (Java 2 Standard
Edition).
Para que a plataforma J2SE pudesse suportar as APIs
Bluetooth e OBEX, foi necessário o desenvolvimento de uma
nova especificação, a JSR-197. Deste modo, para o
desenvolvimento do servidor para computadores pessoais, foi
utilizada a biblioteca Bluecove 2.1.0 [17] que utiliza as
especificações da JSR-197. As APIs desta biblioteca
funcionam exatamente como as fornecidas pela plataforma
J2ME.
[1]
KUMAR, C. B.; KLINE, P. J.; THOMPSON, T. J.
Bluetooth Application Programming with the Java APIs.
Morgan Kaufmann Publishers, 2004.
[2]
Carniel, J.; Teixeira, C.; Apostila de J2ME – Versão 1.1.
[3]
http://www.bluetooth.com/Bluetooth/Technology/Works/C
ore_System_Architecture.htm; Acessado em: 01 de
Fevereiro de 2009.
[4]
http://www.bluetooth.com/Bluetooth/Technology/Works/O
BEX.htm; Acessado em: 01 de Fevereiro de 2009.
[5]
http://www.bluetooth.com/Bluetooth/Technology/Works/G
OEP.htm; Acessado em: 01 de Fevereiro de 2009.
[6]
http://www.bluetooth.com/Bluetooth/Technology/Works/S
PP.htm; Acessado em: 01 de Fevereiro de 2009.
[7]
http://java.sun.com/javame/reference/apis/jsr118/javax/mic
roedition/lcdui/Alert.html; Acessado em: 10 de Fevereiro
de 2009.
[8]
http://java.sun.com/javame/reference/apis/jsr118/javax/mic
roedition/lcdui/Form.html; Acessado em: 10 de Fevereiro
de 2009.
[9]
http://java.sun.com/javame/reference/apis/jsr118/javax/mic
roedition/lcdui/List.html; Acessado em: 10 de Fevereiro de
2009.
[10] http://java.sun.com/javame/reference/apis/jsr118/javax/mic
roedition/lcdui/TextBox.html;
Fevereiro de 2009.
Acessado
em:
10
de
[11] http://java.sun.com/javame/reference/apis/jsr118/javax/mic
roedition/lcdui/Screen.html; Acessado em: 09 de Fevereiro
de 2009.
[12] http://java.sun.com/javame/reference/apis/jsr118/javax/mic
roedition/lcdui/Display.html; Acessado em: 09 de Fevereiro
de 2009.
[13] http://java.sun.com/javame/reference/apis/jsr118/javax/mic
roedition/lcdui/Displayable.html; Acessado em: 09 de
Fevereiro de 2009.
[14] http://java.sun.com/javame/reference/apis/jsr118/javax/mic
IV. CONCLUSÃO
O desenvolvimento de aplicativos gráficos integrados para
dispositivos móveis é muito mais simples e rápido graças às
facilidades geradas pela plataforma J2ME. Devido a isto, esta
é uma área promissora com tendência de crescimento.
A simplicidade no desenvolvimento destes aplicativos
chegou à tecnologia de redes sem fio Bluetooth através da
JABWT. Isso torna esta área muito rica para a criação de
aplicativos para os mais diversos fins e torna possível o
desenvolvimento tanto para dispositivos móveis quanto para
dispositivos com maior capacidade como PCs que possuam a
tecnologia Bluetooth.
roedition/lcdui/Canvas.html; Acessado em: 12 de Fevereiro
de 2009.
[15] http://java.sun.com/javame/reference/apis/jsr118/javax/mic
roedition/lcdui/Item.html; Acessado em: 12 de Fevereiro de
2009.
[16] http://java.sun.com/javame/reference/apis/jsr118/javax/mic
roedition/lcdui/Command.html;
Fevereiro de 2009.
Acessado
em:
13
de
[17] http://code.google.com/p/bluecove/; Acessado em: 20 de
Junho de 2009
Download