2011-02-28 1 views
3

Sping.Net 1.3.1과 Nhibernate 3.0을 사용하고 있습니다. 나는 나의 트랜잭션을 생성하기 위해 Spring의 Transaction Interceptor를 사용한다. 트랜잭션 특성을 사용하여 트랜잭션 방식을 표시합니다. 내 서버가 초당 20-25 요청을 받고, 각 요청은 병렬 작업을 사용하여 이 새 스레드에서 처리됩니다. 내 서버가 통화를 처리 할 수 ​​있는지 확인하기 위해 스트레스 테스트를 실행합니다. 내가 2 ~ 3 개의 호출 이온을 실행할 때, 모든 것은 훌륭하게 작동한다. 그러나 5 -10을 호출 할 때 simultanly 나는 Spring으로부터 예외를 얻는다.Nhibernate + Spring.Net + Transaction + too many threads

는 예외입니다 :

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 세션을 공유하면이 동시성 문제가 발생합니다. 각 스레드는 트랜잭션 연결 해제 상태를 피하기 위해 범위 내에서 자체 세션을 가져야합니다.