configurar acesso a 2 banco de dados com Spring e Hibernate  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
jadirrlima
Thread.start()
[Avatar]

Membro desde: 30/03/2009 10:17:12
Mensagens: 30
Offline

Estou desenvolvendo uma aplicação que irá se conectar à vários banco de dados. Não sei exatamente com irei fazer isso. A princípio estou querendo testar a conexão em 2 bancos distintos. Utilizo Spring + Hibernate. Minha dúvida inicial é como configurar meus arquivos persistence.xml e applicationContext.xml com vários datasources.

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlnssi="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="cnjbrasil_rr">

<provider>org.hibernate.ejb.HibernatePersistence</provider>

<properties>
<property name="hibernate.archive.autodetection"
value="class, hbm" />

<!--Configuracoes de dialeto e conexao-->
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQLInnoDBDialect" />
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://localhost/cnjbrasil_rr" />
<property name="hibernate.connection.username"
value="root" />
<property name="hibernate.connection.password"
value="123456" />

<!--Configuracoes de Debug-->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="use_sql_comments" value="true" />

<!--Configuração do segundo nível de cache-->
<property name="hibernate.cache.provider_class"
value="net.sf.ehcache.hibernate.EhCacheProvider" />

<property name="hibernate.cache.provider_configuration"
value="/ehcache.xml" />

<property name="hibernate.cache.use_minimal_puts"
value="false" />
<property name="hibernate.cache.use_query_cache"
value="true" />
<property name="hibernate.cache.use_second_level_cache"
value="true" />
<property name="hibernate.cache.use_structured_entries"
value="true" />
<!--
<property name="hibernate.ejb.classcache.br.com.projudi.entities.Categoria"
value="read-write" />

<property name="hibernate.ejb.classcache.br.com.projudi.entities.Parte"
value="read-write" />

<property name="hibernate.ejb.classcache.br.com.projudi.entities.Certidao"
value="read-write" />

<property name="hibernate.ejb.classcache.br.com.projudi.entities.TipoCertidao"
value="read-write" />


Configuração do pool de c3p0-->
<property name="hibernate.c3p0.min_size" value="5" />
<property name="hibernate.c3p0.max_size" value="20" />
<property name="hibernate.c3p0.timeout" value="300" />
<property name="hibernate.c3p0.max_statements" value="50" />
<property name="hibernate.c3p0.idle_test_period" value="3000"/>



</properties>

</persistence-unit>

<persistence-unit name="cnjbrasil_rr2">

<provider>org.hibernate.ejb.HibernatePersistence</provider>



<properties>
<property name="hibernate.archive.autodetection"
value="class, hbm" />

<!--Configuracoes de dialeto e conexao-->
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQLInnoDBDialect" />
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://localhost/cnjbrasil_rr2" />
<property name="hibernate.connection.username"
value="root" />
<property name="hibernate.connection.password"
value="123456" />

<!--Configuracoes de Debug-->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="use_sql_comments" value="true" />

<!--Configuração do segundo nível de cache-->
<property name="hibernate.cache.provider_class"
value="net.sf.ehcache.hibernate.EhCacheProvider" />

<property name="hibernate.cache.provider_configuration"
value="/ehcache.xml" />

<property name="hibernate.cache.use_minimal_puts"
value="false" />
<property name="hibernate.cache.use_query_cache"
value="true" />
<property name="hibernate.cache.use_second_level_cache"
value="true" />
<property name="hibernate.cache.use_structured_entries"
value="true" />
<!--
<property name="hibernate.ejb.classcache.br.com.projudi.entities.Categoria"
value="read-write" />

<property name="hibernate.ejb.classcache.br.com.projudi.entities.Parte"
value="read-write" />

<property name="hibernate.ejb.classcache.br.com.projudi.entities.Certidao"
value="read-write" />

<property name="hibernate.ejb.classcache.br.com.projudi.entities.TipoCertidao"
value="read-write" />


Configuração do pool de c3p0-->
<property name="hibernate.c3p0.min_size" value="5" />
<property name="hibernate.c3p0.max_size" value="20" />
<property name="hibernate.c3p0.timeout" value="300" />
<property name="hibernate.c3p0.max_statements" value="50" />
<property name="hibernate.c3p0.idle_test_period" value="3000"/>



</properties>

</persistence-unit>
</persistence>



