我正在使用Sping.Net 1.3.1和Nhibernate 3.0。 我使用Spring的Transaction Interceptor来创建我的交易。 我用Transaction属性标记我的Transactional方法。 我的服务器每秒有20到25个请求,每个请求都是 使用parallel的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:
非常感谢, 或者Chubook。
答案 0 :(得分:3)
我相信你现在已经发现了这个答案。当您在多个线程之间共享NHibernate会话时,您将遇到此并发问题。每个线程必须在范围内拥有自己的会话,以避免事务断开状态。