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

Programação para PDA

Olá pessoal, esse post é para os aficcionados por PDAs, e que querem começar a programar para esses bichinhos, também, vai para os meus amigos de Carazinho da ISSul Informática, o Pedro e o Roger, gurizada parceira demais…

Bem, mas vamos ao que interessa, pra escrever esse post tive muita dificuldade, pois as possibilidades são várias, diferente do que acontece na programação para telefones celulares, além do mais, as várias linguagens e plataformas de desenvolvimento para PDAs são mais extensas por tratarem de equipamentos mais poderosos. Dentre as várias existentes podem ser citadas: Java ME (CDC), HB++, AppForge Crossfire 6.0, PocketStudio Professional 2.1, SuperWaba Runtime 5.61, PDA Toolbox 6.5, NS Basic 5.0 / Runtime 4.4, MathLib 1.1 etc, etc.

A maioria das tecnologias citadas anteriormente utilizam outra linguagem nativa e são IDE (Integrated Development Enviromento), da mesma forma, a maioria apresenta interfaces amigáveis e componentes prontos para serem utilizados, além de extensa documentação em alguns casos. Pena que da mesma forma, exceto uma minoria, todas apresentam versões trial, mas algumas são preços irrisórios para empresas de grande porte, apenas o Java ME (CDC) e a MathLib são freeware. A seguir as tecnologias com o preço de suas licenças.

MathLib 1.1: Freeware
NS Basic: Vários preços para as diferentes ferramentas de desenvolvimento que possuem, o site é http://www.nsbasic.com/order.shtml.
PocketStudio Professional 2.1: Infelizmente não achei a informação oficial do preço de sua licença, achei diversas fontes que divergem sobre os preços, se alguém souber comente este post que o atualizo.
SuperWaba: Esta ferramenta tem diferentes licensas para a comunidade e para profissionais, a tabela do que cada parte pode fazer está disponpivel aqui http://www.superwaba.com.br/en/license.asp
PDA Toolbox: LIcensa no valor de $25.00, a versão trial pode ser usada por 30 dias.
AppForge Crossfire 6.0: Infelizmente o site do prcoesso requer o envio de um e_mail para o setor de marketing para que o futuro usuário saiba o preço da licensa, não tive paciência para esperar este e_mail, porém não é freeware.
HB++: Encontrei o preço da versão profissional por R$ 1.339,00.
Java ME: Não possui custo nenhum.

Sobre a escolha, prefiro não opinar, pois não tecnho conhecimento de algumas linguagens utilizadas por algumas IDEs, o leitor pode imaginar que poderia pender para o lado do Java ME, pois todos os meus posts anteriores serem referentes a esta tecnologia, porém ela tem algumas limitações, como inexistência de suporte em Palm OS, neste Sistema Operacional só é possível utilizar o Java ME (CLDC) que apresenta interfaces bem menos amigáveis em relação as outras alternativas.

Para conhecedores da linguagem Java existe a opção do SuperWaba que é uma JVM voltada a programação de PDAs e não se limita somente ao SO do Palm OS, além de ser um projeto desenvolvido por um brasileiro, Guilherme Hazan. Há algum tempo atrás eu trabalhei um pequeno tempo com ela mas gostei, para quem conhece Java a curva de aprendizado não é longa.

Das outras opções existentes, trabalhei com as versões trial do PDA Toolbox e do NS Basic, ambas são fáceis de utilizar e tem material na web, que ensinam passo-a-passo sua utilização. Não cheguei a uma conclusão exata por não conhecer sua linguagem utilizada, então fiz os exemplos, entendi sua codificação mas não consegui ir muito além. Existem livros sobre NS Basic: como o NS Basic Programming for Palm OS e o Desenvolvendo Aplicações Palm com NS Basic (Português).

Como dito anteriormente, é difícil alguém que conhece apenas Java ME de forma aceitável, taxar uma opinião sobre este aglomerado de tecnologias para desenvolvimento de aplicações para PDAs, meu objetivo foi mostrar as opções e, para os iniciantes, dar um pequeno rumo no que seguirão pela frente…

OBS <1>: Correções e informações são bem-vindas
OBS <2>: Algumas versões trial podem ser baixadas aqui

Att.
Ping

Exemplo de uso de Bluetooth!!!

