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

Attachment: NHSessionWebModule.cs
Description: Binary data

Responder a