Использование Quartz в среде Asp.Net MVC с использованием NHibernate Burrow
У меня есть веб-сайт, на котором работает Burrow, и я бы хотел использовать его и для Quartz.
Дело в том, что я хочу, чтобы они не разделяли ни одно государство. Задания Quartz выполняются в каждом из собственных потоков, а среда Mvc закрывает рабочую область в конце каждого запроса. В идеале у mvc должен быть свой собственный сеанс, и у каждого задания должен быть свой собственный сеанс.
Каковы мои возможности здесь?
PS: я очень новичок в Quartz, Burrow и MVC, кстати, поэтому я, вероятно, упускаю некоторые очень важные знания:|
1 ответ
Решение
Я попробовал простой наивный способ, который, по крайней мере, пока работает. Что-то в корне не так я здесь делаю? Будут ли эти переменные собираться мусором при выходе из потока?
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;
}
}
}