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: |

War es hilfreich?

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;
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top