Hola a todos, Introducción:
Mi pregunta va a nivel de concepto de gestión de sesiones en NH. Dentro de un framework que se ha desarrollado, el cual usa NH como ORM, se realiza la gestión de sesiones mediante interceptors (es una de las formas, hay session-per-request, per action en mvc, interceptors en el controlador de mvc, etc). Basta con "enchufarle" un interceptor al método y automáticamente, si se provoca una excepción se hace rollback (en el interceptor) o commit si todo OK. La sesión-transacción que se inicia se guarda en el contexto de aplicación (un diccionario de sesiones-transacciones en HttpContext para web, OperationContext para WCF y CallContent para lo demás). De esta forma evitas que el programador tenga que hacer gestiones de sesiones de ninguna forma. Si la aplicación trabaja con varios orígenes de datos a la vez, cada método cogerá la sesión que tenga disponible para su origen de datos (si la tiene, o la abre). Tema que ocupa: Se ha desarrollado la gestión de sesiones de tal forma que, si un método que abre una sesión llama a otro método que también tiene el interceptor para la gestión de sesiones, este segundo método reutiliza la sesión-transacción existente, no abre una nueva. Si el segundo método hace commit-rollback, en realidad no hace nada porque no es el que inició la sesión (si la inició sí que hace commit- rollback). La idea era que un método de negocio pueda funcionar por sí mismo y a la vez pueda ser llamado por otro método de negocio sin problemas de sesión evitando abrir dos sesiones para el mismo origen de datos. Los daos/repositorios recogen la sesión del contexto. Creo que se cumple el concepto de UnitOfWork de esta forma. Pregunta: ¿Alguien ve algún problema en realizar la gestión de sesiones de esta forma? Me preocupa no hacerlo de forma correcta... Muchas gracias -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
