Я использую 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 не работает. Пожалуйста, предложите и дайте мне знать, если требуется более подробная информация.