2010-06-08 30 views
0

我有一個運行Burrow的網站,我也希望將它用於Quartz作業。在使用NHibernate Burrow的Asp.Net MVC環境中使用Quartz

事情是我希望他們不要分享任何狀態。 Quartz作業在每個線程中運行,而Mvc框架在每個請求結束時關閉Workspace。 理想情況下,mvc應該有自己的會話,每個工作都應該有自己的會話。

這裏有什麼可能嗎? PS:我很新的Quartz,Burrow和MVC順便說一句,所以我可能錯過了一些非常基本的知識:

+0

我發現ThreadStaticSessionContext在NHibernate的,但這似乎只支持一個SessionFactory的(有計劃的升級迫使我用幾個這是我開始與洞穴擺在首位的原因之一) 另一個問題是如何讓Burrow使用這個和web上下文.. – simendsjo 2010-06-08 12:01:46

回答

0

我嘗試了一種簡單樸素的方式,至少似乎現在工作。我在這裏做了什麼根本錯誤?當線程退出時,這些變量是否會被垃圾收集?

public static class SessionManager 
{ 
    [ThreadStatic] 
    private static IDictionary<ISessionFactory, ISession> _sessions; 

    public static ISession GetSession(Type type) 
    { 
     var burrow = new BurrowFramework(); 

     if (burrow.WorkSpaceIsReady) 
     { 
      return burrow.GetSession(type); 
     } 
     else 
     { 
      if (_sessions == null) 
      { 
       _sessions = new Dictionary<ISessionFactory, ISession>(); 
      } 

      var factory = burrow.GetSessionFactory(type); 
      if (!_sessions.ContainsKey(factory)) 
      { 
       _sessions[factory] = null; 
      } 

      var session = _sessions[factory]; 
      if (session == null || !session.IsOpen) 
      { 
       session = _sessions[factory] = factory.OpenSession(); 
      } 

      return session; 
     } 
    } 
} 
相關問題