Question

J'ai un site Web en cours d'exécution Burrow, et je voudrais l'utiliser pour les travaux Quartz ainsi.

La chose est que je veux qu'ils ne partagent aucun Etat. Les emplois de quartz est en cours d'exécution dans chaque propres fils alors que le cadre Mvc ferme l'espace de travail à la fin de chaque demande. Idéalement, mvc devrait avoir sa propre session, et chaque travail devrait avoir sa propre session.

Quelles sont mes possibilités ici?

PS: Je suis très nouveau à quartz, Burrow et MVC BTW, donc je manque probablement quelques connaissances très essentiel: |

Était-ce utile?

La solution

J'ai essayé une façon simple naïve que au moins semblent fonctionner pour l'instant. Y at-il quelque chose de fondamentalement mauvais que je fais ici? Est-ce que ces variables soient nettoyés quand un sort de fil?

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;
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top