Yes, that would do that.

On Wed, Aug 5, 2009 at 2:58 AM, Tyler Burd <[email protected]> wrote:

> I *finally* figured out the root of the issue.  I had set the NHibernate
> connection.release_mode to "on_close" because the NH docs say that mode is
> better to use with System.Transactions.  Apparently those docs are outdated,
> because the "on_close" mode does NOT work with system.transactions, even in
> very simple test cases.  As soon as I set the connection release mode to
> "auto" I stopped getting this exception, and I started seeing log messages
> about transaction enlistments and rolling back the DTC transaction.  3 days
> of exploration for a 2 second fix, but it's working!
>
> Udi, with this change I actually didn't have to change my MessageModule.  I
> saw what you did in NSB, but since I'm using rhino UnitOfWork instead of the
> raw NHibernate session I could not do something similar, but fortunately I
> didn't have to.
>
> -tyler burd
>
>
> On Tue, Aug 4, 2009 at 2:00 AM, Udi Dahan 
> <[email protected]>wrote:
>
>>
>> I had a similar problem when moving to NH 2.1 - it required some
>> changes to the exception handling around transaction boundaries.
>>
>> Here's the story:
>>
>> NH 2.1 now automatically joins the distributed transaction managed by
>> the bus, and flushes/closes/disposes with the commit.
>> This results in exceptions at the message module level, or the
>> transport/transaction level that used to happen at the message handler
>> level.
>>
>> * Our message module is quite a bit simpler, only opening a session
>> and binding it to the current context.
>>
>> Hope that helps.
>> -- Udi Dahan
>>
>> On Aug 3, 8:08 pm, Tyler Burd <[email protected]> wrote:
>> > I think I've isolated the problem to NHibernate.  I posted about the
>> issue
>> > on the nhusers list.  Hopefully that will get me somewhere.  Is anyone
>> else
>> > using the NH trunk with RSB?  What do your MessageModules look like?
>> >
>> > On Mon, Aug 3, 2009 at 8:46 AM, tyler.burd <[email protected]> wrote:
>> > > Hi again.  I'm trying to use NHibernate, ActiveRecord, and Rhino's
>> > > UnitOfWork together with RSB (everything from the trunks).  I am using
>> > > a MessageModule to initiate a UnitOfWork (listed at the end of the
>> > > message).  I have a simple message handler that simply loads an entity
>> > > via IRepository, changes a few properties, and then throws an
>> > > exception to force a rollback.  Extremely simple test case, but I keep
>> > > getting this exception when a message is handled:
>> > > Completed transaction was disposed, assuming transaction rollback
>> > >  System.ObjectDisposedException: Cannot access a disposed object.
>> > > Object name: 'Transaction'.
>> > >   at System.Transactions.Transaction.get_TransactionInformation()
>> > >   at
>> >
>> > >
>> NHibernate.Transaction.AdoNetWithDistrubtedTransactionFactory.<>c__DisplayClass1.<EnlistInDistributedTransactionIfNeeded>b__0
>> > > (Object sender, TransactionEventArgs e) in
>> d:\oss\2009-07-27\nhibernate
>> > > \src\NHibernate\Transaction
>> > > \AdoNetWithDistrubtedTransactionFactory.cs:line 42
>> >
>> > > This occurs when I use SQL Server 2005 as the db.  When I use
>> > > postgresql I get an "InvalidOperationException" in NHibernate saying
>> > > that I cannot call disconnect when a transaction is in process, and
>> > > then the whole process crashes.
>> >
>> > > Here is my MessageModule.  Is there something different I should be
>> > > doing?  Is anyone else using NH, AR, and Rhino with RSB?
>> >
>> > > public class UnitOfWorkMessageModule : IMessageModule
>> > > {
>> > >        public void Init(ITransport transport)
>> > >        {
>> > >                transport.MessageArrived += transport_MessageArrived;
>> > >                transport.MessageProcessingCompleted +=
>> > > transport_MessageProcessingCompleted;
>> > >        }
>> >
>> > >        void transport_MessageProcessingCompleted
>> > > (Rhino.ServiceBus.Impl.CurrentMessageInformation arg1, Exception arg2)
>> > >        {
>> > >                if (UnitOfWork.IsStarted)
>> > >                        UnitOfWork.Current.Dispose();
>> > >        }
>> >
>> > >        bool transport_MessageArrived
>> > > (Rhino.ServiceBus.Impl.CurrentMessageInformation arg)
>> > >        {
>> > >                UnitOfWork.Start();
>> > >                return false;
>> > >        }
>> >
>> > >        public void Stop(ITransport transport)
>> > >        {
>> > >                transport.MessageArrived -= transport_MessageArrived;
>> > >                transport.MessageProcessingCompleted -=
>> > > transport_MessageProcessingCompleted;
>> > >        }
>> > > }
>> >
>> > > Thanks!
>>
>>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to