TCC II - Luis Fabio Faccin

Propaganda
UNIJUI - UNIVERSIDADE REGIONAL DO NOROESTE DO ESTADO DO RIO
GRANDE DO SUL
DETEC – DEPARTAMENTO DE TECNOLOGIA
AMBIENTE PARA DESENVOLVIMENTO DE
APLICATIVOS PARA DISPOSITIVOS MÓVEIS COM
SISTEMA OPERACIONAL SYMBIAN
LUIS FABIO FACCIN
Ijuí
Novembro/2010
2
UNIJUI - UNIVERSIDADE REGIONAL DO NOROESTE DO ESTADO DO RIO
GRANDE DO SUL
DETEC – DEPARTAMENTO DE TECNOLOGIA
AMBIENTE PARA DESENVOLVIMENTO DE
APLICATIVOS PARA DISPOSITIVOS MÓVEIS COM
SISTEMA OPERACIONAL SYMBIAN
LUIS FABIO FACCIN
Trabalho de Conclusão de Curso
apresentado ao Curso de Informática Sistemas de Informação do Departamento
de Tecnologia (DeTec), da Universidade
Regional do Noroeste do Estado do Rio
Grande do Sul (UNIJUÍ), como requisito
para a obtenção do título Bacharel em
Informática - Sistemas de Informação.
Orientador: Prof. Dr. Paulo Sérgio Sausen
Ijuí
Novembro/2010
3
AMBIENTE PARA DESENVOLVIMENTO DE APLICATIVOS
PARA DISPOSITIVOS MÓVEIS COM SISTEMA
OPERACIONAL SYMBIAN
LUIS FABIO FACCIN
Trabalho de Conclusão de Curso apresentado
ao Curso de Informática - Sistemas de
Informação do Departamento de Tecnologia
(DeTec), da Universidade Regional do
Noroeste do Estado do Rio Grande do Sul
(UNIJUÍ), como requisito para a obtenção do
título Bacharel em Informática - Sistemas de
Informação.
______________________________________
Orientador: Prof. Dr. Paulo Sérgio Sausen
BANCA EXAMINADORA
______________________________________
Prof. Dr. Sandro Sawicki
Ijuí
Novembro/2010
4
DEDICATÓRIA
Dedico este trabalho aos meus pais Neimar e Marlei
que sempre estiveram ao meu lado, me incentivando, apoiando
e ajudando em todos os momentos. Pais que foram amigos e
fiéis conselheiros, que acima de tudo me encorajaram a seguir
em frente e a conquistar meus sonhos. Dedico também à
minha irmã Luciele, pelo carinho. À minha namorada Elenise,
pelo amor, dedicação e tudo que vivemos juntos durante essa
etapa, e para os meus familiares que mesmo longe me
apoiaram.
5
AGRADECIMENTOS
Agradeço a Deus por ter iluminado meus caminhos, e me ajudado a chegar
até aqui.
Aos meus pais que muitas vezes abriram mão dos seus sonhos e objetivos
para que eu pudesse conquistar os meus.
À minha irmã que mesmo com a inocência de criança me ajudou.
À minha namorada pelo incentivo aos meus estudos e na busca de meus
ideais.
Ao meu orientador Paulo Sérgio Sausen que sempre me ajudou a sanar
minhas dúvidas durante este trabalho e aprimorar meus conhecimentos em redes de
computadores.
Ao professor Sandro Sawicki, que gentilmente aceitou o convite para ser
banca na defesa do meu trabalho de conclusão de curso.
Aos meus colegas por todos os anos de convivência e amizade.
À gurizada do GAIC pela parceria e todos os bons momentos e histórias que
vivemos juntos ao longo de muitas tardes, noites e até madrugadas como bolsistas.
À todos os professores de Informática pelos conhecimentos à nós
seriamente repassados.
Aos meus familiares que me auxiliaram em todos os momentos.
6
“O insucesso é apenas uma oportunidade para
recomeçar de novo com mais inteligência”.
Henry Ford
7
RESUMO
O presente trabalho aborda, inicialmente, um estudo sobre o desenvolvimento de
software para telefones celulares que utilizam o sistema operacional Symbian. O
mercado de dispositivos móveis vem crescendo, onde milhares de novos
dispositivos são vendidos todos os dias. Este aumento de vendas, aliado ao
crescimento da capacidade de processamento despertou o interesse das empresas
em utilizar estes dispositivos móveis em seu benefício, através do desenvolvimento
de aplicativos adequados à seu tipo de atividade. Neste sentido, este trabalho
apresenta o sistema operacional Symbian e suas características, juntamente com as
principais ferramentas e tecnologias disponíveis para o desenvolvimento de
aplicativos para celular, utilizando a plataforma Java 2 Micro Edition. Também são
apresentadas as estruturas e tecnologias que envolvem os recursos necessários
para efetuar a comunicação destes dispositivos móveis com servidores remotos
através de Web Services. O estudo de caso apresenta um protótipo desenvolvido
para monitorar remotamente as atividades de uma subestação de energia elétrica, o
qual possibilita melhorias no controle de qualidade da energia elétrica fornecida pela
subestação aos consumidores.
Palavras-chave: Symbian, J2ME, MIDP, telefones celulares, Web Services,
Monitoramento Remoto.
8
LISTA DE ABREVIATURAS E SIGLAS
AMS - Application Management Software
API - Application Programming Interface
ASF - Apache Software Foundation
AWT - Abstract Window Toolkit
CDC - Connected Device Configuration
CLDC - Connected Limited Device Configuration
FP - Foundation Profile
GAIC - Grupo de Automação Industrial e Controle
GUI - Graphical user interface - Interface gráfica do usuário
IDE - Ambiente Integrado de Desenvolvimento
J2ME - Java2 Micro Edition
JAD - Java Application Descriptor
JAR - Java Archive
JCP - Java Community Proccess
JDBC - Java Database Connectivity
JDK - Java Development Kit
JMS - Java Message Service
JSP - JavaServer Pages
JSR - Java Specification Request
JVM - Java Virtual Machine
JWS - Java Web Service
KVM - Kilobyte Virtual Machine
MIDP - Mobile Information Device Profile
PBP - Personal Basis Profile
PP - Personal Profile
RMI - Remote Method Invocation
SDK - Software Development Kit
SGBD - Sistema de Gerenciamento de Banco de Dados
9
SGML - Standart Generalized Markup Language
SO - Sistema Operacional
SOAP - Simple Object Access Protocol
SR - Servidor Remoto
UDDI - Universal Description Discovery and Integration
UIQ - User Interface Quartz
URAD - Unidade Remota de Aquisição de Dados
URI - Identificador Uniforme de Recursos
WS - Web Service
WSDD - Web Service Deployment Descriptor
WSDL - Description Language
WTK - Wireless ToolKit
WWW - World Wide Web
XML - Extended Markup Language
10
LISTA DE FIGURAS
Figura 1 - Exemplos de Telefones Celulares da série S60. ...................................... 25
Figura 2 - Nokia 9210i, com SO da Série 80. ............................................................ 26
Figura 3 - Motorola Z10 com interface UIQ. .............................................................. 26
Figura 4 - Arquitetura J2ME ...................................................................................... 29
Figura 5 - Ciclo de vida de um MIDlet ....................................................................... 38
Figura 6 - Hierarquia de Classes de interface gráfica do MIDP................................. 41
Figura 7 - Seleção da JDK para download. ............................................................... 49
Figura 8 - Seleção de plataforma e idioma do JDK. .................................................. 49
Figura 9 - Link para download do JDK. ..................................................................... 49
Figura 10 - Variáveis de ambiente do Windows. ....................................................... 50
Figura 11 - Verificando a instalação do Java............................................................. 50
Figura 12 - Versões do Netbeans.............................................................................. 52
Figura 13 - Localização do JDK durante a instalação do Netbeans. ......................... 52
Figura 14 - Tela principal do Netbeans 6.9.1............................................................. 53
Figura 15 - Novo projeto no Netbeans. ..................................................................... 54
Figura 16 - Seleção do tipo de projeto no Netbeans. ................................................ 55
Figura 17 - Propriedades da nova aplicação no Netbeans. ....................................... 56
Figura 18 - Seleção da Plataforma no Netbeans....................................................... 57
Figura 19 - Configurações finais do projeto. .............................................................. 57
Figura 20 - Exibição do projeto criado no Netbeans.................................................. 58
Figura 21 - Criação de um MIDlet no projeto do Netbeans. ...................................... 59
Figura 22 - MIDlet criado no projeto. ......................................................................... 59
Figura 23 - MIDlet sendo executado no emulador do WTK. ...................................... 61
Figura 24 - Emulador da Nokia S60 3rd Edition FP2 SDK ........................................ 63
Figura 25 - Download do SDK Nokia S60 3rd Edition FP2 ........................................ 64
11
Figura 26 - Solicitação de instalação do ActivePerl................................................... 64
Figura 27 - Adicionar Plataforma ao Netbeans.......................................................... 65
Figura 28 - Tipos de Plataformas no Netbeans. ........................................................ 66
Figura 29 - Seleção de plataforma para execução do MIDlet. .................................. 66
Figura 30 - MIDlet sendo executado no emulador do S60. ....................................... 67
Figura 31 - MIDlet sendo executado no celular Nokia N81 ....................................... 67
Figura 32 - Configuração de plataforma no projeto do Netbeans. ............................. 68
Figura 33 - Exemplo TextBox .................................................................................... 70
Figura 34 - Exemplo List Exclusive, Multiple e Implicit .............................................. 71
Figura 35 - Exemplo Alert - Erro ................................................................................ 72
Figura 36 - Exemplo ChoiceGroup ............................................................................ 73
Figura 37 - Exemplo DateField .................................................................................. 74
Figura 38 - Exemplo TextField. ................................................................................. 75
Figura 39 - Exemplo Gauge. ..................................................................................... 75
Figura 40 - Exemplo ImageItem. ............................................................................... 76
Figura 41 - Exemplo StringItem ................................................................................. 77
Figura 42 - Exemplo de aplicação: Somar dois números .......................................... 79
Figura 43 - Visão Geral do Ambiente de Desenvolvimento ....................................... 79
Figura 44 - Download do Apache Tomcat 7 .............................................................. 87
Figura 45 - Download do Apache Axis 1.4 ................................................................ 87
Figura 46 - Iniciar/parar Apache Tomcat. .................................................................. 88
Figura 47 - Exemplo de aplicação: Somar dois números utilizando Web Services ... 92
Figura 48 - Arquitetura do Sistema de Monitoramento de Subestações de Energia
Elétrica ...................................................................................................................... 94
Figura 49 - Unidade Remota de Aquisição de Dados (URAD) .................................. 95
Figura 50 - Servidor Remoto (SR) ............................................................................. 95
Figura 51 - Tela do aplicativo de monitoramento ...................................................... 96
Figura 52 - Diagrama de telas da aplicação de monitoramento ................................ 98
Figura 53 - Menu da aplicação de Monitoramento .................................................... 99
Figura 54 - Gráficos gerados pela aplicação de Monitoramento ............................. 100
Figura 55 - Configurações do aplicativo de Monitoramento .................................... 102
12
LISTA DE QUADROS
Quadro 1 - Código fonte Aplicação de Exemplo........................................................ 60
Quadro 2 - Código fonte TextBox .............................................................................. 70
Quadro 3 - Código fonte List ..................................................................................... 71
Quadro 4 - Código fonte Alert.................................................................................... 72
Quadro 5 - Código fonte ChoiceGroup ...................................................................... 73
Quadro 6 - Código fonte DateField............................................................................ 74
Quadro 7 - Código fonte TextField ............................................................................ 75
Quadro 8 - Código fonte Gauge ................................................................................ 75
Quadro 9 - Código fonte ImageItem .......................................................................... 76
Quadro 10 - Código fonte exemplo de aplicação que soma dois números ............... 78
Quadro 11 - WSDL do Web Service.......................................................................... 89
Quadro 12 - XML com a resposta da chamada de um método do WS pelo Browser89
Quadro 13 - Código fonte da aplicação de exemplo com WS ................................... 92
Quadro 14 - Método do WS da aplicação de Monitoramento .................................. 101
13
LISTA DE TABELAS
Tabela 1 - Volume de vendas de Smartphones ........................................................ 21
Tabela 2 - Comparação entre perfis das configurações CDC e CLDC ..................... 35
Tabela 3 - Pacotes da API microedition. ................................................................... 36
Tabela 4 - Pacotes adicionais do CLDC. ................................................................... 37
Tabela 5 - Tipos de Command .................................................................................. 43
14
SUMÁRIO
INTRODUÇÃO .......................................................................................................... 17
1.
SYMBIAN ........................................................................................................... 20
1.1. Histórico ...................................................................................................... 22
1.2. Arquitetura .................................................................................................. 23
1.3. Interfaces do usuário do Sistema Operacional Symbian............................. 24
1.3.1.
S60 ...................................................................................................... 25
1.3.2.
Série 80 ............................................................................................... 25
1.3.3.
User Interface Quartz (UIQ) ................................................................. 26
1.4. Linguagens de programação suportadas .................................................... 27
2.
J2ME – JAVA 2 MICRO EDITION ..................................................................... 28
2.1. Arquitetura do J2ME ................................................................................... 28
2.2. Configurações ............................................................................................. 30
2.2.1.
Connected Limited Device Configuration (CLDC) ................................ 30
2.2.2.
Connected Device Configuration (CDC) .............................................. 31
2.3. Perfis ........................................................................................................... 32
2.3.1.
Foundation Profile (FP) ........................................................................ 33
2.3.2.
Personal Basis Profile (PBP) ............................................................... 33
2.3.3.
Personal Profile (PP) ........................................................................... 33
2.3.4.
Mobile Information Device Profile (MIDP) ............................................ 34
3.
MOBILE INFORMATION DEVICE PROFILE - MIDP......................................... 36
3.1. API microedition .......................................................................................... 36
3.2. MIDlets ........................................................................................................ 37
3.2.1.
Ciclo de vida de um MIDlet .................................................................. 37
3.3. Midlets Suite ............................................................................................... 40
4.
INTERFACE GRÁFICA DE UM MIDLET ........................................................... 41
4.1. Display ........................................................................................................ 42
4.2. Displayable – Interface com o usuário de alto nível .................................... 42
4.3. Command ................................................................................................... 42
4.4. Ticker .......................................................................................................... 43
4.5. Screen......................................................................................................... 43
15
4.5.1.
TextBox ................................................................................................ 43
4.5.2.
List ....................................................................................................... 44
4.5.3.
Alert ..................................................................................................... 44
4.5.4.
Form .................................................................................................... 44
4.5.5.
Item ...................................................................................................... 45
4.5.5.1. ChoiceGroup .................................................................................... 45
4.5.5.2. DateField.......................................................................................... 45
4.5.5.3. TextField .......................................................................................... 46
4.5.5.4. Gauge .............................................................................................. 46
4.5.5.5. ImageItem ........................................................................................ 46
4.5.5.6. StringItem......................................................................................... 46
4.6. Canvas – Interface com o usuário de baixo nível ....................................... 47
4.6.1.
Graphics .............................................................................................. 47
5.
AMBIENTE DE DESENVOLVIMENTO .............................................................. 48
5.1. JDK - Java Development Kit ....................................................................... 48
5.1.1.
Baixando e instalando o JDK ............................................................... 48
5.1.2.
Configurando as variáveis de ambiente ............................................... 50
5.2. IDE Netbeans 6.9.1 ..................................................................................... 51
5.2.1.
Download e instalação do Netbeans 6.9.1 ........................................... 51
5.2.2.
Wireless Toolkit.................................................................................... 53
5.2.3.
Por que utilizar o Netbeans? ................................................................ 54
5.3. Criando um novo projeto no Netbeans 6.9.1............................................... 54
5.4. Executando a aplicação no Wireless Toolkit (WTK).................................... 61
5.5. Software Development Kit (SDK) ................................................................ 62
5.5.1.
Software S60 3rd Edition FP2 SDK ..................................................... 62
5.5.2.
Download e instalação do SDK S60 3rd Edition, FP2.......................... 63
5.5.3.
Adicionando a plataforma S60 ao Netbeans ........................................ 65
5.5.4.
Executando a aplicação na Plataforma S60 ........................................ 66
5.5.5.
Utilizando os elementos visuais de alto nível ....................................... 69
5.5.5.1. TextBox ............................................................................................ 69
5.5.5.2. List ................................................................................................... 71
5.5.5.3. Alert.................................................................................................. 72
5.5.5.4. Form (e seus “Items”)....................................................................... 72
5.5.6.
Exemplo de aplicação: Somar dois números ....................................... 77
5.6. Visão Geral do Ambiente de Desenvolvimento ........................................... 79
6.
WEB SERVICES ................................................................................................ 80
6.1. Utilização .................................................................................................... 81
6.2. Tecnologias................................................................................................. 81
6.2.1.
XML ..................................................................................................... 81
6.2.2.
SOAP ................................................................................................... 82
6.2.3.
WSDL .................................................................................................. 82
6.2.4.
UDDI .................................................................................................... 83
6.3. Arquitetura Básica dos Web Services ......................................................... 84
16
6.4. Vantagens ................................................................................................... 84
6.5. Desvantagens ............................................................................................. 85
6.6. Apache Tomcat v.7 ..................................................................................... 85
6.7. Apache Axis v1.4 ........................................................................................ 86
6.8. Instalação do Apache Tomcat e Apache Axis ............................................. 86
6.9. Desenvolvendo um Web Service simples ................................................... 88
6.10.
Exemplo de aplicação: Somar dois números utilizando WS .................... 90
6.10.1. kSOAP e kXML .................................................................................... 90
6.10.2. Modificando o projeto para conectar ao Web Services ........................ 90
7. ESTUDO DE CASO: ADIÇÃO DE UM MÓDULO MÓVEL AO SISTEMA DE
MONITORAMENTO EM SUBESTAÇÕES DE ENERGIA ELÉTRICA ..................... 93
7.1. Sistema De Monitoramento Em Subestações De Energia Elétrica ............. 93
7.1.1.
Subsistema De Aquisição De Dados ................................................... 94
7.1.2.
Subsistema Servidor Remoto .............................................................. 95
7.1.3.
Subsistema Controlador Supervisório .................................................. 96
7.2. Protótipo Do Subsistema Móvel Incorporado .............................................. 97
7.2.1.
Funcionamento Geral Da Aplicação .................................................... 97
7.2.2.
Menu .................................................................................................... 98
7.2.3.
Gráficos ............................................................................................... 99
7.2.4.
Conexão com o Web Services ........................................................... 100
7.2.5.
Configurações .................................................................................... 102
7.2.6.
Outras tecnologias utilizadas ............................................................. 102
7.3. Considerações Finais do Protótipo Desenvolvido ..................................... 103
CONCLUSÃO ......................................................................................................... 105
Trabalhos Futuros ................................................................................................ 106
REFERÊNCIAS BIBLIOGRÁFICAS ....................................................................... 107
17
INTRODUÇÃO
É notável, a cada dia, o avanço tecnológico que certos dispositivos vêm
sofrendo. A utilização de telefones celulares e suas tecnologias estão cada vez mais
presentes na vida do ser humano que, hoje, utiliza estas tecnologias como uma
necessidade, e não mais apenas como uma mera novidade. O uso destas
tecnologias possibilita a realização de tarefas que antes só poderiam ser feitas com
o auxílio de computadores tradicionais.
Com o intuito de aproveitar a capacidade computacional dos dispositivos
móveis, as empresas buscam soluções que possam integrar e melhorar as
atividades de seu dia-a-dia. Grandes empresas da informática investem cada vez
mais no desenvolvimento de software para telefones celulares, como por exemplo, a
Sun Microsystem, a qual desenvolveu uma versão reduzida de sua plataforma Java,
o Java 2 Micro Edition (J2ME), justamente para atender a demanda para estes
pequenos dispositivos.
O Java difere de outras linguagens de programação, pois possui recursos de
Orientação a Objetos, proporcionando códigos portáveis, reusáveis e robustos,
bastando ter disponível nos dispositivos móveis, uma Máquina Virtual.
A objetivo inicial deste trabalho de conclusão de curso é realizar um estudo
de caráter exploratório, a fim de se obter base teórica sobre ferramentas existentes,
juntamente com informações sobre o ambiente de desenvolvimento de softwares
para celular que utilizam o Sistema Operacional Symbian, através de revisão
bibliográfica em livros, trabalhos publicados e na internet. Após essa fase, o trabalho
18
possui caráter explicativo, pois demonstra como utilizar as ferramentas e recursos
pesquisados.
Após a fase exploratória, o trabalho apresenta um estudo de caso, onde será
desenvolvido o protótipo de um Subsistema Móvel para o Sistema de Monitoramento
em uma Subestação de Energia Elétrica, cuja finalidade será desenvolver um
aplicativo para telefones celulares para obter dados e monitorar as atividades da
subestação de energia remotamente.
O estudo de caso foi aplicado a um projeto de pesquisa de iniciação
científica junto ao GAIC – Grupo de Automação Industrial e Controle, que é um
grupo de pesquisas nas áreas de Engenharia Elétrica e Informática, localizada do
DETEC – Departamento de Tecnologia, da Universidade Regional do Noroeste do
Estado do Rio Grande do Sul, conforme o Capítulo 7.1.
A estrutura do trabalho divide-se em sete capítulos. O primeiro deles
aborda o Sistema Operacional para telefones celulares, o Symbian. Apresenta seu
histórico, sua arquitetura, as séries existentes, e ainda, uma breve análise de
mercado.
O Segundo capítulo aborda uma breve explanação da tecnologia Java 2
Micro Edition, com sua arquitetura, configurações e perfis.
O terceiro capítulo refere-se ao perfil Mobile Information Device Profile
(MIDP), apresentando o ciclo de vida das aplicações, perfil este, que será utilizado
para a construção de aplicativos para os telefones celulares.
O quarto capítulo apresenta detalhadamente cada um dos elementos
disponíveis para criar a interface gráfica para que os usuários possam interagir com
a aplicação.
O quinto capítulo descreve como adquirir, instalar e utilizar as ferramentas
disponíveis para o desenvolvimento. Também mostra como utilizar os elementos de
interface gráfica, descritos no capítulo quatro.
19
O sexto capítulo, por sua vez, contém informações referentes aos Web
Services. Apresenta exemplos de utilização, tecnologias, arquitetura, vantagens,
desvantagens e as ferramentas utilizadas para disponibilizar os serviços do Web
Service.
O último capítulo demonstra a produção do aplicativo utilizado no estudo de
caso. Apresenta os recursos utilizados e seu funcionamento e os resultados obtidos
com a implantação deste protótipo.
Por fim, são apresentadas as conclusões do trabalho e as referências bibliográficas
consultadas.
20
1. SYMBIAN
Symbian é o Sistema Operacional (SO) desenvolvido para telefones
celulares utilizados por diversos fabricantes como: Nokia, Sony Ericsson, Panasonic,
Motorola e Samsung. É um SO desenvolvido para telefone celulares do tipo
“multimídia”, ou seja, celulares que suportam o uso de câmeras fotográficas,
mensagens do tipo SMS e MMS, wireless, bluetooth, vídeos, músicas, entre outras
funções, as quais se tornam muito importantes quando o assunto tratado é
mobilidade.
Por ser um SO 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 muito para que este fosse um SO propício
para o mercado.
Notícias recentes publicadas em um dos portais sobre Mobilidade [1] indicam
que as empresas Sony Ericsson e Samsung abandonaram a utilização do SO
Symbian em seus novos telefones celulares. A Sony Ericsson afirma que “não tem
planos para desenvolver nenhum novo produto para o padrão ou sistema
operacional da Fundação Symbian” enquanto o foco da Samsung será utilizar seu
novo SO lançado em 2009, conhecido como “Bada”, já disponível no dispositivo
“Samsung Wave S8500”. Mesmo sem utilizar o SO Symbian, as duas empresas
ainda serão membros da Fundação Symbian, a qual é mantenedora oficial deste
SO, apenas para manter as aparências.
Apesar de uma considerável queda na utilização do Symbian como SO nos
dispositivos móveis devido aos SOs concorrentes, uma pesquisa realizada pela
21
Revista Info [2] demonstrou que em 2010 o Symbian abrange uma fatia de cerca de
37% no mercado de smartphones, seguido de suas concorrentes Android com cerca
de 20%, BlackBerry com 17%, Apple iOS com 13%, Windows Mobile e outros com
6%.
Segundo a GARTNER [3], no terceiro quadrimestre de 2010 foram vendidos
417 milhões de unidades de celulares. O que torna evidente a troca dos
computadores, notebooks e netbooks, por aparelhos de menor porte, porém com
poder computacional suficiente para resolver as tarefas diárias dos usuários, como
ler e-mails, navegar na Web, edição básica de textos, etc...
Mesmo com a liderança da Nokia com seus dispositivos com o SO Symbian,
o Android tem subido rapidamente nas quotas de mercado para aderir em menos de
um ano um valor equivalente ao crescimento de 25% nas vendas de todos os
dispositivos vendidos com este sistema operacional. Parte deste crescimento
ocorreu devido à parceria com diversas empresas para desenvolvimento e
distribuição de aparelhos para os diversos nichos do mercado, com exceção dos
dispositivos da Apple (iOS), com distribuição somente por parte desta empresa.
A Tabela 1 apresenta o volume de vendas de Smartphones em unidades e
porcentagem de mercado no terceiro quadrimestre de 2009 e 2010.
Company
3Q10
Units
29,480.1
20,500.0
13,484.4
11,908.3
2,247.9
3Q10 Market Share
(%)
36.6
25.5
16.7
14.8
2.8
3Q09
Units
18,314.8
1,424.5
7,040.4
8,522.7
3,259.9
3Q09 Market Share
(%)
44.6
3.5
17.1
20.7
7.9
2.1
1.5
100.0
1,918.5
612.5
41,093.3
4.7
1.5
100.0
Symbian
Android
iOS
Research In Motion
Microsoft Windows
Mobile
Linux
1,697.1
Other OS
1,214.8
Total
80,532.6
Tabela 1 - Volume de vendas de Smartphones
Fonte: Gartner [3].
22
1.1.
Histórico
Fundada em 1980, a Psion, uma empresa de Hardware iniciou suas
atividades voltadas para Personal Digital Assistants (PDAs). Com o passar dos anos,
houve grandes mudanças, desde a união com outras empresas até o
desenvolvimento
de
sistemas
operacionais
para
celulares.
Alguns
pontos
importantes são listados a seguir, conforme [4].
1980 – Fundada a Psion por David Potter. Psion era uma empresa de Hardware
para PDAs.
Início de 1990 – Criado o EPOC16. Um SO para dispositivos com processadores da
família Intel 8086 com 16 bits.
Década de 90 – Lançado o EPOC32. Um SO com proteção de memória e
multitarefa, também para PDAs. Desenvolvido para família de processadores ARM,
incluindo o ARM7, ARM9, StrongARM e Intel XScale.
1997 – Lançado a versão “Série 5” do EPOC.
1998 – A Psion Software tornou-se Symbian Ltd., juntamente com as empresas
Ericsson, Motorola e Nokia.
2001 – Lançado o SO Symbian 6.0. Fornecia suporte para uma nova gama de
smartphones.
2003 – Lançado o SO Symbian 7.0. Fornecia melhorias na interface com o usuário.
Suporte a câmeras, cartões de memória, melhorias no Bluetooh, porta Infravermelho
e rádio.
2004 – A Psion vendeu sua participação na Symbian. Também foi criado o primeiro
vírus para este SO, chamado de Cabir, o qual se espalhava para outros dispositivos
através de Bluetooth.
2004 – Lançado o SO Symbian 8.0 com duas opções de escolha para o Kernel.
Inclusão de APIs para dar suporte às redes de comunicações CDMA, 3G, internet,
suporte a gráficos e acesso direto da tela dos dispositivos.
2005 – Lançado o SO Symbian 9.1. A versão 9.0 foi utilizada somente para fins
internos da empresa. A versão 9.1 inclui melhorias de segurança.
23
2006 – Lançado Symbian OS 9.2. Uso da “Série 60 da Nokia 3ª Edição”, incluindo os
modelos Nokia E71, Nokia E90, Nokia N95, Nokia N82, Nokia N81 e Nokia 5700.
Julho de 2006 – Lançado o Symbian OS 9.3. Melhoramentos na gestão da memória
e suporte nativo para Wi-Fi 802.11 e HSDPA. Principais modelos: Nokia E72, Nokia
5730 XpressMusic, Nokia N79, Nokia N96, Nokia E52, Nokia E75, Nokia 5320
XpressMusic e Sony Ericsson P1.
Março de 2007 - Lançado o Symbian OS 9.4. As aplicações iniciam até 75% mais
rápidas. Principais modelos: Samsung i8910 Omnia HD, Nokia N97, Nokia N97 mini,
Nokia 5800 XpressMusic, Nokia 5530 XpressMusic, Nokia 5228, Nokia 5230, Nokia
5233, Nokia 5235, Nokia C6-00, Nokia X6, Sony Ericsson Satio, Sony Ericsson Vivaz
e Sony Ericsson Vivaz Pro.
2007 - Lançado o Symbian OS 9.5, com suporte nativo para televisão digital.
2008 – Anúncio da Symbian Ltd. em se transformar em Symbian Foundation. Esta
transformação vigorou em 2009, onde o Symbian tornou-se Software Livre. O
Objetivo era publicar o código fonte de toda plataforma Symbian.
2010 – Primeiro dispositivo (Nokia N8) com suporte a saída Full HD e também foi o
primeiro dispositivo a fazer parte do Symbian^3 (primeira versão completamente
open source do Symbian). Possuem interfaces sensíveis ao toque melhoradas.
Estava previsto para o início de 2011 o lançamento da versão Symbian^4, porém em
outubro de 2010 a Nokia anunciou que não seria lançada esta nova versão, e sim,
apenas melhorias para a versão Symbian^3.
1.2.
Arquitetura
A arquitetura do SO Symbian pode ser definida em seis partes, conforme [5].
Kernel – O Kernel gerencia o SO Symbian.
Ele gerencia a memória e
escalona os programas para execução. Também aloca recursos compartilhados do
sistema do dispositivo móvel e gerencia qualquer funcionalidade que necessite de
acesso privilegiado à CPU.
24
Bibliotecas Básicas – As bibliotecas básicas contêm APIs que oferecem
funcionalidades tais como manipulação de strings, listas, arquivos de entrada/saída,
banco de dados, manipulação de erros e temporizadores. Oferecem também acesso
às funções do kernel, como por exemplo, comunicação entre cliente/servidor. As
bibliotecas não são utilizadas apenas pelas aplicações, e sim, pelo próprio sistema
operacional.
Serviços e Protocolos - Fornecem acesso a serviços e dados de aplicação.
Ex: Manipular dados de contatos, calendários, listas de tarefas, alarmes e até
mesmo comunicação.
Framework
de
aplicação
–
Apresenta
a
estrutura
básica
para
funcionamento da interface gráfica do usuário das aplicações instaladas no
smartphone.
Arquitetura de Comunicação – Consiste em APIs para implementar
comunicação de dados. Inclui comunicação por TCP/IP através da operadora de
telefonia móvel, bem como protocolos de comunicação através de Bluetooth,
infravermelho, USB, SMS, MMS e serviços de e-mail.
Middlewares – Inclui diversas outras APIs para outros tipos de
funcionalidades, como por exemplo, execução/manipulação de conteúdo multimídia.
1.3.
Interfaces do usuário do Sistema Operacional Symbian
As diferentes interfaces de usuário para o SO Symbian foram planejadas e
projetadas para permitir que os fabricantes possam produzir uma gama de telefones
com diferentes estilos. A divisão entre estas interfaces é feita através dos recursos
disponíveis em cada tipo de dispositivo.
Conforme EDWARDS [6], existem três categorias, sendo elas S60
(conhecida como Série 60), Série 80 e UIQ. Havia uma quarta categoria, a Série 90,
porém esta agora faz parte da S60.
25
1.3.1.
S60
S60 é a série constituída por um conjunto de bibliotecas e aplicativos
padrão, destinados a fornecer telefones celulares mais modernos e cheios de
recursos, como telas coloridas maiores, e conteúdo multimidia (i.e. sons, vídeos,
imagens), amplamente conhecidos como smartphones.
Quando falamos em S60 associamos diretamente esta série aos telefones
celulares produzidos pela Nokia, a qual é a maior fabricante que utiliza este SO,
embora esteja licenciada para telefones celulares de outros fabricantes como BenQSiemens, Samsung e Panasonic. A Figura 1 apresenta alguns telefones celulares da
série S60.
A esta série também está atribuida a utilização de um teclado do tipo ITU-T,
o qual é o teclado “tradicional” da maioria dos telefones celulares, composto por
doze teclas, sendo elas os números de 0 à 9, a tecla asterisco (*) e a tecla sustenido
(#).
Figura 1 - Exemplos de Telefones Celulares da série S60.
1.3.2.
Série 80
A série 80 foi projetada principalmente para dispositivos de usuários voltados
a área de negócios, onde é necessário acessar, visualizar e manipular dados
usando telas maiores, com resolução mínima de 640x200px.
26
Também é conhecida pela utilização de teclados completos, do tipo
QWERTY, similar aos teclados utilizados em computadores comuns. Atualmente
somente a Nokia produz telefones para a Série 80, cujo dispositivo é "dobrável",
onde o teclado e a tela maior ficam no interior do aparelho, quando este se encontra
fechado, conforme Figura 2.
Figura 2 - Nokia 9210i, com SO da Série 80.
1.3.3.
User Interface Quartz (UIQ)
Os telefones celulares baseados em UIQ possuem uma interface de usuário
baseada em telas sensíveis ao toque (i.e. touch screen) ou ainda com utilização a
partir de uma caneta. Possuem resolução mínima de 320x240px com no mínimo 12
ou 16 bits de cor.
Os principais dispositivos que utilizam UIQ são produzidos pela Sony
Ericsson, Motorola e BenQ-Siemens. A Figura 3 mostra um modelo produzido
utilizando a interface UIQ. Note que a presença de teclado físico não é obrigatória
nos dispositivos.
Figura 3 - Motorola Z10 com interface UIQ.
27
1.4.
Linguagens de programação suportadas
O SO Symbian é um sistema muito versátil, pois permite a utilização de
várias linguagens de programação para o desenvolvimento dos aplicativos, onde se
destacam o Symbian C/C++, JavaME, FlashLite, Perl, Python, Ruby, Lua e
Acelarometer.
Este trabalho utiliza-se de dispositivos pertencentes à série S60 do Symbian.
Portanto, será utilizada a linguagem de programação Java 2 Micro Edition (J2ME),
pois esta apresenta vários recursos e bibliotecas para o desenvolvimento dos
aplicativos e também por haver uma grande documentação de suporte para esta
linguagem. No Capítulo 2 são abordados, a seguir, detalhes sobre o J2ME.
Este capítulo apresentou uma introdução sobre o sistema operacional
Symbian, seu histórico, arquitetura, suas séries, as quais os telefones celulares se
subdividem e as linguagens de programação suportadas para o desenvolvimento. O
Capítulo 2 apresenta conceitos sobre a linguagem de programação J2ME (Java 2
Micro Edition) com suas subdivisões caracterizados por “Configurações” e “Prefis”,
como descritos a seguir.
28
2. J2ME – JAVA 2 MICRO EDITION
J2ME ou Java 2 Micro Edition é uma tecnologia que possibilita o
desenvolvimento de software para sistemas e aplicações embarcadas, ou seja, para
as aplicações que rodam em dispositivos portáteis, como por exemplo, os PDAs,
telefones celulares e controles remotos, pois eles possuem recursos e funções
limitadas. Java ME é uma coleção de APIs do Java definidas através da Java
Community Proccess (JCP).
Em [7], MUCHOW afirma que J2ME é um pacote padrão de utilidades para
desenvolvimento de aplicações para dispositivos móveis, na qual permite o uso dos
perfis Mobile Information Device Profile (MIDP) 1.0, 2.0, 2.1 nas configurações
Connected Limited Device Configuration (CLDC) e Connected Device Configuration
(CDC).
As aplicações que são executadas nesses dispositivos têm funcionamento
diferenciado das aplicações desenvolvidas para servidores ou desktop. A interação
do usuário com o dispositivo pode ocorrer a qualquer hora do dia, em qualquer lugar,
pois o usuário terá em mãos o dispositivo e o mesmo pode precisar integrar com
algum tipo de serviço, desde que para isto se tenha disponível cobertura de rede
sem fio, seja ela por wireless ou até mesmo serviços de navegação oferecidos por
operadoras de celular.
2.1.
Arquitetura do J2ME
A arquitetura do J2ME é dividida em quatro camadas, sendo elas Perfis,
Configurações, Máquinas Virtuais e Sistema Operacional [8], de acordo com a
Figura 4.
29
Figura 4 - Arquitetura J2ME
Na primeira das camadas temos o sistema operacional hospedeiro, que é o
SO instalado no dispositivo móvel, como o Symbian, enfoque principal deste
trabalho.
Na segunda camada temos a máquina virtual, conhecida como Kilobyte
Virtual Machine (KVM), que é uma máquina virtual desenvolvida para a família de
dispositivos telefônicos e celulares, especialmente implementada para executar
programas em dispositivos com pouca capacidade computacional (i.e. memória e
processador limitados).
Na terceira camada são definidas as configurações, que são conjuntos de
classes, bibliotecas e APIs que definem os recursos necessários para o
funcionamento da máquina virtual, bem como as funcionalidades básicas para cada
categoria de dispositivos.
Na última camada são delimitados os perfis, que são conjuntos de
aplicações
cuja
finalidade
é
complementar
uma
configuração
e
fornecer
funcionalidades adicionais para desenvolver um aplicativo para um determinado
dispositivo.
É possível inserir no topo das camadas o item “APIs opcionais”. Estas APIs
são utilizadas em conjunto com as configurações e perfis para estender as
funcionalidades não encontradas nestes, como por exemplo, utilização de Bluetooth,
Wireless e Web Services (WS).
30
A seguir serão abordados os conceitos de Configurações, Perfis e Máquinas
Virtuais.
2.2.
Configurações
O conceito de configuração foi criado para dividir em espécie de categorias a
ampla variedade de dispositivos móveis disponíveis para os usuários. O objetivo de
uma configuração é definir um padrão de ambiente de execução de programas de
acordo com suas características de hardware. Cada configuração consiste em uma
JVM com uma coleção de classes Java.
Em [7], MUCHOW mostra que:
Uma configuração define uma plataforma Java para uma ampla
variedade de dispositivos. Ela está intimamente vinculada a uma
máquina virtual Java (JVM, Java Virtual Machine). Na verdade, uma
configuração define os recursos da linguagem Java e as bibliotecas
Java básicas da JVM para esta configuração em particular.
As configurações são divididas basicamente pelos recursos de hardware
disponíveis nos dispositivos móveis, como a quantidade de memória, o poder de
processamento, a capacidade de vídeo e a conectividade de rede, entre outras.
A arquitetura J2ME apresenta atualmente dois tipos de configurações, como
descritos a seguir:
2.2.1. Connected Limited Device Configuration (CLDC)
Sendo 1.1 sua versão atual, a CLDC, ou, Configuração de Dispositivo
Conectado Limitado, abrange dispositivos com grandes restrições referentes à
memória, processamento, capacidade gráfica, tamanho da tela, conexões de rede e
duração da bateria. Fazem parte desta configuração basicamente telefones
celulares, smartphones, PDAs e pagers. Esta configuração será utilizada no decorrer
deste trabalho.
31
Os recursos de hardware são apresentados conforme [8]:
•
Processador de 16-Bit ou 32-Bit com velocidade de 16 MHz ou superior;
•
Memória não-volátil de 160 KB;
•
Memória RAM de 192 KB para a plataforma Java;
•
Possibilidade de conexão com redes sem fio.
O mesmo autor apresenta as quatro classes disponíveis nesta configuração:
java.io - Tratamento de entrada e saída de dados;
java.lang - Classes básicas da linguagem Java.
java.util - Classes de utilidades genéricas (estrutura e manipulação de dados).
java.microedition.io - Exclusivo do J2ME, incluindo as classes de conexão.
A CLDC disponibiliza também alguns pacotes adicionais que podem ser
utilizados em alguns dispositivos para dar suporte a outras funções, como por
exemplo, a execução de conteúdo multimídia (i.e. músicas, imagens, vídeos).
A máquina virtual compatível com a CLDC é a K Virtual Machine (KVM), ou
ainda, Máquina Virtual K. A KVM é uma versão limitada da Java Virtual Machine
(JVM).
MUCHOW [7] explica que:
A KVM foi projetada para ser a menor e a mais eficiente possível, e ainda
permanecer rápida para as necessidades da linguagem Java. Com a
memória sendo normalmente um recurso precioso em dispositivos pequenos
de recursos restritos, a base de tempo de execução é de apenas 60 kilobytes
(aproximadamente). O que explica a origem do K no nome KVM, pois a
máquina virtual executará em apenas algumas dezenas de kilobytes de
memória.
2.2.2.
Connected Device Configuration (CDC)
A segunda configuração é a CDC, ou ainda, Configuração de Dispositivo
Conectado, cuja versão atual é a 1.1.2, abrange dispositivos com mais capacidade
de hardware do que os disponíveis na configuração CLDC (i.e. Televisores do tipo
Set-Top Box, navegadores veiculares e PDAs topo de linha).
32
Hardware básico [8]:
Processador de 32-Bit;
Memória não-volátil de 2.5 MB;
Memória RAM de 2 MB ou superior.
Por não haver tanta limitação de hardware, a máquina virtual que a CDC
utiliza é a máquina virtual tradicional do Java 2 Standart Edition, a qual permite a
utilização de todos os recursos da linguagem Java. Esta configuração também
permite a utilização de pacotes opcionais, sendo eles o suporte a Remote Method
Invocation (RMI), Java Database Connectivity (JDBC), Swing e Java 2D.
Mesmo a divisão destas duas configurações parecendo ser bem definidas, a
evolução dos dispositivos e a melhoria de seus recursos ocasionam uma
sobreposição, dificultando sua classificação. Neste sentido, a Sun introduziu o
conceito de perfil, como descrito a seguir.
2.3.
Perfis
MUCHOW [7] define um perfil como “uma extensão de uma configuração.
Ele fornece as bibliotecas para um desenvolvedor escrever aplicativos para um tipo
particular de dispositivo”.
Um perfil especifica 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, porém compreende bibliotecas mais
específicas que as disponibilizadas pelas configurações, ou seja, o
perfil complementa a configuração adicionando classes que fornecem
características apropriadas para um tipo particular de dispositivos. [9].
33
Os perfis são divididos entre as configurações da seguinte forma:
Configuração CDC possui os seguintes perfis: Foundation Profile (FP); Personal
Basis Profile (PBP); Personal Profile (PP) e a configuração CLDC possui o perfil
Mobile Information Device Profile (MIDP).
2.3.1.
Foundation Profile (FP)
FP é um perfil básico da configuração CDC, o qual possui um conjunto de
APIs Java para dispositivos que não possuem interface gráfica, ou seja, para
dispositivos de hardware embutido. [10]
Requisitos Mínimos:
2.3.2.
•
512 KB de memória RAM;
•
1 MB de memória ROM;
•
Conectividade com algum tipo de rede.
Personal Basis Profile (PBP)
O PBP também é um perfil da configuração CDC, sendo mais completo que
o FP, suportando dispositivos que tenham interface gráfica. Destina-se a ser usado
em dispositivos que possuem uma capacidade de interface de usuário simples e,
portanto, não permite que mais de uma janela esteja ativa simultaneamente em
outra janela. Apresenta basicamente os mesmo requisitos do FP. [11]
2.3.3.
Personal Profile (PP)
É o perfil mais completo e utilizado da configuração CDC. Inclui todas as
funcionalidades dos perfis FP e PBP com suporte a applets e Abstract Window
Toolkit (AWT, API padrão para interface gráfica do usuário). [12]
34
Requisitos Mínimos:
• 1 MB de memória RAM;
• 2,5 MB de memória ROM;
• Conectividade mais robusta com algum tipo de rede;
• Interface gráfica do usuário (GUI).
2.3.4.
Mobile Information Device Profile (MIDP)
O perfil MIDP é o único perfil compatível com CLDC e implementa
componentes, entrada e tratamento de eventos de interface com usuário,
armazenamento persistente, interligação em rede, segurança, entre outros recursos.
Sua última versão é a 2.1 e, por ser um perfil pertencente à configuração mais
simples, contempla apenas os dispositivos com hardware mais limitado (i.e.
telefones celulares, smartphones), objetos em estudo neste trabalho.
Requisitos mínimos:
• 512 KB de memória ROM + RAM para bibliotecas e Java;
• Conectividade com algum tipo de rede;
• Interface gráfica com recursos variados entre os dispositivos.
JOHNSON [8] salienta que:
O MIDP apresenta diversas funcionalidades, como suporte aos
protocolos de rede do tipo HTTP e sockets, reprodução de multimídia,
definição de formulários e itens, APIs para jogos, suporte ao sistema
de cores RGB e validação de permissões de segurança e assinaturas
virtuais.
A seguir, a Tabela 2 apresenta a comparação dos quatro perfis descritos
anteriormente.
35
Perfil
Configuração
Última
Versão
Processador ROM
RAM
Foundation
Profile
CDC
1.1.2
32 bits
> 1MB
> 512 KB • Rede
Hardware
Embutido
> 1MB
• Rede
> 512 KB • Interface
Gráfica
Hardware
Embutido com
Interface
Gráfica
Personal
Basis Profile
CDC
1.1
32 bits
Outros
Personal
Profile
CDC
1.1
32 bits
> 2,5 MB > 1 MB
• Rede Robusta
• Interface
Gráfica AWT
Mobile
Information
Device
Profile
CLDC
2.1
> 16MHz
16 ou 32
bits
> 512 KB
• Rede
• Interface
Gráfica
Dispositivos
Hardware
Embutido com
Interface
Gráfica AWT
• Celulares
• Smartphones
Tabela 2 - Comparação entre perfis das configurações CDC e CLDC
Fonte: Do autor.
Após analisar as configurações e perfis existentes na classificação dos
dispositivos, definimos o perfil a ser utilizado no escopo principal deste trabalho, que
é desenvolver aplicações para telefones celulares. Portanto, define-se como
configuração a CLDC e como perfil, o MIDP, detalhado a seguir, no Capítulo 3.
Este capítulo apresentou a linguagem J2ME e suas particularidades. O
Capítulo 3, a seguir, descreve detalhadamente o perfil MIDP (Mobile Information
Device Profile), apresentando os MIDlets, que são as aplicações desenvolvidas.
36
3. MOBILE INFORMATION DEVICE PROFILE - MIDP
Neste capítulo, serão apresentadas algumas características do Perfil de
Dispositivo de Informação Móvel (MIDP), ou simplesmente Perfil MID.
Dando continuidade ao conteúdo exposto no Capítulo 2.3.4, será mostrado a
API microedition, os MIDlets e a interface gráfica.
3.1. API microedition
A API microedition é o conjunto de pacotes para utilização somente em um
perfil MIDP. JOHNSON [8] apresenta os cinco pacotes que compõem a API,
conforme Tabela 3.
Pacote
Definição
javax.microedition.midlet.*
Define as aplicações MIDP e a interação entre a aplicação e o
ambiente de execução.
javax.microedition.lcdui.*
Fornece as classes para implementação da interface gráfica.
javax.microedition.lcdui.game.*
Fornece as classes para desenvolvimento de Jogos.
javax.microedition.rms.*
Fornece as classes usadas para implementar armazenamento de
dados no dispositivo.
javax.microedition.pki.*
Permite uso de autenticação para comunicações seguras.
Tabela 3 - Pacotes da API microedition.
37
Como o perfil MIDP faz parte da configuração CLDC, os pacotes disponíveis
para esta configuração também ficam disponíveis para o perfil. A Tabela 4 apresenta
estes pacotes adicionais [8].
Pacote
java.lang
java.io
java.util
javax.microedition.io
Definição
Classes fundamentais da linguagem Java
Classes de entrada e saída, arquivos
Utilidades, Data, Hora, entre outros
Conexões de rede
Tabela 4 - Pacotes adicionais do CLDC.
3.2.
MIDlets
Todos os dispositivos móveis possuem um Application Manager Software
(AMS) cuja finalidade é controlar os aplicativos a serem instalados, definindo onde,
quando e como serão armazenados e executados. A comunicação do gerenciador
com
o
MIDlet
acontece
através
da
classe
MIDlet
presente
no
pacote
javax.microedition.midlet.MIDlet. Esta classe é herdada pelos MIDlets para que os
métodos de inicialização, pausa, resumo e interrupção da execução destes possam
ser realizados.
MUCHOW [7] define uma MIDlet como:
Um aplicativo Java projetado para ser executado em um dispositivo
móvel. Mais especificamente, uma MIDlet tem como classe Java
básicas a CLDC e o MIDP. Um conjunto de MIDlets consiste em uma
ou mais MIDlets empacotadas usando um arquivo Java Archive
(JAR).
3.2.1. Ciclo de vida de um MIDlet
O ciclo de vida de uma aplicação desenvolvida em J2ME é gerenciado pela
classe MIDlet. VINAGRE e VIANA [13] descrevem que um MIDlet pode assumir um
dos três estados: ativo, pausado e destruído, conforme Figura 5.
38
Figura 5 - Ciclo de vida de um MIDlet
Ativo: Quando o MIDlet está em execução;
Pausado: Coloca o MIDlet em estado de pausa, disponibilizando os
recursos do celular para outras atividades.
Destruído: Quando a MIDlet encerrou suas atividades e liberou todos os
recursos utilizados por este.
A classe MIDlet provê três métodos abstratos que são obrigatoriamente
utilizados pela aplicação. São eles: startApp(), pauseApp() e destroyApp() [13].
startApp() - Chamado depois do construtor. Mudar o estado de inativo para
ativo, tornando o aplicativo “visível”. Como este método é chamado toda vez que a
aplicação inicia ou volta do estado pausado, é recomendável evitar colocar códigos
de inicialização que só possa ser rodado uma única vez.
pauseApp() – Informa ao aplicativo que este será pausado, ou seja, deixará
de ser executado, geralmente para dar lugar a outra aplicação (i.e. chamada
recebida pelo celular), uma vez que a maioria dos dispositivos móveis não suporta
várias aplicações executando simultaneamente.
39
destroyApp() – Este método é chamado quando a aplicação estiver prestes
a ser encerrada e só pode ser executado apenas uma vez. Deve-se implementar
neste método uma forma de efetuar uma “limpeza” nos objetos criados pela
aplicação, uma vez que o MIDP não possui esta capacidade.
Resumidamente, uma aplicação inicia quando o AMS executa o método
startApp(), passando o aplicativo do estado inativo para o estado ativo. Neste estado
o usuário utiliza a aplicação normalmente. Caso ocorra uma ligação telefônica, por
exemplo, o AMS pode executar o método pauseApp() e passar o aplicativo do
estado ativo para o estado pausado. Ao finalizar a ligação, o AMS executa o método
startApp() novamente e o aplicativo passa para o estado ativo novamente. Quando o
usuário deseja encerrar o aplicativo, o AMS executa o método destroyApp() para
que sejam liberados os recursos utilizados por este, e para que o telefone celular
possa assumir outras aplicações.
MUCHOW [7] afirma que estes três métodos descritos anteriormente são
utilizados, no sentido, do gerenciador de aplicativos AMS para o MIDlet. Existem
também outros três métodos que partem do MIDlet para o gerenciador AMS. São
eles:
notifyDestroy(): Avisa ao gerenciador que pode desligar a MIDlet.
notifyPaused(): Envia o pedido de pausa para o gerenciador caso a MIDlet
necessite de uma pausa.
resumeRequest(): Avisa ao gerenciador que a MIDlet pode tornar-se ativa
novamente.
40
3.3.
Midlets Suite
Uma MIDlet Suite é o nome dado para a coleção de arquivos e recursos que
fazem parte do MIDlet [8]. Esta coleção de arquivos consiste em classes Java
empacotadas em um arquivo JAR, juntamente com um arquivo de manifesto, os
recursos (i.e. imagens, sons) e um arquivo que descreve a aplicação (descritor), ou
seja, o Java Application Descriptor (JAD).
Arquivo de Manifesto – É um arquivo com extensão .mf, o qual descreve o
conteúdo do pacote JAR e é armazenado dentro do próprio JAR. Possui as
seguintes informações: nome do pacote, versão, nome, nome do criador, ícone,
nome da classe principal, perfil e configuração utilizados pelo MIDlet, além de outras
informações opcionais, como descrição e tamanho do MIDlet [8].
Arquivo Descritor – O arquivo descritor, ou arquivo JAD possui muitas
informações repetidas do arquivo de manifesto, porém eles ficam fora do pacote
JAR. Por este motivo, estas informações podem ser acessadas pelo AMS sem que o
MIDlet esteja instalado. Caso haja informações diferentes entre o arquivo JAD e o
arquivo de manifesto, os atributos do arquivo JAD prevalecem. [8]
41
4. INTERFACE GRÁFICA DE UM MIDLET
Ao criar aplicativos para o perfil MIDP, o programador encontra grandes
problemas quanto à interface gráfica. Geralmente dotados de telas pequenas e com
baixa resolução, os dispositivos com configuração CLDC não implementam alguns
componentes de uso comum em aplicativos Java que rodam em computadores
comuns.
A Figura 6, a seguir, mostra a hierarquia de classes da interface gráfica do
MIDP [7]. Na sequência, uma breve descrição de cada uma delas com suas
respectivas subclasses, disponibilizadas por [7] e [8].
Figura 6 - Hierarquia de Classes de interface gráfica do MIDP.
A biblioteca que define os componentes visuais que podem ser utilizados na
elaboração das telas dos MIDlets é a javax.microedition.lcdui.*. Os objetos
disponíveis são descritos a seguir.
42
Os métodos para manipulação dos objetos e das classes dos componentes
visuais podem ser consultados na documentação do J2ME, disponível em [15].
Exemplos de utilização e formas de implementação (códigos fontes) serão descritos
no capítulo sobre desenvolvimento (Capítulo 5.5.5).
4.1.
Display
O objeto Display é o gerenciador da tela de exibição do dispositivo. É ele
quem controla o que e quando será exibido na tela. Existe apenas um objeto Display
para cada MIDlet, porém neste objeto Display podem ser exibidos diversos objetos,
a partir do objeto Displayable.
4.2.
Displayable – Interface com o usuário de alto nível
Os objetos do Displayable são os componentes que podem ser vistos na tela
do celular, ou seja, no objeto Display. O MIDP inclui duas subclasses do
Displayable. São elas a Screen e o Canvas. A subclasse Screen utiliza componentes
de alto nível enquanto a subclasse Canvas é de baixo nível.
4.3.
Command
A classe Command permite que o usuário interaja com a aplicação. Ela
permite adicionar funções relacionadas aos objetos que estão sendo exibidos na
tela.
43
Os tipos de comandos podem ser:
Tipo
Back
Cancel
Exit
Help
Item
Descrição
Comando voltar à tela anterior
Cancelar alguma ação na tela atual
Comando para sair da aplicação
Chama a ajuda do aplicativo*
Comando específico de um Item na tela
* A ajuda deve ser implementada pelo desenvolvedor.
Tabela 5 - Tipos de Command
4.4.
Ticker
Um Ticker nada mais é do que uma mensagem que fica “deslizando”
horizontalmente da direita para esquerda no topo da tela de um MIDlet. Ao terminar
de exibir a mensagem, esta reinicia sua exibição automaticamente. O Ticker
funciona apenas quando o MIDlet implementa a classe Screen.
4.5.
Screen
A classe Screen não é uma classe que pode ser “visualizada”, porém ela
possui objetos que são visíveis em qualquer um dos quatro tipos de tela (TextBox,
List, Alert, Form), como a seguir.
4.5.1. TextBox
TextBox, ou ainda Caixa de Texto, é uma área de várias linhas onde o
usuário pode utilizar como entrada de texto. Permite filtrar o texto digitado como:
qualquer texto; endereço de e-mail; numérico; senha (exibe apenas asteriscos);
número de telefone e endereços de URL.
44
4.5.2. List
List é um tipo de tela que apresenta ao usuário uma lista com itens
selecionáveis através do botão de seleção do celular. Ocupa toda a tela do celular e
oferece três tipos de interface.
Exclusive: exibe uma lista que permite a seleção de apenas um único item.
Multiple: exibe uma lista que permite a seleção de mais de um item.
Implicit: cada item da lista está associado a um comando que pode
executar uma determinada função.
4.5.3. Alert
Um Alert é uma caixa de diálogo que pode conter um texto e uma imagem.
Geralmente aparecem apenas por um período de tempo (timeout) antes de exibir
outro componente Displayable. O Alert pode assumir um dos cinco tipos:
Alarm: Aviso sobre algum evento requisitado pelo usuário. Ex: Nota de
calendário.
Confirmation: Mostra uma mensagem de confirmação.
Error: Exibe uma mensagem de erro.
Info: Fornece algum tipo de informação ao usuário.
Warning: Exibe uma mensagem para alertar o usuário sobre algum perigo
ou aviso.
4.5.4. Form
Form é a tela mais utilizada nos MIDlets. Ela pode conter diversos tipos de
itens, como imagens, textos, campos editáveis, entre outros, além de conter
Commands para interação com o usuário. Um objeto Form tem métodos para
anexar, inserir, substituir e excluir componentes (Itens). Componentes estes que são
descritos na sequência.
45
4.5.5. Item
Um Item é a superclasse dos elementos que podem ser adicionados em um
objeto Form.
MUCHOW [7] salienta que:
A classe ItemStateListener trabalha junto com um objeto Item.
Quando se quer processar eventos em um objeto Item, basta registrar
um “receptor” que receberá uma mensagem, quando um evento
ocorrer. O destinatário dessa mensagem é o método
itemStateChanged(). Com esse método, você pode determinar qual
objeto Item mudou e decidir qual ação gostaria de executar.
A Figura 6 - Hierarquia de Classes de interface gráfica do MIDP., mostrada no
início deste capítulo, ilustra o componente Item como uma subclasse do Form, o que
não ocorre realmente. Esta ilustração é feita apenas para mostrar que um Form
aceita diversos “Items”. A seguir, descrição de cada componente que compõe o
Item.
4.5.5.1.
ChoiceGroup
Um ChoiceGroup possui as mesmas características de funcionamento de um
List (Capítulo 4.5.2). A principal diferença é que um Item ChoiceGroup não ocupa
toda a tela do dispositivo, salvo casos em que há um grande número de itens na
lista, ou seja, permite que outros objetos Item sejam adicionados em um mesmo
Form. Outra diferença importante é que o ChoiceGroup não implementa o tipo
Implicit presente em um List.
4.5.5.2.
DateField
O componente DateField é usado para mostrar a data e a hora na tela do
dispositivo. Muitas vezes é necessário usar as classes Date (java.util.Date) e
Calendar (java.util.Calendar) para que seja possível exibir a data e a hora atual.
Permite a exibição de apenas a data, apenas a hora, ou os dois simultaneamente.
46
4.5.5.3.
TextField
Um TextField é um campo que permite a inserção de caracteres/palavras em
um Form. Possui diversos tipos de restrições de entrada que podem ser
“configurados”, como por exemplo, campos que só permitem dados numéricos,
alfanuméricos, números decimais, endereços de e-mail e URL, senhas, entre outros,
forçando ao usuário a digitar apenas o tipo de conteúdo pré-definido.
4.5.5.4.
Gauge
Um componente Gauge é similar a uma barra de progresso presente em
vários tipos de aplicações na computação para desktop. Possui duas maneiras de
ser atualizado. A primeira delas é pelo modo interativo onde é o usuário que faz a
alteração, e a segunda é pelo modo não-interativo, sendo atualizado através da
programação. Exemplos práticos seriam o ajuste de volume do dispositivo no
primeiro modo e, uma barra como progresso do download de um arquivo no
segundo modo.
4.5.5.5.
ImageItem
O objeto ImageItem permite que sejam inseridas uma ou mais imagens na
tela do dispositivo a partir de um objeto Image. Este objeto Image pode estar
armazenado no pacote da aplicação, ou pode ser baixado da internet.
4.5.5.6.
StringItem
StringItem é um objeto cuja finalidade é inserir um Item que contenha uma
String. Este objeto apenas insere a palavra ou texto, ou seja, não permite que o
usuário possa editá-lo, como ocorre com o TextField. Somente é possível alterar seu
conteúdo através da programação do MIDlet.
47
4.6.
Canvas – Interface com o usuário de baixo nível
Canvas é uma subclasse de Displayable que permite a implementação de
gráficos e eventos. É uma classe de baixo nível e destina-se a aplicações que
necessitem de um posicionamento mais preciso dos elementos, sendo utilizada
principalmente para a criação de jogos. Também fornece métodos para tratamento
de eventos de baixo nível e utiliza objetos Graphic para desenhar na tela.
4.6.1. Graphics
Os objetos Graphics são utilizados para formar desenhos na tela. Possuem
métodos para desenhar arcos, retângulos, linhas, imagens e texto, juntamente com
métodos que permitem manipular cores em RGB (Red, Green, Blue). Estes objetos
podem ser alinhados/posicionados de acordo com coordenadas X e Y que
representam os pixels na tela.
Este capítulo apresentou os recursos disponíveis na tecnologia J2ME para o
desenvolvimento de MIDlets do perfil MIDP. No Capítulo 5 serão abordadas as
ferramentas necessárias para o desenvolvimento destas MIDlets, bem como
instruções básicas para sua programação.
48
5. AMBIENTE DE DESENVOLVIMENTO
5.1.
JDK - Java Development Kit
O JDK é um kit de desenvolvimento Java fornecido gratuitamente pela Sun
Microsystems. É formado por um conjunto de programas que engloba compilador,
interpretador e utilitários, os quais fazem parte de um pacote de ferramentas básicas
para o desenvolvimento de aplicações Java.
Este kit provê uma plataforma Java na qual o Sun Java Wireless Toolkit será
executado. É um software obrigatório para qualquer tipo de desenvolvimento que
envolva Java.
5.1.1.
Baixando e instalando o JDK
O pacote de instalação pode ser adquirido no site da fabricante, a Sun
Microsystems,
no
seguinte
http://www.oracle.com/technetwork/java/javase/downloads/index.html.
endereço:
A
última
versão disponível é a versão 6 update 22, no caso da plataforma Windows 64 bits.
Selecionar a opção “Java Platform (JDK)”, como na Figura 7.
49
Figura 7 - Seleção da JDK para download.
Na página seguinte, selecionar a versão do sistema operacional e o idioma e
clicar em “Continue” (Figura 8).
Figura 8 - Seleção de plataforma e idioma do JDK.
A seguir, será exibido o link para o download do JDK (Figura 9).
Figura 9 - Link para download do JDK.
A instalação do JDK, na plataforma Windows, segue o mesmo padrão de
qualquer outra aplicação comum. Para continuar, basta executar o arquivo baixado
anteriormente e seguir as instruções na tela.
50
5.1.2. Configurando as variáveis de ambiente
Ao seguir a instalação padrão, o JDK será instalado no diretório “C:\Program
Files\Java\jdk1.6.0_22”. Neste momento é necessário adicionar o diretório “bin” do
JDK à variável “path” nas variáveis de ambiente do sistema. No Windows 7, acessar
Painel de controleSistemaConfigurações avançadas do sistemaVariáveis de
ambiente, localizar a variável “path” e adicionar o endereço da JDK (Figura 10).
Figura 10 - Variáveis de ambiente do Windows.
Para testar se tudo foi instalado corretamente, abrir o prompt de comando do
Windows e digitar o comando “java -version” sem as aspas (Figura 11). Deverá
aparecer a versão do Java instalado no computador.
Figura 11 - Verificando a instalação do Java.
51
5.2. IDE Netbeans 6.9.1
É um programa de computador da Sun sob licença free e possui uma
Interface Gráfica com o Usuário (GUI) para desenvolvimento de softwares. As suas
ferramentas de desenvolvimento são integradas com as mais recentes tecnologias
profissionais para a criação e manutenção de grandes projetos na linguagem Java.
O Netbeans é um ambiente integrado de desenvolvimento (IDE) que permite
ao programador criar programas utilizando recursos gráficos. Para trabalhar com o
NetBeans é necessário ter instalado, anteriormente em sua máquina uma das
versões do JDK [15].
É um ambiente de desenvolvimento multiplataforma, uma ferramenta que
auxilia programadores a escrever, compilar, debugar e instalar aplicações. Foi
arquitetada
em
forma
de
uma
estrutura
reutilizável
para
simplificar
o
desenvolvimento e aumentar a produtividade, pois reúne em uma única aplicação
todas estas funcionalidades. [16]
É completamente escrita em Java, porém suporta, outras linguagens de
programação, tais elas como o C, C++, Ruby, PHP, XML e HTML. Como ele é
multiplataforma, ele funciona em qualquer sistema operacional, desde que o mesmo
possua suporte à Máquina Virtual Java (JVM).
5.2.1.
Download e instalação do Netbeans 6.9.1
O download do Netbeans pode ser feito através do seguinte endereço:
http://netbeans.org/downloads/index.html.
Para
desenvolver
aplicações
para
dispositivos móveis utilizando o perfil MIDP é necessário que o Netbeans possua o
pacote “Java ME”. A Figura 12 mostra todas as opções de download. Deve-se
escolher a versão “Java” ou a versão “Tudo”, devido à presença deste pacote.
52
Figura 12 - Versões do Netbeans.
Após baixar o arquivo de instalação, executar e seguir os passos na tela em
uma instalação padrão. Durante a instalação, será exibida a Figura 13. Nesta tela,
geralmente aparecerá automaticamente o endereço da JDK instalada anteriormente.
Caso isto não aconteça, é provável que haja problemas na instalação do JDK.
Poderá ser feita a localização do JDK manualmente, através dos botões “Procurar”.
Figura 13 - Localização do JDK durante a instalação do Netbeans.
53
Após a instalação, o Netbeans está pronto para ser utilizado. A figura a
seguir mostra a interface principal do Netbeans.
Figura 14 - Tela principal do Netbeans 6.9.1.
5.2.2. Wireless Toolkit
O Wireless ToolKit (WTK) é uma ferramenta fornecida pela Sun
Microsystems para o desenvolvimento de aplicativos para celulares. Ele dispõe de
um compilador e um emulador do aparelho celular, onde é possível configurar a
velocidade da CPU do aparelho e o fluxo de rede, para que a emulação seja a mais
próxima possível do real, já que computadores possuem muito mais memória e CPU
e nem sempre o desenvolvedor dispõe do aparelho celular para instalar e testar o
aplicativo. Este kit acompanha o Netbeans e não tem a necessidade de ser instalado
separadamente.
54
5.2.3.
Por que utilizar o Netbeans?
O Netbeans não é a única IDE para desenvolvimento de aplicativos em
J2ME. Existem diversas outras, como por exemplo, o Eclipse, EclipseME, GEL, entre
outros.
A IDE Eclipse também é muito robusta frente à programação para J2ME. O
diferencial de ter utilizado o Netbeans neste projeto é que ele já contém todos os
pacotes para programação e ainda contém o WTK, indispensável para testes de
aplicações.
Utilizando o Netbeans, o usuário não necessitará instalar pacotes adicionais
e plugins, tampouco precisará criar manualmente os arquivos necessários para
executar a aplicação diretamente no celular, pois este apresenta ferramentas que
fazem este papel de forma automatizada.
5.3. Criando um novo projeto no Netbeans 6.9.1
Com o Netbeans aberto, acessar o menu ArquivoNovo projeto.
Figura 15 - Novo projeto no Netbeans.
Selecionar a categoria “Java ME” e em projetos, selecionar “Aplicativo
móvel”. Clicar em próximo.
55
Figura 16 - Seleção do tipo de projeto no Netbeans.
Na tela seguinte, preencha com o nome do projeto e o local onde este
projeto será armazenado. A Opção “Configurar como projeto principal” irá apenas
manter este novo projeto como se fosse o projeto padrão do Netbeans (dos projetos
que estiverem abertos). A vantagem é que ao utilizar os botões de atalho (i.e.
compilação, execução), suas respectivas funções terão efeito neste projeto “padrão”.
A Opção “Criar MIDlet Olá” insere automaticamente uma MIDlet com sua
estrutura básica de funcionamento. Optar por desmarcar esta opção evita que sejam
inseridos códigos inúteis no MIDlet.
56
Figura 17 - Propriedades da nova aplicação no Netbeans.
Após as informações iniciais da aplicação, seleciona-se a plataforma do
emulador. Como há apenas a plataforma Wireless Toolkit, apenas esta opção estará
disponível. Selecionar também “CLDC-1.1” e “MIDP-2.1” para obter o máximo de
recursos disponíveis para a configuração CLDC no perfil MIDP. Em alguns casos
será necessário selecionar a opção MIDP 2.0, pois alguns telefones celulares não
suportam o MIDP-2.1.
57
Figura 18 - Seleção da Plataforma no Netbeans.
Na última tela antes de finalizar a criação do projeto, existem opções para
mais configurações sobre o projeto. Neste caso não há necessidade de alterar
nenhuma opção. Clicar em Finalizar para continuar.
Figura 19 - Configurações finais do projeto.
58
Após criar o protejo, o mesmo pode ser visualizado na coluna à esquerda do
Netbeans.
Figura 20 - Exibição do projeto criado no Netbeans.
Para criar o primeiro MIDlet, ou seja, a primeira “tela” do aplicativo, clicar
com o botão direito em “pacote padrão”, apontar para o menu “Novo” e clicar na
opção “MIDlet”. Preencher os campos com o Nome do MIDlet. O nome da classe é
preenchida automaticamente.
59
Figura 21 - Criação de um MIDlet no projeto do Netbeans.
O Netbeans passa a exibir o código fonte do novo MIDlet criado. Neste
código fonte está presente a estrutura mínima de funcionamento do MIDlet, com os
três principais métodos descritos no Capítulo 3.2.1.
Figura 22 - MIDlet criado no projeto.
60
Para iniciar a programação, segue o código de exemplo criado no novo
MIDlet, alguns elementos, e os comentários explicativos.
//importa a classe midlet
import javax.microedition.midlet.*;
//importa a classe lcdui
import javax.microedition.lcdui.*;
/**
* @author Fabio
*/
//Classe principal do MIDlet estendida de MIDlet e
//implementando CommandListener (para executar comandos)
public class PrimeiraMIDlet extends MIDlet implements CommandListener {
//Cria um objeto do tipo Form
private Form meuFormulario;
//Cria um comando (neste caso, para sair do aplicativo)
private Command sairCommand;
//Construtor criado para executar as funções apenas uma vez
//durante a primeira execução do MIDlet.
public PrimeiraMIDlet() {
//Instancia o objeto com um novo Form e seu título
meuFormulario = new Form("Título da minha primeira MIDlet");
//Adiciona um texto ao Form
meuFormulario.append("Aqui está meu primeiro texto!");
//Cria um comando, neste caso, o sair
sairCommand = new Command("Sair", Command.EXIT, 0);
//Adiciona o comando ao formulário
meuFormulario.addCommand(sairCommand);
//Adiciona o "monitoramento" de comandos
meuFormulario.setCommandListener(this);
}
//Método executado quando o MIDlet é iniciado pela primeira vez
//ou quando este retorna do estado Pausado.
public void startApp() {
//Captura o Display do celular e adiciona o
//Form criado para exibição.
Display.getDisplay(this).setCurrent(meuFormulario);
}
//Método executado quando o MIDlet vai entrar em estado Pausado.
public void pauseApp() {
}
//Método executado antes de finalizar o MIDlet.
public void destroyApp(boolean unconditional) {
//Avisa o SO que este pode controlar o display novamente
this.notifyDestroyed();
}
//Permite que a aplicação saiba quando um comando foi acionado
public void commandAction(Command c, Displayable d) {
//Compara o comando solicitado e executa a ação programada
if (c == sairCommand) {
destroyApp(true);
}
}
}
Quadro 1 - Código fonte Aplicação de Exemplo
61
5.4.
Executando a aplicação no Wireless Toolkit (WTK)
Após elaborar o primeiro MIDlet, é possível verificar seu comportamento
como se estivesse em um dispositivo real, utilizando o emulador do WTK. O
Netbeans dispõe de ferramentas que auxiliam neste processo de forma
automatizada, transparente ao usuário.
Acessar o menu ExecutarExecutar o projeto principal ou pressionar a tecla
F6. Estas duas opções funcionam somente se o projeto o qual se quer executar está
configurado como projeto principal no Netbeans. Caso contrário, deve-se clicar com
o botão direito no projeto e selecionar no submenu, o item executar.
A Figura 23 mostra o MIDlet sendo executado no emulador do WTK. Podese perceber o título, o texto e o comando “Sair” adicionados ao MIDlet.
Figura 23 - MIDlet sendo executado no emulador do WTK.
62
Vale lembrar que o emulador do WTK simula a execução do MIDlet, e esta
geralmente é diferente de um dispositivo real, pois trata-se de um emulador
genérico. Para que as aplicações sejam o mais parecido com o real, é necessária a
instalação de outra ferramenta, chamada de Software Development Kit (SDK),
conforme disposto a seguir.
5.5.
Software Development Kit (SDK)
Um SDK emula o comportamento dos telefones celulares de um
determinado fabricante com a máxima semelhança possível do dispositivo real, pois
possuem emuladores baseados no mesmo software que são especificados nestes
dispositivos.
Como o foco deste trabalho é criar aplicações para telefones celulares com
SO Symbian da série S60, mais especificadamente o modelo Nokia N81, é
necessário instalar o “S60 3rd Edition SDK for Symbian OS, Feature Pack 2”. Os
passos de para download, instalação e utilização são mostrados a seguir.
5.5.1.
Software S60 3rd Edition FP2 SDK
Para realizar os testes de implementação sem que seja necessário instalar o
aplicativo no celular, é utilizado o software emulador S60 3rd Edition FP2 SDK da
Nokia, disponível de forma gratuita aos desenvolvedores de software.
Este emulador (Figura 24) simula as condições e recursos reais dos
aparelhos celulares da série S60 da Nokia, para que as aplicações sejam testadas e
utilizadas como se estivessem realmente instaladas em um dispositivo real, o que
fornece mais comodidade e confiabilidade ao se programar em J2ME [17].
63
Figura 24 - Emulador da Nokia S60 3rd Edition FP2 SDK
5.5.2.
Download e instalação do SDK S60 3rd Edition, FP2
A Nokia [17] possui o melhor site de suporte ao desenvolvimento de
aplicativos para celular. Disponibiliza todas as ferramentas necessárias para a
programação em seus telefones celulares, bem como uma vasta documentação
sobre cada um deles e ainda, um fórum onde programadores de todo o mundo
podem trocar experiências e auxiliar quem necessita de ajuda durante o
desenvolvimento.
Para
efetuar
o
download
do
SDK,
acessar
a
página
http://www.forum.nokia.com/info/sw.nokia.com/id/ec866fab-4b76-49f6-b5a5-af06314
19e9c/S60_All_in_One_SDKs.html e selecionar a série desejada, conforme Figura
25.
64
Figura 25 - Download do SDK Nokia S60 3rd Edition FP2
Após o download, executar o arquivo. A instalação também segue o padrão
de instalação do Windows. Caso aparecer a mensagem da Figura 26, é necessária a
instalação do ActivePerl, pois o SDK produzido pela Nokia utiliza a linguagem Perl
para ser executada.
Figura 26 - Solicitação de instalação do ActivePerl.
O Download do ActivePerl pode ser feito no site oficial do ActivePerl [18].
Sua instalação também é muito simples, seguindo o padrão do Windows.
Após a instalação é necessário configurar o Netbeans para reconhecer a
nova plataforma.
65
5.5.3.
Adicionando a plataforma S60 ao Netbeans
Para utilizar o SDK, este deve ser reconhecido como plataforma pelo
Netbeans.
Para
efetuar
este
reconhecimento,
deve-se
acessar
o
menu
FerramentasPlataformas Java, na tela principal do Netbeans.
Na Figura 27, clicar em “Adicionar plataforma”.
Figura 27 - Adicionar Plataforma ao Netbeans.
Na tela seguinte, marcar a opção “Emulador de plataforma MIDP Java ME”
(Figura 28).
66
Figura 28 – Tipos de Plataformas no Netbeans.
Na janela de seleção de diretórios do Windows, selecionar o diretório onde
está instalada a plataforma do S60, geralmente em “C:/S60”. Neste ponto o
Netbeans irá procurar e selecionar as plataformas. Clicar em próximo e logo após
em finalizar. O Netbeans já está configurado e pronto para utilizar a nova plataforma.
5.5.4.
Executando a aplicação na Plataforma S60
Existem duas maneiras de executar a pequena aplicação desenvolvida no
Capítulo 5.3. A primeira delas é clicar com o botão direito no projeto e clicar em
“Executar com”. Agora é necessário selecionar a plataforma S60, conforme Figura
29.
Figura 29 - Seleção de plataforma para execução do MIDlet.
67
Será exibido o emulador com o MIDlet sendo executado. É visível a
diferença do MIDlet apresentado neste emulador (Figura 30) em relação ao
emulador do WTK (Figura 23).
Figura 30 - MIDlet sendo executado no emulador do S60.
A posição dos elementos do MIDlet apresentado no emulador do S60 são
semelhantes aos apresentados em um dispositivo real, o Nokia N81 (Figura 31). O
que difere do emulador para o celular são as configurações de “temas” do celular.
Figura 31 - MIDlet sendo executado no celular Nokia N81
68
A segunda maneira de executar esta MIDlet, porém agora de forma
permanente, é configurar o projeto para utilizar apenas determinada plataforma.
Desta forma, toda vez que utilizar os comandos de execução, o MIDlet será
executado na plataforma escolhida.
Para efetuar esta configuração, deve-se clicar com o botão direito no projeto
e selecionar o item propriedades. Na tela exibida (Figura 32 - Configuração de
plataforma no projeto do Netbeans.), Escolher a “Plataforma do emulador” com o
item “S60 3rd Edition FP2 SDK” e em “Dispositivo” selecionar “S60Emulator”.
Figura 32 - Configuração de plataforma no projeto do Netbeans.
Para instalar o aplicativo em um dispositivo real, basta copiar os arquivos
com extensão .JAD e .JAR disponíveis na pasta “dist” dentro do diretório onde se
encontra o projeto do Netbeans. Caso estes arquivos não existam, é necessário
compilar o projeto (menu ExecutarConstruir projeto principal, ou, tecla F11), ou
ainda, executá-lo utilizando um emulador pelo menos uma vez.
69
5.5.5.
Utilizando os elementos visuais de alto nível
Seguindo o mesmo padrão do projeto criado anteriormente, foi criada uma
nova MIDlet para mostrar o comportamento dos elementos visuais de alto nível que
o J2ME fornece para o perfil MIDP, apresentados no Capítulo 4.5.
5.5.5.1. TextBox
O TextBox é o primeiro elemento. Por se tratar de uma nova aplicação, será
mostrado o código completo e sua visualização na tela, utilizando o emulador do
S60. Nos demais elementos, serão mostrados apenas trechos de códigos
comentados com suas respectivas telas. Ao lado de cada imagem, será exibida uma
foto do dispositivo real.
//importa a classe midlet
import javax.microedition.midlet.*;
//importa a classe lcdui
import javax.microedition.lcdui.*;
/**
* @author Fabio
*/
//Classe principal do MIDlet estendida de MIDlet e
//implementando CommandListener (para executar comandos)
public class ExemploTextBox extends MIDlet implements CommandListener {
//Cria um objeto do tipo TextBox
private TextBox meuTextBox;
//Cria um comando (neste caso, para sair do aplicativo)
private Command sairCommand;
//Cria um objeto Display
//private Display display;
//Construtor criado para executar as funções apenas uma vez
//durante a primeira execução do MIDlet.
public ExemploTextBox() {
//Cria o objeto TextBox com os seguintes parâmetros:
//1 - Título do TextBox
//2 - Texto interno, caso necessitar
//3 - Quantidade máxima de caracteres
//4 - Restrições: Qualquer valor, numérico, texto, senha, URL
meuTextBox = new TextBox("Título do TextBox", "", 100,
TextField.ANY);
//Cria o comando para sair da aplicação
sairCommand = new Command("Sair", Command.EXIT, 0);
70
//Adiciona o comando ao formulário
meuTextBox.addCommand(sairCommand);
//Adiciona o "monitoramento" de comandos
meuTextBox.setCommandListener(this);
}
//Método executado quando o MIDlet é iniciado pela primeira vez
//ou quando este retorna do estado Pausado.
public void startApp() {
//Captura o Display do celular e adiciona o
//Form criado para exibição.
Display.getDisplay(this).setCurrent(meuTextBox);
}
//Método executado quando o MIDlet vai entrar em estado Pausado.
public void pauseApp() {
}
//Método executado antes de finalizar o MIDlet.
public void destroyApp(boolean unconditional) {
//Avisa o SO que este pode controlar o display novamente
this.notifyDestroyed();
}
//Permite que a aplicação saiba quando um comando foi acionado
public void commandAction(Command c, Displayable d) {
//Compara o comando solicitado e executa a ação programada
if (c == sairCommand) {
destroyApp(true);
}
}
}
Quadro 2 - Código fonte TextBox
Figura 33 - Exemplo TextBox
71
5.5.5.2. List
//Cria um objeto do tipo List
private List meuList;
public ExemploList() {
//Cria o objeto List com os seguintes parâmetros:
//1 - Título do List
//2 - Restrições: Exclusivo, Múltiplo, Implícito
meuList = new List("Título do List", Choice.EXCLUSIVE);
OU
meuList = new List("Título do List", Choice.MULTIPLE);
OU
meuList = new List("Título do List", Choice.IMPLICIT);
//Cria as opções da lista
meuList.append("Opção 1", null);
meuList.append("Opção 2", null);
meuList.append("Opção 3", null);
meuList.append("Opção 4", null);
meuList.append("Opção 5", null);
meuList.append("Opção 6", null);
}
Quadro 3 - Código fonte List
Figura 34 - Exemplo List Exclusive, Multiple e Implicit
72
5.5.5.3. Alert
//Cria um objeto do tipo TextBox
private Alert meuAlert;
public ExemploAlert() {
//Cria o objeto Alert com os seguintes parâmetros:
//1 - Título do Alert
//2 - Texto ou mensagem do Alert
//3 - Imagem do Alert, caso houver
//4 - Tipo: Confirmação, Erro, Informação, Aviso
meuAlert = new Alert("Título do Alert", "Esta é uma mensagem de
erro!", null, AlertType.ERROR);
//Configura o "tempo de vida" do Alert.
meuAlert.setTimeout(Alert.FOREVER);
}
Quadro 4 - Código fonte Alert
Figura 35 - Exemplo Alert - Erro
5.5.5.4. Form (e seus “Items”)
5.5.5.4.1.
ChoiceGroup
//Cria um objeto do tipo Form
private Form meuFormulario;
//Cria os objetos ChoiceGroup
private ChoiceGroup meuChoiceGroupExclusive;
private ChoiceGroup meuChoiceGroupMultiple;
public ExemploFormChoiceGroup() {
//Instancia o objeto com um novo Form e seu título
meuFormulario = new Form("ChoiceGroup");
//Cria um ChoiceGroup do tipo Exclusivo
meuChoiceGroupExclusive = new ChoiceGroup("ChoiceGroup Exclusivo",
Choice.EXCLUSIVE);
//Insere os itens no ChoiceGroup
meuChoiceGroupExclusive.append("Opção Exclusiva 1", null);
meuChoiceGroupExclusive.append("Opção Exclusiva 2", null);
73
meuChoiceGroupExclusive.append("Opção Exclusiva 3", null);
//Insere o ChoiceGroup no formulário
meuFormulario.append(meuChoiceGroupExclusive);
//Cria um ChoiceGroup do tipo Múltiplo
meuChoiceGroupMultiple = new ChoiceGroup("ChoiceGroup Múltiplo",
Choice.MULTIPLE);
//Insere os itens no ChoiceGroup
meuChoiceGroupMultiple.append("Opção Múltipla 1", null);
meuChoiceGroupMultiple.append("Opção Múltipla 2", null);
meuChoiceGroupMultiple.append("Opção Múltipla 3", null);
//Insere o ChoiceGroup no formulário
meuFormulario.append(meuChoiceGroupMultiple);
}
Quadro 5 - Código fonte ChoiceGroup
Figura 36 - Exemplo ChoiceGroup
5.5.5.4.2.
DateField
//importa a classe para trabalhar com datas
import java.util.Date;
public class ExemploFormDateField extends MIDlet implements CommandListener
{
//Cria um objeto do tipo Form
private Form meuFormulario;
//Cria os objetos DateField
private DateField meuDateFieldDate;
private DateField meuDateFieldTime;
private DateField meuDateFieldDateTime;
//Construtor criado para executar as funções apenas uma vez durante a
//primeira execução do MIDlet.
public ExemploFormDateField() {
//Instancia o objeto com um novo Form e seu título
meuFormulario = new Form("DateField");
//Data atual do sistema (celular)
Date dataAtual = new Date();
74
//Cria um DateField do tipo DATE com os seguintes parâmetros:
//1 - Título do DateField
//2 - Tipo: Data, Hora, Data e Hora
meuDateFieldDate = new DateField("DateField Date", DateField.DATE);
//Insere a data atual
meuDateFieldDate.setDate(dataAtual);
//Insere o DateField no formulário
meuFormulario.append(meuDateFieldDate);
//Cria um DateField do tipo TIME com os seguintes parâmetros:
//1 - Título do DateField
//2 - Tipo: Data, Hora, Data e Hora
meuDateFieldTime = new DateField("DateField Time", DateField.TIME);
//Neste exemplo o próprio usuário digita a hora
//Insere o DateField no formulário
meuFormulario.append(meuDateFieldTime);
//Cria um DateField do tipo DATE_TIME com os seguintes parâmetros:
//1 - Título do DateField
//2 - Tipo: Data, Hora, Data e Hora
meuDateFieldDateTime = new DateField("DateField Date_Time",
DateField.DATE_TIME);
//Insere a data atual
meuDateFieldDateTime.setDate(dataAtual);
//Insere o DateField no formulário
meuFormulario.append(meuDateFieldDateTime);
}
Quadro 6 - Código fonte DateField
Figura 37 - Exemplo DateField
5.5.5.4.3.
TextField
//Cria um objeto do tipo Form
private Form meuFormulario;
public ExemploFormTextField() {
//Instancia o objeto com um novo Form e seu título
meuFormulario = new Form("TextField");
//Cria os objetos TextField com os seguintes parâmetros:
//1 - Label do TextField
//2 - Texto ou mensagem do TextField
75
//3 - Quantidade Máxima de Caracteres
//4 - Restrições: Qualquer, numérico, texto, senha, URL
meuFormulario.append(new TextField("Nome: ", "", 25,
TextField.INITIAL_CAPS_WORD));
meuFormulario.append(new TextField("E-mail: ", "", 25,
TextField.EMAILADDR));
meuFormulario.append(new TextField("Login: ", "", 25, TextField.ANY));
meuFormulario.append(new TextField("Senha: ", "", 25, TextField.PASSWORD));
}
Quadro 7 - Código fonte TextField
Figura 38 - Exemplo TextField.
5.5.5.4.4.
Gauge
public ExemploFormGauge() {
//Instancia o objeto com um novo Form e seu título
meuFormulario = new Form("TextField");
//Cria um Gauge com os seguintes parâmetros:
//1 - Label do Gauge
//2 - Interativo: Sim ou não
//3 - Valor máximo para referência. Ex: 100 (%)
//4 - Valor para exibição. Ex: 75 (%)
//Gauge Interativo
meuFormulario.append(new Gauge("Gauge Interativo", true, 100, 75));
//Gauge Não-interativo
meuFormulario.append(new Gauge("Gauge Não-interativo", false, 100, 35));
}
Quadro 8 - Código fonte Gauge
Figura 39 - Exemplo Gauge.
76
5.5.5.4.5.
ImageItem
private Image imagem;
public ExemploFormImageItem() {
//Instancia o objeto com um novo Form e seu título
meuFormulario = new Form("TextField");
//Utiliza-se a estrutura try, pois caso a imagem não existir
//o MIDlet poderá tratar o erro. Caso contrário, o MIDlet
//poderá travar e deixar o dispositivo sem ação forçando o
//usuário a desligá-lo
Try {
imagem = Image.createImage("selo.png");
} catch (IOException ex) {
ex.printStackTrace();
}
//Insere um ImageItem com os seguintes parâmetros
//1 - Label da Imagem
//2 - Imagem (arquivo.png)
//3 - Layout da imagem: Esquerda, direita, centralizado, default
//4 - Texto alternativo: exibe o texto quando a imagem não
//puder ser exibida (incapacidade do dispositivo)
meuFormulario.append(new ImageItem("Informática", imagem,
ImageItem.LAYOUT_CENTER, "Informática"));
}
Quadro 9 - Código fonte ImageItem
Figura 40 - Exemplo ImageItem.
5.5.5.4.6.
StringItem
public ExemploFormStringItem() {
//Instancia o objeto com um novo Form e seu título
meuFormulario = new Form("StringItem");
//Cria o objeto StringItem com os seguintes parâmetros:
//1 - Label do StringItem
//2 - Texto do StringItem
meuFormulario.append(new StringItem("Nome: ", "Luis Fabio Faccin"));
meuFormulario.append(new StringItem("E-mail: ",
"[email protected]"));
77
meuFormulario.append(new StringItem("Curso: ", "Informática"));
meuFormulario.append(new StringItem("Ano: ", "2010"));
}
Figura 41 - Exemplo StringItem
5.5.6. Exemplo de aplicação: Somar dois números
//importa a classe midlet
import javax.microedition.midlet.*;
//importa a classe lcdui
import javax.microedition.lcdui.*;
/**
* @author Fabio
*/
//Classe principal do MIDlet estendida de MIDlet e
//implementando CommandListener (para executar comandos)
public class ExemploSomarDoisNumeros extends MIDlet implements
CommandListener {
//Cria os objetos
private Form meuFormulario;
private TextField valor1;
private TextField valor2;
private StringItem resultado;
//Cria um comando (neste caso, para sair do aplicativo)
private Command sairCommand;
//Cria um comando para somar os números
private Command somarCommand;
//Construtor criado para executar as funções apenas uma vez
//durante a primeira execução do MIDlet.
public ExemploSomarDoisNumeros() {
//Instancia o objeto com um novo Form e seu título
meuFormulario = new Form("Somar 2 Números");
//Instancia os objetos
valor1 = new TextField("Número 1: ", "", 5, TextField.NUMERIC);
valor2 = new TextField("Número 2: ", "", 5, TextField.NUMERIC);
resultado = new StringItem("Resultado: ", null);
78
//Insere os objetos no formulário
meuFormulario.append(valor1);
meuFormulario.append(valor2);
meuFormulario.append(resultado);
//Cria os comandos
sairCommand = new Command("Sair", Command.EXIT, 0);
somarCommand = new Command("Somar", Command.OK, 0);
//Adiciona os comandos ao formulário
meuFormulario.addCommand(sairCommand);
meuFormulario.addCommand(somarCommand);
//Adiciona o "monitoramento" de comandos
meuFormulario.setCommandListener(this);
}
//Método executado quando o MIDlet é iniciado pela primeira vez
//ou quando este retorna do estado Pausado.
public void startApp() {
//Captura o Display do celular e adiciona o
//Form criado para exibição.
Display.getDisplay(this).setCurrent(meuFormulario);
}
//Método executado quando o MIDlet vai entrar em estado Pausado.
public void pauseApp() {
}
//Método executado antes de finalizar o MIDlet.
public void destroyApp(boolean unconditional) {
//Avisa o SO que este pode controlar o display novamente
this.notifyDestroyed();
}
//Permite que a aplicação saiba quando um comando foi acionado
public void commandAction(Command c, Displayable d) {
//Compara o comando solicitado e executa a ação programada
if (c == sairCommand) {
destroyApp(true);
} else if (c == somarCommand) {
//Verifica os valores em cada TextField
//e converte de String para int
int nro1 = Integer.parseInt(valor1.getString());
int nro2 = Integer.parseInt(valor2.getString());
//Soma os dois valores
int soma = nro1 + nro2;
//Converte o resultado de int para string e insere
//no StringItem resultado
resultado.setText(String.valueOf(soma));
}
}
}
Quadro 10 - Código fonte exemplo de aplicação que soma dois números
79
Figura 42 - Exemplo de aplicação: Somar dois números
5.6.
Visão Geral do Ambiente de Desenvolvimento
Após o estudo das ferramentas e recursos envolvidos no processo de
desenvolvimento de software para telefones celulares, é apresentado, conforme
Figura 43, a visão geral do ambiente de desenvolvimento, contendo desde o sistema
operacional até as ferramentas utilizadas para criar e executar as aplicações móveis.
Figura 43 - Visão Geral do Ambiente de Desenvolvimento
Este
capítulo
apresentou
as
principais
ferramentas
utilizadas
no
desenvolvimento das aplicações. O Capítulo 6, a seguir, apresenta a tecnologia Web
Services, abordando sua utilização, arquitetura, vantagens, desvantagens e
exemplos de utilização.
80
6. WEB SERVICES
A necessidade de se obter acesso a redes e serviços remotamente fez surgir
os Web Services (WS), o que permitiu desenvolver uma grande variedade de
sistemas através da arquitetura cliente/servidor, onde sistemas distintos podem
interagir com estes servidores, mesmo sendo desenvolvidos em linguagens e
plataformas diferentes, ou que estejam localizados em lugares diferentes.
Toda comunicação e troca de dados é feita graças ao protocolo padrão dos
WS, o Extended Markup Language (XML), pois permite que sistemas sejam
acessados remotamente através da internet, efetuando trocas de informações de
forma transparente ao usuário.
De acordo com PARDAL [19], “os WS, resultam de uma iniciativa da
indústria de tecnologias de informação e comunicação para criar uma plataforma
universal de serviços para aplicações empresariais”.
PARDAL [19] Também afirma que:
Do ponto de vista técnico, um WS define uma interface funcional que pode
ser invocada remotamente para dar acesso a recursos. A designação Web
deve-se à inspiração na World Wide Web (WWW) e na forma como os
recursos são referenciados, por Identificador Uniforme de Recursos (URI).
Um WS é um sistema de software identificado por um Identificador Uniforme
de Recursos (URI), cujas interfaces públicas e ligações são definidas e descritas
usando XML, ou seja, “um WS é um aplicativo de software, acessível na web (ou em
uma intranet corporativa) através de uma URI, que é acessado pelos clientes
81
usando protocolos baseados em XML. Os WS expõem uma interface padronizada e
são independente de plataforma e de tecnologia.”
6.1. Utilização
Dentre as aplicações dos WS, podemos citar que o mesmo pode fornecer
uma maneira de expansão de negócios para a empresa, aumentando a eficiência e
melhorando a experiência com seus clientes, já que pode incluir serviços externos,
através de seus próprios serviços, como por exemplo, a utilização de cartões de
crédito e de serviços de entregas terceirizados, já que dependem de outras
empresas para funcionar sem problemas.
Além de ser responsável por solucionar os problemas de interoperabilidade
entre sistemas distintos os WS também possuem os objetivos de criar uma camada
de abstração entre nós heterogêneos (várias plataformas) em uma rede, ser
acessível em plataformas distintas e, reduzir custos de implantação e utilização de
servidores. [20]
6.2. Tecnologias
6.2.1. XML
O Extended Markup Language (XML) é uma linguagem de marcação criada
para introduzir novas possibilidades de integração entre os dados e os usuários.
Entende-se por marcação “um conjunto de convenções utilizadas para a codificação
de textos. Uma linguagem de marcação deve especificar que marcas são permitidas,
quais são exigidas, como se deve fazer distinção entre as marcas e o texto, e qual o
significado da marcação”. [21]
É ele quem provê um formato para descrever dados estruturados. Isso
facilita declarações mais precisas do conteúdo e resultados mais significativos de
busca através de múltiplas plataformas.
Surgiu como um subconjunto da Standart Generalized Markup Language
(SGML), criada em 1996, por um grupo de empresas e organizações denominado
W3C1 - World Wide Web Consortium. O W3C iniciou seus trabalhos em meados da
82
década de 1990, com o objetivo de criar uma nova metalinguagem (linguagem que
descreve outras linguagens) mais flexível e formal para uso na internet. [20]
O XML é utilizado nos WS para definir como os dados são representados,
como os serviços serão transmitidos, publicados e descobertos. É responsável pela
interação entre as aplicações e os WS, transportando os dados entre as diferentes
plataformas.
6.2.2. SOAP
De acordo com [22] e [23], apesar de não ser necessário conhecer o
funcionamento do protocolo para criar e consumir serviços, o Simple Object Access
Protocol (SOAP) é um dos elementos fundamentais dos WS. É o responsável por
lidar com situações de erros e problemas com a interoperabilidade e por permitir a
comunicação de dois processos em máquinas distintas com diferentes hardwares e
plataformas no uso dos WS.
Possui padrão aberto, e é por este motivo que o padrão foi adotado pela
grande maioria das empresas de hardware e software. A sua especificação é aberta
e provê a base para a comunicação de aplicação para aplicação: os Web Services.
Dentre as funcionalidades do SOAP, destacam-se a interoperabilidade entre
sistemas utilizando linguagens e protocolos padronizados como XML e HTTP,
permite comunicação entre sistemas com firewall, o que evita bloqueios de
comunicação, e, por fim, descreve cada elemento na mensagem, o que facilita o
entendimento e protege contra erros.
6.2.3. WSDL
Uma definição de Web Services Description Language (WSDL) é encontrada
em [24], onde define um sistema para a descrição de serviços. É através dela que
são descritos os serviços externos, ou interfaces que são oferecidas por uma
83
determinada aplicação, independente de sua plataforma ou linguagem de
programação.
Seu principal objetivo é descrever as interfaces apresentadas e apontar a
localização de seus serviços disponibilizados em um local conhecido por todos, onde
o cliente possa acessar os serviços de maneira confiável, ou seja, descreve os
serviços oferecidos para que os mesmos possam ser acessados pelos clientes. Por
ser um documento XML, sua leitura se torna fácil e acessível.
6.2.4. UDDI
O Universal Description Discovery and Integration (UDDI) é uma
especificação técnica, cujo objetivo é descrever, descobrir e integrar WS, ou seja,
publica os WS de forma transparente ao usuário para qualquer cliente. É um
elemento central do grupo de padrões que compõe a pilha de componentes dos
serviços web. [25]
O documento UDDI utiliza a mesma estrutura utilizada pelo SOAP e o
WSDL, ou seja, o XML, o que permite a independência de plataforma ou tecnologia
a ser utilizada.
Hartwig GUNZER, em [26], mostra que UDDI é um padrão que foi
desenvolvido para fornecer um diretório de busca para os negócios e seus serviços,
cujo objetivo é ser um mediador do serviço, permitindo que os clientes requisitantes
encontrem um fornecedor do serviço apropriado.
GUNZER divide o documento UDDI em três partes:
Páginas amarelas: Buscas podem ser feitas para encontrar serviços de
uma determinada indústria, empresa, de uma categoria de produtos ou que estão
localizados dentro de uma região geográfica específica.
Páginas Brancas: Contém informações sobre as empresas fornecedoras
dos serviços, incluindo endereços para contatos e outros identificadores.
84
Páginas Verdes: Contém informações técnicas sobre os WS que estão
expostos pela empresa. Mostra como comunicar com o serviço.
6.3.
Arquitetura Básica dos Web Services
De acordo com [27], a arquitetura básica dos WS é apoiada na interação de
três elementos, o que envolve as operações de publicação, pesquisa e ligação,
sendo eles, Provedor de Serviços, Registro de Serviços e Consumidor de Serviços.
Provedor de Serviços: É responsável pela criação do WS. O provedor
disponibiliza o serviço para que o cliente possa utilizar. O WS deve ser descrito pelo
provedor em um formato padrão para que possa ser compreendido por qualquer
aplicação desenvolvida em qualquer linguagem a partir de qualquer plataforma.
Registro de Serviços: É a localização de onde um provedor de serviços
pode disponibilizar seus WS para que os consumidores de serviços possam
pesquisar os mesmos. Possui também, a informações sobre as empresas, os
serviços que elas disponibilizam, bem como a descrição técnica de cada serviço.
Consumidor de Serviços: É o cliente do WS, ou seja, é qualquer aplicação
que tenha capacidade de usar um dos WS criados pelo provedor de serviços. É o
consumidor que conhece as funcionalidades do WS a partir da descrição disposta
pelo provedor e recupera os detalhes através de uma pesquisa no registro de
serviços para obter o mecanismo de ligação com o WS.
6.4.
Vantagens
Também são destacadas algumas vantagens que os Web Services
proporcionam. [20]
• Integração de sistemas legados – é a capacidade de integrar sistemas de
empresas diferentes já finalizados.
85
• Diminuição de custos operacionais – a internet é o principal responsável pela
redução de custos, pois não será necessário montar nenhum tipo especial de
rede.
• Desenvolvimento
de
sistemas
mais
rápido
–
as
ferramentas
de
desenvolvimento atuais dão suporte a criação de WS, através de assistentes.
• Melhor comunicação e integração com consumidores e parceiros comerciais
externos.
6.5. Desvantagens
Ainda em [20], são destacadas algumas desvantagens.
• Disponibilidade – Como a internet é o meio de comunicação dos WS, não há
garantias de uma completa disponibilidade dos serviços, já que falhas podem
ocorrer e a conexão com a internet pode ficar inativa.
• Garantia de execução – por usar HTTP, não há garantias de recebimento de
resposta. Para haver esta garantia, deve-se usar Java Message Service
(JMS).
• Problemas de desempenho – a velocidade da internet, bem como o
desempenho ao converter os documentos XML devem ser analisados para
evitar congestionamentos e falhas no servidor.
6.6. Apache Tomcat v.7
Apache Tomcat, ou simplesmente Tomcat, é um container servlet
desenvolvido pela Apache Software Foundation (ASF). Um Servlet é uma aplicação
que roda diretamente no servidor desenvolvida em Java cuja finalidade é fornecer
recursos adicionais para os servidores web. O Tomcat também implementa as
especificações JavaServer Pages (JSP) da Sun Microsystems [28].
86
JSP é uma tecnologia utilizada no desenvolvimento de aplicações para Web.
Pode ser desenvolvida em Java, com a vantagem de ser multiplataforma. Esta
tecnologia permite produzir aplicações que acessem o banco de dados, manipulem
arquivos no formato texto, capturem informações a partir de formulários e captem
informações sobre o visitante e sobre o servidor.
6.7. Apache Axis v1.4
O Apache Axis é um framework de código aberto, baseado na linguagem
Java e no padrão XML, utilizado para construção de WS no padrão SOAP. Também
implementado em C, o Axis permite criar aplicações distribuídas. É suportado pela
Apache Software Foundation.
Existem dois métodos para publicar os métodos de uma classe dos WS: a
primeira delas é mais simples e utiliza arquivos do tipo Java Web Service (JWS) e a
segunda utiliza um arquivo denominado Web Service Deployment Descriptor
(WSDD) que descreve com detalhes como serão criados os WS a partir das classes
existentes [30].
O Axis também gera automaticamente o arquivo WSDL (Web Service
Description Language) contendo a definição da interface dos WS.
O Apache Axis será utilizado para publicar os WS. Este servidor foi
escolhido por apresentar velocidade superior comparado a outros servidores, como
o Glassfish v2 e v3, e ainda, por mostrar-se robusto em fornecer os serviços sem
erros de resposta e sem problemas quanto à disponibilidade, ou seja, sem sair “do
ar”.
6.8. Instalação do Apache Tomcat e Apache Axis
A instalação do Apache Tomcat e Axis é muito simples. Ambos podem ser
encontrados
para
download
nos
seguintes
endereços
http://tomcat.apache.org/download-70.cgi (Figura 44) e http://linorg.usp.br/apache//
ws/axis/1_4/ (Figura 45) respectivamente.
87
Figura 44 - Download do Apache Tomcat 7
Figura 45 - Download do Apache Axis 1.4
Quanto à instalação é muito simples. O Apache Tomcat para versão
Windows é um arquivo executável e segue o padrão. A instalação do Apache Axis
deve ser feita através da descompactação dos arquivos na pasta “webapps” do
Tomcat, geralmente em “C:\Program Files\Tomcat7.0\webapps”.
Para
executar
os
servidores,
acessar
o
Menu
IniciarTodos
os
programasApache Tomcat 7.0Monitor Tomcat. Aparecerá próximo ao relógio do
Windows um ícone. Clicando com o botão direito é possível iniciar/parar o servidor
(Figura 46).
88
Figura 46 - Iniciar/parar Apache Tomcat.
6.9. Desenvolvendo um Web Service simples
A maneira mais fácil de desenvolver um WS é criar um arquivo com a
extensão .jws e salvá-lo na pasta onde foi instalado o Apache Axis, geralmente em
“C:\Program Files\Tomcat7.0\webapps\axis”.
O arquivo consiste na criação de uma classe Java onde os métodos desta
classe serão os métodos disponibilizados no WS. O Código abaixo mostra a criação
de um simples WS que recebe como parâmetro dois valores e retorna a soma
destes.
Para acessar os recursos disponibilizados pelo WS basta acessar o
endereço “http://localhost:8080/axis/tcc.jws?wsdl” (endereço do computador + nome
do servidor + arquivo do WS + parâmetro WSDL) para verificar os métodos e suas
propriedades através do arquivo WSDL disponibilizado no formato XML, como a
seguir.
− <wsdl:definitionstargetNamespace="http://localhost:8080/axis/tcc.jws">
− <!-WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)
-->
− <wsdl:messagename="somaResponse">
<wsdl:partname="somaReturn"type="xsd:int"/>
</wsdl:message>
− <wsdl:messagename="somaRequest">
<wsdl:partname="valor1"type="xsd:int"/>
<wsdl:partname="valor2"type="xsd:int"/>
</wsdl:message>
− <wsdl:portTypename="tcc">
− <wsdl:operationname="soma"parameterOrder="valor1 valor2">
<wsdl:inputmessage="impl:somaRequest"name="somaRequest"/>
<wsdl:outputmessage="impl:somaResponse"name="somaResponse"/>
89
</wsdl:operation>
</wsdl:portType>
− <wsdl:bindingname="tccSoapBinding"type="impl:tcc">
<wsdlsoap:bindingstyle="rpc"transport="http://schemas.xmlsoap.org/soap/http"/>
− <wsdl:operationname="soma">
<wsdlsoap:operationsoapAction=""/>
− <wsdl:inputname="somaRequest">
<wsdlsoap:bodyencodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://DefaultNamespace"use="encoded"/>
</wsdl:input>
− <wsdl:outputname="somaResponse">
<wsdlsoap:bodyencodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://localhost:8080/axis/tcc.jws"use="encoded"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
− <wsdl:servicename="tccService">
− <wsdl:portbinding="impl:tccSoapBinding"name="tcc">
<wsdlsoap:addresslocation="http://localhost:8080/axis/tcc.jws"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Quadro 11 - WSDL do Web Service
Para consumir um método do WS utilizando o navegador, basta acessar o
endereço “http://localhost:8080/axis/tcc.jws?method=soma&valor1= 10&valor2=20”.
Formato: Endereço do computador + nome do servidor + arquivo do WS + método +
parâmetros e seus valores. O XML de resposta é o seguinte:
− <soapenv:Envelope>
− <soapenv:Body>
− <somaResponsesoapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<somaReturnxsi:type="xsd:int">30</somaReturn>
</somaResponse>
</soapenv:Body>
</soapenv:Envelope>
Quadro 12 - XML com a resposta da chamada de um método do WS pelo Browser
Pode-se perceber que o resultado retorna encapsulado em um envelope
SOAP. Também fica explícito que o resultado (número 30) é do tipo int. Esta
informação é importante para o programador poder tratar estes resultados em suas
aplicações.
90
6.10. Exemplo de aplicação: Somar dois números utilizando WS
O exemplo desenvolvido no Capítulo 5.5.6 será utilizado como base para a
utilização do WS. É importante ressaltar que um telefone celular geralmente não
possui métodos nativos para acessar os WS, portanto utiliza-se as bibliotecas
kSOAP e kXML para efetuar a comunicação do dispositivo com o servidor.
6.10.1.
kSOAP e kXML
A comunicação das aplicações J2ME com os WS é feita através da troca de
mensagens em XML utilizando o protocolo SOAP. Como o J2ME não possui classes
nativas que tratam estas implementações, faz-se necessário utilizar dois projetos
para atender as transparências entre as trocas de informações. Os projetos são o
KSOAP e o KXML mantidos pela ObjectWeb e ambos estão sob licença pública [30].
A utilização destes dois projetos permite que qualquer celular com os
requisitos mínimos (i.e., rodar aplicativos em Java e suportar MIDP 2.0) consiga
acessar os WS através da internet, uma vez que os recursos necessários ficam
embutidos na aplicação. Também substitui a utilização da Application Programming
Interface (API) Java Specification Requests (JSR) 172, que apesar de ser mais
prático quanto sua utilização e efetuar o mesmo processo de conexão, só existe em
um número muito limitado de aparelhos, prejudicando assim, a portabilidade.
6.10.2.
Modificando o projeto para conectar ao Web Services
Primeiramente é necessário adicionar as bibliotecas kSOAP e kXML ao
projeto. Descompactar os arquivos das bibliotecas adquiridos em [30] na pasta “src”
do projeto criado pelo Netbeans. Após a inserção das bibliotecas, basta importar os
pacotes destas, e efetuar as seguintes alterações, conforme o código a seguir.
91
//importa a classe midlet
import java.io.IOException;
import javax.microedition.midlet.*;
//importa a classe lcdui
import javax.microedition.lcdui.*;
//importa as bibliotecas para conectar no Web Service
import org.ksoap.SoapObject;
import org.ksoap.transport.HttpTransport;
/**
* @author Fabio
*/
//Classe principal do MIDlet estendida de MIDlet e
//implementando CommandListener (para executar comandos)
public class ExemploSomarDoisNumerosWS extends MIDlet implements CommandListener {
//Cria os objetos
private Form meuFormulario;
private TextField valor1;
private TextField valor2;
private StringItem resultado;
//Cria um comando (neste caso, para sair do aplicativo)
private Command sairCommand;
//Cria um comando para somar os números
private Command somarCommand;
//Construtor criado para executar as funções apenas uma vez durante a
//primeira execução do MIDlet.
public ExemploSomarDoisNumerosWS() {
//Instancia o objeto com um novo Form e seu título
meuFormulario = new Form("Somar 2 Números");
//Instancia os objetos
valor1 = new TextField("Número 1: ", "", 5, TextField.NUMERIC);
valor2 = new TextField("Número 2: ", "", 5, TextField.NUMERIC);
resultado = new StringItem("Resultado do WS: ", null);
//Insere os objetos no formulário
meuFormulario.append(valor1);
meuFormulario.append(valor2);
meuFormulario.append(resultado);
//Cria os comandos
sairCommand = new Command("Sair", Command.EXIT, 0);
somarCommand = new Command("Somar", Command.OK, 0);
//Adiciona os comandos ao formulário
meuFormulario.addCommand(sairCommand);
meuFormulario.addCommand(somarCommand);
//Adiciona o "monitoramento" de comandos
meuFormulario.setCommandListener(this);
}
//Método executado quando o MIDlet é iniciado pela primeira vez
//ou quando este retorna do estado Pausado.
public void startApp() {
//Captura o Display do celular e adiciona o Form criado para exibição.
Display.getDisplay(this).setCurrent(meuFormulario);
}
//Método executado quando o MIDlet vai entrar em estado Pausado.
public void pauseApp() {
}
//Método executado antes de finalizar o MIDlet.
public void destroyApp(boolean unconditional) {
//Avisa o SO que este pode controlar o display/dispositivo novamente
this.notifyDestroyed();
92
}
//Permite que a aplicação saiba quando um comando foi acionado
public void commandAction(Command c, Displayable d) {
//Compara qual comando foi solicitado e executa alguma ação programada
if (c == sairCommand) {
destroyApp(true);
} else if (c == somarCommand) {
//define o endereço do servidor
String enderecoWS = "http://192.168.1.125:8080/axis/tcc.jws";
//cria um StringBuffer para armazenar o resultado do WS
StringBuffer stringBuffer = new StringBuffer();
//Cria o objeto SOAP cliente e instancia a classe SoapObject
//Parâmetros: Endereço do WS + nome do método
SoapObject client = new SoapObject(enderecoWS, "soma");
//adiciona os parâmetros do Web Service
//OBS: o método do WS necessita de Integers como parâmetros
client.addProperty("valor1", new
Integer(Integer.parseInt(valor1.getString())));
client.addProperty("valor2", new
Integer(Integer.parseInt(valor2.getString())));
//cria uma conexão com o Web Service
//Parâmetros: Endereço do WS + nome do método
HttpTransport ht = new HttpTransport(enderecoWS, "soma");
//utiliza a estrutura try para tratamento de exceções
try {
//chama o método no Web Service
stringBuffer.append(ht.call(client));
} catch (org.ksoap.SoapFault e) {
//em caso de erros, mostra o erro no log
e.printStackTrace();
} catch (IOException e) {
//em caso de erro, cria um alerta de erro de conexão
Alert alertaConexao = new Alert("Erro!", "Erro ao conectar com o
servidor!", null, AlertType.ERROR);
//exibe o alerta
Display.getDisplay(this).setCurrent(alertaConexao, meuFormulario);
//mostra o erro no log
e.printStackTrace();
}
//Converte o resultado do WS para String
String resultadoWS = stringBuffer.toString();
//Insere o resultado no StringItem resultado
resultado.setText(String.valueOf(resultadoWS));
}
}
}
Quadro 13 - Código fonte da aplicação de exemplo com WS
Figura 47 - Exemplo de aplicação: Somar dois números utilizando Web Services
93
7. ESTUDO DE CASO: ADIÇÃO DE UM MÓDULO MÓVEL AO SISTEMA DE
MONITORAMENTO EM SUBESTAÇÕES DE ENERGIA ELÉTRICA
7.1.
Sistema De Monitoramento Em Subestações De Energia Elétrica
O Sistema de Monitoramento em Subestações de Energia Elétrica é
resultado de pesquisas realizadas pelo Grupo de Automação Industrial e Controle
(GAIC), situado no Departamento de Tecnologia da Unijuí, juntamente com o apoio
da CEEE-D/RS.
O desenvolvimento do sistema de monitoramento, de acordo com [31],
fornece garantias de fornecimento de energia elétrica de qualidade, pois permite
monitorar em tempo real uma subestação de energia elétrica onde é possível
perceber instantaneamente as variações e distúrbios ocorridos. Afirma também que
é possível identificar prováveis problemas de forma rápida e precisa. Ao aliar estas
possibilidades com os recursos da microinformática, pode-se obter o controle de
qualidade da energia elétrica fornecida.
Também permite que todos os dados coletados sejam armazenados em um
banco de dados para posterior análise, onde é possível verificar a ocorrência de
erros, em como analisar as grandezas coletadas, os horário de maior consumo, bem
como traçar metas e meios para economia de energia.
O sistema como um todo possui três subdivisões interconectadas, sendo
elas Subsistema de Aquisição de Dados, Subsistema Servidor Remoto e
Subsistema Controlador Supervisório, conforme figura a seguir: [32]
94
Figura 48 - Arquitetura do Sistema de Monitoramento de Subestações de Energia Elétrica
7.1.1. Subsistema De Aquisição De Dados
O subsistema de aquisição de dados é responsável pela coleta e
manipulação de dados através de dispositivos denominados Unidades Remotas de
Aquisição de Dados (URAD - Figura 49) [33] e [31]. A URAD captura os valores de
três tensões e três correntes através de seus sensores e transdutores, onde a partir
destas informações coletadas, calcula as variáveis de Potência Ativa, Potência
Aparente e o Fator de Potência (grandezas).
A URAD dispõe de seis entradas analógicas e quatro entradas digitais, o que
permite a captura de dados para efetuar o monitoramento dos sistemas elétricos de
potência. Possui, também, quatro saídas digitais para interagir com o sistema, caso
seja necessário. [31]
De acordo como [34], a URAD pode se comunicar com o Servidor Remoto
(SR) através de porta serial (RS 232), via ondas de rádio ou ainda pela RS 485
(multiponto, maiores distâncias de transmissão) que permite conectar diversas
URADs para cada SR.
95
Figura 49 - Unidade Remota de Aquisição de Dados (URAD)
7.1.2. Subsistema Servidor Remoto
O subsistema servidor remoto (Figura 50), de acordo com [33], funciona
como um gateway na rede. É ele quem permite a comunicação entre o subsistema
de aquisição de dados e o subsistema controlador supervisório, transmitindo os
dados recebidos da URAD para o computador com o sistema de exibição das
grandezas coletadas e posterior gravação dos mesmos do banco de dados.
O equipamento utilizado no Servidor Remoto é uma Soekris modelo Net4521
que permite trabalhos sob severas condições de funcionamento, dotado de
processador AMD de 133MHZ, 64MB SDRAM, duas interfaces FastEthernet, socket
CompactFlash tipo I/II, dois slots PC-Card/Cardbus, portal serial DB9 e é alimentado
com fonte externa de 12V. [35]
Figura 50 - Servidor Remoto (SR): 1. Placa PCMCIA Orinoco; 2. Conexão SR com a rede
Ethernet; 3. Conexão SR com a URAD; 4. Alimentação e 5. Cartão de memória
96
7.1.3. Subsistema Controlador Supervisório
O Subsistema Controlador Supervisório é um aplicativo desenvolvido em
linguagem Java que exibe as grandezas capturadas pela URAD em forma de
gráficos, e as armazena do Sistema de Gerenciamento de Banco de Dados (SGBD)
IBM DB2 Express-C para posterior análise e para gerar relatórios.
O sistema (Figura 51) também permite monitoramento em tempo real, onde
em caso de alteração além nos limites estabelecidos, dispara alarmes indicando sub
e sobretensão. Permite visualização do sistema tanto no computador em que está
instalado, bem como através do browser, pela internet, o que admite monitoramento
remoto. [36]
Figura 51 - Tela do aplicativo de monitoramento
97
7.2.
Protótipo Do Subsistema Móvel Incorporado
Com o intuito de aplicar os conhecimentos adquiridos e verificar a viabilidade
de aplicação da tecnologia J2ME em benefício de um Sistema de Monitoramento de
Subestações de Energia Elétrica através de um telefone celular, foi desenvolvido um
protótipo para monitoramento remoto, utilizando WS.
O objetivo é fornecer um aplicativo para monitoramento remoto das
grandezas trabalhadas na subestação de energia, através de um aparelho celular,
proporcionando maior facilidade e confiabilidade no fornecimento de energia elétrica.
Ao utilizar recursos móveis, as funções de controle dos equipamentos
podem ser acessadas de qualquer local e a qualquer momento dentro da empresa,
através da cobertura de rede sem fio, desde que o usuário tenha equipamento
compatível, ou até mesmo fora da empresa, utilizando conexão de dados da
operadora de celular, o que possibilita a ausência do responsável perante estes
equipamentos e a atuação em outros setores da empresa.
7.2.1.
Funcionamento Geral Da Aplicação
O protótipo da aplicação desenvolvida para o Subsistema Móvel foi escrita
utilizando a tecnologia J2ME. Seu funcionamento pode ser visualizado de acordo
com o diagrama de telas apresentado pela Figura 52.
98
Figura 52 - Diagrama de telas da aplicação de monitoramento
A utilização da aplicação por parte do usuário é muito simples, devido a
presença de um menu no formato grade, semelhante à navegação entre as
funcionalidades de muitos telefones celulares. Com a aplicação em execução, o
usuário pode selecionar uma das grandezas para visualizar o gráfico com as
variações das leituras efetuadas pela URAD, através do Subsistema de Aquisição de
Dados. Mais detalhes de cada etapa do Subsistema Móvel serão vistos a seguir.
7.2.2.
Menu
O menu é disposto no formato grade, contendo onze ícones, conforme
Figura 53. Os nove primeiros ícones representam cada uma das grandezas
trabalhadas na subestação de energia e permitem a exibição dos gráficos em tempo
99
real. A utilização deste menu facilita a navegação dentro da aplicação, uma vez que
possui ícones ilustrativos com uma legenda de sua respectiva função.
No desenvolvimento desta tela de menu foi utilizada a interface de baixo
nível Canvas, pois nela existe a liberdade de se desenhar os componentes e ajustas
suas respectivas posições, fato que não é possível ao utilizar uma interface de alto
nível. A interface Canvas também permite que a aplicação seja executada no modo
tela cheia, ou seja, possibilita o aumento de 27% da área visível da tela para a
exibição dos elementos da aplicação.
Figura 53 - Menu da aplicação de Monitoramento
7.2.3.
Gráficos
Ao selecionar uma das grandezas do menu, a aplicação passa a exibir uma
tela (Figura 54) com o nome da grandeza selecionada, os valores mínimo e máximo
correspondente às leituras da URAD, um gráfico com a variação destas leituras e,
por fim, o valor da leitura atual. Também são exibidos alertas (subtensão,
sobretensão e sobrecarga), em caso de ultrapassagem dos limites estabelecidos
nas configurações do aplicativo.
100
Figura 54 - Gráficos gerados pela aplicação de Monitoramento
Os gráficos são gerados com o auxílio da API ChartComponent versão 1.5.2
[37]. O ChartComponent é uma API gráfica desenvolvida pela organização Beanizer,
sob utilização pública. A API permite a criação de gráficos no formato de barras
verticais, horizontais, pizza e gráfico de linhas. O principal motivo de sua utilização é
o fato de ser possível criar facilmente gráficos com melhor aparência e riqueza de
detalhes para as aplicações em J2ME.
Ao gerar o gráfico pela primeira vez, a aplicação efetua uma consulta ao WS
e coleta os últimos 50 dados armazenados no SGBD. Após gerar a primeira imagem
do gráfico, este é atualizado em um determinado tempo em segundos, definido pelo
usuário na tela de configurações (Capítulo 7.2.5), onde é feita a exclusão do primeiro
valor e é adicionado um novo valor no final, valor este proveniente de novas
consultas ao WS. Esta atualização do gráfico é feita de forma contínua, dando
visibilidade de uma leitura em tempo real.
7.2.4.
Conexão com o Web Services
Os dados exibidos na tela do telefone celular são obtidos através da conexão
entre o aplicativo e o WS. O aplicativo possui uma Thread (a qual possibilita que
instruções sejam executadas em paralelo à aplicação) responsável por invocar os
métodos descritos no WS, ou seja, efetuar as conexões com o servidor e obter os
dados recuperados do SGBD.
O WS dispõe de dois métodos que efetuam a conexão e as consultas com o
SGBD. O primeiro método busca os últimos 50 dados armazenados, enquanto o
101
segundo método busca apenas o último dados. O Quadro 14 apresenta o código
fonte utilizado no primeiro método, criado conforme Capítulo 6.9.
//Importa os drivers necessários para comunicar com o SGBD
import java.lang.Integer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
//Cria a classe do WS
public class Servico {
//Cria as variáveis de conexão
public Connection con;
public Statement stmt;
public ResultSet res;
//Cria o método de consulta utilizado pelo aplicativo do celular
public Integer[] celular50(String coluna) {
Integer[] dados = null;
int i = 0;
try {
//Efetua a conexão com o SGBD
Class.forName("com.ibm.db2.jcc.DB2Driver");
String connecturl = "jdbc:db2://IP_do_servidor:50001/Nome_BD";
con = DriverManager.getConnection(connecturl, "usuárioBD", "senhaBD");
} catch (ClassNotFoundException ex) {
System.out.println("Classe não encontrada");
} catch (SQLException e) {
System.out.println("Erro de SQL");
}
try {
//Executa a SQL
stmt = con.createStatement();
res = stmt.executeQuery("select " + coluna + " from MEDIDAS order by
datahora desc fetch first 50 rows only");
dados = new Integer[50];
//Prepara o resultado
while (res.next()) {
dados[i++] = res.getInt(coluna);
}
con.close();
//Retorna os dados lidos no SGBD
return dados;
} catch (SQLException ex) {
return new Integer[]{0};
}
}
}
Quadro 14 - Método do WS da aplicação de Monitoramento
Os dados transmitidos entre o servidor e a aplicação são envelopados no
protocolo SOAP 1.2 utilizando XML. Pelo fato de o J2ME não possuir classes nativas
que implementam este protocolo, é necessário utilizar dois projetos externos, o
kXML e o kSOAP, descritos no Capítulo 6.10.1, os quais substituem o uso da API
JSR 172, presente em alguns aparelhos.
102
7.2.5.
Configurações
As informações necessárias para efetuar a conexão com o servidor, bem
como os limites que devem ser estabelecidos para o correto funcionamento dos
gráficos e seus alertas são manipulados através das configurações do aplicativo,
acessadas por um ícone dedicado no menu do aplicativo.
Estes dados são armazenados no telefone celular através da tecnologia
Record Management System (RMS), este que persistente aos dados nos
dispositivos móveis em uma memória não volátil e possui similaridade a um banco
de dados em sistemas Stand-alone (i.e., que funciona sozinho).
A tela foi desenvolvida utilizando elementos da interface de alto nível (Figura
55). Possui um alerta do tipo Confirmation para indicar o momento em que as
configurações são armazenadas, juntamente com outro alerta do tipo Confirmation
para informar ao usuário, ao executar o aplicativo pela primeira vez, de que as
configurações não foram realizadas, indagando o usuário se este deseja partir
diretamente para a tela de configurações.
Figura 55 - Configurações do aplicativo de Monitoramento
7.2.6.
Outras tecnologias utilizadas
As
características
deste
sistema
exigem
tanto
um
ambiente
de
desenvolvimento quanto um ambiente de execução livres de custo. Nesta situação,
103
foi utilizado uma distribuição Linux, como o sistema operacional OpenSUSE v.11.1,
por tratar-se de uma distribuição estável e livre de custo, desenvolvida pela
comunidade openSUSE.
O SGBD utilizado será o DB2 Express-C da IBM, nesta versão, um robusto
SGBD baseado na tecnologia de software livre com uma crescente comunidade de
desenvolvedores, e já se encontra implementado em diversas soluções de negócios.
Versão esta desenvolvida, também, para estudantes que desejam conhecer e
trabalhar com o SGBD em questão [38].
O motivo pela escolha deste SGBD foi pela vantagem de o mesmo ser free,
por ser multiplataforma, ou seja, por ser desenvolvido em software livre e, também,
por poder reaproveitar a base de dados já existente no projeto principal, como
especificado em [39].
A estrutura da base de dados será reaproveitada do projeto já existente
(Sistema de Monitoramento em Subestações de Energia Elétrica), onde serão
recuperados os últimos dados gravados neste banco de dados para exibição no
aplicativo a ser criado para o celular.
7.3.
Considerações Finais do Protótipo Desenvolvido
O protótipo desenvolvido para o monitoramento remoto da subestação de
energia elétrica apresentou um funcionamento ideal, tanto em ambiente de testes
quanto em um ambiente real. Disponibilizou o desenvolvimento de uma aplicação
com alto grau de confiabilidade e com reduzido custo de produção, manutenção e
utilização.
O diferencial deste sistema foi a exigência da utilização de tecnologias livres
de custo. Pelo fato de a aplicação e o WS serem construídos em linguagem Java,
portanto, multiplataforma, houve uma grande facilidade de implantar o servidor e o
sistema como um todo em ambiente Linux.
104
A utilização de tecnologias livres proporcionou uma redução significativa nos
custos de produção e manutenção, dando ao sistema características flexíveis e
dinâmicas por permitir o monitoramento dos equipamentos fora da empresa em
questão.
No ambiente real, a aplicação mostrou-se eficaz tanto em rede interna
utilizando Wi-Fi, apesar do alcance do sinal ser relativamente baixo, quanto em rede
GSM ou 3G, onde a cobertura de sinal da telefonia móvel pode atingir longas
distâncias.
Por
fim,
destaca-se
o
uso
de
WS
para
comunicação
entre
aplicativos/sistemas disponíveis em diferentes plataformas e linguagens de
programação.
105
CONCLUSÃO
Através deste trabalho, foi possível realizar um estudo sobre o sistema
operacional Symbian, bem como as ferramentas de desenvolvimento de aplicativos
para telefones celulares que utilizam este SO. Também foram apresentados os
requisitos necessários para a utilização destes aplicativos na interação com
servidores remotos utilizando Web Services.
Com o estudo da plataforma J2ME notou-se que esta disponibiliza diversas
funcionalidades que permitem criar aplicativos para suprir as necessidades das mais
variadas situações, tanto de usuários comuns quanto de empresas.
Neste sentido, a disposição de ferramentas e a explanação dos recursos
oferecidos por estas, possibilitou o desenvolvimento do protótipo para o
monitoramento remoto da Subestação de Energia Elétrica disponível em [39].
O protótipo do sistema móvel permite um melhor controle sobre os
equipamentos da subestação. Sua utilização torna a tarefa de monitoramento
flexível e dinâmica, permitindo monitorar remotamente, através de gráficos, as
grandezas trabalhadas na subestação de energia, tornando dispensável a presença
de um técnico em tempo integral para monitorar os equipamento dentro da empresa.
A utilização de Softwares livres atendeu todas as expectativas, e, além de
serem livres de custo, possuem uma vasta comunidade de desenvolvedores que
dão suporte tanto para sua utilização, quanto para o desenvolvimento. Diante disso,
foi possível verificar a viabilidade do desenvolvimento do protótipo e disponibilizar a
106
comunicação com um servidor de dados para buscar e receber estes dados,
integrando a aplicação ao sistema de monitoramento existente.
Trabalhos Futuros
Após o desenvolvimento do protótipo, algumas sugestões podem ser dadas
para aprimorar as funcionalidades do mesmo. Dentre as quais podem-se destacar:
•
Melhoramento do WS no servidor, em busca de tecnologias e soluções que
possam melhorar ainda mais o desempenho de resposta do WS;
•
Ampliar a portabilidade, efetuando testes em outros dispositivos com o SO
Symbian;
•
Ampliar ainda mais a portabilidade, desenvolvendo softwares para outras
plataformas de dispositivos móveis.
107
REFERÊNCIAS BIBLIOGRÁFICAS
[1] OGLIARI, Ricardo. Sony Ericsson e Samsung abandonam definitivamente o
Symbian. Disponível em <http://www.mobilidadetudo.com/ 2010/10/sony-ericsson-esamsung-abandonam-definitivamente-o-symbian.html>, acessado em 10/10/2010.
[2] BARRETO, Juliano. Participação no mercado de smartphones (em %).
Revista Info, no 296, pg. 32. Editora Abril. Outubro de 2010.
[3] GARTNER. Gartner Says Worldwide Mobile Phone Sales Grew 35 Percent in
Third Quarter 2010; Smartphone Sales Increased 96 Percent. Disponível em:
<http://www.gartner.com/it/page.jsp?id=1466313>, acessado em 20/11/2010.
[4] MORRIS, Ben. The Symbian OS Architecture Sourcebook – Design and
Evolution of a Mobile Phone OS. Symbian Press. John Wiley & Sons, Ltd. 2007.
[5] STEVE, Babin. Developing Software for Symbian OS - An Introduction to
Creating Smartphone Applications in C++. Symbian Press. John Wiley & Sons,
Ltd. 2006.
[6] EDWARDS, Reuben; COULTON, Paul; CLEMSON, Helen. S60 Programming –
A tutorial Guide. Symbian Press. John Wiley & Sons, Ltd. 2007.
[7] MUCHOW, John W. Core J2ME: Tecnologia e MIDP. The Sun Microsystems
Press. Pearson, São Paulo. 2006.
[8] JOHNSON, Thienne M. Java para dispositivos Móveis. Novatec Editora Ltda.
2008
[9] ZANFOLIM, Lais Claudia; FERNANDES, Rodolfo Chaves. Desenvolvendo um
Estudo de Caso Utilizando a Plataforma Java ME. Universidade Estadual de Mato
Grosso do Sul. Dezembro de 2009. Disponível em: <http://www.slide
share.net/chavesrodolfo/desenvolvendo-um-estudo-de-caso-utilizando-a-plataformajava-me>, acessado em 10/11/2010.
[10] Foundation Profile. Disponível em: <http://java.sun.com/products/ foundation/>,
acessado em 14/11/2010.
108
[11] Personal Basis Profile.
Disponível
products/personalbasis/>, acessado em 14/11/2010.
em:
<http://java.sun.com/
[12] Personal Profile. Disponível em: <http://java.sun.com/products/personal
profile/>, acessado em 14/11/2010.
[13] VINAGRE, André Nobre; VIANA, David Henrique de Moura. Desenvolvendo
em J2ME: afinando com o celular. Disponível em: <http://www.webartigos.com/
articles/7853/1/Desenvolvendo-Em-J2me/pagina1.html>, acessado em 15/11/2010.
[14] MID Profile Documentation. Disponível em: <http://download.oracle.
com/javame/config/cldc/ref-impl/midp2.0/jsr118/index.html>,
acessado
em
15/11/2010.
[15] O Netbeans. Disponível em: <www.guj.com.br/content/articles/netbeans/
aplicacoes_com_netbeans.pdf>, acessado em 18/09/2010.
[16] O que é o NetBeans. Disponível
index_pt_BR.html>, acessado em 18/09/2010.
em
<http://www.netbeans.org/
[17] Fórum Nokia.com – S60 3rd Edition FP2 SDK. Disponível
<http://www.forum.nokia.com/info/sw.nokia.com/id/ec866fab-4b76-49f6-b5a5af0631419e9c/S60_All_in_One_SDKs.html/>, acessado em 18/09/2010.
em
[18]
ActivePerl
–
Site
Oficial.
Disponível
<http://www.activestate.com/activeperl/downloads>, acessado em 21/11/2010.
em:
[19] PARDAL, Miguel Felipe Leitão. Segurança de aplicações empresariais em
arquiteturas
de
serviços.
2006.
Disponível
em:
<http://mflpar.googlepages.com/MScMflp20060908.pdf>, acessado em 27/08/2010.
[20] MACHADO, Alencar Utilização de Dispositivos Móveis e Web Services no
Monitoramento de Pacientes. Trabalho de Conclusão de Curso. Unijuí, 2008.
[21] ALMEIDA, Maurício Barcellos. Uma introdução ao XML, sua utilização na
Internet e alguns conceitos complementares. Universidade Federal de Minas
Gerais.
Minas
Gerais,
2002.
Disponível
em
<http://www.scielo.br/
pdf/ci/v31n2/12903.pdf>, acessado em 18/09/2010.
[22] LEOPOLDO, Marcus Rommel Barbosa. Simple Object Access Protocol Entendendo o Simple Object Access Protocol (SOAP). Disponível em
<http://www.msdnbrasil.com.br/secure/sharepedia/arquivos/SOAP.pdf>,
acessado
em 18/09/2010.
[23] RECKZIEGEL, Mauricio. Protocolo de Transporte Padrão – SOAP. Disponível
em
<http://imasters.uol.com.br/artigo/4379/webservices/protocolo_de_transporte_
padrao_-_soap/>, acessado em 23/10/2010.
109
[24] RECKZIEGEL, Mauricio. Descrevendo um Web Service – WSDL. Disponível
em
<http://imasters.uol.com.br/artigo/4422/webservices/descrevendo_um_web_
service_-_wsdl/>, acessado em 23/10/2010.
[25] [RECKZIEGEL, Mauricio. Descrevendo, descobrindo e integrando Web
Services - UDDI. Disponível em <http://imasters.uol.com.br/artigo/4474/
webservices/descrevendo_descobrindo_e_integrando_web_services_-_uddi/>,
acessado em acessado em 23/10/2010.
[26] GUNZER, Hartwig. Introduction to Web Services. Borland, 2002. Disponível
em <http://dn.codegear.com/article/images/28818/webservices.pdf>, acessado em
acessado em 23/10/2010.
[27] [MEDEIROS, Manoel Pimentel Web Services com Net. Revista Java Magazine.
Ed 44.
[28] Site Oficial Apache Tomcat. Disponível em <http://tomcat.apache.org/>,
acessado em 01/11/2010.
[29] Site Oficial Apache Axis. Disponível em <http://ws.apache.org/axis/>,
acessado em 01/11/2010.
[30] kSOAP Downloads. Disponível em: <http://ksoap.objectweb.org/software/
downloads/>, acessado em 01/10/2010.
[31] HÜLLER, Dênis Ricardo. Desenvolvimento de uma Interface Homem
Máquina para Aplicações em Monitoramento em Tempo Real de Sistemas
Trifásicos (Web-Based). Trabalho de Conclusão de Curso. Unijuí, 2008.
[32] LI, D; Serizawa Y; and Kiuchi M. Concept Design For a Web-Based
Supervisory Control and Data-Acquisition (SCADA) System, Transmission And
Distribution Conference And Exhibition 2002: Asia Pacific. IEEE/PES volume 1, 6-10
Oct. 2002 Page(s):32 - 36 vol.1.
[33] PADOIN, Edson Luis; SAUSEN, Paulo Sérgio; SALVADORI, Fabiano;
CAMPOS, Maurício de; DILL, Sérgio Luis; IDALENCIO, Tiago A. Mobilidade no
Monitoramento de Subestações Elétricas através de Serviços Web. In: Simpósio
de Informática da Região Centro do RS - SIRC/RS, 2007, Santa Maria. Anais do
Simpósio de Informática da Região Centro do RS, 2007. Disponível em <
http://www.sirc.unifra.br/artigos2007/artigo14.pdf>. Acessado em 04/09/2010.
[34] FACCIN, Luis Fabio; DILL, Sérgio Luis; CAMPOS, Maurício de; PADOIN, Edson
Luiz Aplicação de Software Livre, Dispositivos Móveis e Web Services no
Monitoramento Remoto de Subestações Elétricas. In: DINCON'09 - 8th Brazilian
Conference on Dynamics, Control and Applications, 2009, Bauru, SP. Anais do 8º
Congresso Brasileiro de Dinâmica, Controle e Aplicações DINCON 09, 2009.
[35] Soekris Engineering net4521. Disponível em <http://www.soekris.com/
net4521.htm>, acessado em 04/09/2010.
110
[36] DILL, Martin André Aarnold; SAUSEN, Paulo Sérgio; DILL, Sérgio Luis;
PADOIN, Edson Luiz Automação de Subestações de Energia Elétrica Utilizando
Dispositivos Móveis. DINCON'09 - 8th Brazilian Conference on Dynamics, Control
and Applications, 2009, Bauru, SP. Anais do 8º Congresso Brasileiro de Dinâmica,
Controle e Aplicações DINCON 09, 2009.
[37] J2me ChartComponent v.1.5.2. Disponível em <http://www.beanizer.org/
site/index.php/en/Software/J2me-ChartComponent-ver-1.5.html>,
acessado
em
04/09/2010.
[38] Tecnologia de Banco de Dados IBM DB2 Express-C Oferta para
Estudantes.
Disponível
em:
<http://www.ibm.com/br/university/files/
IBM_DB2_Express-C_Bundle_Final_5_20_08.doc>, em 04/09/2010.
[39] GEHRKE C. S.; Salvadori F.; Campos, M. de; Sausen, P. S.; Sponh, M. A.;
Oliveira A. C.; Camargo R. F. de; Lemos J. Power energy substation automation
based on a hybrid network architecture system. 2005.
Download