I've read through the article and implemented the MessageModule.
Solved a lot of problem but still, it locks the tables when executing
the Consume-method.
I solved it using consumeInTransaction="false" but it seems that the
RSB transaction is using some strange IsolationLevel.


On Sep 20, 6:25 pm, Corey Kaylor <[email protected]> wrote:
> 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