patrones:osiv
Diferencias
Muestra las diferencias entre dos versiones de la página.
— | patrones:osiv [2023/04/07 21:26] (actual) – creado - editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
+ | ====== Open Session In View ====== | ||
+ | Este patrón está muy ligado a Hibernate y pretende solucionar el problema que genera la excepción [[unidades: | ||
+ | Ya explicamos en su momento que no es posible cargar objetos de forma //lazy// si la sesión ya la hemos cerrado. Como ya dijimos puede parecer extraño que nuestro código haga éso pero hay un caso muy típico donde realmente ocurre. A continuación pasamos a explicarlo: | ||
+ | |||
+ | Supongamos que tenemos un objeto [[patrones: | ||
+ | |||
+ | Una solución sencilla es que el objeto DAO ni cree ni cierre la sesión sino que se haga //desde fuera//. | ||
+ | |||
+ | El problema a esta solución es que en muchos frameworks se cierra la sesión justo antes de ejecutar el código de la presentación ,como en una app web que es cuando estamos en la página JSP. En la capa de presentación ya no deberíamos hacer accesos a la base de datos, aunque sea debido a la carga perezosa, así que se cierra la sesión antes de llegar a la página JSP. | ||
+ | |||
+ | ¿Qué es entonces el patrón Open Session In View? | ||
+ | |||
+ | Pues con la explicación que acabamos de dar y el nombre del patrón ya debería estar claro. Es mantener abierta la sesión de Hibernate en la vista (en la página JSP). De esa forma podremos hacer cargas //lazy// en las páginas JSP evitando la excepción <javadoc h41> | ||
+ | |||
+ | ===== Inconvenientes ===== | ||
+ | |||
+ | Este patrón tiene ciertos inconvenientes lo que ha llevado a algunos a marcarlo como un antipatrón: | ||
+ | * Desde la capa de presentación se accede a la base de datos. | ||
+ | * En la capa de presentación se pueden producir excepciones de acceso a base de datos. | ||
+ | * Se pueden producir problemas de [[unidades: | ||
+ | |||
+ | ===== Ventajas ===== | ||
+ | Entonces, ¿qué ventajas nos ofrece el patrón Open Session In View? | ||
+ | |||
+ | El problema se produce principalmente con las cargas lazy. Si las evitamos no necesitamos este patrón. Pero a cambio deberemos | ||
+ | |||
+ | ¿Debemos entonces usar el patrón Open Session In View? | ||
+ | Pues como todo en esta vida tiene sus ventajas en inconvenientes y ya depende de nosotros evaluar en cada caso si merece la pena usarlo. | ||
+ | |||
+ | ===== Referencias ===== | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * <javadoc s31> | ||
+ | * [[http:// |