Manipulação do arquivo hibernate.cfg.xml em tempo de execução

2 respostas
A
Estou usando hibernate com JAVA. Criei meu projeto desktop em NetBeans.

Uso um arquivo de configuração XML, hibernate.cfg.xml, para configurar uma SessionFactory.

Neste projeto eu preciso manipular o arquivo hibernate.cfg.xml , alterando a propriedade connection.url antes do hibernate ser inicializado. (Preciso disto para que o usuário escolha um novo caminho url sempre que precisar, e que tal caminho fique gravado definitivamente neste arquivo de configuração XML, para os próximos acessos ao Banco de Dados.)

Para manipular este arquivo eu utilizo a API XML DOM. Com ela eu leio o conteúdo do hibernate.cfg.xml e gravo novos valores neste arquivo sem problemas.

A dificuldade que estou tendo é a seguinte: Após eu construir meu projeto no NetBeans,ou seja, criar o JAR na pasta dist, eu não estou conseguindo manipular o arquivo hibernate.cfg.xml que ficou dentro do JAR (creio que pelo fato de os arquivos JAR serem somente leitura) e também tentei deixar o arquivo hibernate.cfg.xml fora do JAR mas não consigo fazer o hibernate enxergar este arquivo que ficou fora. Nesta minha última tentativa, de o hibernate enxergar o hibernate.cfg.xml que está fora do JAR, eu passei um caminho para o método configure desta maneira: SessionFactory session = new Configuration().configure(config/hibernate.cfg.xml).buildSessionFactory();

Mas ao executar o JAR não está iniciando o hibernate ou não consegue encontrar os mapeamentos ou ainda algum outro problema. Não consigo depurar, pois isto  acontece depois de ter construido os JAR. No ambiente do NetBeans funciona normalmente.

Se alguém puder me ajudar ficarei muito grato

2 Respostas

Marky.Vasconcelos

Crie dois arquivos no seu jar, no primeiro algo como hibernate-template-cfg.txt e grave todo o XML da configuração.
E um arquivo hibernate.cfg.xml em branco, ao iniciar a aplicação copie do template toda a estrutura e passe a URL que voce quer, e grave no hibernate.cfg.xml.

A

Valeu! Muito obrigado!
Acabei resolvendo de outra maneira. Li bem a API e descobri que posso passar um File para o configure(). Quando um File é gerado ele já obtém como raiz a pasta que contém o JAR e não o próprio JAR. Dessa maneira eu coloco o hibernate.cfg.xml em qualquer pasta fora do JAR, leio, altero e inicio este arquivo antes da inicialização do Hibernate.
Meu código agora ficou assim:

static { try { File docFile = new File("hibernate.cfg.xml"); sessionFactory = new Configuration().configure(docFile).buildSessionFactory(); } catch (Throwable ex) { throw new ExceptionInInitializerError(ex); } }

De qualquer forma eu agradeço mais uma vez a sua ajuda!

Criado 31 de março de 2008
Ultima resposta 1 de abr. de 2008
Respostas 2
Participantes 2