Esse artigo faz parte da revista Java Magazine edição 10. Clique aqui para ler todos os artigos desta edição

 

 

Atenção: por essa edição ser muito antiga não há arquivo PDF para download.Os artigos dessa edição estão disponíveis somente através do formato HTML. 

 

 

A preferência é sua

Mais usabilidade com a Preferences API

Conheça mais uma nova API incluída no J2SE 1.4, voltada ao armazenamento e manipulação de configurações

Aplicações freqüentemente lidam com configurações que precisam ser persistidas entre cada execução. Um processador de textos típico, por exemplo, oferece opções de posicionamento de barras de ferramentas, fontes e estilos padrões, modo inicial de visualização, entre muitas outras opções. Geralmente, essas configurações são guardadas no momento em que a aplicação é fechada para que sejam recarregadas na próxima execução. A mesma técnica se aplica a ferramentas de desenvolvimento (para mostrar os últimos projetos abertos), sistemas comerciais, jogos etc.

Para oferecer este tipo de funcionalidade nas suas aplicações Java, de forma escalável e multiplataforma, você precisa conhecer a API Preferences.

Características da API

A API Preferences, disponível a partir do J2SE 1.4, resolve problemas de outras abordagens, tais como o uso de arquivos de propriedades (veja o quadro "Alternativas a preferências"), e permite manipular configurações de usuários e de sistema sem se preocupar com quando e onde estas são gravadas. Podemos destacar as seguintes características da nova API:

·         Simplicidade – o uso da API praticamente se restringe à chamada de métodos da classe java.util.prefs.Preferences;

·         Estrutura hierárquica – a hierarquia de pacotes Java é utilizada como base para a organização das preferências;

·         Persistência transparente – é requisito básico da API fornecer diferentes mecanismos de persistência, em diferentes ambientes. A arquitetura é dividida entre uma API comum, independente de plataforma, e uma implementação do mecanismo de persistência específico para cada plataforma, que faz parte do Java Runtime Environment (JRE). Assim, os detalhes da persistência são ocultados da aplicação, mantendo-se a portabilidade;

·         Facilidade de migração – a API fornece métodos para importação e exportação da árvore de preferências de/para um documento XML, simplificando a migração entre ambientes.

Hierarquias

Para evitar os conflitos de nomes comuns no uso da classe Properties e promover maior organização, a API Preferences utiliza uma estrutura hierárquica. Cada preferência é armazenada em um contendo um par chave=valor (onde a chave deve ser única para cada nó).

A API define duas árvores de preferências: de sistema e de usuário. As preferências de sistema são compartilhadas por todos os usuários da aplicação (a API garante a sincronização do acesso simultâneo às preferências); as preferências de usuário são mantidas individualmente para cada usuário. A Figura 1 mostra um exemplo de árvore de preferências.

Como sabemos, a linguagem Java define uma organização natural: a hierarquia de pacotes. A API recomenda fortemente que esta seja utilizada para a organização das preferências, e fornece métodos que geram automaticamente esta estrutura, como será visto a seguir.

Recuperando o objeto Preferences

O primeiro passo para manipular preferências é criar um objeto Preferences, que estará associado a um nó. É comum partir do nó raiz das árvores de preferências. Por exemplo, o seguinte código recupera a raiz das preferências de sistema:

 

Preferences raizSistema  = Preferences.systemRoot();

 

Este é o código equivalente para as preferências de usuário:

 

Preferences raizUsuarios = Preferences.userRoot();

 

Partindo do objeto raiz, é possível acessar nós utilizando o método node(), que recebe um caminho (relativo ou absoluto) e retorna o objeto Preferences correspondente. O seguinte exemplo retorna uma estrutura com todos os nós partindo de "com":

 

Preferences prefsPrimeiroFilho = raizUsuarios.node("com");

 

Para facilitar o uso da hierarquia de pacotes, pode-se usar um método que recupera diretamente o nó associado ao pacote da classe atual:

 

Preferences prefs = Preferences.userNodeForPackage(getClass());

 

Este teria o mesmo efeito que o seguinte código (estando a classe no pacote especificado):

...

Quer ler esse conteúdo completo? Tenha acesso completo