Persistence.xml fora do META-INF

6 respostas
C

Olá pessoal,

Alguém poderia me indicar como faço para usar o persistence.xml fora do META-INF? É que quando ele está dentro do META-INF ele acaba indo parar dentro do meu JAR e isso fica chato de ser configurado no cliente.

Se eu o coloco no raiz do projeto, por exemplo, aí o netbeans não o reconhece mais e o JPA para de funcionar.

Muito obrigado

6 Respostas

acdesouza

A idéia é essa mesmo.
A pasta META-INF fica no JAR que usa a JPA. Isso está certo e não deveria apresentar problemas.

Qual o problema que você está enfrentando para “configurar no cliente”?

C

Pra falar bem a verdade eu gostaria de ter um local onde eu pudesse trocar o path de conexão do banco de dados mais facilmente.

O objetivo é facilitar para os meus técnicos darem manutenção no cliente.

Vc poderia me sugerir algo diferente?

acdesouza
ter um local onde eu pudesse trocar o path de conexão do banco de dados
1. Coloca o "path de conexão", ou URL, em um arquivo properties. Por exemplo:
url=jdbc:oracle:thin:@servidor:1521:instancia
2. Recupera essa informação usando o ResourceBundle. Se você colocar o arquivo na raiz do projeto/JAR, fica mais ou menos assim:
// Recuperando o arquivo de propriedades, nomeado DBConfig
ResourceBundle bundle = ResourceBundle.getBundle("DBConfig", locale);
// Recuperando a propriedade associada a chave url
String urlBanco = bundle.getString("url");
3. Redefinir a propriedade no EntityManagerFactory:
/* Aqui vamos sobrescrever o que foi definido no persistence.xml
 * Voce também poderá colocar por aqui o tratamento para saber se o arquivo DBConfig está presente ou preenchido corretamente,
 * e  sobrescrever se ele existir
 */
Map configOverrides = new HashMap();
configOverrides.put("hibernate.connection.url", urlBanco);
EntityManagerFactory programmaticEmf = Persistence.createEntityManagerFactory("persistenceUnit", configOverrides);

Aparentemente isso poderia resolver o problema para você. :D

Caso esteja usando o Toplink, ou não queira fixar quem é o Provedor de Persistência :roll: , poderia ler o nome da propriedade, a ser mudada no persistence.xml, do arquivo de propriedades:
url=jdbc:oracle:thin:@servidor:1521:instancia
urlPropertyName=hibernate.connection.url
E usar assim:
// Recuperando a propriedade associada a chave url
String urlBanco = bundle.getString("url");
// Recuperando o nome da propriedade a ser redefinida
String propUrlBanco = bundle.getString("urlPropertyName");

Map configOverrides = new HashMap();
configOverrides.put(propUrlBanco, urlBanco);

Pronto, agora acredito que tenha resolvido de vez o problema. 8)

C

Caraca… você já ouviu diver que “as pessoas de sucesso normalmente fazem mais que o combinado”?

Acho que você já adiantou todas as perguntas que eu iria fazer sobre isso.

Ainda não testei, mas com isso com certeza eu acho o meu caminho.

Muito obrigado (depois eu dou um retorno se funcionou o não)

J

Show!!! Funcionou pra mim também!!!

Valeu!!!

M

Valeu cara !!! ajudou muito !!

Criado 10 de setembro de 2007
Ultima resposta 24 de ago. de 2009
Respostas 6
Participantes 4