1

Spring.NET + NHibernate - Multiple (Distinct) Databases with OpenSessionInViewからいくつかのヒントを見つけましたが、うまくいきません。何が問題なのかを特定するためにあなたの助けが必要です。

私のプロジェクトは ASP.NET/Spring.NET(OpenSessionInView)/NHibernate に基づいており、外部データベースを操作する必要があるため、OSIV パターンで複数のデータソースをサポートしたいと考えています。

上記のリンクを参照して行ったこと:

(1) Spring.Data.NHibernate.Support.OpenSessionInViewModule のサブクラスを作成する

namespace MyProject.Infrastructure.NHibernate
{
    public class ExtDbOpenSessionInViewModule : OpenSessionInViewModule
    {
    }
}

(2) web.config で OSIV を構成する

Spring.NET と NHibernate の統合のための私の構成は次のとおりです。

<!-- Spring Web Support and OSIV for NHibernate -->
<add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web"/>
<add name="OpenSessionInViewOnLocalDb" type="Spring.Data.NHibernate.Support.OpenSessionInViewModule, Spring.Data.NHibernate32"/>
<add name="OpenSessionInViewOnExtDb" type="MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule, MyProject.Infrastructure"/>

<!-- NHibernate SessionFactory in OSIV-->
<appSettings>
    <add key="Spring.Data.NHibernate.Support.OpenSessionInViewModule.SessionFactoryObjectName" value="LocalDbSessionFactory"/>
    <add key="MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule.SessionFactoryObjectName" value="ExtDbSessionFactory"/>
</appSettings>

実行していたとき、システムは次のように言います。

スレッドにバインドされた Hibernate セッションはありません。構成では、ここで非トランザクション セッションを作成することはできません。

リポジトリ オブジェクトの SessionFactoryObject が null であることがわかりました。

ログは次のようなものでした:

2012-09-13 10:29:19,017 [13] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - SessionScope を閉じようとしています
2012-09-13 10:29:19,018 [13] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - 参加した Hibernate セッションのみ - 何もしない
2012-09-13 10:29:19,030 [13] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - 既存の Hibernate SessionFactory への参加
2012-09-13 10:29:19,033 [14] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - 既存の Hibernate SessionFactory への参加
2012-09-13 10:29:19,043 [13] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - SessionScope を閉じようとしています
2012-09-13 10:29:19,055 [14] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - SessionScope を閉じようとしています
2012-09-13 10:29:19,062 [13] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - 参加した Hibernate セッションのみ - 何もしない
2012-09-13 10:29:19,071 [14] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - 参加した Hibernate セッションのみ - 何もしない
2012-09-13 10:29:19,117 [13] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - 既存の Hibernate SessionFactory への参加
2012-09-13 10:29:19,122 [13] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - SessionScope を閉じようとしています
2012-09-13 10:29:19,126 [13] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - 参加した Hibernate セッションのみ - 何もしない
2012-09-13 10:29:19,130​​ [13] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - 既存の Hibernate SessionFactory への参加
2012-09-13 10:29:19,132 [13] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - SessionScope を閉じようとしています
2012-09-13 10:29:19,132 [13] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - 参加した Hibernate セッションのみ - 何もしない
2012-09-13 10:29:21,347 [14] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - 既存の Hibernate SessionFactory への参加
2012-09-13 10:29:21,441 [14] 情報 Spring.Aop.Framework.AutoProxy.InfrastructureAdvisorAutoProxyCreator [(null)] - 候補アドバイザ [ObjectFactoryTransactionAttributeSourceAdvisor: アドバイス オブジェクト 'Spring.Transaction.Interceptor.TransactionInterceptor#0'] が拒否されましたtargetType [ASP.pages_sysmgmt_debug_aspx]
2012-09-13 10:29:21,457 [14] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - SessionScope を閉じようとしています
2012-09-13 10:29:21,458 [14] DEBUG MyProject.Infrastructure.NHibernate.ExtDbOpenSessionInViewModule [(null)] - 参加した Hibernate セッションのみ - 何もしない

おっとっと!私たちは本当にそれに立ち往生しています。

4

1 に答える 1

1

あなたが参照している質問をし、それに基づいた解決策を2年以上使用してきたので、私はあなたを助けることができるかもしれません。

理想的ではありませんが、サブクラスではなく、Spring.NETのソースからOpenSessionInViewModuleコピーする必要があります。これを行うときは、デフォルトのコンストラクターに1つの変更を加えるようにしてください。次のようになります。

public MyOpenSessionInViewModule() : 
       base("appSettings", typeof(OpenSessionInViewModule), false)

基本クラスの呼び出しに対する2番目のパラメーターのタイプは、新しくコピーしたクラスである必要があります(例:

public MyOpenSessionInViewModule() : 
       base("appSettings", typeof(MyOpenSessionInViewModule), false)

それ以外は、あなたの質問の他のすべてが正しいようです。これがどうなるか教えてください。

于 2012-09-17T11:00:14.497 に答える