Persistência de dados em Java ME

Olá galera…

Meu post de hoje é sobre persistência de dados em Java ME, este simples texto objetiva descrever de forma simples e direta as alternativas para este fim, e ainda, mostrar como gerenciar informações de forma persistente em um dispositivo móvel através do RMS (Record Management System). Não iria discutir sobre os tratamentos especiais que a persistência de dados para ambientes móveis tem em relação ao ambiente desktop, senão teria que escrever um artigo formal e não um simples post.

Para começar a história, é necessário que o leitor saiba a diferença entre as configurações na plataforma Java ME, a CDC e a CLDC, se acaso essa premissa não for verdadeira recomendo que pesquise primeiro sobre isso e posteriormente acabe a leitura deste post. Pois bem, sabendo disto, posso dizer que a configuração define a forma como se manipula a persistência de dados, na CLDC é usado o RMS e na CDC existem mais possibilidades, existindo inclusive alguns Sistemas Gerenciadores de Banco de Dados otimizados para pequenos equipamentos, como é o caso da Oracle, Sybase e Microsoft Access.

Levando em conta a diferença na utilização de CLDC e CDC, este post terá seu foco em RMS, é importante ressaltar, que existem alguns framework para tornar menos árduo a tarefa de gerenciar RMS’s, porém não estão muito difundidos.

RMS
O RMS é um banco de dados orientado a registros, é um pouco diferente dos já tradicionais banco de dados relacionais. Na sua estrutura encontram-se registros chamados de Record Store, que podem ser entendidos como uma tabela em um banco Oracle por exemplo. Olhe a figura ao lado para continuar a explicação.
Cada Record Store contem conjuntos de informações, armazenados em um vetor de bytes e representados por um inteiro, que será sua identificação para qualquer operação, como atualização e remoção do registro.

Cada Record Store é representado por um nome de até 32 caracteres Unicode (16 bits). O limite de armazenamento é o mesmo que o dispositivo oferecer. Por exemplo, um Siemens MC 60 não vai oferecer o mesmo espaço para um Record Store que um Motorola V6. Outro fato importante a ser lembrado, é que quando uma MIDlet é removida do aparelho todos os seus Record Store´s também são apagados.

Codificação
Vamos ao que interessa, aos códigos. A sequência de métodos abaixo mostra os principais métodos da classe javax.microedition.rms.RecordStore, usada para a manipulação das informações.


openRecordStore(String nome, boolean criar)
: Abre um RecordStore, do nome especificado no primeiro parâmetro, e criando o RecordStore se o mesmo não existir, se o último parâmetro for igual a true.
closeRecordStore(): Fecha um dado RecordStore.
deleteRecordStore(String nome): Deleta um RecordStore com o nome especifica.
addRecord(byte[] data, int inicio, int numeroBytes): Adiciona um registro a um RecordStore, o primeiro dado é o vetor de bytes (pode ser uma string no formato original), o início do vetor que será lido e seu tamanho.
setRecordStore(int id, byte[] data, int inicio, int numeroBytes): Método semelhante ao anterior, exceto por receber o inteiro que identifica um registro e fazer alteração.
deleteRecord(int id): Deleta um registro especificado pelo seu id.
getNumRecords(): Retorna o número de registros de um RecordStore em particular.

Para melhor compreensão disponibilizar uma classe que insere apaga registros em um RecordStore, o código está todo comentado nas partes de persistência de dados, o link é “Exemplo de uso de RMS”, pode ser acessado aqui ou no menu “downloads” na parte direita deste blog.

Porém, alguns pontos são importantes, no método lerNomes é usado o RecordEnumerator, ele serve para enumerar todos os registros de um RecordStore, facilitando a leitura, pois tem método de next, previous, hasNextElements etc, semelhante a classe Enumerator do próprio Java. Além disso, se um RecordStore poderá ter seus elementos deletados, o leitor deverá usar esta classe, pois os id´s que são armazenados no Record Store, geralmente começam em 1 e são incrementados a cada noso registro adicionado. Então de 5 inserções seguidas tem-se os seguintes id´s no RS: 1, 2, 3, 4, 5. Depois de eliminarmos o id 3, o Java ME não preenche aquele id. E a partir deste momento tem-se 1, 2, 4, 5 como os id´s válidos. Usando apenas um laço começando em um até o número de registros o código irá falhar, por que o id de número 3 já não existe mais no RS.

Bem, espero ter mostrado o essencial da utilização de Record Store e da persistência de dados em Java ME, claro que sobre isso eu poderia escrever mais texto, mas como se trata de um post, a idéia é dar uma visão bem geral e sucinta, mas qalquer coisa estou disponível para tirar as dúvidas do pessoal.

Att.
Ping

6 comentários

Valew,
utilizei seus conhecimentos como referência em um trabalho da facul.

Igor Lima
Dezembro 3rd, 2007 às 11:10

Fico feliz por poder ter ajudado.. :)

Ricardo Ogliari
Dezembro 3rd, 2007 às 20:06

Olá.
Como o link para obter o seu código não está mais no ar, poderia enviá-lo para mim by mail ?

Achei interessante o seu post e gostaria de dar uma olhada mais a fundo no RMS.

Grato.

Eloir Cortes
Maio 3rd, 2008 às 15:27

Vichi… pior que tenho uma notícia ruim para lhe informar.. procurei na máquina inteira e não achei o exemplo.. acho que apaguei sem querer.. :(

desculpe

Ricardo Ogliari
Maio 5th, 2008 às 01:13

Estou iniciando, poderia me dar umas dicas sobre os outros db e suas diferenças entre o rms. Saberia dzer como importar e exportar dados para o rms? no aguardo, obrigado e parabens pelo site.

Filipe R
Setembro 8th, 2008 às 13:58

Bem, olhando o problema na raiz, essa é a única forma de pesistência de dados em Java ME, CLDC. Porém, existem alguns frameworks que facilitam nossa vida, como o Floggy, que estou usando ultimamente, e, é muito bom. Sobre importar e exportar dados, imagino que esteja pedindo como faz isso a partir de uma base de dados em um servidor. Infelizmente ainda não existe (que eu conheça) maneira de acessar uma base de dados remota a partir do Java ME. Oque eu faço é usar um JSP que lê os dados do banco pra mim e traz tudo mastigado, pode até ser em um XML.

Att.
Ping

Ricardo Ogliari
Setembro 8th, 2008 às 20:30

Envie seu comentário

Nome (required)

E-mail (não será publicado) (required)

Site

Commentário