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 <http://code.google.com/p/unhaddins/source/browse/trunk/uNhAddIns/uNhAddIns/SessionEasier/SessionFactoryProvider.cs>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
NHSessionWebModule.cs
Description: Binary data
