/// <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); }
/// <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); }
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(); } }