Olá pessoal, sou iniciante em Java e estou fazendo uma aplicação me baseando no livro Programação Java para Web de Decio e Alexandre, e estou utilizando o Spring Security como autenticação do sistema, por este motivo utilizo Data Source para conectar o banco da minha aplicação que é gerenciado pelo postgre, meu hibernate.cfg.xml aponta para o Data Source, e não tenho o persistence.xml, e preciso realizar algumas pesquisas básicas em outro banco Oracle, qual a melhor forma ou a forma correta de fazer isto?
Qual a melhor forma de conectar um segundo banco de dados somente para consulta
4 Respostas
Você pode ter dois hibernate.cfg.xml e fazer a configuração da SessionFactory no HibernateUtil como um HashMap, com as chaves “Postgres” e “Oracle” por exemplo. Ou então, caso não haja a necessidade dos 2 hibernate.cfg pode ter um só mesmo e pra outra SessionFactory pode configurar programaticamente, mais ou menos assim:
public class HibernateUtil {
private static final HashMap<String, SessionFactory> sessionFactory = new HashMap<String, SessionFactory>();
private static ServiceRegistry serviceRegistry;
static {
try {
HibernateUtil.configureSessionFactory();
} catch (Throwable ex) {
// Log the exception.
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
private static void configureSessionFactory() throws HibernateException {
Configuration configurationPostgre = new Configuration(), configurationOracle = new Configuration();
configurationPostgre.configure("hibernate.cfg.xml");
configurationOracle.configure("hibernate_oracle.cfg.xml");
serviceRegistry = new ServiceRegistryBuilder().applySettings(configurationPostgre.getProperties()).buildServiceRegistry();
sessionFactory.put("postgre", configurationPostgre.buildSessionFactory(serviceRegistry));
serviceRegistry = new ServiceRegistryBuilder().applySettings(configurationOracle.getProperties()).buildServiceRegistry();
sessionFactory.put("oracle", configurationOracle.buildSessionFactory(serviceRegistry));
}
public static SessionFactory getSessionFactory(String db) {
//Aqui você pega de acordo com o que usou de chave, "postgre" ou "oracle"
return sessionFactory.get(db);
}
Se você consegue pelo hibernate.cfg.xml fica tranquilo. É a pratica correta.
Caso você utilize o JPA puro aí sim você iria precisar do persistence.xml. [=
GusMcCart muito obrigado, fiz a alteração, só ainda não testei com o oracle, mas deve funcionar porque com o postgres continuo funcionando. Assim que testar com o oracle eu posto aqui. Valeu.
Ok. A idéia basicamente é essa, eu implementei +/- dessa forma quando precisei. Ajuste da melhor maneira que encontrar pra não dar problema com seus DAO’s, etc…