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] 
> <javascript:>>:
>
>> 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] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <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 [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