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

Responder a