Escolar Documentos
Profissional Documentos
Cultura Documentos
Dezembro de 2009
Desenvolvendo um Estudo de Caso
Utilizando a Plataforma Java ME
ii
Coordenação do Curso de Ciência da Computação
Universidade Estadual de Mato Grosso do Sul
Banca Examinadora:
iii
Resumo
iv
Abstract
The platform Java Micro Edition is the set of technologies that enable the develop-
ment of Java applications for devices with limited processing, memory and video, such
as cell phones and smartphones. As with other Java editions, this platform was develo-
ped with the same intention, portability, and have different APIs for the development,
Java ME also provides compatibility between Java editions, enabling communication with
applications built on Java SE and Java EE. Keeping the focus on Java Micro Edition,
this paper proposes the development of a mobile application that gather the technologies
Java ME and Java EE. As the Java Enterprise Edition has several networks and Internet
features and contains classes designed specially to access servers and databases, part of
the application was built using this technology, enabling communication between mobile
devices and server requirements of a local network or Internet. Therefore, in this study
was discussed, along with the Java ME platform, the use of Servlets in the Java EE archi-
tecture, interacting with a mobile client via the HTTP protocol to communicate with cell
phones and smartphones. Since a servlet can perform any processing associated with a
Java class and submit answers in the form of XML documents, to effectuate the exchange
of data between a mobile device and the remote database, which feeds the mobile system,
we use the resources that XML language offers. To assist the development of case study,
the agile eXtreme Programming was used together with UML diagrams in order to orga-
nize the development process. The application developed during the work is responsible
for streamlining the sales process of a beverage distributor, to automate the sales force
and has been tested on mobile phones and smartphones with mobile operating system
Symbian and Windows Mobile, interacting with the server via HTTP requests.
v
Agradecimentos
Agradecemos primeiramente a Deus, por ter nos abençoado durante toda nossa vida
e principalmente por ter nos dado forças durante todo o decorrer do trabalho.
Aos nossos familiares, pela confiança, apoio e educação durante toda nossa caminhada.
Ao nosso orientador André Chastel Lima, pelo apoio e compreensão.
Ao nosso co-orientador Celso Camilo, pelo incentivo e paciência.
A toda academia, que nos proporcionou as condições necessárias para o desenvolvi-
mento deste trabalho, em especial os professores Odival Faccenda e Glaucia Gabriel Sass.
Aos funcionários da eXclaim, por nos dar a oportunidade de estagiar na empresa e
desenvolver projetos com a tecnologia Java ME.
Aos leitores e colaboradores do javamovel.com, pela lealdade e por nos incentivar a
estudar o tema do projeto.
Enfim, agradecemos todos aqueles que contribuı́ram para o sucesso desta caminhada
e que de forma injusta não tiveram seus nomes incluı́dos aqui.
vi
Sumário
Resumo iv
Abstract v
Agradecimentos vi
1 Introdução 3
1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Justificativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
vii
4 Perfil MIDP 17
4.1 Visão Geral do MIDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2 MIDlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.3 MIDlets Suite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.3.1 JAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.3.2 JAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.4 Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.5 Armazenamento Persistente . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.5.1 RMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
7 Estudo de Caso 41
7.1 Extreme programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
7.2 Arquitetura do sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
7.3 Visão geral do sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
7.4 Diagrama de Caso de Uso . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
7.5 Estórias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.6 Release 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.6.1 Iteração A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.6.2 Iteração B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.7 Release 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.7.1 Iteração A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.7.2 Iteração B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.8 A Aplicação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
8 Considerações Finais 57
viii
Lista de Figuras
ix
Lista de Siglas
AM - Application Manager
API - Application Programming Interface
CDC - Connected Device Configuration
CGI - Common Gateway Interface
CLDC - Connected Limited Device Configuration
CVM - Compact Virtual Machine
DTD - Document Type Declaration
FP - Foundation Profile
GP - Game Profile
GPS - Global Positioning System (Sistema de Posicionamento Global)
HTTP - HyperText Markup Language
HTTP - Hypertext Transfer Protocol
J2SE - Java 2 Standard Edition
JAD - Java Decompiler
JAR - Java Archive
Java EE - Java Enterprise Edition
Java ME - Java Micro Edition
JCP - Java Community Process
JNI - Java Native Interface
JSP - Java ServerPages
JVM - Java Virtual Machine
KVM - K Virtual Machine
LWUIT - LightWeight User Interface Toolkit
MIDP - Mobile Information Device Profile
MMAPI - Mobile Media API
MMS - Multimedia Messaging Service (Serviço de Mensagem Multimı́dia)
MSA - Mobile Service Architecture
OpenCL - Open Computing Language
OpenGL - Open Graphics Library
1
2
Introdução
3
1.1. Objetivos 4
1.1 Objetivos
O objetivo principal deste trabalho é desenvolver um estudo de caso aplicando os prin-
cipais conceitos da plataforma Java ME e utilizar a plataforma Java EE para construção
de um servidor que será responsável pela troca de dados com a aplicação móvel.
Para alcançar o objetivo principal, as seguintes etapas foram efetuadas:
1.2 Justificativa
Segundo dados divulgados pela Agência Nacional de Telecomunicações (Anatel), o
número de linhas de telefones móveis no paı́s chegou a aproximadamente 152,4 milhões,
em fevereiro de 2009, o que corresponde a 79,94% da população (AGÊNCIAESTADO,
2009).
Em nı́vel mundial, o número de usuários de telefones móveis chegou perto de 3 bilhões
em 2007, atingindo 48% da população e a estimativa para o final de 2008 era de 4 bilhões,
o que corresponde a 61%, segundo a União Internacional de Telecomunicações (UIT)
(REUTERS, 2008).
Segundo Eric Klein, vice-presidente de marketing do Java, em entrevista à Reuters, o
Java está instalado em 2,6 bilhões de telefones em todo o mundo (VIRKI, 2009). Visto
1.3. Metodologia 5
1.3 Metodologia
Mantendo o foco em Java Micro Edition, propomos fazer uma revisão bibliográfica dos
conceitos chaves desta plataforma e desenvolver uma aplicação para celular ou smartphone
que una as plataformas Java ME e Java EE. Como o Java Enterprise Edition possui várias
funcionalidades de redes e Internet e contém bibliotecas especialmente desenvolvidas para
acesso a servidores e banco de dados, parte da aplicação será construı́da usando esta
plataforma, possibilitando a comunicação entre dispositivos móveis e um servidor disposto
na rede ou Internet.
A plataforma Java EE contém uma série de especificações, cada uma com funciona-
lidades distintas, entre elas, utilizamos servlets, utilizados para o desenvolvimento Web
com conteúdo dinâmico e contém uma API que simplifica os recursos do servidor Web
para o programador (HALL, 1998).
Foi realizado um levantamento de diferentes frameworks Java ME e os que se apresen-
taram mais viáveis para o desenvolvimento da aplicação foram utilizados.
Os dados foram padronizados em documentos XML (Extensible Markup Language),
padronizada pela W3C (World Wide Web Consortium), a fim de serem transferidos do
servidor para a aplicação móvel.
O estudo de caso foi desenvolvido com base na metodologia ágil extreme programming
- (XP), e diagramas da UML serão apresentados para o melhor entendimento da aplicação.
Os testes foram realizados em celulares e smartphones com o sistema operacional
Symbian e Windows Mobile com a configuração CLDC 1.1 e perfil MIDP 2.1, porém a
aplicação poderá ser executada em outros sistemas operacionais móveis que possuam uma
máquina virtual Java compatı́vel com estas caracterı́sticas.
Capı́tulo 2
6
2.2. Sistemas Operacionais e suas tecnologias 7
a Microsoft usa para a categoria de PDAs, que difere dos smartphones por agregar ca-
racterı́sticas como uma tela maior e sensı́vel a toque, suporte wi-fi, bluetooh, integração
com GPS (Global Positioning System), enfim, tecnologias que o tornam mais robusto
(MICROSOFT, 2009b).
2.2.1 Symbian
Começaremos então com o sistema operacional para telefones móveis que desde 1998
lidera o mercado mundial, o Symbian OS, ou simplesmente Symbian. Ele possui suporte
MMS (Multimedia Messaging Service), bluetooh, wireless, infra-vermelho, entre outras
funções que tornam-se extremamente importantes quando o assunto é mobilidade. Este
SO possui um sistema gráfico bem simples e atualmente é o sistema mais usado pelos
maiores fabricantes de telefones móveis do mundo, porém com o surgimento de novas
tecnologias e plataformas, vem apresentando queda. Por ser um sistema operacional
que controla muito bem o consumo de memória, o consumo de energia, o processamento,
entre outros fatores essenciais, as empresas mais poderosas da telecomunicação investiram
bastante para que este fosse um sistema promissor para o mercado.
Empresas como Nokia, Samsung, Panasonic, Ericsson e Sony Ericsson, foram as res-
ponsáveis pela ascendência desse modelo de sistema operacional móvel. Segundo a INFO
(2008), atualmente a Nokia possui a totalidade das ações da empresa britânica de software
(Symbian), liderando o mercado mundial com 38,9% de participação e promete concorrer
com o mais novo sistema operacional para dispositivos móveis - Android.
O Symbian suporta sistemas divididos em módulos, desta forma cada empresa pode
criar sua própria interface. Permite o uso de várias linguagens de programação, entre
as mais importantes estão: Symbian C/C++, Java ME, FlashLite, Perl, Python, Ruby,
entre outras. Assim se o aparelho não possui certa funcionalidade, fica fácil de integrar a
mesma (SYMBIANBRASIL, 2009).
2.2.2 Android
O Android é um sistema operacional baseado em Linux voltado para smartphones,
criado pela Google em consórcio com mais de 40 empresas. Utiliza uma máquina virtual
que foi projetada para otimizar a memória e os recursos de hardware em um ambiente
2.2. Sistemas Operacionais e suas tecnologias 8
2.2.4 Palm OS
Palm OS é um sistema operacional desenvolvido pela PalmSource para rodar em PDAs.
Entre as versões da linha temos: O Palm OS Garnet e, o atualmente mais usado, Palm
OS Cobalt.
No Palm OS Cobalt o sistema roda em 32 bits, possibilitando que os aplicativos fiquem
muito mais rápidos e com recursos extras. No Palm OS Garnet (5.x) apenas algumas
partes dos aplicativos são em 32 bits, já que maior parte simula processadores antigos da
2.2. Sistemas Operacionais e suas tecnologias 9
2.2.5 BlackBerry OS
O BlackBerry OS é o sistema operacional para smartphones BlackBerry da empresa
Canadense RIM (Research in Motion). O SO possui como ponto sobressalente a sua
consagrada ferramenta de sincronização de e-mails. Assim que o servidor recebe o e-mail
este é enviado para o dispositivo. Inicialmente deixava a desejar no quesito design, porém
passa por constantes aprimoramentos neste quesito e em outros recursos. Suas versões
mais atuais apresentam recursos como menus recolhı́veis, navegação por fotos, gerenciador
de arquivos dedicado e oferece suporte para aplicativos desenvolvidos em Java ME (RIM,
2009).
É o terceiro sistema operacional para dispositivos móveis mais vendido do mundo e o
segundo dos Estados Unidos. Teve um crescimento muito rápido, chegando a ser o mais
vendido nos Estados Unidos no primeiro trimestre de 2009 (ADMOB, 2009).
2.2.6 Iphone OS
O Iphone OS é o sistema operacional proprietário do Iphone, desenvolvido pela Apple.
Atualmente conhecido como Mac OS X Snow Leopard, semelhante ao sistema OS X que
roda nos computadores Macintosh. Este SO introduziu diversas tecnologias de primeira
2.3. Análise do Mercado 10
As plataformas da Apple, Google e Palm são, hoje, as que mais se destacam no mer-
cado mundial. Segundo JONES (2009), analista de mobilidade e tecnologias sem fio do
Gatener, a Microsoft está lutando para sobreviver no celular, pois se voltou demais para
o mercado corporativo e deixou de lado o mercado doméstico, ficando fraca diante do
iPhone, Symbian e Android.
Apenas três plataformas devem sobreviver, mas é difı́cil dizer hoje exatamente quais
são. ”É uma batalha de ecossistemas que dependem de fatores como recursos do equi-
pamento, estilo, preço e oferta de aplicativos e não só da plataforma em si.” (JONES,
2009).
Capı́tulo 3
11
3.1. Visão geral 12
• CLDC especifica o ambiente Java para dispositivos com capacidades mais restritas,
como telefones celulares, PDAs e smartphones.
3.2 Configurações
A configuração define uma especificação padrão para uma mesma classe de dispositivos,
definidos por caracterı́sticas individuais de hardware, como interface, processamento, me-
mória, vı́deo, tipo de conexão de rede, entre outras (TOPLEY, 2002). Esta camada possui
as bibliotecas básicas da linguagem, representando a plataforma mı́nima de desenvolvi-
mento para cada tipo de dispositivo. Tais configurações são definidas pelos fabricantes a
fim de proporcionar um ambiente de desenvolvimento para funcionar em um determinado
dispositivo.
Cada configuração consiste de uma máquina virtual Java (Java Virtual Machine -
JVM), seja da Sun, do próprio fabricante, ou de terceiros e de uma coleção de classes
Java. Devido as restrições de hardware dos dispositivos móveis, as máquinas virtuais
utilizadas na plataforma Java ME não suportam todas as caracterı́sticas da linguagem
Java, instruções bytecodes e softwares de otimização providenciados pela plataforma Java
SE não são suportados, sendo assim diferentes das demais JVMs (TOPLEY, 2002).
A JCP especificou duas configurações para Java ME, CLDC e CDC. Dentre elas abor-
daremos a configuração CLDC, visto que esta aborda celulares e smartphones, cujo é o
objetivo deste trabalho.
A Connected, Limited Device Configuration - CLDC é a configuração mı́nima do Java
ME, formada por um subconjunto de pacotes disponı́veis na plataforma Java para desktop
3.2. Configurações 14
A CLDC 1.1 é uma configuração que engloba os pacotes da versão 1.0 e suporta as
seguintes caracterı́sticas:
• Finalize() - Com esse método é possı́vel liberar recursos e executar outras operações
de limpeza antes que o objeto seja recuperado por coleta de lixo (garbage collector ).
• JNI (Java Native Interface) - Classe de interface nativa que possibilita a máquina
virtual acessar bibliotecas acessadas com o código nativo de um sistema.
• RMI (Remote Method Invocation) - Permite o acesso a objetos remotos que podem
ser invocados de diferentes máquinas Java.
3.3 Perfis
Perfil é definido como um conjunto de APIs que especificam o nı́vel de interface de
aplicações para um classe de dispositivos (JCP, 2009c). Assim um perfil pode especificar
vários tipos de serviços e funcionalidades de alto nı́vel, como o ciclo de vida da aplicação,
elementos de interface gráfica, persistência de dados e meios de comunicação. Um perfil é
implementado no topo de uma configuração, sendo assim intimamente ligado a esta, po-
rém compreende bibliotecas mais especı́ficas que as disponibilizadas pelas configurações,
ou seja, o perfil complementa a configuração adicionando classes que fornecem caracte-
rı́sticas apropriadas para um tipo particular de dispositivos. Tanto os perfis quanto as
configurações são especificações de baixo nı́vel.
As aplicações móveis são portanto construı́das sobre configurações e perfis e podem
apenas usar bibliotecas especificadas por estas. Uma configuração pode conter vários
perfis, porém um perfil é ligado somente a uma configuração. E um perfil ainda pode ter
outros perfis ligados a ele (TOPLEY, 2002).
Para a configuração CLDC temos o perfil MIDP (Mobile Information Device Profile
- JSR 37 ), que é amplamente utilizado e providencia o desenvolvimento para pequenos
dispositivos, de recursos limitados e com capacidade de conexão sem fio, como os celulares,
smartphones e alguns PDAs. No próximo capı́tulo serão abordados mais detalhes sobre o
perfil MIDP.
• KVM
É uma máquina virtual com funções reduzidas, com uma pequena memória e com
um coletor de lixo (garbage collector ) incorporado para a otimização da memória
(TOPLEY, 2002). Esta é uma VM (Virtual Machine) especificada pela SUN, que
implementa as necessidades e restrições impostas pela configuração CLDC. O K do
termo KVM surgiu para fazer alusão aos poucos kilobytes necessários para que a
VM execute uma aplicação. Ela não compila o código e sim o interpreta para o
sistema operacional.
3.5. Pacotes Opcionais 16
Perfil MIDP
Neste capı́tulo são apresentadas as caracterı́sticas do perfil MIDP, bem como o fun-
cionamento de uma aplicação. Serão apresentados os principais conceitos relacionados à
interface e armazenamento persistente.
• Interface gráfica
17
4.1. Visão Geral do MIDP 18
Alguns recursos mı́nimos de software também são requeridos, tais como: possuir re-
cursos suficientes para executar a máquina virtual Java, tratamento de exceções, pro-
cessamento de interrupções, acesso de leitura e escrita à rede sem fio, mecanismos para
capturar a entrada de dispositivos de entrada, recursos para ler e gravar em memória não
volátil, oferecendo suporte persistente aos dados e escrita de elementos gráficos na tela
(JOHNSON, 2007).
As especificações deste perfil são definidas pela JCP, definindo uma plataforma para
desenvolvimento seguro e dinâmico. Atualmente o MIDP possui as versões 1.0 (JSR
37), 2.0 (JSR 118), 2.1 (JSR 118) e 3.0 (JSR 271). Porém esta última ainda não está
disponı́vel para utilização. A versão 1.0 trabalha integrada com a configuração CLDC
1.0 ou 1.1. Não tem nenhuma API ativa para renderização, não oferece suporte para
acesso direto aos pixels de imagens, não tem suporte para full screen/full canvas sem
uma API proprietária e também não possui suporte direto para áudio. Inclui APIs para
o ciclo de vida de aplicações, conectividade de redes HTTP, interface com o usuário e
armazenamento persistente. O único protocolo de rede que o MIDP 1.0 suporta é o
HTTP (SUN, 2002).
Segundo a SUN (2006c), os pacotes suportados pela versão 1.0 são:
• javax.microedition.io - Fornece suporte ao framework GenericConnection da confi-
guração CLDC.
agora podem ser especificados layouts horizontais, verticais, novas linhas antes ou depois
de itens, entre outros. Um novo item também foi criado, o Spacer, que serve pra colocar
espaçamentos entre os demais itens disponı́veis. Também foi introduzido o tipo pop up ao
item choiceGroup, que será estudado à frente.
No MIDP 2.0 também foram estendidos os comandos de manuseio. Adicionar co-
mandos aos itens agora é permitido. Também foi introduzida a classe CustomItem, que
permite ao programador criar seus próprios itens. Nesta versão o suporte a jogos ganha
uma melhoria com o suporte a camadas na tela. Uma camada pode conter um fundo, ou-
tra mostrar objetos, uma terceira camada poderia mostrar esfeitos especias ou qualquer
outra coisa. Outra mudança é o surgimento da classe GameCanvas, uma subclasse de
Canvas - classe de baixo nı́vel que proporciona o desenvolvimento de jogos. Nesta versão
as imagens podem ser representadas em arrays de inteiros e também suporta imagens em
RGB (SUN, 2002).
Segundo a SUN (2006d), os pacotes que foram adicionados a esta versão são:
A versão 2.1 do MIDP reforça a especificação MIDP 2.0 tornando a diretiva layout LC-
DUI obrigatória, os pacotes javax.microedition.io.SocketConnection e javax.microedition-
.io.HTTPConnection não são mais opcionais, entre outros requisitos para aprimorar a
versão 2.0.
A versão 3.0 traz melhor suporte para dispositivos com telas maiores, suporte a MI-
Dlets para desenhar em telas secundárias, armazenamento RMS seguro e acesso remoto a
bancos RMS (JCP, 2009a). Esta versão requer no mı́nimo 1MB de memória volátil e tela
de pelo menos 176x220 pixels. Ela é compatı́vel com o CLDC 1.0, mas o recomendado é
o 1.1 e possui compatibilidade com as outras versões do MIDP. No MIDP 3.0 a tela de
splash pode ser carregada sem a necessidade de ser criada uma classe em canvas com uma
imagem e tempo controlado manualmente. Isto pode ser feito através de um atributo no
arquivo JAD, um arquivo de descrição da aplicação, que será explicado posteriormente.
Os protetores de tela agora são aplicações que são destruı́das pelo gerenciador quando
4.2. MIDlets 20
4.2 MIDlets
É uma aplicação Java destinada para dispositivos móveis desenvolvida com a utilização
do perfil MIDP, que está vinculado a configuração CLDC (MUCHOW, 2001).
Todo dispositivo móvel tem um gerenciador de aplicativos (AM - Application Mana-
ger ) que controla os aplicativos a serem instalados, onde e como serão armazenados e
como serão executados. A comunicação do gerenciador com o MIDlet acontece pela classe
MIDlet do pacote javax.microedition.midlet.MIDlet. Os MIDlets devem herdar esta classe
MIDlet que contém métodos que inicializam, resumem, interrompem a execução e des-
troem MIDlets.
Uma aplicação é iniciada quando o AM invoca o método startApp(), colocando a
aplicação no modo ativo. Enquanto estiver executando ela pode ser pausada pela AM
através do método pauseApp(), isto pode ocorrer quando uma chamada for recebida por
exemplo ou o próprio usuário pode pausar a aplicação. E quando a aplicação é encerrada
ela passa para o estado destruı́do, através do método destroyApp(), que limpa todos os
recursos para fechar a aplicação (JOHNSON, 2007).
O ciclo de vida do MIDlet é apresentado na Figura 4.1.
Estes três métodos, segundo MUCHOW (2001), trata-se da comunicação que parte
do gerenciador de aplicativos para o MIDlet. Além destes métodos, também existem
outros três onde a comunicação parte do MIDlet para o gerenciador de aplicativos. Estes
métodos são:
4.3. MIDlets Suite 21
4.3.1 JAR
Todas as MIDlets são empacotadas antes de serem transferidas a um dispositivo, isso
é feito através de um método de compressão onde são colocadas todas as informações em
um único arquivo cuja extensão é .JAR. Este arquivo engloba classes Java, recursos e
informações do empacotamento, com citado anteriormente (MUCHOW, 2001).
O arquivo JAR providencia muitos benefı́cios, como: segurança, através de assinaturas
digitais; compressão; empacotamento de extensões, juntando vários tipos de extensões
diferentes em uma única: o .JAR; portabilidade e o fato de quando é necessário fazer o
download de uma aplicação apenas um arquivo deve ser baixado (SUN, 2008b).
4.3.2 JAD
Conforme estudado, além do JAR é criado um arquivo em separado de extensão .JAD
que contém informações sobre o MIDlet. Este arquivo é usado muitas vezes para preparar
o JAR para ser instalado, otimizando a instalação do aplicativo, porém nem todos os
aparelhos precisam ler o .JAD para realizar a instalação. O arquivo JAD possui a seguinte
estrutura:
MIDlet-Name: Nome da Suite MIDlet.
MIDlet-Version: Versão da MIDlet.
MIDlet-Vendor : Desenvolvedor da MIDlet.
4.4. Interface 22
4.4 Interface
Os dispositivos móveis que implementam o perfil MIDP possuem diversas restrições
quando se trata de interface, podendo variar em tamanho de tela, número de cores apresen-
tadas na tela, disposição dos botões, etc. E estas informações são acessadas pela MIDlet
somente em tempo de execução. Sendo assim, o MIDP só permite a utilização de objetos
visuais simples, não sendo permitida a implementação de objetos comuns na versão Java
para desktop (JOHNSON, 2007).
O Java ME tem como padrão para construção de interfaces à biblioteca LCDUI, que
é responsável pelos componentes que formam a interface de aplicações MIDP. Nesta se-
ção estudaremos algumas classes desta biblioteca, que estão dispostas de acordo com a
hierarquia mostrada na Figura 4.2.
Display e Displayable
Para desenvolver interfaces que se encaixem em dispositivos móveis com diferentes
caracterı́sticas de tela, as aplicações são desenvolvidas com uma certa abstração. Para
acessar as informações de um determinado aparelho existe a classe Display e cada MIDlet
possui sua própria instância desta classe que pode ser acessada pelo método getDisplay(),
que geralmente está contido no método startApp(), pois o Display só pode ser acessado
depois que aplicação tenha sido iniciada.
Portanto, a tela do dispositivo é representada por uma instância da classe Display,
que representa o hardware, e para que seja mostrado algo na tela devemos passar um
objeto Displayable para o objeto da classe Display. Displayable é uma classe abstrata
que controla o que é mostrado na tela e os comandos enviados pelos usuários. Eles
representam conteúdos de uma tela na qual há interação com o usuário (JOHNSON,
2007). Cada aplicação possui apenas uma instância da classe Display, sendo assim podem
existir vários objetos Displayable mas apenas um é mostrado por vez (MUCHOW, 2001).
Os objetos Displayable que estão na memória, mas não estão sendo mostrados estão no
chamado background e o objeto que está sendo mostrado está no foreground. Portanto os
objetos que estão no background não tem acesso ao Display. Para mostrar um Displayable
na tela usamos o método setCurrent() e para obter qual objeto está sendo mostrado no
Display usamos o método getCurrent() (JOHNSON, 2007).
A classe Displayable da origem a duas outras classes: Screen e Canvas. Ambas são
classes para representar interfaces, porém a primeira classe, juntamente com suas subclas-
ses formam componentes de interface de alto nı́vel e a segunda de baixo nı́vel (MUCHOW,
2001).
Screen
Screen é uma classe que contém objetos gráficos prontos, onde cada uma pode ter uma
aparência, variando de acordo com o dispositivo em que esta sendo executada a aplicação
(JOHNSON, 2007). Screen e suas heranças são classificadas como objetos de interface de
alto nı́vel (High-Level APIs) e as heranças desta classe são as classes Form, List, Alert e
Textbox (MUCHOW, 2001).
Form
Form é um formulário o qual pode conter textos, imagens e outros componentes para
serem exibidos no visor. Vários componentes podem ser colocados em um Form e se
houver necessidade ele apresenta barra de rolagem automática para mostrar todos estes
componentes visuais. Porém nada muito extenso é viável para aplicações móveis.
4.4. Interface 24
Esses componentes que podem ser adicionados em um Form são subclasses da classe
Item e serão estudados posteriormente. Um Form possui métodos para adicionar, inserir,
apagar e substituir componentes. Estes componentes da classe Item só pode ser inseri-
dos em um Form e não em outras telas da classe Screen, como List, Alert ou Textbox
(MUCHOW, 2001).
Item
Conforme mostrado um Item é um componente que pode ser inserido em um Form e
suas subclasses são:
• StringItem
É um simples texto estático, ou seja, não pode ser editado.
• TextField
É um campo para entrada e/ou edição de texto. Podendo ser associadas regras a
este. Por exemplo: aceitar somente números, qualquer caracter, ser um campo de
senha, entre outros.
• ImageItem
Permite inserir uma imagem.
• ChoiceGroup
É uma lista de escolhas, dentro de um Form. Possui os tipos: múltiplo, exclusivo
ou pop up.
1. Múltiplo: Podem ser selecionadas várias opções, marcando uma caixa de che-
cagem que acompanha os elementos da lista;
2. Exclusivo: Pode ser selecionado apenas uma opção e esta é marcada com um
radioButton.
3. Pop up: Pode ser selecionada apenas uma opção. A lista é exibida como
uma comboBox, ou seja, os elementos ficam escondidos e quando clicada esta
lista toda é exibida. Após a seleção de um elementos os outros elementos são
escondidos novamente.
• DataField
Campo utilizado para exibir e/ou entrar com data e/ou hora.
4.4. Interface 25
• Gauge
É uma representação gráfica de um número inteiro. Ele permite que o usuário
defina um nı́vel, como o volume por exemplo, se for um Gauge interativo. Se for
não interativo é somente o programa que o controla (MUCHOW, 2001).
• Spacer
Determina um espaçamento vertical e/ou horizontal mı́nimo entre os componentes
de um Form. Ele é utilizado por questões de design de layout.
• CustomItem
Utilizado para criar itens especı́ficos, através de desenhos, utilizando a classe Graphics
da API de baixo nı́vel (MATTOS, 2005).
List
É uma lista que permite ao usuário selecionar opções. Estas podem ser tanto uma
String quanto uma imagem. O List pode ser exclusivo, múltiplo ou implı́cito. Implı́cito é
quanto a lista é exibida sem nenhum marcador e somente uma opção pode ser escolhida,
gerando um evento quando é selecionada uma das opções. Os outros dois tipos funcionam
igualmente ao ChoiceGroup (MATTOS, 2005).
Alert
É uma tela de informação ao usuário. Pode conter uma mensagem de erro, de sucesso,
de informação, entre outras. Ele pode ser programado para ser exibido durante um tempo
pré determinado, pode ser composto de um texto e uma imagem e sua aparência varia de
acordo com o dispositivo móvel usado (MATTOS, 2005).
TextBox
Basicamente é uma tela que serve para entrada e edição de texto. É como se fosse um
Item textField, porém só existe ele na tela. Em um textBox também podem ser usadas
regras, assim como em um textField (SUN, 2006b).
Canvas
Canvas é uma classe de baixo nı́vel, que proporciona maior liberdade na implementação
dos gráficos e eventos. É destinada a aplicações que necessitam de posicionamento preciso
dos elementos gráficos, sendo portanto muito utilizada para a criação de jogos.
4.5. Armazenamento Persistente 26
Command
A classe Command permite adicionar comandos, ou seja, funções, aos objetos mostra-
dos na tela (JOHNSON, 2007). Os comandos são usados para a interação do usuário com
a aplicação podendo ser atribuı́dos a qualquer Displayable, de alto ou baixo nı́vel, e a um
Item. Quando um comando é acionado pelo usuário, é notificado a um CommandListener
que é definido no objeto Displayable. Um command contém somente uma informação
sobre o comando e não sobre qual ação realizar. A ação é definida no CommandListener
associado ao Displayable (SUN, 2006a).
CommandListener: É uma interface usada para tratar os eventos, controlando quais
e quando os eventos foram acionados. O commandListener vincula um comando a um
gatilho, detectando quais comandos foram ativados e definindo gatilhos para eles. Quando
um comando é acionado, o commadAction o captura, juntamente com o Displayable atual
(JOHNSON, 2007).
4.5.1 RMS
A API RMS é o mecanismo padrão para persistência de dados oferecido pelo MIDP. O
RMS funciona como um banco de dados orientado a registros, apresentando-se diferente
dos tradicionais bancos de dados relacionais conhecidos. Ele é composto por Record Stores,
que são como armazéns de dados, conforme mostra a Figura 4.3.
Um Record Store é identificado por um nome, que é case sensitive e é criado por um
MIDlet. Então quando um MIDlet é removido de um dispositivos todos os Record Stores
relacionados a ele serão removidos também. O limite de armazenamento é o mesmo que
o dispositivo oferecer.
A API RMS não suporta tipos caracterı́sticos de outros banco de dados, como ta-
belas, colunas ou linhas, nela cada registro, chamado Record, é um array de bytes. Por
causa disso a aplicação deve converter os dados para array de bytes para poderem ser
armazenados. Para ler os dados o processo inverso deve ser feito (MUCHOW, 2001).
Contudo, podemos imaginar o Record Store como um conjunto de linhas, onde cada
linha é um registro (Record ) e estes são identificados por uma chave primária, chamada
Record ID, que é um inteiro. Logo, cada registro é formado por um inteiro e um array de
bytes. A API fornece métodos para abrir, fechar e deletar um RecordStore inteiro. Além
destes existem métodos para a manipulação dos registros como, adicionar, modificar,
deletar, recuperar um registro e a quantidade de registros existentes (SOUSA, 2006).
Capı́tulo 5
5.1 APIs
Com APIs podemos desenvolver aplicações que se conectam a servidores remotos, com
outros aparelhos, aplicações que utilizam bluetooth, que executam músicas e vı́deos, entre
outras. Algumas das APIs opcionais disponı́veis para o perfil MIDP são citadas por
(JOHNSON, 2007).
• Java APIs for Bluetooh (JSR 82) - Permite o desenvolvimento de aplicações para
acesso à rede bluetooh.
• Security and Trust Services API for J2ME (JSR 177) - Usada para adicionar segu-
rança às aplicações.
28
5.1. APIs 29
• Mobile Sensor API (JSR 256) - Permite a recuperação de dados de sensores internos
ou externos ao aparelho celular.
• MECHART - Uma API de terceiro, ainda não catalogada pela JCP, que permite
construir gráficos de maneira simples e rápida, sem a necessidade de programar
diretamente na classe Canvas.
Dentre estas, vamos estudar a FileConnection API, pois além de ser uma das mais
usadas por desenvolvedores da plataforma Java ME, possui maior reconhecimento e será
de grande utilidade para o projeto que desenvolveremos posteriormente.
É importante dizer que a JCP até o momento tem catalogado 927 JSRs na plataforma
Java (JCP, 2009b). E para a plataforma Java ME foram especificadas 83 JSRs, entre elas
APIs opcionais.
• javax.microedition.pim
• javax.microedition.io.file
5.2 Frameworks
Entre os frameworks citados neste trabalho, astravés de testes, os que melhor atende-
ram ao desenvolvimento do estudo de caso foram: o Floggy, pois abstrai significativamente
a complexidade dos códigos RMS para a persistência de dados, o LWUIT, que fornece in-
terfaces bastante atraentes, além de estar caminhando para ser o framework referência
em UI, por fim o KXML, para fazer o parse de XMLs, usado para interpretar os dados
trocados entre servidor e aplicação móvel.
5.2.1 Floggy
Uma das limitações impostas pelo perfil MIDP é a utilização da API RMS, na maioria
dos dispositivos, para a persistência de dados. Visando a dificuldade dos códigos utilizados
para acessar esta API surgiu o Floggy, framework de persistência free para J2ME/MIDP,
desenvolvido por brasileiros. Seu principal objetivo é abstrair os detalhes da persistência
de dados para o desenvolvedor, reduzindo os esforços de desenvolvimento e manutenção
(FLOGGY, 2009).
O Floggy utiliza comandos de alto nı́vel para encapsular os comandos necessários para
o armazenamento e recuperação de objetos, ou seja, o que está por trás deste framework
são códigos para acessar a API RMS (LUGON, 2005).
O framework é composto por dois módulos:
- Framework : responsável por fornecer os métodos de persistência como salvar, remover
e recuperar os dados, através de um arquivo JAR (11KB) que deve ser adicionada na
aplicação.
5.2. Frameworks 32
Persistable
Funciona como um marcador, assim as classes que o implementam são consideradas
persistentes para o Floggy.
PersistableManager
É a classe principal do framework, pois gerencia a persistência e permite executar
todas as operações de persistência, como carregar, salvar, recuperar, remover, listar, entre
outros.
Filter
As classes que implementam esta interface definem critérios para seleção dos registros
que devem ser listados ou capturados.
Comparator
As classes que implementam esta interface definem critérios para ordenar registros que
foram selecionados.
ObjectSet
Os resultados de seleção de registros resultam em objetos da classe ObjectSet. Assim
esta classe serve para obter uma lista de registros e funciona como um cursor.
PersistableMetaData
Reúne informações sobre os objetos de uma determinada classe, como número de
objetos, data da ultima modificação, entre outros (LUGON, 2005).
5.2.2 KXML
O KXML é um framework que faz o parser de XML, utilizando a técnica pull parser,
que será discutida na seção 6.2.1, do capı́tulo 6. Ele é utilizado para simplificar e otimizar
5.2. Frameworks 33
• nextTag(): Aponta para o próximo inı́cio ou fim de tag, pulando eventos insignifi-
cantes como espaços em branco ou comentários.
• nextText(): Exige que a posição corrente seja uma tag de inı́cio. Retorna o texto
contido no elemento correspondente.
5.2.3 LWUIT
Existem diversas tecnologias que fornecem aplicações com conteúdo dinâmico e per-
sonalizado, seja para construir um simples site de conteúdo dinâmico ou um sistema
complexo de e-business com banco de dados que integram sistemas corporativos. A pla-
taforma Java EE fornece um conjunto de tecnologias para o desenvolvimento de aplicações
robustas para a Web. Dentre as tecnologias disponı́veis atualmente, destacam-se para o
desenvolvimento de aplicações os servlets e páginas JSP (JavaServer Pages). servlets e
JSP são duas tecnologias desenvolvidas pela Sun para desenvolvimento de aplicações na
Web a partir de componentes Java que executam no lado do servidor. A Figura 6.1 ilustra
a arquitetura da plataforma Java EE.
A utilização de servlets oferece diversas vantagens em relação a outras tecnologias para
o desenvolvimento de aplicações Web. As principais vantagens são herdadas da própria
linguagem Java, entre elas estão: Portabilidade, facilidade de programação e a flexibilidade
da linguagem para o desenvolvimento. Em particular, os servlets são mais eficientes,
apresentam melhor usabilidade, maior poder na programação, são mais portáteis, mais
seguros e mais baratos que um CGI (Common Gateway Interface) tradicional (HALL,
1998).
35
6.1. A Plataforma Java EE 36
6.1.1 Servlets
Segundo HALL (1998), servlet é uma resposta da tecnologia Java para a programação
CGI. São programas que rodam em sevidores Web agindo como uma camada mediana
entre um pedido que vem de um browser Web ou outro cliente de HTTP.
O trabalho dos servlets se resumem em:
• Gerar os resultados.
Servlets são classes Java instaladas junto a um Servidor que implemente um Servlet
Container, interagindo com clientes Web usando o paradigma request-response, ou seja,
um programa Java que estende funcionalidades de um servidor de aplicações Java que
permite a execução de servlets comunicando com clientes.
O componente container, ou contêiner, é resposnsável por dar suporte as APIs de
servlets e JSP. Gerência as instâncias dos servlets e fornece os serviços de rede necessários
para as requisições e respostas. O container pode criar várias threads permitindo que
uma única instância servlet atenda mais de uma requisição simultaneamente. A Figura
6.2 ilustra a relação entre esses componentes.
• Método doGet: Trata requisições do tipo GET. Esse tipo pode ser enviado várias
vezes e alocado em um bookmark.
• Método doPost: Trata requisições do tipo POST, permitindo que o cliente envie
dados do servidor Web uma única vez.
• Método doPut: Trata requisições do tipo PUT, permitindo que o cliente envie
arquivos para o servidor, semelhante ao FTP.
Um servlet não possui interface gráfica, porém dentro de um servlet é possı́vel construir
um HTML, mas a visualização e entendimento é de alta complexidade quando se trata
de lógicas extensas. Tendo em vista que o foco do estudo de caso está em um ambiente
móvel, não é necessário a construção de uma interface gráfica para trabalhar junto com o
servlet.
de conteúdo. O XML provê um formato para descrever dados estruturados que facilita
declarações mais precisas do conteúdo e resultados mais significativos de busca através de
múltiplas plataformas.
Segundo TITTEL (2002), a palavra extensı́vel reflete o fato de que a linguagem é
flexı́vel, escalonável e adaptável. Com esses três fatores o desenvolvimento de aplicações
em três camadas (three-tier ), que é o caso deste projeto, é altamente factı́vel com o XML.
Os dados podem ser distribuı́dos entre as aplicações desktop para serem visualizados em
um navegador ou em servidores intermediários para o processamento, permitindo que tais
dados possam ser facilmente combinados via software, com bancos de dados nas extremi-
dades da rede. Desta forma a troca de informações entre dispositivos móveis e servidores
remotos seria realizada de maneira mais comprimida e escalável, além de proporcionar
buscas mais eficientes. Esse ponto é de suma importância, pois os dispositivos móveis
tipicamente possuem memória limitada e baixo poder de processamento.
A estrutura de um documento XML é baseada em um modelo de árvore rotulada.
Geralmente possui um nó raiz especial acima do elemento raiz. Os nós internos são
elementos rotulados com um nome e um conjunto de atributos (valor). Os nós folhas
contém:
• Sequências de caracteres
• Um comentário
Podemos visualizar uma breve estrutura de um documento XML com sua respectiva
árvore na Figura 6.4.
XML a medida que o parser é efetuado. Uma outra técnica é o DOM, que utiliza um
modelo baseado em árvore e cria uma estrutura de dados na memória, onde é possı́vel
acessar essa estrutura através de um conjunto de objetos. É muito simples de se utilizar,
porém é necessário ler o documento inteiro para montar a estrutura de árvore, para depois
exibir as informações que foram lidas, além disso, pode ter muitos objetos armazenados na
memória então não é recomendado para ser usado em Java ME. E o modelo push parser
é orientado a eventos, portanto ao ler um XML um objeto listener é notificado sempre
que novas tags são encontradas.
Capı́tulo 7
Estudo de Caso
Para aplicar os conceitos estudados nos capı́tulos anteriores foi desenvolvido um estudo
de caso destinado a celulares e smartphones que possuam sistema operacional Symbian,
Windows Mobile ou que possuam suporte a Java. O estudo de caso representa o resultado
de um projeto de desenvolvimento de software que utilizou os valores e práticas do extreme
programming durante um perı́odo de três meses.
41
7.2. Arquitetura do sistema 42
iterações. Cada iteração contêm um conjunto de estórias e no final desta o cliente pode
validar as implementações efetuadas e dar seu feedback. O XP utiliza ainda o conceito de
programação em par. Enquanto uma das pessoas está escrevendo o código a outra pessoa,
chamada de navegador, está permanentemente revisando. Todo código desenvolvido é
coletivo, portanto utiliza-se padronização para simplificar o desenvolvimento (TELES,
2004).
O XP oferece agilidade no processo de desenvolvimento de software e um feedback
rápido do cliente, o que é necessário quando se trata de desenvolvimento para celulares e
smartphones, por ser um sistema enxuto. Portanto, para este estudo de caso foi adotado
as práticas da metodologia ágil XP, onde foram definidos dois releases, cada um composto
por duas iterações. As iterações dos releases foram descritas no decorrer deste trabalho.
7.5 Estórias
As Figuras 7.3 a 7.7 ilustram estórias, que na prática são escritas pelo cliente. Estas
estórias contém as funcionalidades que um cliente deseja possuir em seu sistema e forne-
cem a base para os desenvolvedores implementarem as soluções necessárias, ou seja essas
estórias fornecem os requisitos do sistema. O modelo clássico dos cartões de estórias foi
adotado, a fim de seguir padrões das práticas XP.
Figura 7.7: Estória 2-C: Envio dos dados para o banco central da empresa.
7.6 Release 1
Este release é dividido nas seguintes iterações:
7.6.1 Iteração A
Nesta iteração foi utilizada a estória 1-A (”Consulta de produtos”) como base para
implementação. Neste ponto foram implementados os métodos para importação de um
documento XML do servidor, que contém os dados de produtos e clientes armazenados no
banco de dados da empresa. Foi construı́do localmente o banco de dados dos produtos,
desenvolvida a interface com o usuário da tela principal, busca, listagem e detalhes dos
produtos. Foram implementadas as funcionalidades referentes a essas telas. Os diagramas
de classes de projeto, mostrados pelas Figuras 7.8 a 7.10, mostram os atributos das classes
nas respectivas regras de negócio, com o propósito de deixar de forma bem definida os
dados envolvidos no estudo de caso.
7.6. Release 1 47
7.6.2 Iteração B
Para esta iteração foi utilizada a estória 1-B (”Consulta e cadastro de clientes”) como
base para implementação. Foram implementados os métodos para construção do banco
de dados local a partir dos dados dos clientes que estão no XML importado na Iteração
A. Foi desenvolvida a interface com o usuário e implementada uma busca de clientes. Os
dados dos clientes buscados podem ser detalhados e novos clientes podem ser cadastrados.
7.7 Release 2
Este release é dividido nas seguintes iterações:
7.7.1 Iteração A
Nesta iteração foi utilizada a estória 2-A (”Cadastro de pedidos”) como base para
implementação. Foram implementados os métodos de cadastro e listagem de pedidos,
bem como as interfaces de usuário correspondentes.
7.7.2 Iteração B
Nesta iteração foram utilizadas as estórias 2-B (”Alteração de pedidos”) e 2-C (”Envio
dos dados para o banco central da empresa”) como base para implementação. Foram
implementados os métodos de edição e exclusão dos pedidos cadastrados e as interfaces
correspondentes. Neste ponto também foram implementadas as funcionalidades necessá-
rias para exportação dos dados dos pedidos e clientes cadastrados. Desta forma os dados
podem ser exportados para o servidor em forma de um ducumento XML.
7.8 A Aplicação
A aplicação desenvolvida no estudo de caso, um sistema móvel de força de venda
para uma distribuidora de bebidas, teve seu foco sobre a plataforma Java ME, utilizando
também o Java EE para a construção de um servidor que armazena documentos XMLs,
com dados que alimentam a aplicação móvel. Estes XMLs contém dados dos produtos
e clientes já cadastrados, além de oferecer uma gama de logins e senhas válidos para a
autenticação do usuário.
A aplicação móvel foi construı́da utilizando os frameworks já citados anteriormente:
LWUIT, KXML e Floggy. O LWUIT, proporcionou uma interface rica para a aplica-
ção e trata os eventos touchScreem; o KXML facilitou a leitura dos documentos XMLs,
armazenados no servidor, realizando o parse destes; e o floggy auxiliou os métodos de per-
sistência, simplificando os métodos para o armazenamento dos dados, em Records Stores,
armazéns de dados gravados na memória do celular ou smartphone.
Além dos frameworks citados, o sistema móvel faz uso da File Connection API, res-
ponsável, dentre outras funções, pelo acesso à arquivos situados no sistema de arquivos
local do dispositivo móvel utilizado. Na aplicação, esta API proporciona a gravação de
um arquivo XML de sáida, com os novos dados obtidos na aplicação, ou seja, dados de
pedidos e novos clientes.
Quando a aplicação é executada faz um acesso ao servidor, obtendo dados do XML
que contém os logins e senhas válidos e faz uma comparação com o login e senha digitados,
procurando se o login existe na lista e se a senha confere. A tela de autenticação pode
ser observada na Figura 7.11. Autenticado, o usuário possui acesso ao menu principal
da aplicação, ilustrado na Figura 7.12. Este menu fornece acesso: à Clientes, permitindo
funções de busca e cadastro; Produtos, permitindo funções de somente de busca; Pedidos,
onde é possı́vel cadastrar novos pedidos, utilizando as funções de busca de clientes e
produtos; Lista de Pedidos, que dispõe uma lista de pedidos já cadastrados permitindo
que estes sejam alterados ou excluı́dos; Importação, permite que a aplicação acesse o
servidor remoto, trazendo os dados dos XMLs de produtos e clientes para o banco de
dados local do dispositivo móvel; e Exportação, gera um arquivo XML de saı́da com
os dados dos clientes e pedidos cadastrados. Este arquivo é armazanado no cartão de
memória do celular ou smartphone, para ser enviado para o servidor ou utilizada de outra
forma desejada.
7.8. A Aplicação 50
As telas ilustradas nas Figuras 7.13, 7.14 e 7.15 mostram respectivamente um cadastro
de clientes, uma busca de produtos e o detalhamento de um produto buscado. A primeira
tela pode ser obtida através do menu clientes e as duas últimas através do menu produtos.
E as Figuras 7.16 e 7.17 ilustram uma tela de cadastro de pedidos e a lista destes, onde
podem ser escolhidas as opções de editar ou excluir um pedido realizado. Estas telas
podem ser obtidas respectivamente nos menus Pedidos e Lista de Pedidos.
7.8. A Aplicação 52
Considerações Finais
57
58
ADMOB (2009). Admob mobile metrics report. Disponı́vel on-line em maio de 2009 no
endereço http://www.admob.com/marketing/pdf/mobile metrics jul 08.pdf.
APPLE (2009a). More power to your mac. Disponı́vel on-line em maio de 2009 no endereço
http://www.apple.com/macosx/technology/.
DOEDERLEIN, O. P. (2009). Java: Uma perspectiva. revista Java Magazine, edição 65.
HALL, M. (1998). Core Servlets and JavaServer Pages. Sun Microsystems, 1th edition.
INFO (2008). Nokia compra ações da samsung na symbian. Disponı́vel on-line em maio de
2009 no endereço http://info.abril.com.br/aberto/infonews/092008/02092008-13.shl.
59
REFERÊNCIAS BIBLIOGRÁFICAS 60
JCP (2009a). Jsr 271: Mobile information device profile 3. Disponı́vel on-line em maio
de 2009 no endereço http://jcp.org/en/jsr/detail?id=271.
JCP (2009b). Jsrs: Java specification requests. Disponı́vel on-line em Julho de 2009 no
endereço http://jcp.org/en/jsr/all.
JONES (2009). Qual será seu próximo celular. revista info fevereiro de 2009.
LUZ, M. (2009). Midp 3.0: O que vem por ai. a nova especificação do principal perfil do
java me. Revista Java Magazine, edição 44.
MUCHOW, J. W. (2001). Core J2ME Technology & MIDP. Prentice Hall PTR, 1th
edition.
NETO, A. M. (2008). Lwuit: Swing para java me. revista Java Magazine, edição 60.
NOKIA (2008). Jsr 75 fille connection api. Disponı́vel on-line em Julho de 2009 no
endereço http://wiki.forum.nokia.com/index.php/JSR 75 File connection API.
QUIN, L. (2009). Cgi: Common gateway interface. Disponı́vel on-line em Junho de 2009
no endereço http://www.w3.org/CGI/.
SUN (2002). What’s new in midp 2.0. Disponı́vel on-line em maio de 2009 no endereço
http://developers.sun.com/mobility/midp/articles/midp20/.
SUN (2007). A survey of java me today. Disponı́vel on-line em abril de 2009 no endereço
http://developers.sun.com/mobility/getstart/articles/survey/.
REFERÊNCIAS BIBLIOGRÁFICAS 62
SUN (2008b). Lesson: Packaging programs in jar files. Disponı́vel on-line em maio de
2009 no endereço http://java.sun.com/docs/books/tutorial/deployment/jar/.
SUN (2009a). Java me technology apis & docs. Disponı́vel on-line em maio de 2009 no
endereço http://java.sun.com/javame/reference/apis.jsp#api.
SUN (2009b). Javame technology - powering your devices everywhere. Disponı́vel on-line
em abril de 2009 no endereço http://java.sun.com/javame/technology/index.jsp.
SUN (2009c). Jsr 75 - pda optional packages. Disponı́vel on-line em Julho de 2009 no
endereço http://java.sun.com/javame/technology/msa/jsr75.jsp.
TITTEL, E. (2002). Schaumt’s Outline of Theory and Problems of XML. The McGraw
Hill Companies, Inc., 1th edition.
VIRKI, T. (2009). Sun lança novo software java para celulares. Abril. Disponı́vel on-line
em março de 2009 no endereço http://www.abril.com.br/noticias/tecnologia/sun-lanca-
novo-software-java-celulares-266915.shtml.