내 데이터 계층에 spring.net과 nihibernate를 사용하려고합니다.NHibernate가있는 Spring.net과 "스레드 오류에 바인드 된 최대 절전 세션이 없음"
[Transaction]
public long Save(Request entity)
{
return (long)CurrentSession.Save(entity);
}
이 코드는 내가 다음과 같은 오류 얻을 호출 될 때마다 :
나는 다음과 같은 코드를 포함하는 간단한 DAO 객체가가 "아니오 최대 절전 모드 세션 스레드에 바인딩하지를, 및 구성 여기서 비 트랜잭션 (non-transactional) 객체를 만들 수 없습니다. "
내 DAO 계층은 다음과 같은 구성을 가지고 있습니다. Web.config의 :
내가 파서에 대한 참조 포함 시켰 내 Web.config의에서<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:tx="http://www.springframework.net/tx"
xmlns:db="http://www.springframework.net/database"
xmlns:aop="http://www.springframework.net/aop"
>
<!-- Referenced by main application context configuration file -->
<description>
The Northwind object definitions for the Data Access Objects.
</description>
<!-- Property placeholder configurer for database settings -->
<object type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">
<property name="ConfigSections" value="databaseSettings"/>
</object>
<!-- Database and NHibernate Configuration -->
<db:provider id="DbProvider"
provider="SqlServer-2.0"
connectionString="Data Source=ME-LT;Initial Catalog=SupplyAndDemand;Integrated Security=True"/>
<object id="NHibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate21">
<property name="DbProvider" ref="DbProvider"/>
<property name="MappingAssemblies">
<list>
<value>SAD.Providers.NHibernate</value>
</list>
</property>
<property name="HibernateProperties">
<dictionary>
<entry key="connection.provider"
value="NHibernate.Connection.DriverConnectionProvider"/>
<entry key="dialect"
value="NHibernate.Dialect.MsSql2005Dialect"/>
<entry key="connection.driver_class"
value="NHibernate.Driver.SqlClientDriver"/>
</dictionary>
</property>
<property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>
<object id="transactionManager"
type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate21">
<property name="DbProvider" ref="DbProvider"/>
<property name="SessionFactory" ref="NHibernateSessionFactory"/>
</object>
<!-- Data Access Objects -->
<object id="RequestDao" type="SAD.Providers.Nhibernate.NHibernateRequestDao, SAD.Providers.Nhibernate">
<property name="SessionFactory" ref="NHibernateSessionFactory" />
</object>
<tx:attribute-driven transaction-manager="transactionManager"/>
</objects>
:
<parser type="Spring.Transaction.Config.TxNamespaceParser, Spring.Data"/>
및 어셈블리 리소스로 내 dao.xml을 참조.
이 DOA는 저장이 호출 된 다른 스프링 구성 개체에 주입됩니다.
내가 잘못하고있는 아이디어가 있습니까? 당신은 내가 봄 코드에 부착 된 설정
<tx:attribute-driven transaction-manager="transactionManager"/>
을 포함하여 내가 볼과에 TransactionInterceptor의 invoke 메소드에 중단 점을 배치 할 수 있습니다으로 - 그것은라는 결코 극복 - 그래서 아마도 프록시 밤은 내 DAO를 생성하고 사물? 여기
전체 스택 추적입니다 :<StackTrace><![CDATA[at Spring.Data.NHibernate.SpringSessionContext.CurrentSession() in F:\Spring.NET\Spring.NET\src\Spring\Spring.Data.NHibernate12\Data\NHibernate\SpringSessionContext.cs:line 70
at NHibernate.Impl.SessionFactoryImpl.GetCurrentSession()
at sad.Providers.Nhibernate.NHibernateDao.get_CurrentSession() in F:\PersonnalProjects\sad\trunk\src\sad\sad.Providers.Nhibernate\nHibernateDao.cs:line 29
at sad.Providers.Nhibernate.NHibernateRequestDao.Save(Request entity) in F:\PersonnalProjects\sad\trunk\src\sad\sad.Providers.Nhibernate\NHibernateRequestDao.cs:line 41
at sad.Messaging.RequestManager.RequestManager.ProcessRequest(UserCredentials userCredentials, Request request) in F:\PersonnalProjects\sad\trunk\src\sad\sad.Messaging.RequestManager\RequestManager.cs:line 39
at sad.Messaging.UI.Web.RequestManagerService.ProcessRequest(UserCredentials userCredentials, Request request) in F:\PersonnalProjects\sad\trunk\src\sad\sad.Messaging.UI.Web\RequestManagerService.cs:line 28
at requestManagerService.ProcessRequest(UserCredentials userCredentials, Request request)
at SyncInvokeProcessRequest(Object , Object[] , Object[])
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)