Absolutely.... :-) On Tue, Sep 9, 2008 at 10:00 AM, Ayende Rahien <[EMAIL PROTECTED]> wrote:
> Can I expect a blog post out of this? > > > On Tue, Sep 9, 2008 at 5:56 PM, Craig Neuwirt <[EMAIL PROTECTED]> wrote: > >> James, >> >> Thanks for assisting me on this issue. The problem, as you pointed out >> all along, had to do with performing a save without a tx. It polluted the >> second level cache so I wasn't testing with the environment I was expecting. >> >> Cheers, >> craig >> >> >> On Mon, Sep 8, 2008 at 10:39 PM, James Kovacs <[EMAIL PROTECTED]>wrote: >> >>> In order for the entity to be saved, you need to commit the tx. In the >>> test, you should probably purge the 2nd level cache by evicting the >>> serialized entity. >>> sessionFactory.Evict(typeof(Foo)); >>> >>> will remove all serialized Foo objects from the 2nd level cache. To evict >>> only one: >>> >>> sessionFactory.Evict(typeof(Foo), id); >>> >>> James >>> -- >>> James Kovacs, B.Sc., M.Sc., MCSD, MCT >>> Microsoft MVP - C# Architecture >>> http://www.jameskovacs.com >>> [EMAIL PROTECTED] >>> 403-397-3177 (mobile) >>> >>> >>> On Mon, Sep 8, 2008 at 6:04 PM, Craig Neuwirt <[EMAIL PROTECTED]>wrote: >>> >>>> Ayende, >>>> >>>> Thanks for the feedback. However, I believe the Saving operation is >>>> polluting the test. I want my test to demonstrate the ability to execute a >>>> query against EXISTING data in the database and have that query put in the >>>> query cache so that the next time I execute the same query, it uses the >>>> cache instead of hitting the db. >>>> >>>> So to test this, a Foo needs to be in the db and this part needs to be >>>> removed >>>> using (ISession s = OpenSession()) >>>> using (ITransaction tx = s.BeginTransaction()) >>>> { >>>> s.Save(foo); >>>> tx.Commit(); >>>> } >>>> Isn't this the normal way of using the query cache? >>>> >>>> thanks. >>>> craig >>>> On Mon, Sep 8, 2008 at 3:07 PM, Ayende Rahien <[EMAIL PROTECTED]>wrote: >>>> >>>>> Blah! >>>>> We were looking at the wrong spot all along. >>>>> This test works, I marked the parts that I had to change. >>>>> >>>>> Perfectly obvious, when you think of this. >>>>> You asked NHibernate to create new foo, so it has to put it in the >>>>> cache and invalidate all Foos until the transaction is commited. >>>>> It does so by specifying a timeout value of one minute from now (IIRC), >>>>> which obivously mixes up with the test timing. >>>>> >>>>> When the tx is commited, NH can make this visible again, and set it to >>>>> the current timestamp. >>>>> >>>>> >>>>> [Test] >>>>> public void DoesNotLoadEntityFromSysCache() >>>>> { >>>>> Foo foo = new Foo(); >>>>> foo.Name = "Craig"; >>>>> >>>>> using (ISession s = OpenSession()) >>>>> using (ITransaction tx = s.BeginTransaction()) >>>>> { >>>>> s.Save(foo); >>>>> tx.Commit(); >>>>> } >>>>> >>>>> using (ISession s = OpenSession()) >>>>> using( ITransaction tx = s.BeginTransaction()) >>>>> { >>>>> Foo result = (Foo)s.CreateCriteria(typeof(Foo)) >>>>> .Add(Property.ForName("Name").Eq("Craig")) >>>>> .SetCacheable(true) >>>>> .UniqueResult(); >>>>> >>>>> Assert.IsNotNull(result); >>>>> tx.Commit(); >>>>> } >>>>> >>>>> using (ISession s = OpenSession()) >>>>> { >>>>> using (IDbCommand command = s.Connection.CreateCommand()) >>>>> { >>>>> command.CommandText = "DELETE FROM Foos"; >>>>> command.ExecuteNonQuery(); >>>>> } >>>>> } >>>>> >>>>> using (ISession s = OpenSession()) >>>>> using (ITransaction tx = s.BeginTransaction()) >>>>> { >>>>> Foo result = (Foo)s.CreateCriteria(typeof(Foo)) >>>>> .Add(Property.ForName("Name").Eq("Craig")) >>>>> .SetCacheable(true) >>>>> .UniqueResult(); >>>>> >>>>> Assert.IsNotNull(result); >>>>> >>>>> tx.Commit(); >>>>> } >>>>> >>>>> using (ISession s = OpenSession()) >>>>> using (ITransaction tx = s.BeginTransaction()) >>>>> { >>>>> s.Delete("from Foo"); >>>>> s.Flush(); >>>>> >>>>> tx.Commit(); >>>>> >>>>> } >>>>> } >>>>> >>>>> On Mon, Sep 8, 2008 at 10:47 PM, Craig Neuwirt <[EMAIL PROTECTED]>wrote: >>>>> >>>>>> Yeah, that's what I eluded to on my first post. >>>>>> >>>>>> Thanks for letting me know I am not completely crazy yet ;-) >>>>>> >>>>>> >>>>>> On Mon, Sep 8, 2008 at 1:28 PM, Ayende Rahien <[EMAIL PROTECTED]>wrote: >>>>>> >>>>>>> I think there is still something funny going on, looks to be related >>>>>>> to the time stamps that were going on there. >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Mon, Sep 8, 2008 at 9:20 PM, James Kovacs < >>>>>>> [EMAIL PROTECTED]> wrote: >>>>>>> >>>>>>>> I modified your patch to use transactions and SysCache worked for me >>>>>>>> as expected. I even debugged through and looked at the contents of the >>>>>>>> Foos >>>>>>>> table to verify that the IDbCommand did in fact delete the row. I've >>>>>>>> since >>>>>>>> reverted the code, but can re-create it tonight when I get home. >>>>>>>> James >>>>>>>> -- >>>>>>>> James Kovacs, B.Sc., M.Sc., MCSD, MCT >>>>>>>> Microsoft MVP - C# Architecture >>>>>>>> http://www.jameskovacs.com >>>>>>>> [EMAIL PROTECTED] >>>>>>>> 403-397-3177 (mobile) >>>>>>>> >>>>>>>> >>>>>>>> On Mon, Sep 8, 2008 at 12:16 PM, Craig Neuwirt < >>>>>>>> [EMAIL PROTECTED]> wrote: >>>>>>>> >>>>>>>>> So, was their actually a determination made whether or not SysCache >>>>>>>>> is working as expected or there is actually a problem. If it is the >>>>>>>>> former, >>>>>>>>> can someone please show me how to make it work (you can make updates >>>>>>>>> the >>>>>>>>> patch I submitted) >>>>>>>>> >>>>>>>>> thanks, >>>>>>>>> craig >>>>>>>>> >>>>>>>>> >>>>>>>>> On Sun, Sep 7, 2008 at 7:02 PM, Ayende Rahien <[EMAIL >>>>>>>>> PROTECTED]>wrote: >>>>>>>>> >>>>>>>>>> You have to commit the transaction. >>>>>>>>>> NH requires transactions for reads as well. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Mon, Sep 8, 2008 at 2:53 AM, Craig Neuwirt <[EMAIL PROTECTED] >>>>>>>>>> > wrote: >>>>>>>>>> >>>>>>>>>>> Hey James, >>>>>>>>>>> >>>>>>>>>>> You are absolutely correct. Once I added the transaction, my >>>>>>>>>>> unit test passed. However, the actual scenario I am trying to get >>>>>>>>>>> working >>>>>>>>>>> is assuming data is in the db already and I perform an initial >>>>>>>>>>> query. I >>>>>>>>>>> want that result to go into the second level cache so it is >>>>>>>>>>> retrieved from >>>>>>>>>>> the cache when the same query is executed. How do I make that >>>>>>>>>>> happen? I >>>>>>>>>>> tried putting transaction around the query, but that didn't work >>>>>>>>>>> and I don't >>>>>>>>>>> think that should be necessary for reads. >>>>>>>>>>> >>>>>>>>>>> thanks, >>>>>>>>>>> craig >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Sun, Sep 7, 2008 at 5:14 PM, James Kovacs < >>>>>>>>>>> [EMAIL PROTECTED]> wrote: >>>>>>>>>>> >>>>>>>>>>>> I am looking at it right now. Initial investigations... The >>>>>>>>>>>> problem seems to stem from lack of transaction handling in the >>>>>>>>>>>> test case. If >>>>>>>>>>>> rather than flushing the session, you commit a transaction, the >>>>>>>>>>>> SysCache >>>>>>>>>>>> returns data appropriately. I'll post more as I find out more. >>>>>>>>>>>> (Just posting >>>>>>>>>>>> to save Ayende some time.) >>>>>>>>>>>> >>>>>>>>>>>> James >>>>>>>>>>>> -- >>>>>>>>>>>> James Kovacs, B.Sc., M.Sc., MCSD, MCT >>>>>>>>>>>> Microsoft MVP - C# Architecture >>>>>>>>>>>> http://www.jameskovacs.com >>>>>>>>>>>> [EMAIL PROTECTED] >>>>>>>>>>>> 403-397-3177 (mobile) >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Sun, Sep 7, 2008 at 4:07 PM, Ayende Rahien < >>>>>>>>>>>> [EMAIL PROTECTED]> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Guys, >>>>>>>>>>>>> I am going to look at the issue now, will post my results soon >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Sun, Sep 7, 2008 at 10:44 PM, Gildas < >>>>>>>>>>>>> [EMAIL PROTECTED]> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Fabio, I know that I'm still noob in NHibernate and that I may >>>>>>>>>>>>>> ask >>>>>>>>>>>>>> stupid questions. I'm sorry if you are bored with this, but >>>>>>>>>>>>>> well, >>>>>>>>>>>>>> please understand that I'm just trying to resolve a problem I >>>>>>>>>>>>>> did not >>>>>>>>>>>>>> have before upgrading to last NHibernate trunk. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Going through Rhino code, I can see that my session is created >>>>>>>>>>>>>> at each >>>>>>>>>>>>>> request, so that's not the problem. >>>>>>>>>>>>>> Anyway, I still don't have any second level cache. Items are >>>>>>>>>>>>>> updated >>>>>>>>>>>>>> but never retrieved from it. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Can someone check the test case from craig, which is failing >>>>>>>>>>>>>> and don't >>>>>>>>>>>>>> use any fancy session management ? >>>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Sep 7, 8:35 pm, "Fabio Maulo" <[EMAIL PROTECTED]> >>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>> > 2008/9/7 Gildas <[EMAIL PROTECTED]> >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > > So I'm going to ask if this is the right way to handle >>>>>>>>>>>>>> sessions ? From >>>>>>>>>>>>>> > > what I remember of NHibernate, NH Sessions must not be >>>>>>>>>>>>>> stored in >>>>>>>>>>>>>> > > HttpContext.Session. I may not understand the reasons why >>>>>>>>>>>>>> this done >>>>>>>>>>>>>> > > like this in UnitOfWorkApplication, maybe for long >>>>>>>>>>>>>> transactions >>>>>>>>>>>>>> > > management ? >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > Rhino UoW use httpSession only for long conversation... >>>>>>>>>>>>>> > The NhSession CAN be stored in the httpSession simply >>>>>>>>>>>>>> because is the "most >>>>>>>>>>>>>> > simple" way to manage long-conversations. >>>>>>>>>>>>>> > -- >>>>>>>>>>>>>> > Fabio Maulo >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>> >>> >>> >> >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
