Boa tarde pessoal.
Estou trabalhando em um projeto onde usamos Struts 2 + Spring 2 com JPA (Hibernate). Estamos usando o SQL Server como banco de dados.
Agora, acabou de surgir um novo requisito no projeto, que algumas entidades não estão no SQL Server, mas num banco de dados a parte, rodando no PostgreSQL.
Um pouco de código para explicar melhor:
applicationContext.xml<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
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.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<!-- Daos -->
<bean id="mapaDao" class="modelo.dao.MapaDaoImpl" />
<bean id="restricaoDao" class="modelo.dao.RestricaoDaoImpl" />
<!-- Entity Manager DataSource SQL Server -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="SQL_SERVER" />
<property name="showSql" value="true" />
</bean>
</property>
</bean>
<!-- DataSource SQL Server -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
scope="singleton">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=database;" />
<property name="username" value="username" />
<property name="password" value="password" />
</bean>
<!-- DataSource PostgreSQL -->
<bean id="dataSourcePgSQL"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
scope="singleton">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost/database2" />
<property name="username" value="username" />
<property name="password" value="password" />
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
package modelo.dao;
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
@Transactional
public abstract class GenericDaoImpl<T> implements GenericDao<T> {
private final Class<T> objectClass;
private EntityManager em;
@PersistenceContext
public void setEntityManager(EntityManager em) {
this.em = em;
}
public GenericDaoImpl(final Class<T> objectClass) {
this.objectClass = objectClass;
}
// outros métodos.
}
A documentação do Spring não ajudou muito neste caso e, pelo que andei lendo no fórum do Spring, outras pessoas também não encontraram uma solução.
Alguém já teve que fazer alguma coisa parecida e tem alguma dica para ajudar?
Valeu.
[edit]
Tópico complementar no fórum do Spring: [url]http://forum.springframework.org/showthread.php?t=41211[/url]
[/edit]