2011-02-28 74 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会话时,你会遇到这个并发问题。每个线程必须在范围内有自己的会话,以避免事务断开状态。