Desenvolvimento de Aplicações Móveis com J2ME Esta Série Especial de Tutoriais apresenta os trabalhos premiados no I Concurso Teleco de Trabalhos de Conclusão de Curso (TCC) 2005. O conteúdo deste tutorial foi obtido do artigo classificado em primeiro lugar no concurso, de autoria da Andrea Rodrigues de Amorim. Este tutorial descreve o projeto e a implementação de um protótipo de aplicação para telefone celular que acessa um servidor corporativo usando a tecnologia JAVA para dispositivos móveis. Andrea Rodrigues de Amorim Bacharel em Sistemas de Informação (2005/2, ULBRA - Canoas, RS), atua desde 1996 na área de Informática, trabalhando com Treinamento, Help-Desk, Desenvolvimento de Software, Web Design e Administração de Rede Windows. Atuou em treinamento de Sistemas Operacionais Windows a aplicativos Office e Internet em empresas de Porto Alegre, RS, tais como InterOp, TBA Informática e SENAC, e na Administração da Rede Windows 2000, Manutenção de Website, Desenvolvimento e Manutenção de Software e Migração de sistemas e novos projetos para a plataforma Java, na Comercial de Informática UltraService (Porto Alegre). Atuou também no Desenvolvimento e manutenção de sistema web/mobile para pesquisa de mercado usando a plataforma Java, na LCA Promoções(Porto Alegre). Atualmente trabalha com o desenvolvimento de aplicações móveis integradas a sistemas web, tendo participado como palestrante em eventos voltados ao desenvolvimento de aplicações em Java, além de ser também membro-fundador da Confraria do Java: grupo de estudos em Java da ULBRA. Foi também a primeira classificada no I Concurso Teleco de Trabalhos de Conclusão de Curso (TCC) 2005, e recebeu o Prêmio Destaque Universitário em Informática 2006 do SEPRORGS/SBC. Email: [email protected] Categoria: Telefonia Celular Nível: Introdutório Enfoque: Técnico Duração: 20 minutos Publicado em: 15/05/2006 1 J2ME: Introdução No mundo atual, a necessidade de integrar comunicação e mobilidade se torna cada vez maior. Com a quebra da fronteira entre os mercados, as empresas buscam soluções que viabilizem seus negócios, tanto a nível gerencial como operacional, dentro desta nova realidade que impõe a realização de comunicações e operações de acesso a dados a qualquer hora, a partir de qualquer lugar do planeta. A explosão da tecnologia móvel nos últimos anos abriu um universo de possibilidades para os desenvolvedores de aplicativos. Entretanto, a diversidade de plataformas a serem integradas e a preocupação com a performance são desafios a serem considerados. O objetivo geral deste trabalho é o estudo da tecnologia Java para dispositivos móveis aplicado a uma solução para integrar o ambiente empresarial com seus colaboradores, quando estiverem fora da sede. Com os objetivos específicos de garantir portabilidade e desempenho a custos reduzidos, este artigo descreve o projeto e a implementação do protótipo de uma aplicação para telefone celular que acessa um servidor corporativo. A seção O Mundo Sem Fio expõe uma visão geral da tecnologia sem fio. A seguir, a seção Tecnologia J2ME introduz a edição J2ME da linguagem Java e descreve o processo de desenvolvimento de aplicações com essa tecnologia. A Seção Metodologia descreve, além da metodologia propriamente dita, os padrões de projeto, a análise do problema, os requisitos do projeto e os recursos necessários para implementação do protótipo. A Seção Projeto CelCorp apresenta a solução proposta detalhando a arquitetura e os módulos da aplicação, apresentando o enfoque da definição dos dados e a padronização das interfaces. A Seção Detalhamento dos Dados apresenta a definição e o detalhamento da estrutura de dados do projeto. Finalmente, na Seção Considerações finais são apresentadas as conclusões obtidas a partir do desenvolvimento do projeto Celcorp. 2 J2ME: O mundo sem fio O principal objetivo da tecnologia sem fio é proporcionar mobilidade, ou seja, permitir que os usuários obtenham qualquer tipo de informação, em movimento (LEAL, 2004). Vantagens Num cenário onde os colaboradores das empresas precisam enfrentar viagens, engarrafamentos e deslocamentos constantes, a possibilidade de acesso às informações relevantes ao desempenho de suas funções, a qualquer momento, é vital para o crescimento das organizações. A tecnologia sem fio torna possível adicionar mobilidade às soluções convencionais, sem criar aplicações totalmente novas (LEAL, 2004), inserindo módulos que irão agregar valor às ferramentas pré-existentes evitando o descarte de tecnologia e contornando a resistência natural dos clientes a mudanças drásticas. Problemas O maior problema enfrentado no desenvolvimento de aplicações móveis é a escassez de recursos dos equipamentos sem fio disponíveis atualmente no mercado. Considerando os aparelhos celulares, pode-se destacar restrições como: disponibilidade da rede, tamanho da tela, quantidade limitada de memória, poder de processamento reduzido. Além disso, com a diversidade de arquiteturas existentes tanto entre os dispositivos móveis como entre os ambientes de produção das organizações, a conectividade entre eles e a conseqüente portabilidade torna-se um grande desafio das aplicações móveis. Tecnologias Disponíveis As principais tecnologias disponíveis atualmente para a implementação de soluções móveis são: SMS, MMS, BREW, SuperWaba e Java 2 Micro Edition (J2ME). É importante salientar que estas tecnologias não são excludentes podendo uma aplicação móvel utilizar-se de mais de uma delas. Segundo LEAL (2004) e SOARES (2004) a tecnologia J2ME proporciona o melhor custo/benefício na medida que: Profissionais da linguagem Java podem ser aproveitados; Amplamente adotada pelos fabricantes e operadoras de telefonia móvel; Uma vez que a aplicação estiver instalada poderá ser utilizada fora da área de cobertura ou sem sinal, fazendo sincronização dos dados no retorno; Compatibilidade de plataformas: aplicativos Java são escritos uma vez e rodam em diferentes dispositivos com sistemas operacionais diferentes; Permite implementar criptografia extra para aplicativos de acesso a bancos entre outros; Fornece um cliente de rede sofisticado permitindo tirar proveito das vantagens e particularidades dos aparelhos móveis. Situação Atual 3 De acordo com ALMEIDA (2004), em 2002 já existiam 50 milhões de aparelhos celulares com a máquina virtual Java em operação no mundo. Ele estima que até 2007, cem por cento dos celulares serão compatíveis com J2ME. Entre as empresas que atualmente oferecem algum tipo de solução móvel podemos destacar a Compera, a Class Systems Solutions, e as gaúchas Trevisan Tecnologia, Human Mobile, Criterium e Mobisol. Apesar de toda a tecnologia disponível, a oferta de aplicações móveis ainda é pequena deixando um enorme mercado a ser explorado. Segundo SOUZA (2003), a parceria entre as operadoras de telefonia móvel e os desenvolvedores poderá mudar este cenário. 4 J2ME: A tecnologia J2ME A plataforma J2ME é a edição da linguagem Java que foi projetada para dispositivos com memória, vídeo e poder de processamento limitados, variando desde máquinas ligadas à TV até telefones celulares. Antes do surgimento da tecnologia J2ME as aplicações tinham que ser escritas na linguagem nativa de cada dispositivo usando bibliotecas proprietárias, o que as tornavam incompatíveis com dispositivos diferentes. Arquitetura J2ME A arquitetura da plataforma J2ME permite ao desenvolvedor conhecer informações específicas sobre as diferentes famílias de dispositivos e as Application Program Interfaces (APIs) disponíveis para cada uma delas (ALMEIDA, 2004). A máquina virtual J2ME foi projetada para ser menor e mais eficiente do que a máquina virtual J2SE, sendo um subconjunto desta. Em função disso, ocupa aproximadamente 60 kilobytes de memória em tempo de execução. A máquina virtual J2ME é chamada KVM numa alusão à pequena quantidade de memória exigida, que está na ordem dos kilobytes. É a base da arquitetura, localizada logo acima do sistema operacional hospedeiro, seguida pelas Configurações que dão suporte aos Perfis. Uma configuração define as características mínimas de uma família de dispositivos, bem como os recursos e bibliotecas Java que a compõem (MUCHOW, 2004). Estão divididas em: Connected Device Configuration (CDC): conjunto de APIs para dispositivos “fixos”, como um computador ligado à televisão; Connected Limited Device Configuration (CLDC): conjunto de APIs para dispositivos com poder de processamento, vídeo e memória limitados, geralmente móveis. Um perfil define um conjunto de APIs que fornece funcionalidade a uma configuração, sendo mais específico que esta (ALMEIDA, 2004). Os perfis existentes são: Foundation Profile: base para dispositivos em rede sem interface gráfica, usado com CDC; Personal Basis e Personal Profile: base para dispositivos com suporte gráfico e alta capacidade, usado com CDC; Mobile Information Device Profile (MIDP): perfil compatível com CLCD implementa componentes, entrada e tratamento de eventos de interface com usuário, armazenamento persistente, interligação em rede, segurança, entre outros recursos. Desenvolvimento de Aplicações Aplicativos criados usando-se MIDP são chamados midlets. Uma aplicação móvel é composta por uma ou mais midlets empacotadas em um arquivo Java Archive (JAR) e um arquivo descritor da aplicação (Java Application Descriptor - JAD), formando um conjunto chamado MIDlet Suíte ou Conjunto de Midlets. Uma midlet passa por várias fases e assume três estados diferentes durante o seu ciclo de vida. Quando o usuário seleciona uma midlet para execução no dispositivo, o gerenciador de aplicativos chama o 5 método construtor da classe MIDlet e a aplicação inicia no estado de pausa. Em seguida, o próprio gerenciador de aplicativos chama o método startApp() que altera o estado da midlet para ativo. Enquanto a midlet estiver ativa, o gerenciador de aplicativos poderá suspender sua execução através da chamada do método pauseApp() fazendo com que a midlet retorne ao estado de pausa. A própria midlet também poderá colocar-se em pausa chamando o método notifyPaused(). Uma vez em pausa, o método resumeRequest() irá informar ao gerenciador de aplicativos que a midlet está pronta para ser ativada novamente. O gerenciador fará uma nova chamada ao método startApp() para ativar a midlet. Portanto, este método poderá ser executado várias vezes durante o ciclo de vida da aplicação. Estando a midlet em pausa ou ativa, se o gerenciador de aplicativos chamar o método destroyApp(), a midlet fica no estado destruída até que o coletor de lixo libere os recursos alocadas pela mesma, encerrando sua execução. A própria midlet também pode encerrar sua execução através da chamada do método notifyDestroyed() que deverá implementar a liberação dos recursos da aplicação. O perfil MIDP fornece uma gama de componentes para o desenvolvedor construir as interfaces da sua aplicação. A classe Display representa a tela do dispositivo e cada midlet terá apenas uma referência para um objeto display que poderá exibir diferentes elementos. Estes elementos são objetos das subclasses de Displayable e representam alguma coisa que pode ser vista na tela do dispositivo. Segundo KNUDSEN (2003), o funcionamento básico de uma midlet pode ser resumido nas seguintes etapas: Mostrar um Displayable; Esperar por ação do usuário; Decidir qual Displayable mostrar em seguida; Repetir a etapa 1. A configuração CLDC define um framework de conexão genérica onde apenas uma classe, Connector, pode criar qualquer tipo de conexão. Em tempo de execução, esta classe recebe a solicitação de abertura de algum tipo de conexão e procura a classe adequada para a conexão desejada, retornando um objeto que implementa uma das interfaces Connection. A implementação dos protocolos está definida em nível de perfil e no MIDP 1.0 a única implementação exigida é a do protocolo HTTP versão 1.1. A plataforma J2ME permite o armazenamento de informações nos dispositivos móveis através do Record Management System (RMS). Este sistema fornece classes e métodos para manipulação de arquivos de registros. Cada registro consiste em um identificador de registro, gerado pelo RMS, e um array de bytes contendo os dados a serem armazenados. 6 J2ME: Metodologia A metodologia escolhida para o desenvolvimento do protótipo foi a Análise e Projeto Orientado a Objetos por ser o paradigma mais atual em termos de criação de sistemas. Além disso, esta metodologia permite a construção de aplicações a partir de duas características básicas: reutilização de código e modularidade. Para implementar esta metodologia foi utilizada a Unified Modeling Language (UML) que é uma linguagem para visualizar, especificar, construir e documentar projetos de sistemas orientados a objetos. Padrões de Projeto Segundo GAMMA, HELM, JOHNSON et al. (2005), os padrões de projeto são descrições de objetos e classes que precisam ser personalizadas para resolver um problema de projeto num determinado contexto. Os padrões utilizados no desenvolvimento do protótipo foram os seguintes: Padrão Model-View-Controller (MVC): a abordagem MVC é um modelo do uso combinado de padrões que permite a construção de aplicações em três camadas. A camada Model será responsável pela persistência dos dados. A camada View é a apresentação na tela e permite a interação da aplicação com o usuário. A camada Controller faz a ligação entre as outras camadas definindo como o sistema reage às entradas do usuário. O objetivo deste modelo é fazer com que as camadas de apresentação e de persistência sejam independentes uma da outra. A camada controladora impede que o impacto produzido por alterações numa camada atinja a outra; Padrão Singleton: este padrão de criação de objetos garante que uma classe tenha apenas uma instância, fornecendo um ponto global de acesso a ela. A própria classe deve ser responsável por controlar a criação de sua única instância; Padrão State: este padrão comportamental permite a um objeto alterar seu comportamento conforme seu estado interno muda. O objetivo deste padrão é definir uma classe abstrata para representar os estados dos objetos onde as subclasses implementam os comportamentos específicos de cada estado. Análise do Problema A definição do problema foi feita a partir das seguintes premissas: A globalização no mundo dos negócios resultou na queda da distinção entre os mercados interno e externo; A evolução das tecnologias de comunicação trouxe agilidade para o ambiente empresarial gerando a necessidade de rapidez na tomada de decisões; Os deslocamentos constantes dos colaboradores dificultam o exercício de suas funções; A competição acirrada exige que as organizações possuam algum diferencial em relação aos seus concorrentes; Analisando o cenário atual, a possibilidade de acesso remoto ao ambiente empresarial pode ser considerada como um fator crítico de sucesso para muitas organizações. Descrição de Requisitos Considerando a importância da mobilidade para o crescimento das organizações e levando em conta o escopo do projeto, podemos destacar os seguintes requisitos do sistema: 7 Dar acesso à agenda corporativa de compromissos permitindo consulta, inclusão, alteração e exclusão de itens da agenda quando o usuário estiver fora do ambiente empresarial; Proporcionar este acesso remoto à agenda tanto através de um aparelho celular como via navegador web; Permitir a utilização da aplicação móvel fora da área de cobertura; Possibilitar que os dados armazenados no aparelho celular sejam transferidos posteriormente para o servidor web; Fornecer meios para que o administrador do sistema mantenha o cadastro dos usuários, bem como seus níveis de acesso; Permitir que o usuário da aplicação móvel escolha se deseja conectar-se ao servidor web ou trabalhar localmente; Garantir que a aplicação seja compatível com sistemas pré-existentes; Assegurar que a aplicação móvel possa ser instalada na maioria dos aparelhos celulares em operação. Recursos de Hardware Os requisitos de hardware para desenvolvimento, testes e operação do protótipo são: Micro-computador Pentium III 800 MHz ou superior; Memória 256 Mb ou mais; Placa de vídeo SVGA 800x600, Hi-Color; Disco rígido com 5 Mb livres ou mais; Servidor Web para hospedagem do sítio; Servidor de banco de dados; Aparelho celular com suporte para CLCD 1.0 e MIDP 1.0. Recursos de Software Os requisitos de software para desenvolvimento, testes e operação do protótipo são: NetBeans 4.1; Tomcat 5.0; Módulo de mobilidade para o NetBeans 4.1; Banco de dados PostgreSQL 8.0; Driver JDBC para o PostgreSQL 8.0; Sítio com módulo servidor da aplicação; Banco de dados; Navegador web; Aplicativo móvel instalado no aparelho celular. 8 J2ME: Projeto CelCorp O projeto proposto refere-se a uma aplicação móvel para telefones celulares, o CelCorp, que visa oferecer acesso à agenda de compromissos corporativa, suprindo a necessidade de mobilidade do ambiente empresarial. Por limitações de escopo, o projeto CelCorp foi implementado como um protótipo composto por dois módulos móveis - Agenda e Preferências – e um módulo servidor que também pode ser acessado via navegador de internet. A fim de simular o servidor web de uma empresa foi utilizada a estrutura de um sítio que oferece hospedagem para aplicações Java. O acesso à base de dados é feito através de uma conexão com este servidor web. O módulo servidor pode ser acessado em <http://javatest.confrariadojava.org/CelCorpWeb> usando a identificação do usuário de testes: teste e senha 123. O módulo servidor da aplicação será formado por um contêiner web onde estarão armazenadas as servlets que farão a comunicação com as midlets (clientes da aplicação) e o banco de dados para armazenar as informações da agenda de compromissos, cadastro de usuários e permissões de acesso. As servlets farão o acesso aos dados a partir de dois arquivos de propriedades que poderão ser configurados conforme o banco de dados utilizado pelo cliente. O primeiro arquivo contém os dados da conexão propriamente dita: driver, nome da base de dados, usuário e senha de acesso. O segundo arquivo possui os comandos da linguagem Structured Query Language (SQL) adaptados à sintaxe do banco de dados desejado. O protótipo do CelCorp usará o banco de dados PostgreSQL 8.0. A fim de manter a compatibilidade do sistema com a grande maioria dos celulares em operação, a aplicação móvel está sendo desenvolvida usando a configuração CLCD 1.0 e o perfil MIDP 1.0 da tecnologia J2ME. A comunicação com o servidor web será feita através de conexão genérica HiperText Transfer Protocol (HTTP). Arquitetura do Projeto O CelCorp foi projetado em três camadas seguindo o padrão MVC (Model-View-Control). A Figura 1 apresenta os módulos da aplicação móvel e o relacionamento entre eles, permitindo identificar as camadas do padrão. 9 Figura 1: Diagrama de Pacotes CelCorp. A camada View é responsável pela interface com o usuário. A camada Control permite a ligação entre as camadas view e database da aplicação. É nesta camada que são feitas as validações e o controle do fluxo de entrada e saída de dados. A camada Model corresponde aos pacotes database da aplicação e é responsável pelo armazenamento persistente dos dados. O padrão Singleton foi utilizado na criação de objetos pois segundo GAMMA, HELM, JOHNSON et al. (2005, p.130), este padrão garante que somente uma instância de cada classe seja criada durante todo o ciclo de vida da aplicação. Este padrão é bastante útil nas aplicações móveis por economizar o poder de processamento do dispositivo evitando a criação e destruição de objetos que serão reutilizados em seguida. Módulos Móveis O módulo Preferências apresenta opções de configuração do sistema que podem ser alteradas pelo usuário. As configurações disponíveis são: Solicitar senha: o padrão do sistema é solicitar os dados de identificação (login e senha) apenas uma vez, armazenando-os no aparelho celular. Se desejar, o usuário poderá definir que o login e senha sejam solicitados sempre que entrar na aplicação; Confirmar conexão: o padrão do sistema é conectar-se automaticamente ao servidor web. Entretanto, o usuário poderá configurar o sistema para solicitar sua confirmação antes de efetuar a conexão. O módulo Agenda permite ao usuário incluir, editar, excluir, consultar e sincronizar compromissos da sua agenda corporativa tanto localmente como de forma remota através do módulo servidor. Quando a comunicação com o servidor web estiver disponível, todas as operações serão realizadas no servidor e nenhum dado será armazenado no celular, configurando o estado online. Quando a conexão não for possível ou desejável, os dados e operações serão gerenciados no próprio aparelho celular, configurando o estado offline. 10 Para garantir que as operações sejam realizadas adequadamente conforme o estado da aplicação foi utilizado o padrão State. De acordo com GAMMA, HELM, JOHNSON et al. (2005, p.284) este padrão permite que um objeto mude seu comportamento em função de seu estado interno. A Figura 2 apresenta o diagrama de estados do módulo Agenda, indicando as operações responsáveis pelas mudanças de estado. Figura 2: Diagrama de Estados da Agenda. Ao entrar no módulo Agenda o estado InicialState verifica as preferências do usuário e poderá solicitar a identificação do mesmo no sistema e/ou a confirmação para conectar-se ao servidor web. Conforme a decisão do usuário o estado da aplicação é alterado e a tela inicial do módulo Agenda é carregada. Caso a aplicação esteja no estado OnlineState, se ocorrer algum erro na conexão seu estado passará a ser OfflineState e os dados em memória serão armazenados no celular. No estado OfflineState, se a operação sincronizar for selecionada pelo usuário, o sistema passará para o estado OnlineState e os dados locais serão transferidos para o servidor web. A conexão com o servidor web é feita em uma linha de execução separada permitindo que o dispositivo continue disponível durante a operação. Para implementar a execução de processos concorrentes foi usada uma instância da classe Thread. Módulo Servidor O módulo servidor permite o acesso às mesmas funcionalidades do módulo Agenda, via navegador de internet. Além disso, os usuários poderão fazer manutenção nos seus dados cadastrais. O administrador do sistema poderá também cadastrar, alterar ou excluir usuários. A arquitetura original em 3 camadas sofre alguma adaptação no ambiente web. A Figura 3 mostra a arquitetura em 4 camadas do servidor web. 11 Figura 3: Arquitetura em camadas do servidor web. A camada Web é composta pelas JavaServer Pages que enviam conteúdo dinâmico para o navegador do usuário. A camada de aplicação é formada pelo conjunto de servlets que fazem a ligação entre as JSP’s e a camada de persistência que por sua vez, contém as classes de acesso ao banco de dados e os arquivos de propriedades. O cliente móvel conecta-se diretamente com a camada de aplicação do servidor web através de uma servlet que atua fazendo a ligação da aplicação móvel com a camada de dados do servidor. Esta servlet recebe, interpreta e redireciona os dados conforme a operação solicitada, retornando o resultado. Definição de Dados Independente do banco de dados utilizado no servidor web, o protótipo necessita de uma tabela para armazenar os dados dos usuários e outra para armazenar os compromissos da agenda corporativa. Para permitir o armazenamento dos dados no dispositivo móvel foram usados três RMS diferentes. O detalhamento da definição dos dados encontra-se na seção Detalhamento dos Dados. Padronização das Interfaces A padronização das interfaces é muito difícil no ambiente J2ME. O desenvolvedor pode e deve usar um padrão, mas cada dispositivo irá implementá-lo à sua maneira. A maioria das interfaces da aplicação móvel estende a classe Form por sua capacidade de conter outros componentes aninhados. Foram adicionados elementos do tipo TextBox para entradas de texto, DateField para entrada de data/hora, ChoiceGroup para escolha de opções e Gauche para mostrar o progresso da conexão. A interface inicial do módulo Agenda usa a classe List pela facilidade de seleção de item da lista com um único comando que essa classe oferece. As interfaces usadas para exibir mensagens de erro e de sucesso estendem a classe Alert e estão implementadas de forma que fiquem visíveis durante 5 e 2 segundos 12 respectivamente. Para permitir aos usuários o acesso às operações do sistema, foram associados objetos da classe Command às interfaces. Estes objetos possuem propriedades como prioridade e tipo de comando as quais poderão influenciar a maneira como o dispositivo irá implementá-los. A interface inicial de cada módulo deve apresentar o comando “Sair” com prioridade um e tipo “EXIT” para permitir o encerramento daquele módulo. Os outros comandos, relacionados às operações do módulo, devem ser do tipo “SCREEN” e ter prioridade dois. As demais interfaces devem conter o comando “Voltar” com prioridade um e tipo “BACK” e apenas mais um comando do tipo “SCREEN” para confirmar a operação relacionada com a interface. O comando “Voltar” permite o retorno à interface inicial do módulo sem realizar a operação disparada por aquela interface. A Figura 4 mostra a interface inicial do módulo Agenda onde aparecem os compromissos do dia, em ordem cronológica, e os comandos disponíveis. Figura 4: Interface inicial do módulo Agenda. Nesta implementação do simulador, o comando “Sair” aparece sozinho à esquerda e os demais comandos foram agrupados sob o nome “Menu” do lado direto da tela. Entretanto, esta apresentação não é uma regra, no celular Nokia 6820, o comando “Sair” aparece à direita, o comando “Adicionar” ao centro e os demais comandos agrupados à esquerda sob o nome “Opções”. As interfaces do módulo servidor são as JSP da camada web da aplicação. Devem ser compatíveis com o padrão visual do sítio da organização e podem ser desenhadas através de folhas de estilos. 13 J2ME: Detalhamento dos Dados Conforme foi apresentado na seção anterior, que detalhou o Projeto Celcorp, independente do banco de dados utilizado no servidor web, o protótipo necessita de uma tabela para armazenar os dados dos usuários e outra para armazenar os compromissos da agenda corporativa. Para permitir o armazenamento dos dados no dispositivo móvel foram usados três RMS diferentes, os quais são apresentados a seguir. Tabela Usuário A tabela Usuário armazena os dados cadastrais e o nível de acesso ao sistema de cada usuário. O Quadro 1 mostra a estrutura da tabela Usuário onde o campo perfil indica que o usuário possui acesso de administrador quando seu valor for igual a 1. Campo Tipo de Dado Tamanho Valor Padrão Permitir Nulo Chave codusuario Inteiro 4 - Não Primária Login Texto 20 - Não - Senha Texto 20 - Não - Nome Texto 60 - Sim - Endereco Texto 60 - Sim - Cidade Texto 60 - Sim - Estado Texto 2 - Sim - Cep Texto 8 - Sim - Pais Texto 40 - Sim - Email Texto 80 - Sim - fone_com Texto 15 - Sim - fone_res Texto 15 - Sim - fone_cel Texto 15 - Sim - Fax Texto 15 - Sim - Perfil Inteiro 2 0 Sim - Quadro 1: Tabela Usuário. 14 Tabela Agenda A tabela Agenda armazena os dados dos itens de agenda dos usuários. Sua estrutura está descrita no Quadro 2. Campo Tipo de Dado Tamanho Valor Padrão Permitir Nulo Chave Codagenda Inteiro 4 - Não Primária Codusuario Inteiro 4 - Não Estrangeira Data Numérico Indefinido - Não - Titulo Texto 50 - Sim - Descricao Texto 100 - Sim - Quadro 2: Tabela Agenda. RMS CelCorpPrefs O RMS CelCorpPrefs armazena as preferências do usuário. A estrutura do campo de dados deste RMS é descrita no Quadro 3. Tipo de Dado Tamanho Representa... Boolean 1 Quando verdadeiro, indica que os dados de login devem ser solicitados a cada entrada no sistema. Caso seja falso, este valor indica que os dados de login devem ser solicitados apenas na primeira vez que o usuário acessar o sistema e armazenados no celular. Boolean 1 Quando verdadeiro, indica que a conexão com o servidor web deve ser automática. Caso seja falso, o sistema irá solicitar confirmação do usuário para conectar-se ao servidor. Quadro 3: Estrutura do RMS CelCorpPrefs. RMS CelCorpAgenda O RMS CelCorpAgenda armazena os itens de agenda. O campo de dados deste RMS está descrito no Quadro 4. Tipo de Dado Tamanho Representa... Inteiro 4 Código do item de agenda. Longo 4 Data e hora do item da agenda em milisegundos. Texto Variável Título do item da agenda em caracteres UTF. Texto Variável Descrição do item da agenda em caracteres UTF. Quadro 4: Estrutura do RMS CelCorpAgenda. 15 RMS CelCorpLogin O RMS CelCorpLogin armazena o login e a senha do usuário no aparelho celular caso o sistema tenha sido configurado desta forma. O Quadro 5 mostra a estrutura do campo de dados deste RMS. Tipo de Dado Tamanho Representa... Texto Variável Login do usuário para acessar o sistema. Texto Variável Senha do usuário para acessar o sistema. Quadro 5: Estrutura do RMS CelCorpLogin. É importante que a leitura do campo de dados dos registros dos RMS’s seja feita na mesma ordem em que os valores foram gravados. Além disso, a leitura deve ser seqüencial, ou seja, se o registro foi gravado contendo um valor inteiro, um texto e um booleano e quisermos recuperar apenas o valor booleano, temos que ler primeiro o inteiro e o texto para chegar ao valor desejado. 16 J2ME: Considerações Finais Este artigo apresentou um estudo sobre a tecnologia J2ME e o desenvolvimento do protótipo de uma aplicação para atender à crescente demanda por mobilidade com disponibilidade no mercado corporativo atual, o CelCorp. O protótipo possibilita a consulta e manutenção de compromissos de agenda corporativa através de um aparelho celular via conexão com um servidor web. O CelCorp foi planejado para ser totalmente compatível com a estrutura de tecnologia da informação já existente nas empresas. Desta forma, a integração pode ser feita agregando-o como um módulo de mobilidade aos sistemas pré-existentes. Esta ferramenta usa tecnologia livre a fim de possuir custo/benefício atrativo para as empresas que desejarem adotá-la. Além disso, é compatível com a maioria dos aparelhos celulares em operação, facilitando sua penetração no mercado. No decorrer do projeto CelCorp ficou evidente a importância do uso de padrões de projeto. Além de facilitar a manutenção das aplicações, os padrões são fundamentais para o desenvolvedor entender e resolver problemas na implementação de situações reais, variáveis e complexas. Apesar da perda de recursos como criptografia nativa, o uso das versões iniciais do J2ME garante a compatibilidade com a grande maioria dos aparelhos celulares em operação hoje. Além disso, a modularidade do projeto permite que tais recursos sejam facilmente incorporados no futuro. Referências ALMEIDA, L. B. de. Introdução à J2ME e Programação MIDP. Mundo Java, Curitiba, n. 5, p. 20-27, maio 2004. GAMMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J. Padrões de Projeto: Soluções reutilizáveis de software orientado a objetos. Porto Alegre: Bookman, 2005. KNUDSEN, J. Wireless Java: Developing with J2ME. Berkeley: Apress, 2003. LEAL, M. Começando com Java Wireless. Java Magazine, Rio de Janeiro, n. 18, p. 16-19, 2004. MUCHOW, J. W. Core J2ME – Tecnologia & MIDP. São Paulo: Pearson Makron Books, 2004. SOARES, M. A Tecnologia Java como Diferencial no Mundo dos Celulares. Mundo Java, Curitiba, n. 5, p. 53-54, maio 2004. SOUZA, B. Fazendo Wireless Acontecer: J2ME e o Mercado Brasileiro. Java Magazine, Rio de Janeiro, n. 3, p. 12-15. 2003. 17 J2ME: Teste seu Entendimento 1. O uso da tecnologia J2ME proporciona o melhor custo/benefício na medida em que: Profissionais da linguagem Java podem ser aproveitados. A tecnologia é amplamente adotada pelos fabricantes e operadoras de telefonia móvel. Uma vez que a aplicação estiver instalada poderá ser utilizada fora da área de cobertura ou sem sinal, fazendo sincronização dos dados no retorno. Fornece um cliente de rede sofisticado permitindo tirar proveito das vantagens e particularidades dos aparelhos móveis. Todos os anteriores. 2. Qual dos itens abaixo não representa uma etapa do funcionamento básico de uma midlet (aplicativos criados usando-se Mobile Information Device Profile – MIDP)? Iniciar o navegador WAP (etapa 0). Mostrar um Displayable (etapa 1). Esperar por ação do usuário (etapa 2). Decidir qual Displayable mostrar em seguida (etapa 3). Repetir a etapa 1 (etapa 4). 3. Qual das alternativa não representa uma camada da arquitetura do servidor web usado no projeto CelCorp? Camada de Apresentação. Camada de Web. Camada de Sessão. Camada de Aplicação. Camada de Dados. 18