Yo suelo cheque si la session esta abierta y hay transaction activa...por si
a alguien se le dio por commitear por su cuenta...

Ademas faltaria el tema de multisession, pero bueno, no se como lo trabajas
vos eso, en uNhAddins recorremos todas las session factories del
SessionFactoryProvider.

Para una sola session a mi gusto esta lo mas bien.

Gustavo.

2010/4/6 Nelo Pauselli <[email protected]>

> Listo... les dejo el código por si alguien mas lo necesita y para que
> lo critiquen (así lo mejoramos)
>
> public class NHibernateSessionPerActionAttribute : ActionFilterAttribute
> {
>        private readonly ISessionFactory sessionFactory;
>
>        public NHibernateSessionPerActionAttribute()
>        {
>                sessionFactory =
> ServiceLocator.Current.GetInstance<ISessionFactory>();
>        }
>
>        public override void OnActionExecuting(ActionExecutingContext
> filterContext)
>        {
>                base.OnActionExecuting(filterContext);
>                sessionFactory.GetCurrentSession().BeginTransaction();
>       }
>
>        public override void OnActionExecuted(ActionExecutedContext
> filterContext)
>        {
>                var session = sessionFactory.GetCurrentSession();
>                try
>                {
>                        session.Transaction.Commit();
>                }
>                catch (Exception)
>                {
>                        session.Transaction.Rollback();
>                        throw;
>                }
>                finally
>                {
>                        session.Dispose();
>                }
>                base.OnActionExecuted(filterContext);
>        }
> }
>
>
> 2010/3/23 Fabio Maulo <[email protected]>:
> > En MVC hacelo con ActionFilter
> >
> > El 23 de marzo de 2010 18:59, Nelo Pauselli <[email protected]>
> > escribió:
> >>
> >> Bueno... quizás se podría hacer en unhaddins que la estrategia para
> >> determinar si el request debe o no debe tener una session (y
> >> transaction) sea por default la que hay ahora pero que sea posible
> >> configurarle otra... digo... no se... ¿que piensan los que hacen
> >> unhaddins?.... si quieren puedo hacerlo y mandar el patch y ven si les
> >> gusta.
> >>
> >> Nelo
> >>
> >> 2010/3/23 Gustavo Ringel <[email protected]>:
> >> > Cuando tuve el mismo problema y deje de chequear eso porque en
> >> > definitiva no
> >> > lo necesitaba, tenia el mismo problema de que el handler llegaba como
> >> > null.
> >> > Gustavo.
> >> > 2010/3/23 Diego Jancic <[email protected]>
> >> >>
> >> >> Ea raro lo ultimo que decís... El HttpContezt.Current.Handler debería
> >> >> ser
> >> >> del tipo de la página que se esta ejecutando... En realidad del tipo
> >> >> autogenerado por asp.net cuando compila el aspx...
> >> >> No estoy en una pc como para probarlo, pero definitivamente hay
> >> >> otros...
> >> >> Si queres abrí el machine.config y ahí están todos...
> >> >> Salu2
> >> >>
> >> >> On 23/03/2010, at 18:17, "José F. Romaniello" <
> [email protected]>
> >> >> wrote:
> >> >>
> >> >> Lo que pasa es que mirando este código:
> >> >> return context != null && context.Handler != null &&
> >> >> !(context.Handler is AssemblyResourceLoader) && !(context.Handler is
> >> >> DefaultHttpHandler);
> >> >>
> >> >> Llego a esta conclusión:
> >> >>
> >> >> Para que el modulo cree la sesión y transacción, el handler del
> request
> >> >> tiene que ser distinto de nulo, no tiene que ser
> >> >> AssemblyResourceLoader, y
> >> >> no tiene que ser DefaultHttpHandler.... La pregunta vendría a ser
> "que
> >> >> corno
> >> >> tiene que ser?"...
> >> >>
> >> >> En una aplicación asp.net desde cero, en los request comunes a mis
> >> >> páginas
> >> >> Handler llega con null.
> >> >>
> >> >> Y tampoco hay un test de esto lo cual me parece raro.
> >> >>
> >> >> El 23 de marzo de 2010 18:08, Diego Jancic <[email protected]>
> escribió:
> >> >>>
> >> >>> El handler lo que esta haciendo es devolver true o false según sea
> un
> >> >>> archivo estático o no... En la versión que pasaste antes se hacia la
> >> >>> diferencia mirando la extensión, en el ultimo codigo que mandaste se
> >> >>> fija
> >> >>> que httphandler de .net se usa para procesar el request, lo cual es
> >> >>> mucho
> >> >>> mejor...
> >> >>> El assemblyresourceloader, lo usan algunas librerías (ej msajax)
> para
> >> >>> enviar archivos estáticos embebidos en dlls, y el default lo que
> hace
> >> >>> es
> >> >>> mandar el archivo sin ningún tipo de procesamiento... Por ejemplo
> las
> >> >>> páginas aspx de asp.net (no mvc) usan un PageHandler...
> >> >>>
> >> >>> En fin, no se para que sirve todo esto... Ustedes sigan con la parte
> >> >>> de
> >> >>> NH =)
> >> >>>
> >> >>> On 23/03/2010, at 17:53, "José F. Romaniello" <
> [email protected]>
> >> >>> wrote:
> >> >>>
> >> >>> private static bool
> >> >>> RequestMayNeedIterationWithPersistence(HttpApplication application)
> >> >>>             {
> >> >>>                     if (application == null)
> >> >>>                     {
> >> >>>                             return false;
> >> >>>                     }
> >> >>>
> >> >>>                     HttpContext context = application.Context;
> >> >>>                     return context != null && context.Handler !=
> null
> >> >>> &&
> >> >>>                             !(context.Handler is
> >> >>> AssemblyResourceLoader) && !(context.Handler is
> >> >>> DefaultHttpHandler);
> >> >>>             }
> >> >>>
> >> >>> Yo no entiendo bien la parte del handler...
> >> >>>
> >> >>> El 23 de marzo de 2010 17:50, Fabio Maulo <[email protected]>
> >> >>> escribió:
> >> >>>>
> >> >>>> Como es la declaración de RequestMayNeedIterationWithPersistence ?
> >> >>>>
> >> >>>> El 23 de marzo de 2010 14:23, Nelo Pauselli <
> [email protected]>
> >> >>>> escribió:
> >> >>>>>
> >> >>>>> Hola gente, estoy intentando usar unhaddins para el manejo de
> >> >>>>> session
> >> >>>>> (per request) en una aplicación ASP.NET MVC, usando el module:
> >> >>>>> "uNhAddIns.Web.NHSessionWebModule" y
> >> >>>>> "uNhAddIns.Web.SessionEasier.Contexts.WebSessionContext" como
> >> >>>>> current_session_context_class
> >> >>>>>
> >> >>>>> el tema es que el module no inicia la transaccion (ni la session)
> >> >>>>> porque el método RequestMayNeedIterationWithPersistence retorna
> >> >>>>> false
> >> >>>>> ya que el context no tiene handler (=null) en el momento del
> >> >>>>> ApplicationBeginRequest. Al hacer el ApplicationEndRequest si ya
> lo
> >> >>>>> tiene al handler y es un System.Web.Mvc.MvcHandler.
> >> >>>>>
> >> >>>>> ¿alguien tiene alguna idea de que puedo estar haciendo mal?
> >> >>>>>
> >> >>>>> Gracias!
> >> >>>>>
> >> >>>>> Saludos.
> >> >>>>> Nelo.
> >> >>>>>
> >> >>>>> --
> >> >>>>> Para escribir al Grupo, hágalo a esta dirección:
> >> >>>>> [email protected]
> >> >>>>> Para más, visite:
> http://groups.google.com/group/NHibernate-Hispano
> >> >>>>>
> >> >>>>> To unsubscribe from this group, send email to
> >> >>>>> nhibernate-hispano+unsubscribegooglegroups.com or reply to this
> >> >>>>> email with
> >> >>>>> the words "REMOVE ME" as the subject.
> >> >>>>
> >> >>>>
> >> >>>>
> >> >>>> --
> >> >>>> Fabio Maulo
> >> >>>>
> >> >>>> --
> >> >>>> Para escribir al Grupo, hágalo a esta dirección:
> >> >>>> [email protected]
> >> >>>> Para más, visite:
> http://groups.google.com/group/NHibernate-Hispano
> >> >>>>
> >> >>>> To unsubscribe from this group, send email to
> >> >>>> nhibernate-hispano+unsubscribegooglegroups.com or reply to this
> email
> >> >>>> with
> >> >>>> the words "REMOVE ME" as the subject.
> >> >>>
> >> >>> --
> >> >>> Para escribir al Grupo, hágalo a esta dirección:
> >> >>> [email protected]
> >> >>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> >> >>>
> >> >>> To unsubscribe from this group, send email to
> >> >>> nhibernate-hispano+unsubscribegooglegroups.com or reply to this
> email
> >> >>> with
> >> >>> the words "REMOVE ME" as the subject.
> >> >>>
> >> >>> --
> >> >>> Para escribir al Grupo, hágalo a esta dirección:
> >> >>> [email protected]
> >> >>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> >> >>>
> >> >>> To unsubscribe from this group, send email to
> >> >>> nhibernate-hispano+unsubscribegooglegroups.com or reply to this
> email
> >> >>> with
> >> >>> the words "REMOVE ME" as the subject.
> >> >>
> >> >> --
> >> >> Para escribir al Grupo, hágalo a esta dirección:
> >> >> [email protected]
> >> >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> >> >>
> >> >> To unsubscribe from this group, send email to
> >> >> nhibernate-hispano+unsubscribegooglegroups.com or reply to this
> email
> >> >> with
> >> >> the words "REMOVE ME" as the subject.
> >> >>
> >> >> --
> >> >> Para escribir al Grupo, hágalo a esta dirección:
> >> >> [email protected]
> >> >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> >> >>
> >> >> To unsubscribe from this group, send email to
> >> >> nhibernate-hispano+unsubscribegooglegroups.com or reply to this
> email
> >> >> with
> >> >> the words "REMOVE ME" as the subject.
> >> >
> >> > --
> >> > Para escribir al Grupo, hágalo a esta dirección:
> >> > [email protected]
> >> > Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> >> >
> >> > To unsubscribe from this group, send email to
> >> > nhibernate-hispano+unsubscribegooglegroups.com or reply to this email
> >> > with
> >> > the words "REMOVE ME" as the subject.
> >> >
> >>
> >> --
> >> Para escribir al Grupo, hágalo a esta dirección:
> >> [email protected]
> >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> >>
> >> To unsubscribe from this group, send email to
> >> nhibernate-hispano+unsubscribegooglegroups.com or reply to this email
> with
> >> the words "REMOVE ME" as the subject.
> >
> >
> >
> > --
> > Fabio Maulo
> >
> > --
> > Para escribir al Grupo, hágalo a esta dirección:
> > [email protected]
> > Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> >
> > To unsubscribe from this group, send email to
> > nhibernate-hispano+unsubscribegooglegroups.com or reply to this email
> with
> > the words "REMOVE ME" as the subject.
> >
>
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a