há algum jeito via codigo me mudar uma propertie da persistence unit???
<property name="hibernate.connection.url"
value="jdbc:postgresql://localhost:5432/BANCO" />
por exemplo se em um determinado momento eu quisesse muda-la, teria como?
estou usando hibernate +jpa
desde ja agradeco atencao flws ae t+!!!
Não tenho 100% de certeza, mas ai vai meu palpite.
Se você está em um ambiente web desista dessa idéia, porque além de mudar o arquivo (o que é possivel) você deve reiniciar o contexto da aplicação, pois os dados do persistence.xml, assim como web.xml, faces-config.xml e etc, são carregados e armazenados em meória quando o contexto é iniciado.
Então o mais sensato é voce pré-definir os persistence-unit que você queira usar e ai sim via runtime, você seleciona qual você deve usar.
deixa ver se eu entendi.
vm supor que eu tenha que me conecta a 3 urls diferentes em determinados momentos,
criaria entao 3 PU???
endereco 1-
endereco 2-
<property name=“hibernate.connection.url”
value="jdbc:postgresql://localhost:5432/BANCO2" />
endereco 3-
ae quando cria entitymanagerfactory colco a pu que eu quero é isso que vc quiz dizer??
hauah desculpe se eu viajei na maionese, mas ja agradeco a atencao =D
eu estou em estudos ainda para comecar a desenvolver o sistema, mas ele nao sera web…mas irei precisar ficar alternando as urls… espero que tenha entendido minha duvida =), porem caso haja algum jeito de mudar a propertie via a codigo java poderia me passar um exemplo???
deixa ver se eu entendi.
vm supor que eu tenha que me conecta a 3 urls diferentes em determinados momentos,
criaria entao 3 PU???
endereco 1-
<persistence-unit name="bancopu"
transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.connection.url"
value="jdbc:postgresql://localhost:5432/[b]BANCO1[/b]" />
<property name="hibernate.connection.driver_class"
value="org.postgresql.Driver" />
<property name="hibernate.connection.password" value="" />
<property name="hibernate.connection.username"
value="postgres" />
<property name="hibernate.cache.provider_class"
value="org.hibernate.cache.NoCacheProvider" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
endereco 2-
<persistence-unit name="bancopu"
transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.connection.url"
value="jdbc:postgresql://localhost:5432/[b]BANCO2" [/b]/>
<property name="hibernate.connection.driver_class"
value="org.postgresql.Driver" />
<property name="hibernate.connection.password" value="" />
<property name="hibernate.connection.username"
value="postgres" />
<property name="hibernate.cache.provider_class"
value="org.hibernate.cache.NoCacheProvider" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
endereco 3-
<persistence-unit name="bancopu"
transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.connection.url"
value="jdbc:postgresql://localhost:5432/[b]
]BANCO3[/b" />
<property name="hibernate.connection.driver_class"
value="org.postgresql.Driver" />
<property name="hibernate.connection.password" value="" />
<property name="hibernate.connection.username"
value="postgres" />
<property name="hibernate.cache.provider_class"
value="org.hibernate.cache.NoCacheProvider" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
ae quando cria entitymanagerfactory colco a pu que eu quero é isso que vc quiz dizer??
hauah desculpe se eu viajei na maionese, mas ja agradeco a atencao =D
eu estou em estudos ainda para comecar a desenvolver o sistema, mas ele nao sera web…mas irei precisar ficar alternando as urls… espero que tenha entendido minha duvida =), porem caso haja algum jeito de mudar a propertie via a codigo java poderia me passar um exemplo???
Exatamente isso, você precisa criar três unidades de persistência… uma para cada URL que você quer acessar… aí, em RunTime, você altera para qual das unidades de persistência você quer acessar…
Ou então, você pode fazer de outra forma…
cria um package chamado br.com.seuProjeto.util e lá, coloca três classes java que retornam uma EntityManager para cada uma das unidades de persistência que vc tem. Desso modo, quando você precisar usar uma determinada URL, você acessa uma classe, quando precisar usar outra, você acessa a outra…
Caso você ainda não esteja usando essa abordagem de criar classes para carregar sua persistence.xml, aqui vai um exemplo de código:
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceException;
public class HibernateUtil {
private static final EntityManagerFactory SESSION_FACTORY;
static{
try{
SESSION_FACTORY = Persistence.createEntityManagerFactory("SeuProjetoPU");
} catch(PersistenceException ex){
System.err.println("Erro na inicialização da unidade de persistência " + ex.getMessage());
throw new ExceptionInInitializerError();
}
}
public static EntityManager getEntityManager() throws PersistenceException{
return SESSION_FACTORY.createEntityManager();
}
}
O nome da classe é HibernateUtil porque, nesse caso, estou considerando que você está usando o Hibernate para implementar a especificação JPA…
Espero ter ajudado de alguma forma…
opa vlw ae oliveira!!!
e desculpem o duplo post
é estou usando jpa sim!!! e eu ja tinha uma classe dessa…agora acho q consigo fazer sim!!!.
otimo!!! essa é uma maneira…mas ainda tenho a duvida…tem como eu muda o conteudo da property via codigo???
property name="hibernate.connection.url"
value="jdbc:postgresql://localhost:5432/BANCO" />
ae depois de muito tempo achei a resposta!!!
é soh usar o hash map quando vc for criar o entityManagerFactory
try{
emf = Persistence.createEntityManagerFactory("minhaPU", getConf());
} catch ( Throwable e ){
throw new ExceptionInInitializerError(e);
}
}
public static Map getConf(){
Map prop = new HashMap();
prop.put("hibernate.connection.url", "jdbc:postgresql://127.0.0.1:5432/MEUBANCO");
// aqui voce pode setar todas as PROPIEDADES, onde no map vc passa o nome do objeto, depois valor prop.put([b]nome[/b], [b]valor[/b])
return prop;
}
flws + pessoal!