Vine a saber que la clase de servicio de Grails es de tipo Singleton. ¿Por qué motivo, las clases de servicio se definen como Singleton?¿Por qué la clase de servicio Grails es Singleton?
Gracias de antemano.
Vine a saber que la clase de servicio de Grails es de tipo Singleton. ¿Por qué motivo, las clases de servicio se definen como Singleton?¿Por qué la clase de servicio Grails es Singleton?
Gracias de antemano.
servicios Grails pueden ser used with different scopes, no simplementesingleton
, añadiendo algo como esto a la clase:
static scope = "flow"
Del manual:
prototype
- Se crea un nuevo servicio cada tiempo en que se inyecta en otra claserequest
- Se creará un nuevo servicio por solicitudflash
- Se creará un nuevo servicio para la petición actual y el próximo únicaflow
- En Web fluye existirá el servicio para el alcance del flujoconversation
- En Web fluye existirá el servicio para el alcance de la conversación es decir, un flujo de raíz y sus sub flujossession
- Un servicio se crea para el alcance de una sesión de usuariosingleton
(por defecto) - Sólo una instancia del servicio siempre existeLa razón principal de elegir singleton
ya que el valor predeterminado es para un mejor rendimiento, tanto en uso reducido de memoria (solo una instancia está disponible), como en tiempo de proceso reducido, porque elimina la sobrecarga de crear un objeto nuevo.
Ahora tengo una duda. Digamos que tengo un servicio llamado 'm1', que admite transacciones. Ahora, dos usuarios acceden a 'm1' simultáneamente, siempre que' service' sea singleton, ¿cómo maneja dos usuarios simultáneamente junto con soporte de transacción? –
Hay una [sección completa en el manual de transacciones] (http://grails.org/doc/latest/guide/services.html#declarativeTransactions). Las transacciones se manejan durante las llamadas a métodos, por lo que el alcance no entra en ellas (siempre que no se almacene estado en el servicio). – OverZealous