/// <summary>
    /// Test with NO conversation and "connection.release_mode"
    /// "auto"(<see cref="ConnectionReleaseMode.AfterTransaction"/>).
    /// </summary>
    private void connection_release_mode_auto_no_conversation()
    {
        //with NO conversation and "connection.release_mode" "auto"(AfterTransaction)
        //forcing "auto" by reflection.
        Settings settings = ((SessionFactoryImpl)this.SessionFactory).Settings;
        ConnectionReleaseMode connReleaseModeOriginal = settings.ConnectionReleaseMode;

        this.setConnectionReleaseModeByReflection(settings, ConnectionReleaseMode.AfterTransaction);

        //with no conversation
        SessionScopeSettings sessionScopeSettings = new SessionScopeSettings(this.sessionFactory);

        ConnectionCreationTrackingDbProvider.Count = 0;
        using (new SessionScope(sessionScopeSettings, true))
        {
            ISession     sessionNoConv = this.SessionFactory.GetCurrentSession();
            SPCMasterEnt masterEnt2    = sessionNoConv.Get <SPCMasterEnt>(2);
            Assert.AreEqual(1, ConnectionCreationTrackingDbProvider.Count, "ConnectionCreationTrackingDbProvider.Count");
            Assert.AreEqual(1, masterEnt2.SPCDetailEntList.Count, "masterEnt2.SPCDetailEntList.Count");
            Assert.AreEqual(2, ConnectionCreationTrackingDbProvider.Count, "ConnectionCreationTrackingDbProvider.Count");

            SPCMasterEnt masterEnt3 = sessionNoConv.Get <SPCMasterEnt>(3);
            Assert.AreEqual(3, ConnectionCreationTrackingDbProvider.Count, "ConnectionCreationTrackingDbProvider.Count");
            Assert.AreEqual(1, masterEnt3.SPCDetailEntList.Count, "masterEnt3.SPCDetailEntList.Count");
            Assert.AreEqual(4, ConnectionCreationTrackingDbProvider.Count, "ConnectionCreationTrackingDbProvider.Count");
        }

        this.setConnectionReleaseModeByReflection(settings, connReleaseModeOriginal);
    }
Example #2
0
    /// <summary>
    /// Test with conversation and "connection.release_mode"
    /// "auto"(<see cref="ConnectionReleaseMode.AfterTransaction"/>).
    /// </summary>
    /// <remarks>
    /// Here we can see that every statement causes a closing of the IDbConnection.
    /// </remarks>
    private void connection_release_mode_auto()
    {
        //with conversation and "connection.release_mode" "auto"(AfterTransaction)
        //forcing "auto" by reflection.
        Settings settings = ((SessionFactoryImpl)this.SessionFactory).Settings;
        ConnectionReleaseMode connReleaseModeOriginal = settings.ConnectionReleaseMode;

        this.setConnectionReleaseModeByReflection(settings, ConnectionReleaseMode.AfterTransaction);

        //((SessionFactoryImpl)this.sessionFactory).Settings.ConnectionReleaseMode = ConnectionReleaseMode.AfterTransaction;
        ConnectionCreationTrackingDbProvider.Count = 0;
        this.Conversation.StartResumeConversation();
        ISession     sessionA  = this.SessionFactory.GetCurrentSession();
        SPCDetailEnt detailEnt = sessionA.Get <SPCDetailEnt>(1);

        Assert.AreEqual(1, ConnectionCreationTrackingDbProvider.Count, "ConnectionCreationTrackingDbProvider.Count");

        SessionScopeSettings sessionScopeSettings = new SessionScopeSettings(this.sessionFactory);

        sessionScopeSettings.SingleSession = true;
        SPCMasterEnt masterEnt;

        using (new SessionScope(sessionScopeSettings, false))
        {
            ISession sessionB = this.SessionFactory.GetCurrentSession();

            masterEnt = sessionB.Get <SPCMasterEnt>(1);
            Assert.AreEqual(2, ConnectionCreationTrackingDbProvider.Count, "ConnectionCreationTrackingDbProvider.Count");

            Assert.AreSame(sessionA, sessionB, "sessionA, sessionB");
        }

        SPCMasterEnt masterEnt2 = sessionA.Get <SPCMasterEnt>(2);

        Assert.AreEqual(3, ConnectionCreationTrackingDbProvider.Count, "ConnectionCreationTrackingDbProvider.Count");
        Assert.AreEqual(1, masterEnt2.SPCDetailEntList.Count, "masterEnt2.SPCDetailEntList.Count");
        Assert.AreEqual(4, ConnectionCreationTrackingDbProvider.Count, "ConnectionCreationTrackingDbProvider.Count");

        SPCMasterEnt masterEnt3 = sessionA.Get <SPCMasterEnt>(3);

        Assert.AreEqual(5, ConnectionCreationTrackingDbProvider.Count, "ConnectionCreationTrackingDbProvider.Count");
        Assert.AreEqual(1, masterEnt3.SPCDetailEntList.Count, "masterEnt3.SPCDetailEntList.Count");
        Assert.AreEqual(6, ConnectionCreationTrackingDbProvider.Count, "ConnectionCreationTrackingDbProvider.Count");


        //Renew the conversation.
        this.Conversation.EndConversation();
        this.Conversation.ConversationManager.FreeEnded();
        this.Conversation = (IConversationState)this.applicationContext.GetObject("convConnectionReleaseModeIssue");

        this.setConnectionReleaseModeByReflection(settings, connReleaseModeOriginal);
    }
Example #3
0
    private void participatingHibernateNotAlowed()
    {
        Regex msgErrorRx = new Regex(".*Participating.*Hibernate.*NOT.*ALLOWED.*");

        try
        {
            //No raise
            this.ConversationA.StartResumeConversation();
            ISession session = this.SessionFactory.GetCurrentSession();
            this.ConversationManager.FreeEnded();
            this.ConversationManager.PauseConversations();
            this.Session["testResult"] = "OK";
        }
        finally
        {
            this.ConversationManager.FreeEnded();
            this.ConversationManager.PauseConversations();
        }

        try
        {
            //Raise
            this.ConversationA.StartResumeConversation();
            this.ConversationManager.FreeEnded();
            this.ConversationManager.PauseConversations();

            SessionScopeSettings sessionScopeSettings = new SessionScopeSettings(this.sessionFactory);
            sessionScopeSettings.SingleSession = true;
            using (new SessionScope(sessionScopeSettings, true))
            {
                ISession session = this.SessionFactory.GetCurrentSession();
                this.ConversationA.StartResumeConversation();
            }
            throw new Exception("NOT OK: No raise for 'this.ConversationA.StartResumeConversation()'");
        }
        catch (InvalidOperationException ioe)
        {
            if (msgErrorRx.IsMatch(ioe.Message))
            {
                this.Session["testResult"] = "OK";
            }
            else
            {
                throw new Exception("NOT OK " + ioe.Message);
            }
        }
        finally
        {
            this.ConversationManager.FreeEnded();
            this.ConversationManager.PauseConversations();
        }
    }