2012-06-19 14 views

Respuesta

18

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 clase
  • request - Se creará un nuevo servicio por solicitud
  • flash - Se creará un nuevo servicio para la petición actual y el próximo única
  • flow - En Web fluye existirá el servicio para el alcance del flujo
  • conversation - En Web fluye existirá el servicio para el alcance de la conversación es decir, un flujo de raíz y sus sub flujos
  • session - Un servicio se crea para el alcance de una sesión de usuario
  • singleton (por defecto) - Sólo una instancia del servicio siempre existe

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

+0

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

+1

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

Cuestiones relacionadas