Pregunta

Tengo un sitio web que ejecuta Burrow, y también me gustaría usarlo para trabajos de cuarzo.

La cuestión es que quiero que no compartan ningún estado. Los trabajos de cuarzo se ejecutan en cada propio hilos, mientras que el marco MVC cierra el espacio de trabajo al final de cada solicitud. Idealmente, MVC debería tener su propia sesión, y cada trabajo debe tener su propia sesión.

¿Cuáles son mis posibilidades aquí?

PD: Soy muy nuevo en Quartz, Burrow y MVC BTW, así que probablemente me falta algunos conocimientos muy esenciales: |

¿Fue útil?

Solución

Intenté una forma ingenua simple de que al menos parezca funcionar por ahora. ¿Hay algo fundamentalmente mal que esté haciendo aquí? ¿Estas variables serán recolectadas basura cuando salga un hilo?

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;
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top