Я ищу решение использовать Spring (V1.3.2) и NHibernate (V3.2.0) вместе с декларативным управлением транзакциями Spring для взаимодействия с двумя независимыми экземплярами базы данных SQLite.
В настоящее время я могу читать и записывать из / в оба экземпляра базы данных, но управление транзакциями работает только для одной базы данных (DbProvider_DB1).
«Почему» понятно для меня, но как я могу использовать декларативное управление транзакциями для обеих баз данных? Нужны ли мне два менеджера транзакций? Если да, как я могу определить второй и использовать его?
Вот моя конфигурация, ничего странного, но ради полноты:
dao.xml
<tx:attribute-driven />
<!-- Datenbankprovider -->
<db:provider id="DbProvider_DB1" provider="SQLite-1.0.72" connectionString="Data Source=db1.db3;Version=3;New=False;" />
<db:provider id="DbProvider_DB2" provider="SQLite-1.0.72" connectionString="Data Source=db2.db3;Version=3;New=False;" />
<!-- SessionFactories -->
<object id="SessionFactory" abstract="true" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate32">
<property name="HibernateProperties">
<dictionary>...</dictionary>
</property>
<property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>
<object id="SessionFactory_DB1" parent="SessionFactory" >
<property name="DbProvider" ref="DbProvider_DB1" />
</object>
<object id="SessionFactory_DB2" parent="SessionFactory" >
<property name="DbProvider" ref="DbProvider_DB2" />
</object>
<!-- Transactionmanager -->
<object id="transactionManager" type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate32">
<property name="DbProvider" ref="DbProvider_DB1"/>
<property name="SessionFactory" ref="SessionFactory_DB1"/>
<property name="TransactionSynchronization" value="Always"/>
</object>
<!-- Data Access Objects -->
<object id="Dao_DB1" type="Dao1, Dao">
<property name="SessionFactory" ref="SessionFactory_DB1" />
</object>
<object id="Dao_DB2" type="Dao2, Dao">
<property name="SessionFactory" ref="SessionFactory_DB2" />
</object>
ДАО
[Transaction]
public TEntity Save( TEntity entity )
{
CurrentSession.Save( entity );
return entity;
}
Thanx