Uma vez conseguida a solução do dispositivo móvel que localiza o utilizador foi necessário criar um servidor que guarde a localização de todos os utilizadores de forma persistente.
A arquitectura global do sistema de geo-localização (representada na figura abaixo) é a seguinte: O dispositivo movel envia as coordenadas da sua localização, juntamente com o seu IMEI, através do protocolo XMPP. Do lado do servidor existe outro cliente XMPP que recebe as mensagens e processa-as, guardando na base de dados. Adicionalmente fornece serviços para terceiras aplicações consultarem a localização de utilizadores através do numero de telemóvel. Note que foi criado também um simulador manual de um HSS (Home Subscriber Server), para fazer o mapeamento entre o IMEI e o numero de telefone.
Posto o problema foi necessário identificar um conjunto de tecnologias que os permitissem implementar. A biblioteca utilizada para o cliente XMPP foi novamente a Smack [1]. Foram estudadas soluções para disponiblizar a localização dos utilizadores a terceiras aplicações, optando-se pela criação de Webservices, utilizando o J2EE. Para guardar a localização dos utilizadores foi utilizado uma base de dados derby, usando o JPA.
Uma dificuldade encontrada, foi a seguinte: como colocar um cliente XMPP a correr permanentemente num projecto que é instalado no Glassfish? A solução passou pela utilização de Enterprise Beans, criando um Singleton especificando para ele correr logo aquando é feita a instalação ( anotações importantes do EnterpriseBeans: @Singleton, @Startup, @PostConstruct)
Após estes e outros problemas com persistência e algumas versões do Glasshfish/J2EE o servidor de geo-localização encontra-se disponivel no nosso repositório, bem como o daemon Android.
[1] - www.igniterealtime.org/projects/smack/
. Contexto
. Ligação entre Sofia-Sip c...
. Android: Daemon de geo-lo...