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.

De antemão, obrigado.

Abraço.

1 Resposta

herbertpimentel

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 -->
<persistence version="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-unit name="meucontexto" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>    
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
      <property name="hibernate.jdbc.use_streams_for_binary" value="true"/>
      <property name="hibernate.connection.autocommit" value="false"/>
      <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
      <property name="hibernate.connection.username" value="********"/>
      <property name="hibernate.connection.password" value="********"/>
      <property name="hibernate.connection.url" value="jdbc:postgresql://hostsever:5432/dbname"/>
    </properties>
  </persistence-unit>
  <!-- Persistence Unit que representa a fabrica tucujuris -->
  <persistence-unit name="meucontexto2" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
      <property name="hibernate.jdbc.use_streams_for_binary" value="true"/>
      <property name="hibernate.connection.autocommit" value="false"/>
      <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
      <property name="hibernate.connection.username" value="*******"/>
      <property name="hibernate.connection.password" value="*******"/>
      <property name="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:

emf = Persistence.createEntityManagerFactory("meucontexto");

emf2 = Persistence.createEntityManagerFactory("meucontexto2");
Criado 9 de abril de 2009
Ultima resposta 13 de abr. de 2009
Respostas 1
Participantes 2