Hm,Of the top of my head, that should just work. We should be safe for use
in the case of errors in the modules.

On Thu, May 28, 2009 at 4:07 AM, Mike Nichols <[email protected]>wrote:

>
> I have a UnitOfWork message module. When NH throws an exception after
> multiple retries the transaction is aborted and RSB host chokes and
> has to shut down. Here is the module I have:
>
> public class UnitOfWorkMessageModule : IMessageModule
>        {
>
>                public void Init(ITransport transport)
>                {
>                        transport.MessageArrived +=
> transport_MessageArrived;
>                        transport.MessageProcessingCompleted +=
> transport_MessageProcessingCompleted;
>                }
>
>                public void Stop(ITransport transport)
>                {
>                        transport.MessageArrived -=
> transport_MessageArrived;
>                        transport.MessageProcessingCompleted -=
> transport_MessageProcessingCompleted;
>                }
>
>
>                bool transport_MessageArrived
> (Rhino.ServiceBus.Impl.CurrentMessageInformation arg)
>                {
>                        UnitOfWork.Start();
>                        return false;
>                }
>
>                void transport_MessageProcessingCompleted
> (Rhino.ServiceBus.Impl.CurrentMessageInformation obj, Exception
> exception)
>                {
>                        if(exception!=null)
>                        {
>                                Log.For(this).Error("An error occured on
> message process
> completion:" + exception);
>                        }
>                        else
>                        {
>                                try
>                                {
>                                        if(UnitOfWork.IsStarted)
>                                        {
>
>  UnitOfWork.Current.Dispose();
>                                        }
>                                }
>                                catch (Exception ex)
>                                {
>                                        Log.For(this).Error(ex.ToString());
>                                        throw;
>                                 }
>                        }
>
>
>
>                }
>        }
>
> On May 27, 5:30 pm, Ayende Rahien <[email protected]> wrote:
> > Any error that occurs during message processing is going to cause the
> > following:a) the current transaction will abort
> > b) the message will be put back into the queue if the queue is
> > not transactional
> > c) the error will be logged
> > d) if the message failed more than N amount, the message and the error
> will
> > be moved to errors sub queue
> >
> > What you are seeing is the as-designed behavior.
> > What are you trying to do? What is the problem?
> >
> > On Wed, May 27, 2009 at 11:56 PM, Mike Nichols <[email protected]
> >wrote:
> >
> >
> >
> > > In one of my IMEssageModule implementations I am rethrowing any
> > > exception which occurs, but this breaks the Rhino Queues transport
> > > since it seems to make the transaction abort.
> >
> > > Should transaction errors be swallowed in RQ Transport like the other
> > > processing errrors to keep the transport from shutting down and,
> > > consequently, shutting down the application?
> > > If so, I'll move the try..catch to encompass the transaction scope in
> > > the RQ transport receieve call.
> >
>

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