| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2010 15:30:40
|
jadirrlima
Thread.start()
![[Avatar]](/images/avatar/efb9819497c37ed33d597f4fc04c15a2.jpg)
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"
xmlns si="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"
xmlns si="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?!
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2010 15:35:06
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2010 15:38:08
|
jadirrlima
Thread.start()
![[Avatar]](/images/avatar/efb9819497c37ed33d597f4fc04c15a2.jpg)
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?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2010 16:13:29
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/01/2010 15:48:10
|
jadirrlima
Thread.start()
![[Avatar]](/images/avatar/efb9819497c37ed33d597f4fc04c15a2.jpg)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2010 15:49:59
|
jadirrlima
Thread.start()
![[Avatar]](/images/avatar/efb9819497c37ed33d597f4fc04c15a2.jpg)
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;
}
|
|
|
 |
|
|