viernes, 21 de septiembre de 2012

Ámbito en los controladores

Al igual que los servicios, nosotros podemos fijar el scope también en los controladores. Por defecto, una instancia del controlador es creada por cada petición. De hecho, todos los controladores por defecto son de ámbito "prototype", es thread-safe que quiere decir que cada petición ocurre en su propio thread.

Puedes cambiar este comportamiento de los controladores sustituyendo por uno de los ámbitos soportados:
- prototype (default): un nuevo controlador será creado por cada petición (recomendado para acciones como propiedades de closure)
- session: un controlador es creado por cada ámbito de sesión
- singleton: solamente una instancia del controlador existe (recomendado para acciones como los métodos)

Para activar uno de los ámbitos, se añade una propiedad estática llamada scope en tu controlador con uno de los ámbitos válidos, cmo por ejemplo,
static scope = "singleton"

Puedes definir la estrategia por defecto en el fichero Config.groovy con la clave grails.controllers.defaultScope, por ejemplo:
grails.controllers.defaultScope = "singleton"

NOTA: Usar los ámbitos en los controladores sabiamente. Por instancia, no recomendamos tener ninguna propiedad en un controlador singleton-scoped ya que serán compartidos por todas las peticiones. Poniendo el ámbito por defecto que no sea prototype también puede dar lugar a comportamientos inesperados si tienes controladores suministrados por plugins instalados ya que se esperan que el ámbito sea prototype.

No hay comentarios:

Publicar un comentario