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 só 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)