質問

私はバロウを実行しているウェブサイトを持っています、そして私はそれをQuartzの仕事にも使いたいです。

問題は、私が彼らにどんな状態も共有しないことを望んでいるということです。 Quartzジョブは各スレッドで実行され、MVCフレームワークはすべてのリクエストの最後にワークスペースを閉じます。理想的には、MVCには独自のセッションが必要であり、各ジョブには独自のセッションが必要です。

ここでの私の可能性は何ですか?

PS:私はクォーツ、バロウ、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;
        }
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top