"they are registered within Windsor as Transient." can you provide the code for this? this may be causing the issue, because so far you setup looks good.
On Sep 11, 5:40 am, Daniel Hölbling <[email protected]> wrote: > FlushMode: Auto > ActiveEntityMode: Poco > CacheMode:Put | Get > > greetings Daniel > > On Sat, Sep 11, 2010 at 11:36 AM, Oskar Berggren > <[email protected]>wrote: > > > What's your flush mode for the session? > > > /Oskar > > > 2010/9/11 Daniel Hölbling <[email protected]>: > > > This is a simplified example, from my understanding the call to > > > session.Update is not necessary I know that. > > > The whole thing is built with NServiceBus and there is a distributed > > > transaction going on around the message handler. I also insertet that > > local > > > transaction to make sure it's not the distributed transaction that's > > causing > > > the problem. > > > I checked with NHProf that all transactions get committed, and verified > > > there are no errors thrown by the code. There is also no batch processing > > > since I can replicate the problem with only one Message coming in on the > > > Bus. > > > That's exactly what NSB does by default: > > > when a message is received begin the transaction. > > > when a message is completed without error commit. > > > when a message is completed with error rollback. > > > when a message completes dispose of the transaction. > > > Also looking at NHprof I don't see unnecessary sessions being opened. One > > > per Message that's the way I want it to be. Sessions are not re-used from > > > message to message, they are registered within Windsor as Transient. > > > That's why I can't really figure out where the problem is. Everything > > looks > > > fine to me.. > > > > On Sat, Sep 11, 2010 at 4:05 AM, Jason Meckley <[email protected]> > > > wrote: > > > >> you don't need to call session.Update(). you should also call > > >> tx.Rollback() if there is an error. > > > >> using(var tx = session.BeginTransaction()) > > >> try > > >> { > > >> session.Get<Product>(id); > > >> product.Name = ... > > >> tx.Commit(); > > >> } > > >> catch > > >> { > > >> tx.Rollback(); > > >> throw; > > >> } > > > >> if you are using a messaging framework, then you can move the > > >> transaction management to the command/message module (or whatever the > > >> name of it is. > > > >> when a message is received begin the transaction. > > >> when a message is completed without error commit. > > >> when a message is completed with error rollback. > > >> when a message completes dispose of the transaction. > > > >> then you message handler code looks like this > > > >> session.Get<Product>(id); > > >> product.Name = ... > > > >> clean, simple code. > > > >> another thing to consider... are you processing messages is batch? if > > >> so you may be opening more sessions then necessary. this is the case > > >> with Rhino.ServiceBus. You can manage if a session is open or not with > > >> CurrentSessionContext. > > > >> CurrentSessionContext.Bind(factory.OpenSession()) > > >> CurrentSessionContext.HasBind(factory); > > >> CurrentSessionContext.Unbind(factory).Dispose(); > > > >> var sessionfactory.GetCurrentSession(); > > > >> On Sep 10, 8:34 pm, Daniel Hölbling <[email protected]> wrote: > > >> > I've just spent almost 3 hours debugging and still can't find a fault > > >> > with > > >> > my code. > > > >> > The reproduction looks like this: > > > >> > using (var tx = session.BeginTransaction()) > > >> > { > > >> > var product = session.Get<Product>(message.ProductDto.Id); > > >> > product.Name = message.ProductDto.Name; > > >> > product.PartNumber = message.ProductDto.PartNumber; > > >> > product.Price = message.ProductDto.Price; > > >> > session.Update(product); > > >> > tx.Commit(); > > >> > Logger.InfoFormat("Updated Product {0}", product.Id); > > > >> > } > > > >> > I change some value of the entity in the UI, this code is run (over > > the > > >> > wire) and the IsDirty() Method is set to False and no Update is > > >> > generated. > > >> > (Checked with NHProf..) > > >> > I just re-checked and upon changing the value of product.PartNumber > > for > > >> > 8 > > >> > times it didn't generate a UPDATE once. > > > >> > It gets significantly worse once I run this with distributed > > >> > transactions > > >> > from NServiceBus where I loose every second UPDATE to the database > > >> > without > > >> > any error or anything.. It just doesn't update the DB since it doesn't > > >> > think > > >> > the session is dirty. > > > >> > Is there anything I should be aware of? > > > >> > greetings Daniel > > > >> -- > > >> You received this message because you are subscribed to the Google > > Groups > > >> "nhusers" group. > > >> To post to this group, send email to [email protected]. > > >> To unsubscribe from this group, send email to > > >> [email protected]<nhusers%[email protected]> > > . > > >> For more options, visit this group at > > >>http://groups.google.com/group/nhusers?hl=en. > > > > -- > > > You received this message because you are subscribed to the Google Groups > > > "nhusers" group. > > > To post to this group, send email to [email protected]. > > > To unsubscribe from this group, send email to > > > [email protected]<nhusers%[email protected]> > > . > > > For more options, visit this group at > > >http://groups.google.com/group/nhusers?hl=en. > > > -- > > You received this message because you are subscribed to the Google Groups > > "nhusers" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]<nhusers%[email protected]> > > . > > For more options, visit this group at > >http://groups.google.com/group/nhusers?hl=en. > > -- You received this message because you are subscribed to the Google Groups "nhusers" 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/nhusers?hl=en.
