Gracias Nuevamente Con respecto al codigo enviado (NHSessionWebModule), las modificaciones respectivas son las comentadas en este thread verdad
http://www.mail-archive.com/[email protected]/msg08892.html Justo aqui Fabio, tu sugieres que para asp net mvc, mejor hacerlo utilizando ActionFilterAttribute, y aqui viene un poco mi confusion cualquiera de las dos formas a)implementando IHttpModule o b)ActionFilterAttribute me lleva al mismo objetivo, implementar session per request. Entonces cual elegir ?, que gano o pierdo con cualquier opcion Saludos Edgar El día 31 de mayo de 2010 18:03, Fabio Maulo <[email protected]> escribió: > Les mando unos links para que vean donde podría estar el > SessionFactoryProvaider y como "podría" ser implementado de una forma que > permita ser configurado de otra manera (FNH, ConfORM, por codigo, por > Configuracion serializada etc.) > http://code.google.com/p/unhaddins/source/browse/trunk/uNhAddIns/uNhAddIns/SessionEasier/SessionFactoryProvider.cs > Una explicación de las posibilidades de esas interfaces/clases y de como > usarlas la encuentran acá > http://fabiomaulo.blogspot.com/2009/09/configure-sessionfactory-providers.html > Google-code NO muestra, lamentablemente, uNhAddIns.Web donde se encuentra la > implementación del WebSessionContext y del NHSessionWebModule (lo pongo en > attach para que pueda modificarlo). > > Para el uso del GuyWire > http://fabiomaulo.blogspot.com/2009/11/guywire.html > cuya implementaciones está acá > http://code.google.com/p/unhaddins/source/browse/trunk/uNhAddIns/uNhAddIns.Adapters/IGuyWire.cs > http://code.google.com/p/unhaddins/source/browse/trunk/uNhAddIns/uNhAddIns.Adapters/ApplicationConfiguration.cs > Obviamente se puede estar allí mirando ejemplos y re-escribiendo clases > pero, cuando se empieza con NH, y se necesita algo para la configuración y > manejo de sessiones es suficiente con compilar uNhAddIns y usarlo. > > > 2010/5/31 José F. Romaniello <[email protected]> >> >> >> El 31 de mayo de 2010 16:17, Edgar Ramos <[email protected]> escribió: >>> >>> Gente he revizado todo y ahora si me despliega la informacion que >>> requeria, pero vamos por pasos, la alegria se complementa con sus >>> opiniones respecto a lo siguiente >>> >>> 1.- ISessionFactory es inyectada a mis dao/repository via el >>> constructor via el fw IoC como lo comentaba en el primer post, esta es >>> la clase que utilizo para tal efecto, algo asi de sencillo, por favor >>> sus comentarios >>> >>> public class SessionFactoryProvider >>> { >>> private readonly Configuration configuration; >>> >>> public SessionFactoryProvider() { >>> >>> configuration = new Configuration(); >>> >>> configuration.Configure(); >>> >>> } >>> >>> public ISessionFactory BuildSessionFactory() { >>> >>> return configuration.BuildSessionFactory(); >>> } >>> } >> >> Si, si haces algo así, registra ISessionFactory de esta forma: >> >> container.Register(Component.For<ISessionFactory>().Instance(new SessionFactoryProvider().BuildSessionFactory()); >> recorda que el build session factory es muy costoso, y solo debería >> ocurrir 1 sola vez en el ciclo de vida de tu aplicación. >> >>> >>> 2.- Con Session per Request, al no hacer un bind de la session en el >>> context, recibi un mensaje como el siguiente no hay ninguna sesión >>> conectada al contexto actual, asi que la clase que hace esto posible >>> es la siguiente >>> >>> public class NHibernateCurrentSessionWebModule : IHttpModule >>> { >>> #region Miembros de IHttpModule >>> >>> public void Dispose() { >>> } >>> >>> public void Init(HttpApplication context) { >>> context.BeginRequest += new >>> EventHandler(Application_BeginRequest); >>> context.EndRequest += new >>> EventHandler(Application_EndRequest); >>> } >>> >>> #endregion >>> >>> private void Application_BeginRequest(object sender, EventArgs e) >>> { >>> ISession session = >>> ServiceLocator.Current.GetInstance<ISessionFactory>().OpenSession(); >>> session.BeginTransaction(); >>> CurrentSessionContext.Bind(session); >>> } >>> >>> private void Application_EndRequest(object sender, EventArgs e) { >>> >>> ISession session = CurrentSessionContext.Unbind( >>> ServiceLocator.Current.GetInstance<ISessionFactory>()); >>> >>> if (session != null) >>> try { >>> session.Transaction.Commit(); >>> } >>> catch (Exception) { >>> session.Transaction.Rollback(); >>> throw; >>> } >>> finally { >>> session.Close(); >>> } >>> } >>> } >>> >>> Esto tiene su respectiva configuracion en el Web.Config en la seccion >>> <httpModules> >>> >> >> Hay algo ahi que no me gusta, me parece que tendrías que >> 1- usar WebSessionContext.Bind( ) y WebSessionContext.UnBind(), >> 2- Acordate de poner en tu hibernate.cfg.xml esta propiedad: >> >> <property name="current_session_context_class">web</property> >> >> 3-podes evitar abrir session en algunos, request.. por ejemplo cuando el >> request es solamente por una imagen. >> >>> >>> 3.- Verifique que en el archivo hibernate.cfg.xml, me faltaba lo >>> siguiente <mapping assembly="MM.Persistence.NH"/> >> >> ok >> >>> >>> 4.- Las clases expuestas aqui han sido creadas y configuradas en un >>> assembly especifico, (Infraestructure) MM.MM.Bootstrapper (sigue el >>> ejemplo de ChinookWP y GuyWire ), la pregunta que se me plantea es, al >>> ser este el lugar que cablea toda mi aplicacion, deben estar aqui >>> estas clases ?, o deben estar en otro assembly no se, por ejemplo que >>> la clase SessionFactoryProvider deba estar en el assembly donde estan >>> mis mappings, aqui tambien se encuentran las implementaciones de mis >>> dao/repository >> >> Con respecto a SessionFactoryProvider, me suena mas a algo de >> infrastructura, pero no soy contundente con eso. Tampoco le veo mucho >> sentido a eso, podría ser parte del mismo "configurador" o installer de >> nhibernate. >> >>> >>> Hay muchas mas preguntas, pero lo dejare para mas tarde >>> >>> >>> Muchas Gracias y Saludos >>> >>> >>> Edgar >>> >>> >>> >>> >>> El día 31 de mayo de 2010 10:31, José F. Romaniello >>> <[email protected]> escribió: >>> > Que disculpa ni disculpa! >>> > Todos los que participan en este foro quieren ayudar, y están para >>> > resolver >>> > justamente este tipo de inconvenientes que tiene la gente. Así que >>> > cualquier >>> > cosa que necesites mantenemos al tanto >>> > BTW; felicitaciones por la iniciativa de empezar un blog! >>> > El 31 de mayo de 2010 11:59, Edgar Ramos <[email protected]> >>> > escribió: >>> >> >>> >> Gracias a todos por la ayuda >>> >> >>> >> Estoy reaciendo el codigo nuevamente, José ya lo termino y vuelvo a >>> >> postear, estaba disgustado conmigo mismo frente a la frustración, esto >>> >> debe ser tan sencillo para muchos pero complicado para mi, mas cuando >>> >> le he tomado cariño a nh y a todo lo que se le relaciona. >>> >> >>> >> Quiero ser bueno en desarrollo y quiero aprender a utilizar bien nh >>> >> para poder ayudar a gente que debe estar en mi mismo nivel, hasta ya >>> >> me estoy animando abrirme un blog e ir comentando mis alegrias y >>> >> penurias >>> >> >>> >> saludos y disculpad mis comentarios >>> >> >>> >> Edgar >>> >> >>> >> >>> >> El día 31 de mayo de 2010 09:49, José F. Romaniello >>> >> <[email protected]> escribió: >>> >> > Bueno hay algo que me parece raro desde el vamos, y es que si >>> >> > realmente >>> >> > tuvieras un problema con el patrón session per request... no >>> >> > devolvería >>> >> > "count =0 " si no que te daría un error de que no hay ninguna sesión >>> >> > conectada al contexto actual. >>> >> > No obstante; >>> >> > 1-podrías mostrarnos tu clase "NHibernateCurrentSessionWebModule" >>> >> > 2-podrías mostrarnos el archivo hibernate.cfg.xml >>> >> > 3-Si pones un punto de interrupción, en el repositorio, justo cuando >>> >> > pedis >>> >> > la current sesión, obtenes algo de ese metodo?, obtenes una >>> >> > ISession? >>> >> > saludos >>> >> > >>> >> > -- >>> >> > 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 >>> > >>> > -- >>> > 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 >> >> -- >> Para escribir al Grupo, hágalo a esta dirección: >> [email protected] >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano > > > -- > 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 -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
