Как настроить JPA несколько единиц персистентности в SOA - PullRequest
0 голосов
/ 30 августа 2011

Я использую SOA и имею несколько persistence.xml (каждый компонент зависит от БД). Я использую Spring + JPA. Пример кода, как показано ниже:

В ядре:

Code:
public abstract class GenericJpaDAOImpl<T extends BaseEntity> implements GenericJpaDAO<T> {
    protected abstract EntityManager getEntityManager();
}

В компоненте SSO:

Code:
public class UserDAOImpl extends GenericJpaDAOImpl<User> implements UserDAO {
    /* Any method specific to UserLogin */
    @PersistenceContext(unitName = "sso", type = PersistenceContextType.TRANSACTION)
    protected EntityManager entityManager;

    @Override
    protected EntityManager getEntityManager() {
        return this.entityManager;
    }
}

persistence.xml

Код:

<persistence-unit name="sso" transaction-type="RESOURCE_LOCAL">

XML приложения

Code:
    <tx:annotation-driven  transaction-manager="transactionManager"/>
    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
        <property name="dataSource" ref="ssoDataSource" />
    <property  name="persistenceUnitName" value="sso"></property>
    </bean>

    <bean id="ssoDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="<URL>"/>
        <property name="user" value="<USER>"/>
        <property name="password" value="<PASSWORD>"/>
    </bean>

Аналогично, компонент: Биллинг (как указано выше)

Я получил похожую ветку на http://forum.springsource.org/showth...sistence-units, но это работает для ожидаемого поведения. В моем случае, если загружается контекст приложения xml для биллинга, сначала работает файл операций DAO для этого компонента, но компонент SSO не работает. Пожалуйста, предложите и дайте мне знать, если требуется более подробная информация.

1 Ответ

0 голосов
/ 30 августа 2011

Если у вас есть несколько источников данных, вы можете настроить DAO для целевого сеанса с помощью аннотации @Qualifier следующим образом:

@Autowired
public MyDAOImpl(@Qualifier("someSessionFactory") SessionFactory sessionFactory) {
    setSessionFactory(sessionFactory);
}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...