代码之家  ›  专栏  ›  技术社区  ›  simendsjo

在ASP.NET MVC环境中使用石英,使用NHibernate Burrow

  •  0
  • simendsjo  · 技术社区  · 14 年前

    我有一个运行Burrow的网站,我也想用它来做石英工作。

    问题是我希望他们不要分享任何状态。Quartz作业在每个线程中运行,而MVC框架在每个请求结束时关闭工作区。 理想情况下,MVC应该有自己的会话,并且每个作业都应该有自己的会话。

    我在这里有什么可能?

    PS:我对石英、洞穴和MVC BTW很陌生,所以我可能缺少一些非常重要的知识:|

    1 回复  |  直到 14 年前
        1
  •  0
  •   simendsjo    14 年前

    我尝试了一种简单而天真的方式,至少目前看来是可行的。我在这里做的有什么根本性的错误吗?当线程退出时,这些变量会被垃圾收集吗?

    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;
            }
        }
    }