Mais de uma conexão para uma mesma aplicação - Usando Hibernate
1 resposta
bland
Pessoal,
Eu tenho uma aplicação que precisará se comunicar com um outro banco de dados para coletar algumas informações.
Sendo que as bases de dados são completamente diferentes, estando em schemas diferentes e uma é Oracle e a outra é SQL Server.
A aplicação usa Hibernate, JPA e JSF. Como possibilitar escolher a conexão para a aplicação de uma determinada consulta?
Talvez alguns de vocês tenham soluções melhores, mas é que me surgiu esse problema e eu não sei como solucionar.
Para fazer isso basta que vc tenha dois contextos de persistência.
Conforme exemplo do meu persistence.xml
<?xml version="1.0" encoding="UTF-8"?><!-- example of reference to a cfg.xml file --><persistenceversion="1.0"xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"><persistence-unitname="meucontexto"transaction-type="RESOURCE_LOCAL"><provider>org.hibernate.ejb.HibernatePersistence</provider><exclude-unlisted-classes>false</exclude-unlisted-classes><properties><propertyname="hibernate.dialect"value="org.hibernate.dialect.PostgreSQLDialect"/><propertyname="hibernate.jdbc.use_streams_for_binary"value="true"/><propertyname="hibernate.connection.autocommit"value="false"/><propertyname="hibernate.connection.driver_class"value="org.postgresql.Driver"/><propertyname="hibernate.connection.username"value="********"/><propertyname="hibernate.connection.password"value="********"/><propertyname="hibernate.connection.url"value="jdbc:postgresql://hostsever:5432/dbname"/></properties></persistence-unit><!-- Persistence Unit que representa a fabrica tucujuris --><persistence-unitname="meucontexto2"transaction-type="RESOURCE_LOCAL"><provider>org.hibernate.ejb.HibernatePersistence</provider><exclude-unlisted-classes>false</exclude-unlisted-classes><properties><propertyname="hibernate.dialect"value="org.hibernate.dialect.PostgreSQLDialect"/><propertyname="hibernate.jdbc.use_streams_for_binary"value="true"/><propertyname="hibernate.connection.autocommit"value="false"/><propertyname="hibernate.connection.driver_class"value="org.postgresql.Driver"/><propertyname="hibernate.connection.username"value="*******"/><propertyname="hibernate.connection.password"value="*******"/><propertyname="hibernate.connection.url"value="jdbc:postgresql://hostsever2:5432/dbname2"/></properties></persistence-unit></persistence>
quando voce for instanciar o seu EntityManagerFactory vc apenas referencia o contexto de persistencia como segue: