2011-02-28 52 views
3

我使用Sping.Net 1.3.1和Nhibernate 3.0。 我使用Spring的事務攔截器來創建我的事務。 我用交易屬性標記我的交易方法。 我的服務器得到類似20 - 25個請求每秒,每個請求是 處理在一個新的線程,使用並行的任務。 我運行壓力測試以驗證我的服務器處理呼叫的能力。 當我運行只有兩個或三個電話離子一次,每件事情都很好, 當我運行5 -10調用simultanly我從春天異常。Nhibernate + Spring.Net + Transaction +太多線程

唯一的例外是:

Spring.Transaction.TransactionSystemException was unhandled by user code 
Message=Could not commit Hibernate transaction 
Source=Spring.Data.NHibernate30 
StackTrace: 
    at Spring.Data.NHibernate.HibernateTransactionManager.DoCommit(DefaultTransactionStatus status) in c:\_svn\spring-net\tags\spring-net-1.3.1\src\Spring\Spring.Data.NHibernate\Data\NHibernate\HibernateTransactionManager.cs:line 568 
    at Spring.Transaction.Support.AbstractPlatformTransactionManager.ProcessCommit(DefaultTransactionStatus status) 

InnerException: NHibernate.TransactionException 
    Message=Transaction not connected, or was disconnected 
    Source=NHibernate 
    StackTrace: 
    at NHibernate.Transaction.AdoTransaction.CheckNotZombied() in d:\CSharp\NH\nhibernate\src\NHibernate\Transaction\AdoTransaction.cs:line 408 
    at NHibernate.Transaction.AdoTransaction.Commit() in d:\CSharp\NH\nhibernate\src\NHibernate\Transaction\AdoTransaction.cs:line 181 
    at Spring.Data.NHibernate.HibernateTransactionManager.DoCommit(DefaultTransactionStatus status) in c:\_svn\spring-net\tags\spring-net-1.3.1\src\Spring\Spring.Data.NHibernate\Data\NHibernate\HibernateTransactionManager.cs:line 556 
    InnerException: 

非常感謝你, 或者Chubook。

回答

3

我相信你現在已經發現了這個答案。當你在多個線程中共享一個NHibernate會話時,你會遇到這個併發問題。每個線程必須在範圍內有自己的會話,以避免事務斷開狀態。