0

J'ai un site Web qui exécute Burrow, et je voudrais également l'utiliser pour les travaux Quartz.Utilisation de Quartz dans un environnement Asp.Net MVC à l'aide de NHibernate Burrow

Le fait est que je veux qu'ils ne partagent aucun état. Les travaux Quartz s'exécutent dans chaque thread, tandis que le framework Mvc ferme l'espace de travail à la fin de chaque requête. 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 novice en matière de Quartz, Burrow et MVC, donc il me manque probablement quelques connaissances essentielles: |

+0

Je trouve le ThreadStaticSessionContext dans NHibernate, mais cela semble soutenir qu'une seule SessionFactory (une mise à jour planifiée me force à utiliser plusieurs qui est l'une des raisons pour lesquelles j'ai commencé avec tanière en premier lieu) Une autre question est comment faire Burrow utiliser à la fois ceci et le contexte web .. – simendsjo

Répondre

0

J'ai essayé un moyen naïf simple qui semble au moins fonctionner pour l'instant. Y a-t-il quelque chose de fondamentalement mauvais que je fais ici? Ces variables seront-elles collectées lors de la sortie d'un thread?

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; 
     } 
    } 
} 
Questions connexes