@Vadim Have you tried to run this without NH transactions? I pulled out my message module that was doing something similar. I am only using ambient transactions and things seem to work just fine with the AdoNetWithDistributed transation factory as the default in NH 2.1 +. Initially I thought I would need explicit NH transactions but even using two session factories everything Just Works. Using NH Prof shows me the transactional boundaries are just what I expect.
On Thu, Oct 22, 2009 at 4:04 AM, Ayende Rahien <[email protected]> wrote: > Send me a patch for this > > On Thursday, October 22, 2009, Vadim Kantorov <[email protected]> > wrote: > > > > It'd be cool in the light of the NHibernate + DTC issue > > > > On 21 окт, 23:29, Ayende Rahien <[email protected]> wrote: > >> We can probably offer another event, before we commit the DTC > >> > >> On Wed, Oct 21, 2009 at 7:26 PM, Vadim Kantorov < > [email protected]>wrote: > >> > >> > >> > >> > >> > >> > Keeping in mind this crazy issue: > >> > >> >http://groups.google.ru/group/nhibernate-development/browse_thread/th. > .. > >> > I tried to use native NH transactions everywhere just in case. I > >> > thought creating a message module would be a solution. > >> > Unfortunately, my module doesn't work correctly. > >> > >> > public class NhMessageModule : IMessageModule > >> > { > >> > readonly ISessionFactory factory; > >> > >> > public NhMessageModule(ISessionFactory factory) > >> > { > >> > this.factory = factory; > >> > } > >> > >> > public void Init(ITransport transport) > >> > { > >> > transport.MessageArrived += OpenSession; > >> > transport.MessageProcessingCompleted += > >> > DisposeOfSession; > >> > } > >> > >> > public void Stop(ITransport transport) > >> > { > >> > transport.MessageArrived -= OpenSession; > >> > transport.MessageProcessingCompleted -= > >> > DisposeOfSession; > >> > } > >> > >> > private bool OpenSession(CurrentMessageInformation arg) > >> > { > >> > var session = factory.OpenSession(); > >> > session.BeginTransaction(); > >> > >> > CurrentSessionContext.Bind(session); > >> > >> > return false; > >> > } > >> > >> > private void DisposeOfSession(CurrentMessageInformation > >> > arg1, > >> > Exception arg2) > >> > { > >> > >> > if (CurrentSessionContext.HasBind(factory)) > >> > { > >> > var session = > >> > CurrentSessionContext.Unbind(factory); > >> > >> > if (session.Transaction != null && > >> > session.Transaction.IsActive) > >> > session.Transaction.Commit(); > >> > >> > session.Dispose(); > >> > } > >> > } > >> > } > >> > >> > It fails with an SqlException > >> > Message: The COMMIT TRANSACTION request has no corresponding BEGIN > >> > TRANSACTION. > >> > Stack trace: > >> > at System.Data.SqlClient.SqlConnection.OnError(SqlException > >> > exception, Boolean breakConnection) > >> > at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException > >> > exception, Boolean breakConnection) > >> > at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning > >> > (TdsParserStateObject stateObj) > >> > at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, > >> > SqlCommand cmdHand > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Rhino Tools Dev" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/rhino-tools-dev?hl=en -~----------~----~----~----~------~----~------~--~---
