Juan, el código que escribí no es a nivel de DAO, es conceptual, no está separado en componentes porque cada quien tendrá su manera de administrar la session y las transacciones. No es para hacer copy & paste.
respecto a "cuando NH decide grabar porque tiene grabaciones pendientes y al hacer una consulta graba" eso está contemplado por el ciclo de vida de la session y de la transacción, en este ejemplo los using (...), pero posiblemente en tu arquitectura lo tengas de otra manera (o estés atado a nh hasta las....) desde cuando se hace el session.Dispose (final del using) no hay opción de un update, insert, delete pendiente... y espero que tampoco después del Commit o Rollback de la transacción... este es un warning para el FlushMode en Auto (y este warn que te digo me hace revisar unas cosas que hice hace poco) Tampoco es la única manera, solo es la que utilizaría yo. No te olvides de descartar la session que lanzó la exception. saludos nelo. 2011/2/4 Fabio Maulo <[email protected]>: > ah... en lugar que 'virtual' va 'override' (estoy casi mas acostumbrado a > ver esas cosas desde adentro que de afuera jajajaja) > > 2011/2/4 Fabio Maulo <[email protected]> >> >> [Serializable] >> public class YourFlushListener : DefaultFlushEventListener >> { >> public virtual void OnFlush(FlushEvent @event) >> { >> try >> { >> base.OnFlush(@event); >> } >> catch (StaleStateException ex) >> { >> throw new DataConcurrencyException(ex.Message, ex); >> } >> } >> } >> >> 2011/2/4 Juan Cuello <[email protected]> >>> >>> Hola a todos, >>> >>> Debido a que estamos desarrollando un proyecto con arquitectura >>> desacoplada, nos encontramos con un problema en la gestión de >>> concurrencia. El problema es que cuando salta una excepción de >>> concurrencia StaleStateException, queremos automatizar que en realidad >>> se lance una excepción de nuestro framework. >>> >>> La idea que he tenido es agregar un listener que herede por ejemplo de >>> DefaultUpdateEventListener para hacer lo siguiente: >>> >>> protected override object >>> PerformSaveOrUpdate(NHibernate.Event.SaveOrUpdateEvent @event) >>> { >>> try >>> { >>> return base.PerformSaveOrUpdate(@event); >>> } >>> catch (StaleStateException ex) >>> { >>> throw new DataConcurrencyException(ex.Message, ex); >>> } >>> } >>> >>> Para la concurrencia, que sólo saltaría en updates (lógicamente), de >>> qué clase debo heredar: DefaultUpdateEventListener, >>> DefaultSaveEventListener, DefaultSaveOrUpdateEventListener, >>> DefaultSaveOrUpdateCopyEventListener????? >>> >>> A alguien se le ocurre una forma mejor de hacer esto? >>> >>> 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 >> >> >> -- >> Fabio Maulo >> > > > > -- > 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 -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
