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