2009-11-25 10 views
5

Nel manuale di Spring Framework si afferma che per una PROPAGATION_REQUIRES_NEW la transazione corrente verrà sospesa.Come funziona la sospensione delle transazioni in MySQL?

Che cosa significa "transazione sospesa"? Il timer per il timeout interrompe il conteggio sulla transazione corrente? Quali sono le implicazioni effettive di tale sospensione?

Grazie,

Asaf

risposta

4

Non significa nulla di speciale, una transazione sospesa è solo una transazione che è temporaneamente non utilizzati per inserimenti, aggiornamenti, commit o rollback, perché una nuova la transazione deve essere creata a causa delle proprietà di propagazione specificate e solo una transazione può essere attiva allo stesso tempo.

Fondamentalmente ci sono due modelli di transazione: il modello nidificato e piatto. Nel modello annidato, se si avvia una transazione e ne è necessaria un'altra, la prima rimane attiva, ovvero la seconda verrà annidata all'interno della parent, e così via. D'altra parte, nel modello piatto, la prima transazione sarà sospesa, cioè non la useremo finché non sarà stata completata la nuova.

per quanto ne so il modello piatto viene utilizzato quasi esclusivamente (compresa la primavera e la specifica EJB pure), dal momento che è molto più facile da implementare: c'è solo una transazione attiva in un dato momento, quindi è facile decidere cosa fare in caso di un rollback, per esempio, a causa di un'eccezione. Ancora più importante, il database sottostante deve supportarlo se hai bisogno del modello annidato, quindi in questo caso il modello flat è solo il denominatore comune .

Problemi correlati