在使用NHibernate Burrow的Asp.Net MVC环境中使用Quartz

时间:2010-06-08 11:04:23

标签: asp.net-mvc multithreading quartz.net nhibernate-burrow

我有一个运行Burrow的网站,我也想将它用于Quartz作业。

问题是我希望他们不分享任何国家。 Quartz作业在每个自己的线程中运行,而Mvc框架在每个请求结束时关闭Workspace。 理想情况下,mvc应该有自己的会话,每个作业都应该拥有自己的会话。

这里有什么可能性?

PS:我对Quartz,Burrow和MVC很新,所以我可能缺少一些非常重要的知识:|

1 个答案:

答案 0 :(得分: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;
        }
    }
}