Verwenden von Quartz in einer ASP.NET -MVC -Umgebung mit NhiberNate Burrow
-
24-10-2019 - |
Frage
Ich habe eine Website mit Burrow, und ich möchte sie auch für Quartz -Jobs verwenden.
Die Sache ist, dass ich möchte, dass sie keinen Zustand teilen. Die Quartz -Jobs werden in jedem eigenen Thread ausgeführt, während das MVC -Framework den Arbeitsbereich am Ende jeder Anfrage schließt. Im Idealfall sollte MVC seine eigene Sitzung abhalten, und jeder Job sollte seine eigene Sitzung haben.
Was sind meine Möglichkeiten hier?
PS: Ich bin übrigens sehr neu in Quarz, Burrow und MVC, daher fehlt mir wahrscheinlich ein sehr wichtiges Wissen: |
Lösung
Ich habe einen einfachen naiven Weg versucht, der zumindest vorerst zu funktionieren scheint. Gibt es etwas grundlegend falsch, das ich hier mache? Werden diese Variablen Müll gesammelt, wenn ein Faden ausgeht?
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;
}
}
}