Problema com o hibernate.properties e arquivo JAR?
10 respostas
luciano_castilho
Tenho uma aplicação que usa o Hibernate e será distribuida em um arquivo JAR. Essa aplicação poderá conectar a bancos de dados diferentes, ou seja o arquivo hibernate.properties deverá ser configurado na mão dependendo do cenário onde a aplicação for utilizada.
Esta armado o problema: As classes da aplicação que estão DENTRO DO ARQUIVO JAR precisão enxergar o arquivo hibernate.properties que esta FORA DO ARQUIVO JAR.
Teria alguma forma de fazer isso? Agradeço qualquer ajuda.
Que IDE você está usando? Não tem como você adicionar uma referência do seu arquivo no classpath para que ele possa ser enxergado por suas classes? Eu to engatinhando no hibernate…tentando pôr ele pra rodar com Spring…vamos nos ajudar? hehe
Abraços,
Silvio Luiz
luciano_castilho
legionarioba:
Que IDE você está usando? Não tem como você adicionar uma referência do seu arquivo no classpath para que ele possa ser enxergado por suas classes? Eu to engatinhando no hibernate…tentando pôr ele pra rodar com Spring…vamos nos ajudar? hehe
O classpath não é o problema, nem a IDE, pois o arquivo JAR será utilizado em qualquer IDE ou aplicação. A questão é fazer as classes de dentro do JAR enxergarem o hibernate.properties que ficará fora do JAR.
legionarioba
O hibernate.properties tem mesmo que ficar fora do jar? Assim, se ficasse dentro do jar não poderia ser manipulado ou foi questão de organização sua mesmo ? Me tira até esta dúvida, eu estou usando ao invés do hibernate.properties o hibernate.cfg.xml (mas ai acho não alteraria nada quanto a esse problema ). Tem algo parecido que acontece com o Spring, vou procurar pra ver se posto aqui, mas é basicamente esta estrutura:
Esse é um trecho de um arquivo de config do Spring usando Hibernate. Para enxergar os hbm’s se fazia algo parecido com o que ai esta descrito…
luciano_castilho
Sim, o hibernate.properties ou hibernate.cfg.xml tem que ficar fora do JAR, pois dependendo do cliente a aplicação usará um banco de dados diferente. Desta forma os parâmetros de configuração do hibernate poderão ser feitos de forma flexível, o que não ocorreria se o arquivo de configuração do hibernate ficasse dentro do JAR.
Percebe a problemática da situação?
legionarioba
É …entendo…mas você pretende através de sua aplicação criar novas configurações? Caso não, você poderia talvez usar mais de um properties…Ao menos com o hibernate.cfg.xml sei que você pode criar um programaticamente…
Aproveitando a deixa, você sabe como é o princípio das Proxy Classes? Quando usar, como elas funcionam…
Abraços,
Silvio Luiz
legionarioba
Amigo !
Tem um método…acho que do PageContext, chamado getPath, que retorna o caminho relativo até a pasta onde está seu projeto. Ai depois é só você concatenar para o caminho que está relacionado com o seu arquivo de properties. Vou tentar achar o link do post onde eu encontrei essa “resposta”…hehe
_fs
Cara, no software que estamos desenvolvendo precisamos implementar essa mesma funcionalidade, mas resolvemos de forma diferente a criar um properties para cada cliente.
No login do cliente é possível saber de qual empresa ele pertence, então pegamos os dados do arquivo databases.properties e passamos como parâmetro para a construção da SessionFactory:
Cara, no software que estamos desenvolvendo precisamos implementar essa mesma funcionalidade, mas resolvemos de forma diferente a criar um properties para cada cliente.
…
Algo semelhante não resolve seu problema?
Eu tinha conseguido resolver o problema quase da mesma maneira que vc sugeriu. De qualquer forma, obrigado pela dicas.
legionarioba
Posta ai como foi sua solução… :mrgreen: Eu procuro hj à noite a q falei e posto tb
luciano_castilho
legionarioba:
Posta ai como foi sua solução... :mrgreen: Eu procuro hj à noite a q falei e posto tb :)
Minha solução consiste em uma classe que implementa o pattern singleton chamada HIbernateInit, feita de forma que seu construtor receba um parâmetro que é o path do arquivo de configuração do hibernate e que será usado para inicializar a configuração do hibernate.
Com isso eu consigo empacotar tudo em um JAR e quando importa-lo no meu projeto e instanciar a esse submodulo passando o path do hibernate.properties específico tudo funciona.