我有一个运行 Burrow 的网站,我也想将它用于 Quartz 工作。
问题是我希望他们不共享任何状态。Quartz 作业在每个自己的线程中运行,而 Mvc 框架在每个请求结束时关闭工作区。理想情况下,mvc 应该有它自己的会话,并且每个作业都应该有它自己的会话。
我在这里有什么可能性?
PS:顺便说一句,我对 Quartz、Burrow 和 MVC 很陌生,所以我可能缺少一些非常重要的知识:|
我有一个运行 Burrow 的网站,我也想将它用于 Quartz 工作。
问题是我希望他们不共享任何状态。Quartz 作业在每个自己的线程中运行,而 Mvc 框架在每个请求结束时关闭工作区。理想情况下,mvc 应该有它自己的会话,并且每个作业都应该有它自己的会话。
我在这里有什么可能性?
PS:顺便说一句,我对 Quartz、Burrow 和 MVC 很陌生,所以我可能缺少一些非常重要的知识:|
我尝试了一种简单的天真方式,至少目前看来可行。我在这里做的有什么根本性的错误吗?当线程退出时,这些变量会被垃圾回收吗?
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;
}
}
}