Qual a melhor forma de conectar um segundo banco de dados somente para consulta

4 respostas
R

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?

4 Respostas

GusMcCart

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);
    }
Hebert_Coelho

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. [=

R

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.

GusMcCart

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…

Criado 14 de agosto de 2012
Ultima resposta 14 de ago. de 2012
Respostas 4
Participantes 3