Shnauzer feeding?

Tuna Toksöz
Eternal sunshine of the open source mind.

http://devlicio.us/blogs/tuna_toksoz
http://tunatoksoz.com
http://twitter.com/tehlike




On Tue, Jul 21, 2009 at 10:26 PM, Fabio Maulo <[email protected]> wrote:

> let me check API doc[?]
>
> 2009/7/21 Fabio Maulo <[email protected]>
>
> Dirty entities are in the PersistentContext (I don't remember if it is
>> visible from ISession or ISessionImplementor)
>> 2009/7/21 Matt Lund <[email protected]>
>>
>>
>>> OK...  I suspected as much but wanted to be sure...
>>>
>>> So tell me this...  Is there some way I can programmatically get the
>>> list of dirty entities from the old session?  I looked to see if there
>>> was something like ISession.GetDirtyEntities() but didn't see
>>> something like this.
>>>
>>> I'll tell you why I ask...  It seems like I'm dealing with one of two
>>> scenarios when I get a StaleObjectStateException.  Scenario A is that
>>> a DB row was modified since I read it but the modified fields are
>>> different from the fields I've modified (there's no conflict).
>>> Scenario B is that a DB row was modified since I read it and once or
>>> more of the modified fields corresponds to a field I've modified (and
>>> the values are different) - this is a conflict.
>>>
>>> It seems like after I get a StaleObjectStateException I could call a
>>> handy method that would:
>>>
>>> 1. Create a new session
>>> 2. For each dirty object in the old session:
>>>         a. Read the entity into the new session and determine if
>>> there's a "conflict" (if so, return CONFLICT)
>>>         b. Merge the changes made in the db with the changes made in
>>> the old session.
>>>
>>> So in the case of Scenario A I can now continue on my merry way.  In
>>> the case of Scenario B I can decide how to deal with the conflicts.
>>>
>>> Does this seem possible?  My first step will be to figure out how to
>>> get the collection of dirty entities out of the old session - is there
>>> a way to do this?
>>>
>>> Thanks!
>>>
>>> On Jul 21, 11:32 am, Fabio Maulo <[email protected]> wrote:
>>> > For StaleObjectStateException you should throw the session, open a new
>>> one,
>>> > use session.Merge to reattach entity, continue working.
>>> >
>>> > 2009/7/21 Matt Lund <[email protected]>
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > > I did searching on this forum and couldn't find an answer to my
>>> > > question, but my apologies if it's already been answered.
>>> >
>>> > > I want to understand how to deal with recovering from a
>>> > > StaleObjectStateException in a simple scenario.
>>> >
>>> > > Suppose the following occur in this order.  Session 1 is occuring on
>>> > > thread 1 and Session 2 is occuring on thread 2.
>>> >
>>> > > 1. Session 1 loads entity a1 of type A, entity b1 of type B, and
>>> > > entity c1 of type C
>>> > > 2. Session 2 loads entity c2 of type C
>>> > > 3. Session 1 modifies properties of a1, b1, and c1
>>> > > 4. Session 2 modifies properties of c2
>>> > > 5. Session 2 flushes and commits
>>> > > 6. Session 1 flushes and commits
>>> >
>>> > > At step 6 I can clearly expect a StaleObjectStateException.  When
>>> this
>>> > > occurs I try to:
>>> >
>>> > > 7. Evict c2 from session 1
>>> > > 8. Load c2 on session 1
>>> > > 9. Re-apply changes to c2
>>> > > 10. Flush session 1
>>> >
>>> > > But I get StaleObjectStateException on 10 as well.
>>> >
>>> > > So in lieu of the evict/load in steps 7-8 I tried a few other things
>>> > > that didn't work either.  I tried a refresh (same outcome).  And I
>>> > > tried an evict & refresh (same outcome).
>>> >
>>> > > The only success I've had is when, as a result of the
>>> > > StaleObjectStateException on step 6, I clear the session and re-do
>>> > > steps 1,5.
>>> >
>>> > > The conclusion I'm reaching is that once I get a
>>> > > StaleObjectStateException, nothing can be done to simply treat c1 and
>>> > > get to a point where I can attempt to flush the session again.  Is
>>> > > this the case?
>>> >
>>> > --
>>> > Fabio Maulo
>>>
>>>
>>
>>
>> --
>> Fabio Maulo
>>
>
>
>
> --
> 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
-~----------~----~----~----~------~----~------~--~---

<<inline: 360.gif>>

Reply via email to