Bug na API java.util.prefs  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
escordeiro
Java Ninja
[Avatar]
Membro desde: 20/08/2003 09:31:08
Mensagens: 257
Localização: Belo Horizonte
Offline

Há um bug na API java.util.prefs (bug nº 4772228 no Bug Database da Sun) rodando em Windows: como os métodos Preferences.userNodeForPackage(java.lang.Class) e Preferences.systemNodeForPackage(java.lang.class) utilizam o registro do Windows para guardar e recuperar as informações de preferências, programas rodando em contas de usuários sem privilégios de administrador não conseguem ler as preferências.

Como precisamos implementar preferências de usuário persistentes em um programa, implementamos uma classe XMLPreferences que faz exatamente o que a AbstractPreferences determina, utilizando a DTD definida pela Sun para preferências; usamos DOM para armazenar e recuperar preferências em arquivos XML, e escapar assim do registro.

Se alguém precisar da Preferences funcionando, manda um e-mail que eu repasso, ok? A implementação está meio vagabunda e precisa de melhoras, mas acho que é um bom começo.

[]'s

Flickr
[Email] [Yahoo!] [MSN] [ICQ]
Daniel Quirino Oliveira
Moderador
[Avatar]

Membro desde: 23/03/2003 23:57:34
Mensagens: 3299
Localização: Awawawawa (Araraquara) - SP
Offline

Nãããããooooo!!! Não comecem mais uma feira-livre aqui no fórum. escordeiro, por favor, se for possível, disponibilize o código aqui no fórum. Ou, melhor ainda, faça um mini-tutorialzinho descrevendo sua solução.

Daniel Quirino Oliveira
[Email] [WWW]
escordeiro
Java Ninja
[Avatar]
Membro desde: 20/08/2003 09:31:08
Mensagens: 257
Localização: Belo Horizonte
Offline

hahahahaha

Tranquilo, hoje mais tarde eu posto o código aqui, não tenho ele comigo.

[]'s

Flickr
[Email] [Yahoo!] [MSN] [ICQ]
escordeiro
Java Ninja
[Avatar]
Membro desde: 20/08/2003 09:31:08
Mensagens: 257
Localização: Belo Horizonte
Offline

Daniel Quirino Oliveira wrote:Nãããããooooo!!! Não comecem mais uma feira-livre aqui no fórum. escordeiro, por favor, se for possível, disponibilize o código aqui no fórum. Ou, melhor ainda, faça um mini-tutorialzinho descrevendo sua solução.


Daniel, um mini-tutorial não vai dar, mas acho que pelos comentários dá pra entender. A implementação está meio ruim e tem um método que nós não implementamos, mas para o básico está funcionando.

Temos duas classes para fazer o negócio funcionar: XMLPreferences, que é a implementação de Preferences propriamente dita, e PreferencesController, que é um Singleton que mantém o documento XML e permite o uso da XMLPreferences.



A PreferencesController faz um pequeno "desvio" do preferences original: ela é implementada de forma que a árvore de preferências tenha o nodo raiz, seus filhos sejam categorias de preferências, e os filhos das categorias sejam os valores de preferências propriamente ditos; só que esses valores são guardados na forma de duas keys - uma indica o tipo do valor, e a outra o valor do valor . Fizemos esse "desvio" para podermos criar uma interface dinâmica de preferências, que cria uma lista com as categorias e, quando clica-se em uma categoria da lista, um painel é aberto para exibir os valores de preferências. Só que, como cada tipo tem uma visão mais eficiente (como checkbox para boolean, caixinha para int e String e JColorChooser para cores), precisamos avaliar o tipo do valor durante a execução...




Disclaimer:
Aqueles nomes propriedades e categorias estáticas da classe PreferencesController fazem parte do nosso programa, mas estão aí apenas para exemplificar categorias e valores que utilizamos. Além disso, nem todos os tipos suportados por Preferences estão no PreferencesController...digamos que isso é pura preguiça .

Por favor, critiquem e comentem, acho que dá pra melhorar bastante esse código.

Flickr
[Email] [Yahoo!] [MSN] [ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team