Nhibernate + Spring.Net + 事务 + 大量线程

3
我正在使用Sping.Net 1.3.1和Nhibernate 3.0。 为了创建事务,我使用Spring的Transaction Interceptor。 我使用Transaction Attribute标记我的Transactional方法。 我的服务器每秒处理大约20-25个请求,每个请求在新线程上处理,使用parallel's Task。 我进行压力测试以验证服务器处理调用的能力。 当我一次运行两到三个调用时,一切都很好,但是当我同时运行5-10个调用时,我会从Spring中得到一个异常。
异常信息:
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: 

非常感谢, Or Chubook。
1个回答

3

我相信你现在已经发现了这个答案。当您在多个线程之间共享NHibernate会话时,将遇到并发问题。为了避免事务断开状态,每个线程必须有自己的会话。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接