Hola Juan,

Las transacciones deberian iniciarse en el punto de acceso a tu logica de
negocio, puede ser sobre una accion de MVC, en un modulo per request en una
pagina o en un webservice, etc.

Es alli donde debes iniciar transaccion y no en el un metodo de tu capa de
negocio, a menos que esa capa sea lo que se llama fachada de servicios. Si
este fuera el caso, no deberias llamar a otro metodo de la capa de servicios
desde dentro de tu capa de servicios.

Entonces, nunca tendrias sessiones/transacciones anidadas.

Se entiende?

----------------------------------
Carlos Peix

2011/2/17 Juan Cuello <[email protected]>

> 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

-- 
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