3 de mar de 2009

JME - RMS Como fazer os dados persistentes durante o desenvolvimento

Estou trabalhando em um projeto que envolve Java ME e me deparei com um problema, que acredito, seja bastante comum. Durante o desenvolvimetno senti a necessidade de que a base de dados de testes para o emulador JME do device fosse persistente e não fosse recriada para cada vez que eu tiver que executar o client para testes.

Explicando melhor,  é o caso, por exemplo que enfrento no momento. Na aplicação o usuário deve se autenticar na primeira vez que for utilizar o device para iteragir com o servidor, neste momento faço a persistência do usuário, caso a autenticação seja OK, no device, para que nas próximas vezes o usuário não tenha que se autenticar novamente. 
Posteriormente quando  o usuário vai fazer alguma outra operação do sistema recupero o usuário já autenticado e ativo no device para associar a operação sendo executada com o usuário corretamente. 
O problema é que durante o desenvolvimento como o midlet de login e de outras operações são codificados separadamente a base de dados não contém mais o usuário autenticado o que causa um NullPointerException em uma rotina para recuperar o usuário similar a: 

// recupera usuario ativo no device.
LoginDBME loginDBME = new LoginDBME(true);
int idUsuario = loginDBME.getLoginAtivo().getIdUsuario();


Isso tem se mostrado bastante frustrante durante o desenvolvimento e por isso preciso encontrar um meio de fazer com que a base de dados do emulador de device(utilizo o da sun) fique permanentemente armazenada no meu computador. 

Pesquisei muito sobre esta questão e infelizmente não consegui achar nada realmente útil na internet. A única solução que encontrei para o problema foi encontrar a base de dados temporária gerada pelo emulador, no meu caso no windows logado como Administrador se encontrava no C:\Documents and Settings\Administrator\j2mewtk\2.5.2\appdb onde é criada uma pasta com nome temp.DefaultColorPhonexx .
Após localizar a base o que fiz pode-se dizer que foi um "gato" ou POG(programação orientada a gambiarras) tendo eu que locar o arquivo para que quando o emulador fosse fechado não tivesse permissão para apagar o mesmo. 

Para mim essa não é uma solução aceitável e devido a este e a vários outros problemas com o desenvolvimento utilizando RMS decidi começar a avaliar a utilização de uma base de dados para devices(JME) . Meus requisitos para utilização são portabilidade e que a mesma seja gratuita. Inicialmente estou estudando a Floggy: http://floggy.sourceforge.net/ e provavelmente irei refatorar meu código para utilizá-la. Deixarei aqui posteriormente minhas impressões sobre ela.


FINALMENTE UMA SOLUÇÃO (DATA 31/03/2009)
Hoje finalmente encontrei uma solução bastante simples e já disponível no WTK 2.5.2 que estou utilizando. O que deve ser feito é abriar o WTK e ir em Edit > Preferences > Storage e nesta aba preencher a pasta onde se quer colocar a base de dados do device no campo: Storage root directory . Isto irá fazer com que a configuração seja persistente não mais utilizando as bases temporárias default do WTK.

Nenhum comentário: