UM SISTEMA DE ACESSO REMOTO A BANCO DE DADOS EMPREGANDO DISPOSITIVOS MÓVEIS Bruno Savoini ¹ ², Ivan Roberto Santana Casella ², UFABC ¹ Aluno de IC voluntário ² Centro de Engenharia, Modelagem e Ciências Sociais Aplicadas Resumo: Este artigo aborda a criação de um aplicativo para dispositivos móveis, com a função de acessar remotamente um Banco de Dados para obter rotas entre estações do sistema de transporte da região metropolitana de São Paulo. O aplicativo em questão é desenvolvido na plataforma Java 2 Micro Edition, e se comunica remotamente por meio da tecnologia Wap com o Banco de Dados localizado em um servidor desenvolvido na plataforma Java 2 Enterprise Edition. A base de dados é obtida a partir do processamento que visa determinar rotas ótimas utilizando o algoritmo de Dijkstra. Palavras Chave: Banco de Dados, HttpConnection, Java, J2ME, J2SE. Dijkstra, 3. Metodologia e Materiais Este capítulo aborda as configurações, algoritmos e modelagens utilizadas. 3.1. Perfil J2ME A criação de um aplicativo J2ME se inicia pela escolha da configuração do dispositivo e seu respectivo perfil, que é a camada que define o conjunto mínimo de interfaces de programa da aplicação. Em função do dispositivo móvel selecionado (i.e. celular) e das características do aplicativo, foi escolhida a configuração CLDC-1.1 e o perfil MIDP-2.0 [1]. 3.2. Estrutura Cliente - Servidor 1. Introdução Com a evolução tecnológica dos dispositivos móveis e o aumento da sua utilização, seus aplicativos passaram a ganhar atenção entre usuários e desenvolvedores. Estes aplicativos possuem grandes diferenças com relação às aplicações Desktop, principalmente em termos de conectividade e configuração de hardware. As limitações destas aplicações variam desde o tamanho da tela do dispositivo, configurações de memória, processamento, e até mesmo duração da bateria. Além destas limitações há problemas em relação à conectividade com internet, e outros fatores que fazem com que aplicativos para dispositivos móveis tenham que ser muito bem planejados. Devido a isto ainda não é grande a gama de linguagens para estes dispositivos. Entre as linguagens disponíveis está a J2ME (Java 2 Micro Edition), desenvolvida pela Sun Microsystems, que é uma adaptação da linguagem Java para que se possa lidar com as questões relatadas anteriormente [1]. Os aplicativos J2ME possuem a capacidade de se conectarem remotamente por meio da especificação WAP. Esta especificação possibilita a interação do cliente com um servidor por meio de Bluetooth, GSM, CDMA ou 3G [12]. O aplicativo elaborado tem a função de traçar rotas entre as estações de metrô, trem e linhas de trólebus do sistema de transporte metropolitano de São Paulo. A estrutura empregada é do tipo cliente-servidor [1]. O aplicativo base (Desktop) é o servidor, onde é armazenado o BD, e o aplicativo móvel (celular) é o cliente, onde o processamento é menos intenso (Figura1). 2. Objetivo Neste contexto, este trabalho apresenta um novo aplicativo móvel desenvolvido em J2ME para a obtenção da rota ótima entre duas estações quaisquer do sistema de transporte metropolitano de São Paulo. O objeto de estudo se concentra nas formas de conexão remota entre o aplicativo e o banco de dados (BD), nas características de armazenamento da base de dados no servidor e na apresentação gráfica dos resultados. Figura 1- Diagrama da aplicação Cliente Servidor [10] O aplicativo base tem a função de calcular as rotas entre as estações de origem e destino. As rotas de custo mínimo (levando em consideração os pesos estabelecidos em cada percurso) são obtidas pelo algoritmo de Dijkstra [2]. Com a implementação do mesmo, o servidor passa a atender às requisições de modo a enviar o caminho ótimo para o cliente. 3.3. Modelagem do Grafo Na modelagem utilizada, cada estação do mapa do sistema de transporte [4] é um vértice de um grafo com uma identificação (ID) e cada linha é uma aresta com um peso. Em um trecho do mapa, como a Figura 2, a abstração nos levaria a um grafo como o mostrado na Figura 3. Tabela 1 – Atribuição dos Pesos Peso Representação 0 Não há ligação direta entre as estações 1 Ligação direta entre as respectivas estações 2 Ligação direta para tróleibus Esta padronização tem o objetivo de verificar se existe ligação direta (aresta) entre duas estações quaisquer ou não. Caso não exista, o valor atribuído é 0, caso contrário, 1. O valor 2 passou a ser atribuído apenas para uma passagem de um ponto qualquer para a linha de trólebus, isto pelo fato de ser um meio de transporte mais lento que os demais. 3.4. Algoritmo de Dijkstra Figura 2 – Trecho do Mapa de Transportes Metropolitano O algoritmo de Dijkstra, desenvolvido por Edsger W. Dijkstra em 1959, tem a função de receber um grafo, e retornar caminhos ótimos [13], deste modo, a matriz de adjacência apresentada anteriormente serve como parâmetro para o algoritmo, executando a seguinte rotina: A partir do grafo G com custo p nas arestas, o algoritmo de Dijkstra recebe um vértice de origem s, e calcula o caminho de custo mínimo entre os vértices V(G) a partir de s. Isto funciona do seguinte modo: São criados os seguintes vetores: 1. Vetor d[v]: Distância estimada de s a v: d[v] ← ∞ e d[s] ← 0; 2. Fila de predecessores π[v] do vértice v: iniciada com valor null; 3. Vetor S contendo os vértices com o caminho mínimo calculado, S ← Ø; 4. Fila de prioridade Q, que contém vértices não calculados ordenados por distância, Q ← V(G); Execução: 5. Enquanto Q não está vazio 6. u ← extrai vértice de Q com menor distância, coloca em S e faz: 7. Para cada z adjacente a u, se z está em Q: 8. Executa o método: Relaxamento( ); 9. Fim do Enquanto; 10. Fim; Figura 3 - Grafo respectivo ao Trecho do Mapa Desta maneira, a matriz de adjacência utilizada pelo algoritmo de Dijkstra é preenchida com os pesos correspondentes das arestas, atribuídos como apresentado na Tabela 1: Método Relaxamento( ): 11. Se d[u] + p(u,z) < d[z] então 12. d[z] ← d[u] + p(u,z) 13. π[z] ← u; 14. Q ← u; 15. fim Se; 3.5. Implementação do Servidor Após a execução do algoritmo, é retornada uma lista com as IDs das estações, deste modo para poder apresentá-las na tela de fato, é necessário associá-las às respectivas coordenadas de tela. Para isto, foi elaborado um programa em Java para Desktop, com a função de armazenar as coordenadas das estações, a partir da interação do usuário via teclado na interface gráfica. A partir do mapeamento, foi utilizado o sistema de gerenciamento de banco de dados MySQL [3], para elaborar um BD com possibilidade de armazenar e atualizar os ID, nomes, linhas e coordenadas das estações. Este BD foi hospedado junto ao servidor, este que foi desenvolvido em J2SE (Java 2 Enterprise Edition), e com seu funcionamento atrelado à requisição e resposta. Dentro dele, as classes estão dividas nas seguintes funções: • Lógica: possui classes com a função de calcular as rotas, ordenar e tratar os dados. • Acesso a Dados: são classes com a função de acessar o BD por meio de um Driver[7], utilizando JDBC[8]. • Interface: é a primeira camada do servidor, a Servlet[9] onde recebe a requisição do cliente, e após o processamento pelas camadas intermediárias, retorna a informação para resposta. 4. Resultados O servidor foi elaborado de modo a atender às requisições de duas maneiras. Nele, estão acopladas duas funções para atender à mesma requisição de obtenção de rota. Em uma fase dinâmica a rota é obtida após o processamento do algoritmo de Dijkstra, e em uma fase estática o retorno é feito após uma consulta a uma Base de Dados contendo todos caminhos ótimos possíveis. Já a aplicação móvel foi desenvolvida utilizando uma interface de entrada de dados utilizando o componente ChoiceGroup[7] para obter as estações de origem e destino como visualizado na Figura 4. Dados os IDs inicial e final, o aplicativo estabelece uma conexão com o servidor por meio da API HttpConnection [1]. Isto gera uma requisição ao BD, passando como parâmetro as IDs, como resposta, o servidor faz uma consulta, obtendo as coordenadas de tela referentes a rota ótima. Ao receber todos os dados do servidor, é apresentado o mapa na tela, através da API Canvas [5], ilustrada na Figura 5. Figura 5 - Apresentação da Rota Obtida O mapa é apresentado em forma de imagem, e o caminho é desenhado por meio de uma instância da classe Graphics [11] pelo método drawLine( ). Pelo fato da capacidade de processamento dos dispositivos móveis ser um fator limitante e de alguns celulares não permitirem armazenar e mover o mapa inteiro na tela, foi necessário elaborar um modo mais eficiente de visualização baseado na divisão do mapa em imagens menores e na apresentação na tela apenas da imagem correspondente à coordenada selecionada para navegação. A Figura 6 exemplifica a divisão de imagens e a apresentação na tela, que neste caso carregaria apenas as imagens k, l, n e o. Figura 6 – Distribuição das Imagens Figura 4 - Visualização da Entrada de Dados 5. Conclusões Neste trabalho foi apresentado um aplicativo móvel com recursos gráficos para a determinação da rota de custo mínimo entre duas estações quaisquer do sistema de transporte de São Paulo. Foi utilizada uma estrutura cliente-servidor com acesso remoto a um BD contendo os parâmetros do sistema de transportes necessários para o cálculo da melhor rota. O algoritmo utilizado para avaliar as melhores rotas possui desempenho O(n².log(n)), pelo fato de utilizar uma matriz de adjacências com n vértices, m arestas, e um heap com complexidade O(log n). Já um algoritmo envolvendo uma heurística bem determinada pode gerar um desempenho mais eficiente. Contudo, pelo fato do sistema de transportes ser relativamente pequeno, e envolver uma matriz quadrada na ordem da centena, um algoritmo ligeiramente mais eficiente não será tão significativo, ainda mais pelo fato do gargalo se localizar na conexão Wap com o cliente. Além disto, a execução do algoritmo para determinar a menor rota só deve ocorrer quando houver alterações na arquitetura ou nos pesos do sistema de transportes, logo ocorrerão muito mais consultas ao BD do que a execução do algoritmo, o que valida o sistema proposto. Adicionalmente, foi identificado que se pode melhorar a funcionalidade do aplicativo através de um mecanismo de atualização dos pesos do grafo de uma maneira mais representativa, tornando a consulta cada vez mais adaptada à realidade do sistema de transporte metropolitano de São Paulo. 5. Referências Bibliográficas [1] T. M. Johnson, Java para Dispositivos Móveis, Novatec, 1a Ed., 2007. [2] M. T. Goodrich, R. Tamassia, Projeto de Algoritmos, Bookman, 1a Ed., 2004. [3] P. Dubois, MySQL, Sams, 4a Ed., 2008. [4] Mapa do Transporte Metropolitano, Acessado em 15/07/2009, Disponível em: http://www.cptm.sp.gov.br/E_IMAGES/geral/Mapa_Me tropolitano_jan09.gif. [5] API J2ME Canvas, Acessado em 15/07/2009, Disponível em: http://java.sun.com/javame/reference/apis/jsr118/javax/ microedition/lcdui/Canvas.html. [6] API J2ME ChoiceGroup, Acessado em 15/07/2009, Disponível em: http://java.sun.com/javame/reference/apis/jsr118/javax/ microedition/lcdui/ChoiceGroup [7] MySQL Driver, Acessado em 10/06/2009, Disponível em: http://dev.mysql.com/downloads/ [8] Java SE Database, Acessado em 10/06/2009, Disponível em: http://java.sun.com/javase/technologies/database/index.j sp [9] API J2EE Servlet, Acessado em 15/07/2009, Disponível em: http://java.sun.com/products/servlet/overview.html [10] Arquivo de Ícones, Acessado em 10/06/2009, Disponível em: http://www.iconarchive.com/ [11] API J2ME Graphics, Acessado em 15/07/2009, Disponível em: http://java.sun.com/javame/reference/apis/jsr118/javax/ microedition/lcdui/Graphics.html [12] Santos, M. O. A., Banco via Celular, estudo das tendências e dispositivos de segurança atuais, 2006. [13] Barros E. A. R., Pamboukian S. V. D., et. al., Algoritmo de Dijkstra: Apoio Didático e Multidisciplinar na Implementação, Simulação e Utilização Computacional, International Conference on Engineering and Computer Education, 2007.