I would recommend implementing an IMessageModule to manage the session
lifecycle. You shouldn't need to open the session directly from the
ISessionFactory in consumers. Rather, have the ISession injected. There are
event hooks on ITransport that will allow you to commit / dispose
accordingly. This article covers the subject a bit.

http://msdn.microsoft.com/en-us/magazine/ff796225.aspx

On Tue, Sep 20, 2011 at 12:34 AM, Kenny Eliasson <[email protected]>wrote:

> I've found 3 other solutions to my problem
>
> 1) Use a logEndpoint and a another server that listens to start and
> end messages.
> 2) Nest my code in a  TransactionScope and Suppress it.
> 3) In the config use consumeInTransaction="false"
>
> IƤve tried option 2 and 3 with success, but I think it most be
> drawbacks to using them that I'm not aware of.
>
> On Sep 20, 5:05 am, Tom Cabanski <[email protected]> wrote:
> > I think you need to begin the transaction before you open the
> > session.  If you don't, nhibernate does not enlist.  It's been a
> > little while since I used nhibernate so I am not positive.
> > On Sep 19, 8:52 am, Kenny Eliasson <[email protected]> wrote:
> >
> >
> >
> >
> >
> >
> >
> > > Hi there!
> >
> > > When I send my messages to the queue I include a JobLogId which I
> > > later on uses in my consumer for loading a entity from NHibernate. I
> > > then change the status of the job to processing, starts the invoke the
> > > Consume-method that can take everywhere from 1 second to 10 minutes
> > > and after the job is done I once again load the entity and mark it as
> > > done.
> >
> > > The problem is that it seems the DTC-transaction is locking the table,
> > > so that I can't query on it.
> >
> > > I'm using the following code
> >
> > > public void Consume(T message)
> > >         {
> >
> > >             JobLog jobLog;
> > >             using (var session = _sessionFactory.OpenSession()){
> > >             //using (var tx = session.BeginTransaction()) {
> > >                 jobLog = session.Get<JobLog>(message.JobLogId);
> > >                 jobLog.Processing();
> > >                 //tx.Commit();
> > >                 session.Flush();
> > >             }
> >
> > >             _logger.InfoFormat("Starting processing message of type
> > > {0}.\nMessage data: {1}", jobLog.MessageType, jobLog.MessageData);
> >
> > >             try {
> > >                 Consume(message, _logger);
> > >             } catch (Exception e) {
> > >                 _logger.Fatal(string.Format("The consumer {0} threw an
> > > exception", this.GetType().Name), e);
> > >                 using (var session = _sessionFactory.OpenSession())
> > >                 using (var tx = session.BeginTransaction()) {
> > >                     jobLog = session.Get<JobLog>(message.JobLogId);
> > >                     jobLog.Crashed();
> > >                     tx.Commit();
> > >                 }
> > >                 return;
> > >             }
> >
> > >             _logger.InfoFormat("Done processing message of type {0}",
> > > message.GetType().Name);
> >
> > >             using (var session = _sessionFactory.OpenSession()) {
> > >             //using (var tx = session.BeginTransaction()) {
> > >                 jobLog = session.Get<JobLog>(message.JobLogId);
> > >                 jobLog.Done();
> > >                 //tx.Commit();
> > >                 session.Flush();
> > >             }
> > >         }
> >
> > > As you see I've tried to comment out the transaction parts of
> > > NHibernate without success.
> >
> > > Is there a way to solve this without locking the whole table? Is there
> > > a better way of logging then doing it in the consume-method? Any
> > > thoughts?
>
> --
> 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.
>
>

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