Boa madrugada pessoal, vou falar sobre um exemplo bem interessante de aplicação de Bluetooth. O sistema é chamado de Connect2Car´s MFC e foi desenvolvido por uma empresa americana, ele serve para controlar automóveis com dispositivos móveis a distância, através de uma conexão bluetooth, são apenas algumas funções, mas vocês podem conferir este vídeo neste endereço, eu fiquei impressionado.

O site da empresa que desenvolveu o projeto é este.

T+ pessoal…
Att. Ping

Fazendo ligação com Java ME!!!!

Olá pessoal, hoje descobri uma coisa legal, por isso resolvi compartilhar com os caros leitores deste humilde blog. Existem algumas APIs proprietárias, que são disponibilizadas pelos fabricantes dos handsets, como Siemens, Nokia, Motorola, Sony Ericsson etc, elas tem alguns pontos fracos, a principal é a parde parcial da portabilidade da sua aplicação, porém, tem seus benefícios, o principal, é trazer funcionalidades específicas e inerentes ao dispositivos, desenvolvidas por quem mais conhece o aparelho, ou seja, seu fabricante.

Uma destas APIs, disponibilizada para dispositivos Siemens, possibilita, através de código, efetuar uma chamada para qualquer número. Esta “descoberta” foi feita no livro “J2ME: Game Programming” de Martin J. Wells. A classe se chama Call e está localizada em com.siemens.mp.gsm, através desta, podemos chamar o método static void start(String número) e efetuar uma chamada telefônica.

Bem, a parte “chata” é que você terá que baixar o Toolkit da Siemens e também seus emuladores. O endereço é este, você deve baixar o SMTK, ou MTK como é chamado nas versões mais novas. O fato interessante é que tanto o livro como nos meus testes, só consegui usar a classe referida acima instalando a primera versão do SMTK, a 45/55 Generation Core.

Posteriormente, deve-se baixar e instalar um emulador de sua preferência, eu consegui testar beleza com o emulador do Siemens M55. Depois destes passos certos, no momento que o SMTK for aberto, a seguinte tela deve ser visualizada:

Depois disso basta adicionar a biblioteca api.jar que vem junto com o emulador ao seu projeto, e aí é só adicionar o método start() no meio do seu código para que seu aplicativo Java ME efetue uma ligação… legal né!!!!

Qualquer dúvida postem aqui mesmo…

Falow..
T+
Ping

Novos materiais!!!!

Achei mais documentos pra postar pra vocês, o link “Apresentação MIC 2005″ tem a apresentação que eu fiz na Mostra de Iniciação Científica da Universidade de Passo Fundo - RS. Essa apresentação concorreu ao prêmio de melhor aluno pesquisador :).

O link “Pôster MIC 2005″ tem o pôster do mesmo evento e que concorreu ao mesmo prêmio.

Att.
Ping

Conexão Celular - PC via Bluetooth

A plataforma Java ME oferece alguns pacotes opcionais, que permitem aplicativos mais elaborados para dispositivos que suportem tais avanços, como multimídia, push registry, web services, gráficos 3D e outras, veja mais sobre pacotes opcionais em aqui. Para comunicação Bluetooth o desenvolvedor tem a sua disposição a Java APIs for Bluetooth Wireless Technology (JABWT) - JSR-82.
Com esta API é possível criar e gerenciar comunicações de dados sobre uma conexão Bluetooth, para o leitor que já está familiariazdo com a tecnologia, a biblioteca possui métodos para seguir todos os passos necessários para o estabelecimento da conexão, como: procura de dispositivos, procura de serviços, estabelecimento de link etc. É importante ressaltar que o conhecimento básico de Bluetooth é aconselhável para começar a desmistificar a JS-82.

Links sobre a JABWT:
Wireless Application Programming with J2ME and Bluetooth
The Java APIs for Bluetooth Wireless Technology
Using the Java APIs for Bluetooth Wireless Technology, Part 1 - API Overview
Using the Java APIs for Bluetooth, Part 2 - Putting the Core APIs to Work

