Ingegneria del software Modulo 3 – Tecniche d’implementazione Unità didattica 2 -EJB Ernesto Damiani Università degli Studi di Milano Lezione 6 – Gestione dichiarativa delle transazioni
Gestione dichiarativa delle transazioni Le responsabilità di gestione delle transazioni sono delegate al container EJB definisce i seguenti valori per l’attributo transazionale – TX_NOT_SUPPORTED – TX_BEAN_MANAGED – TX_REQUIRED – TX_SUPPORTS – TX_REQUIRES_NEW – TX_MANDATORY
TX_NOT_SUPPORTED Il container sospende l’associazione all’ambito transazionale prima di delegare la chiamata del metodo all’oggetto EJB Quando la chiamata del metodo all’oggetto EJB è completata, il container riprende l’associazione sospesa
TX_BEAN_MANAGED I limiti transazionali possono essere demarcati da un bean con l’attributo TX_BEAN_MANAGED usando ax.jtx.UserTransaction
TX_REQUIRED Se un client invoca un oggetto EJB che ha l’attributo TX_REQUIRED possono accadere due cose: – Se il client è associato a un contesto transazionale, il container invoca il metodo di EJB nel contesto transazionale del client – Se il client non è associato a un contesto transazionale, il container inizia una nuova transazione prima di delegare una chiamata del metodo all’oggetto EJB e tenta di confermare la transazione quando la chiamata è completata
TX_SUPPORTS Un oggetto EJB con TX_SUPPORTS è invocato nell’ambito transazionale del client se il client ne ha uno, altrimenti viene invocato il bean senza ambito transazionale Il contesto transazionale viene passato alle risorse che vengono invocate dall’oggetto EJB
TX_REQUIRES_NEW Quando viene invocato un bean con TX_REQUIRES_NEW, il container inizia una nuova transazione Delega una chiamata del metodo all’oggetto EJB Poi cerca di confermare la transazione quando la chiamata del metodo è completata Il container esegue il protocollo di conferma prima che il risultato del metodo sia inviato al client
TX_MANDATORY Un oggetto EJB con attributo TX_MANDATORY viene invocato nell’ambito di una transazione del client Il contesto transazionale del client viene passato alle risorse che vengono invocate dall’oggetto EJB Se il client tenta di invocare l’oggetto EJB senza il contesto transazionale, il container invia l’eccezione TransactionRequired al client
Livelli di isolamento delle transazione Livelli di isolamento possibili: – TRANSACTION_READ_UNCOMMITTED – TRANSACTION_READ_ COMMITTED – TRANSACTION_REPEATABLE_ READ – TRANSACTION_SERIALIZABLE
Limiti del deployment descriptor TX_BEEEN_MANAGED non deve essere usato insieme ad altri valori degli attributi transazionali – Un container dovrebbe individuare l’errore e avvisare il deployer FINE