Palm conduits com a VM da IBM (funcionando!)

Oi,

Tive alguns problemas quando fui desenvolver uma aplicação em J2ME com RMS para o Palm utilizando a VM da IBM e não consegui sincronizar os arquivos com os conduits da Palm. Estou relatando aqui como consegui resolver o problema, já que eu pesquisei muito na Net e não encontrei ninguem com a solução, apenas como o mesmo problema.

A VM da IBM para PalmOS implementa a persistencia em RMS utilizando um PDB, o problema é que os PDBs não são nomeados pelo nome dado no OpenRecordStore e sim pelo nome "J9RMS " (com espaço) + um número aleatório de 14 digitos no nome.

Como fica muito difícil saber que nome ele vai dar para os arquivos RMS, eu criei todos eles pela aplicação J2ME, ficando mais fácil o processo de identificação.

Cada PDB tem na sua estrutura um cabeçalho, o “AppInfo” e na posição 0x30 do AppInfo, está o nome dado pelo RMS, no formato WideChar (2 bytes), eu li a partir da posição 0x31 e encerro a leitura quando encontro o caracter nulo ou o caracter “$”.

De posse destas informações eu montei no conduit uma rotina que montava uma lista com o nome do PDB mais o nome informado no AppInfo.

Com esta lista eu conseguia saber qual era o PDB correto a ser lido ou alterado.

Mas eu me deparei com outros dois problemas.

1 - Os registros dos PDBs possuem um “RecordID” (identificação do registro) que o RMS do J2ME numera sequencialmente a partir do “1” e o pacote de conduits para delphi deixava este valor como “0” e quando isto acontece, o Palm ou o HotSync atribui um número aleatório. Coloque números sequenciais no seu RecordID. Alterei o pacote “delphi-conduits” para que meu conduit fosse capaz de numerar os RecordIDs sequencialmente.

2 - A aplicação J2ME coloca na posição 0x24 a quantidade de registros gravados no PDB no formato de 2 bytes, ou seria na posição 0x22 no formato de 4 bytes ?

Bom, na posição 0x24 eu coloco a parte alta do word (primeiros 8 bytes) e na posição 0x25 a parte baixa do byte e salvo o AppInfo de volta no PDB.

Executando estes passos eu consegui com que meu conduit conseguisse gravar e ler os PDBs necessários e a minha aplicação J2ME está funcionando perfeitamente.

Espero que isto possa ajudar alguém a resolver os problemas de sincronização da aplicação J2ME com os conduits da Palm.

Repliquem este texto onde julgarem necessário.

Antonio Mendes de Oliveira Neto
Desenvolvedor

Heheh, eu tive o mesmo problema que você usando o JSync.
Ai tive que fazer a mesma coisa, pegar uma bola de crital e adivinhar como é a struct usada na AppInfo do PDB gerado pela J9.

Só completando… na verdade ele grava o último RecordID e não a quantidade de registros e é 4 Bytes já que o RecordID no PalmOS é um usigned int ou (UInt32)

[]´s