2

Spring (V1.3.2) と NHibernate (V3.2.0) を Spring の宣言型トランザクション管理と共に使用して、2 つの独立した SQLite データベース インスタンスと通信するためのソリューションを探しています。

現在、両方のデータベース インスタンスから読み書きできますが、トランザクション管理は 1 つのデータベース (DbProvider_DB1) に対してのみ機能します。

「理由」は明らかですが、両方のデータベースで宣言型トランザクション管理を使用するにはどうすればよいでしょうか? 2 つのトランザクション マネージャーが必要ですか? はいの場合、どうすれば2番目のものを定義して使用できますか?

これが私の構成です。完全を期すために、奇妙なことは何もありません。


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;
}

ありがとう

4

1 に答える 1

1

解決策は、HibernateTransactionManager の代わりに TxScopeTransactionManager を使用することです。

<object id="transactionManager" type="Spring.Data.Core.TxScopeTransactionManager, Spring.Data">
    <property name="TransactionSynchronization" value="Always"/>
</object>
于 2012-10-19T06:42:23.687 に答える