applicationContext

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlnssi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="cnjbrasil_rr" />
</bean>
<context:component-scan base-package="br.com.projudi.controller" />
<context:annotation-config />
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<tx:annotation-driven />
<bean id="categoriaDao" class="br.com.projudi.dao.imp.CategoriaDaoImp" />
<bean id="parteDao" class="br.com.projudi.dao.imp.ParteDaoImp" />
<bean id="tipoCertidaoDao" class="br.com.projudi.dao.imp.TipoCertidaoDaoImp" />
<bean id="certidaoDao" class="br.com.projudi.dao.imp.CertidaoDaoImp" />



</beans>


Alguêm poderia me ajudar?!
Tecnoage
GUJ Master

Membro desde: 13/03/2005 23:18:07
Mensagens: 1723
Localização: SP
Offline

Situação no mínimo estranha, mas... se vc não separa em 2 projetos,e as tabelas tem o mesmo nome nas duas bases, vc pode ter é 2 persistence Units.

Arquiteto de Software
Sysped Solutions
R3 SAP CAT-83, NF-e, ECD, EFD, CT-e, MANAD, IN86
www.sysped.com.br
[Email] [WWW] [MSN]
jadirrlima
Thread.start()
[Avatar]

Membro desde: 30/03/2009 10:17:12
Mensagens: 30
Offline

A aplicação devera se conectar as pelo menos 5 bancos sendo que um deles é totalmente diferente os outros são identicos e estão apenas em servidores separados. Eu poderia configurar as conexões nos arquivos XML?
Tecnoage
GUJ Master

Membro desde: 13/03/2005 23:18:07
Mensagens: 1723
Localização: SP
Offline

eu não entendi bem o porque disso tudo ainda, MAS...

pense em usar:

replicação de DBMS, (hj em dia qqer SGBD que prestem e alguns que não prestam tem esse recurso).

2- Se não funcionar a gambi do hibernate, dá uma olhada no hibernate SHARDS. Ve se te ajuda...

Se eu soubesse exatamente o porque dessa distribuiçao do banco daria para ajudar mais. abs

Arquiteto de Software
Sysped Solutions
R3 SAP CAT-83, NF-e, ECD, EFD, CT-e, MANAD, IN86
www.sysped.com.br
[Email] [WWW] [MSN]
jadirrlima
Thread.start()
[Avatar]

Membro desde: 30/03/2009 10:17:12
Mensagens: 30
Offline

Cheguei na seguinte solução. (ainda não definitiva mas funciona para o que eu quero):

Em emu arquivo applicationContext adicionei 3 entityManagerFactory:

<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="bd1" />
</bean>

<bean id="entityManagerFactorysiscom"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="bd2" />
</bean>

<bean id="entityManagerFactorysolbva"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="bd3" />
</bean>


e na minha generi DAO faço as seguinte referencias:

@PersistenceContext(unitName = "bd1")
private EntityManager embd1;

@PersistenceContext(unitName = "bd2")
private EntityManager embd2;

@PersistenceContext(unitName = "bd3")
private EntityManager embd3;

exemplo do método de persistência?
@SuppressWarnings("unchecked")
public List<T> todos(int con) {
String queryS = "SELECT obj FROM " + oClass.getSimpleName() + " obj";
Query query = null;
if (con == 1) {
query = getEmbd1().createQuery(queryS);
}
if (con == 2) {
query = getEmbd2().createQuery(queryS);
}
f (con == 3) {
query = getEmbd3().createQuery(queryS);
}

return query.getResultList();

}

Esta solução não é definitiva...mas com testes consegui trazer dados de 3 bancos diferentes.



jadirrlima
Thread.start()
[Avatar]

Membro desde: 30/03/2009 10:17:12
Mensagens: 30
Offline

Encontrei uma maneira melhor para as conexões. Utilizei uma forma dinâmica:


public EntityManager getManager(String con) {
Map properties = new HashMap();
if (con.equals("CONEXAO_A")) {
properties.put("hibernate.connection.url", "jdbc:oracle:thin:@XX.XX.X.XX:1521:Z");
} else if (con.equals("CONEXAO_B")) {
properties.put("hibernate.connection.url", "jdbc:oracle:thin:@XX.XX.X.XX:1521:Z");
} else if (con.equals("CONEXAO_C")) {
properties.put("hibernate.connection.url", "jdbc:oracle:thin:@XX.XX.X.XX:1521:Z");
} else {
manager.close();
}
properties.put("hibernate.dialect", "org.hibernate.dialect.OracleDialect");
properties.put("hibernate.connection.driver_class", "oracle.jdbc.driver.OracleDriver");
properties.put("hibernate.connection.username", "usuario");
properties.put("hibernate.connection.password", "senha");
EntityManagerFactory factory = Persistence.createEntityManagerFactory("bd", properties);
manager = factory.createEntityManager();
return manager;
}
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team