Porém, este post foi criado para falar sobre uma possibilidade da comunicação entre o computador pessoal e o dispositivo móvel que, na opinião do autor é extraordinária. Criando possibilidades ao estilo Matrix, como por exemplo, controlar seus tocadores de música, suas apresentaçãos em slides, tudo pelo seu celular, e ainda, viajando um pouco mais além, poderíamos ter um controle total de nossas moradias, criando uma integração com a Domótica, tendo sistemas para abrir e fechar portas e janelas, ligar nossos chuveiro, microondas etc.
Isso é possível graças há algumas simplementações da JSR-82 para desktop, algumas delas são: Atinav, Avetana, BlueCove, Harold e Rococo. Nos estudos realizados foi usado o BlueCove por seu um projeto do SourceForge e além disso, por ser possível encontrar alguns tutoriais passo-a-passo na internet, de como utilizá-lo, como este que foi encontrado aqui.
Para a aimplementação recomenda-se seguir o tutorial apresentado no link anterior, oprém, algumas coisas são de suma relevância, devida ao tempo que o autor levou para descobrir, como as questões que são citadas a seguir:

- O exemplo não funciona com o PC e algum emulador instalado no mesmo, como o Wireless Toolkit, para testar é necessário ter um telefone celular ou PDA que também implemente a JSR-82.

- Geralmente quando um conector externo é plugado, é instalado seu driver correspondente, como da IVT, porém este driver deve ser desinstalado e deixar que o Windows XP se encarregue de utilizar seu próprio driver. Para visualizar esta questão veja a figura ao lado, dentro de “Rádio Bluetooth” encontram-se driver da Microsoft, essa é a forma correta.

- Nos estudos realizados pelo autor, foi necessário configurar as propriedades da rede Bluetooth, para que o PC aceitasse ser encontrado por outros dispositivos Bluetooth. Esta configuração pode ser feita acessando um ícone azul, igual ao que é mostrado na imagem ao lado em “Rádios Bluetooth”, o mesmo geralmente fica na barra inferior do Windows, na parte da direita.

Gostaria de agradecer ao Luis Henrique Albinati Jr. pela ajuda disponibilizada.

Atenciosamente.
Ping

Novo material disponível

Olá caros leitores do meu blog.

Estou disponibilizando uma pequena apostila de Java ME, ela foi usada por mim quando ministrei um curso recentemente sobre Java ME, na escola de informática Informaticon, na cidade de Carazinho - RS. O material representa a parte essencial da plataforma, ideal para quem está começando e quer ter um “start” no Java ME. Também, disponibilizei a apresentação Power Point da primeira aula que ministrei, como as outras tiveram um enfoque mais prático não tinha nada para oferecer a vocês.

Meu objetivo era ter acabado esta apostila, mostrando toda a parte de programação, persistência de dados, comunicação com a rede etc, mas infelizmente, ultimamente não tenho muito tempo livre. Se alguém se interessar pode continuar a apostila, eu posso dar uma ajudinha.

Os links são:
Apostila Java ME, introdução
Introdução Java ME, slides

Agradeço a escola Informaticon por permitir a divulgação do material apresentado nas aulas.

Att.
Ping

API para Gráficos - Parte III


Olá, disponibilizei uma captura de tela do gráfico de pizza, da futura API para desenvolvimento de gráficos em Java ME. Também fiz algumas mudanças importantes em toda a API, estou com esperanças de poder disponibilizar a API para todos vocês no começo na próxima semana.

Como venho dizendo nos posts anteriores, quem quiser deixar sua opinião, críticas e tudo mais, sinta-se a vontade.

Bem, só vou voltar a falar desta API na semana que vem, quem sabe já disponibilizando-a oficialmente.

Att.
Ping

API para gráficos - Parte II


Como prometido, estou disponibilizando uma nova imagem da API para construção de gráficos. A captura a esquerda representa o gráfico de barras.

Agradeço aos comentários postados aqui e no JavaFree, e reafirmo o convite a sugestões, críticas, idéias etc, que possam contribuir no desenvolvimento da API.

Espero acabar o projeto até o final de semana para disponibilizar a API no começo da próxima semana, disponibilizando em Open Source….

Falowwww…
Ping

API para gráficos em Java ME


Olá, é com orgulho que apresento uma futura API para construção de gráficos em Java ME, que será construída por mim. O projeto está em fase terminal e, para que o leitor sinta o gostinho desta API, disponibilizei a captura de tela do gráfico de linhas, a imagem está no início deste post.
Gostaria que comentassem a idéia desta API, se ela realmente será útil ou não, sugestões, críticas e tudo mais. Também, sugestões para o nome desta API também serão bem-vindas.

Amanhã posto imagens de outros tipos de gráficos, como o de pizza e o de barras.

Att.
Ping