Использование Quartz в среде Asp.Net MVC с использованием NHibernate Burrow - PullRequest
0 голосов
/ 08 июня 2010

У меня есть веб-сайт, на котором работает Burrow, и я бы хотел использовать его и для Quartz.

Дело в том, что я хочу, чтобы они не разделяли ни одно государство. Задания Quartz выполняются в каждом из собственных потоков, а среда Mvc закрывает рабочую область в конце каждого запроса. В идеале у mvc должен быть свой собственный сеанс, а у каждого задания должен быть свой собственный сеанс.

Каковы мои возможности здесь?

PS: Я новичок в Quartz, Burrow и MVC, так что, наверное, мне не хватает некоторых очень важных знаний: |

1 Ответ

0 голосов
/ 08 июня 2010

Я попробовал простой наивный способ, который, по крайней мере, пока работает. Что-то в корне не так, что я здесь делаю? Будут ли эти переменные собираться мусором при выходе из потока?

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