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 <
> makale...@gmail.com <javascript:>>:
>
>> 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 <
>>> makale...@gmail.com>:
>>>
>>>> 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 nhusers+u...@googlegroups.com.
>>>> To post to this group, send email to nhu...@googlegroups.com.
>>>> 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 nhusers+u...@googlegroups.com <javascript:>.
>> To post to this group, send email to nhu...@googlegroups.com 
>> <javascript:>.
>> 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 nhusers+unsubscr...@googlegroups.com.
To post to this group, send email to nhusers@googlegroups.com.
Visit this group at https://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.

Reply via email to