Ответ 1
1) Создайте несколько постоянных единиц в persistence.xml
с разными именами.
2) Создайте необходимое количество EntityManagerFactory
(1 на единицу измерения) и укажите, какой блок персистентности следует использовать для конкретного factory:
<bean id="authEntityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="SpringSecurityManager"/>
</bean>
3) Создайте необходимое количество TransactionManager
s:
<bean id="authTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="authEntityManagerFactory" />
</bean>
4) В ваших классах DAO укажите, с какой единицей persistence (и так с помощью EntityManagerFactory) вы хотите работать:
public class AbstractAuthDao<T> {
@PersistenceContext (unitName = "SpringSecurityManager")
protected EntityManager em;
...
}
5) В ваших служебных объектах указывается, какой TransactionManager должен использоваться (эта функция поддерживается только в Spring 3.0):
@Transactional (value = "authTransactionManager", readOnly = true)
public class UserServiceImpl implements UserService {
...
}
6) Если у вас есть OpenEntityManagerInViewFilter
в вашем web.xml, укажите в его имени init-param необходимый EntityManagerFactory (или создайте несколько фильтров с соответствующими init-block):
<init-param>
<param-name>entityManagerFactoryBeanName</param-name>
<param-value>authEntityManagerFactory</param-value>
</init-param>