Btw, doesn't the exception tell you which object is affected if you look at
the message, including the message of all InnerExceptions recursively?

2016-04-27 21:16 GMT+01:00 Kaleem Uddin Mohammed Abdul <
[email protected]>:

> Thanks Oskar!
>
> I will try to follow these points and try to reproduce by updating the
> same object multiple times!
>
> On Wednesday, April 27, 2016 at 12:12:52 PM UTC-5, Oskar Berggren wrote:
>>
>> The posted code might not be very relevant to figuring out the problem.f
>>
>> StaleObjectstateException should mean that you have an object in memory,
>> that NHibernate detects have been updated in the database by someone else
>> (meaning "another session"). If the exception goes away for a while on IIS
>> reset but then consistently comes back, it sound like you may be holding on
>> to some database objects for an extended period of time (possibly
>> disconnecting them from a session and then attaching them to a new one). I
>> think that's where you need to start thinking to find the problem.
>>
>> If your users are frequently updating the same objects, this may be a
>> fact of life (meaning you might need to design the program to avoid it).
>>
>> /Oskar
>>
>>
>>
>> 2016-04-27 16:59 GMT+01:00 Kaleem Uddin Mohammed Abdul <
>> [email protected]>:
>>
>>> The Scope of the class is public and in GetSession method we open the
>>> session and in Commit Method we closed the session!
>>>
>>> On Tuesday, April 26, 2016 at 5:45:51 PM UTC-5, Gunnar Liljas wrote:
>>>>
>>>> What is the scope of this class? Where is the session stored? When is
>>>> it opened and closed?
>>>>
>>>> 2016-04-27 0:25 GMT+02:00 Kaleem Uddin Mohammed Abdul <
>>>> [email protected]>:
>>>>
>>>>> Greetings Expert,
>>>>>
>>>>> We are getting StaleObject Exception often but it goes away after IIS
>>>>> Reset. We searched on the internet and not able to find the proper answer
>>>>> :(.
>>>>>
>>>>>       private ISessionFactory GetFactory()
>>>>>       {
>>>>>           INetLog _log = ObjectFactory.GetInstance<INetLog>();
>>>>>           _log.ArchStart("NHSession.GetFactory", "");
>>>>>           // create factory if not already built
>>>>>           if (localFactory == null)
>>>>>           {
>>>>>               string[] nameParts = DBNameAndHasTran.Split(new char[] { 
>>>>> '_' });
>>>>>               // StructureMap will cache this by singlton
>>>>>               INHFactory nHFactoryHdl = 
>>>>> ObjectFactory.GetNamedInstance<INHFactory>(nameParts[0]);
>>>>>               localFactory = nHFactoryHdl.GetFactory();
>>>>>               _log.ArchDebug("Got the factory from sington.  Put it in 
>>>>> localFactory");
>>>>>           }
>>>>>           else
>>>>>           {
>>>>>               _log.ArchDebug("Used the localFactory");
>>>>>           }
>>>>>           _log.ArchEnd();
>>>>>           return localFactory;
>>>>>       }
>>>>>
>>>>> public ISession GetSession()
>>>>>        {
>>>>>            INetLog _log = ObjectFactory.GetInstance<INetLog>();
>>>>>            _log.ArchStart("NHSession.GetSession", "");
>>>>>            if (localSession == null)
>>>>>            {
>>>>>                // error check DBNameHasTran
>>>>>                string[] nameParts = DBNameAndHasTran.Split(new char[] { 
>>>>> '_' });
>>>>>                if (nameParts.Length < 2)
>>>>>                    throw new Exception("Invalid value for 
>>>>> DBNameAndHasTran:" + DBNameAndHasTran + " it is missing a _");
>>>>>
>>>>>                if (nameParts.Length > 2)
>>>>>                    throw new Exception("Invalid value for 
>>>>> DBNameAndHasTran:" + DBNameAndHasTran + " it has too many _");
>>>>>
>>>>>                if ((nameParts[1] != "HasTrans") && (nameParts[1] != 
>>>>> "HasNoTrans"))
>>>>>                    throw new Exception("Invalid value for 
>>>>> DBNameAndHasTran:" + DBNameAndHasTran + " missing _HasTrans or 
>>>>> _HasNoTrans");
>>>>>
>>>>>                // get the factory
>>>>>                _log.ArchDebug("GetSession From Factory");
>>>>>                localSession = GetFactory().OpenSession();
>>>>>
>>>>>                // start transaction if InTrans == true
>>>>>                if (nameParts[1] == "HasTrans")
>>>>>                {
>>>>>                    if (localSession.Transaction == null || 
>>>>> !localSession.Transaction.IsActive)
>>>>>                    {
>>>>>                        _log.ArchDebug("Call to BeginTransaction");
>>>>>                        localTransaction = localSession.BeginTransaction();
>>>>>
>>>>>                        TransactionStarted = true;
>>>>>                    }
>>>>>                }
>>>>>            }
>>>>>            else
>>>>>            {
>>>>>                _log.ArchDebug("Not Creating a Session Object using 
>>>>> localSession");
>>>>>            }
>>>>>
>>>>>            _log.ArchEnd();
>>>>>            return localSession;
>>>>>        }
>>>>>
>>>>> public void CloseOutSession()
>>>>>        {
>>>>>            INetLog _log = ObjectFactory.GetInstance<INetLog>();
>>>>>            _log.ArchStart("NHSession.CloseOutSession", "");
>>>>>
>>>>>            // log if trying to close a closed session
>>>>>            if (localSession == null)
>>>>>            {
>>>>>                _log.ArchDebug("In CloseOutSession local session is 
>>>>> null.");
>>>>>                // who called us
>>>>>                StackTrace stackTrace = new StackTrace();           // get 
>>>>> call stack
>>>>>                StackFrame[] stackFrames = stackTrace.GetFrames();  // get 
>>>>> method calls (frames)
>>>>>
>>>>>                string msg = "";
>>>>>                // write call stack to determine why CloseOutSession is 
>>>>> called so frequently
>>>>>                foreach (StackFrame stackFrame in stackFrames)
>>>>>                {
>>>>>                    if (msg == "")
>>>>>                    {
>>>>>                        msg = "I was called by " + 
>>>>> stackFrame.GetMethod().Name;
>>>>>                    }
>>>>>                    else
>>>>>                    {
>>>>>                        msg += ", who was called by " + 
>>>>> stackFrame.GetMethod().Name;
>>>>>                    }
>>>>>                }
>>>>>
>>>>>                _log.ArchDebug(msg);
>>>>>                _log.ArchEnd();
>>>>>                return;
>>>>>            }
>>>>>
>>>>>            // log error if session is not open
>>>>>            if (!localSession.IsOpen)
>>>>>            {
>>>>>                _log.ArchDebug("In CloseOutSession local session is not 
>>>>> open.  ");
>>>>>                _log.ArchEnd();
>>>>>                return;
>>>>>            }
>>>>>
>>>>>            _log.ArchDebug("In CloseOutSession Found session to kill");
>>>>>            if (localSession.Transaction != null && 
>>>>> localSession.Transaction.IsActive)
>>>>>            {
>>>>>                _log.ArchDebug("In CloseOutSession Found Transaction to 
>>>>> rollback.");
>>>>>                localSession.Transaction.Rollback();
>>>>>                //localSession = null;
>>>>>            }
>>>>>            else
>>>>>            {
>>>>>                _log.ArchDebug("In CloseOutSession. Did not find any 
>>>>> unprocessed transactions so did a flush");
>>>>>                localSession.Flush();
>>>>>            }
>>>>>
>>>>>            // checked above so there is not a null reference possiblity
>>>>>            if (localSession.Transaction != null)
>>>>>            {
>>>>>                localSession.Transaction.Dispose();
>>>>>            }
>>>>>
>>>>>            localSession.Close();
>>>>>            localSession.Dispose();
>>>>>            localSession = null;
>>>>>            localTransaction = null;
>>>>>            _log.ArchEnd();
>>>>>        }
>>>>>
>>>>> public void Commit()
>>>>>      {
>>>>>          INetLog _log = ObjectFactory.GetInstance<INetLog>();
>>>>>          _log.ArchStart("NHSession.Commit", "");
>>>>>
>>>>>          // exit out if there is no session.
>>>>>          if (localSession == null)
>>>>>          {
>>>>>              _log.ArchDebug("In Commit local session is null.  This is a 
>>>>> indication that GetSession was not called before commit.  This means no 
>>>>> work to commit");
>>>>>              _log.ArchEnd();
>>>>>              return;
>>>>>          }
>>>>>
>>>>>          // log error if session is not open
>>>>>          if (!localSession.IsOpen)
>>>>>          {
>>>>>              _log.ArchDebug("In Commit local session is not open.  This 
>>>>> is a indication that NHSession was not called before commit.  This means 
>>>>> no work to commit");
>>>>>              CloseOutSession();
>>>>>              _log.ArchEnd();
>>>>>              return;
>>>>>          }
>>>>>
>>>>>          // log error if not transaction mode.
>>>>>          if (localTransaction == null)
>>>>>          {
>>>>>              _log.ArchDebug("In Commit localTransaction is null.  This is 
>>>>> a indication that NHSession was not was not open in transaction mode.");
>>>>>              CloseOutSession();
>>>>>              _log.ArchEnd();
>>>>>              return;
>>>>>          }
>>>>>
>>>>>          try
>>>>>          {
>>>>>              // do the commit
>>>>>              _log.ArchDebug("In Commit printing out Statistics");
>>>>>              _log.ArchDebug(localSession.Statistics.ToString());
>>>>>              localTransaction.Commit();
>>>>>          }
>>>>>          catch (Exception ex)
>>>>>          {
>>>>>
>>>>>              throw;
>>>>>          }
>>>>>          finally
>>>>>          {
>>>>>              CloseOutSession();
>>>>>              _log.ArchEnd();
>>>>>          }
>>>>>      }
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "nhusers" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to [email protected].
>>>>> To post to this group, send email to [email protected].
>>>>> Visit this group at https://groups.google.com/group/nhusers.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "nhusers" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at https://groups.google.com/group/nhusers.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>> --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/nhusers.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.

Reply via email to