La piattaforma J2EE consente di utilizzare sia un approccio di demarcazione transazione programmatico che di dichiarazione per gestire le transazioni nell'applicazione.
L'approccio programmatico è la transazione gestita dal componente e quello di demarcazione della transazione di dichiarazione è la transazione gestita dal contenitore.
L'applicazione J2EE utilizza l'interfaccia JTA javax.transaction.UserTransaction per demarcare un limite della transazione su un insieme di modifiche alla risorsa protetta in modo programmatico. Le transazioni gestite dal componente possono essere utilizzate sia nel servlet che nell'ambiente EJB. Nel caso di un EJB, si imposta l'attributo di transazione nel descrittore di distribuzione come TX_BEAN_MANAGED.
Una transazione, di solito, inizia con una chiamata UserTransaction.begin(). Quando il componente dell'applicazione è pronto per eseguire il commit delle modifiche, richiama UserTransaction.commit() per coordinare ed eseguire il commit delle modifiche. Se il componente dell'applicazione deve eseguire il rollback della transazione, richiama UserTransaction.rollback() e tutte le modifiche vengono salvate. Ad esempio:
// Richiamare la transazione utente javax.transaction.UserTransaction transaction = ejbcontext.getUserTransaction(); // Avviare la transazione transaction.begin(); // Eseguire le modifiche alle risorse protette. // Ad esempio, utilizzare l'interfaccia di interazione CCI di J2EE/CA // per inoltrare le modifiche ai sistemi EIS interaction.execute(interactionSpec, input, output); if (/* decide to commit */) { // eseguire il commit della transazione transaction.commit(); } else { /* decide to roll back */ // eseguire il rollback della transazione transaction.rollback(); }
Le transazioni gestite dal contenitore possono essere utilizzate solo nell'ambiente EJB. L'EJB specifica una transazione gestita dal contenitore in modo dichiarativo tramite l'attributo della transazione nel descrittore di distribuzione (come ad esempio TX_REQUIRED). Una transazione gestita dal contenitore viene gestita dal contenitore EJB. Il contenitore chiama i metodi appropriati (come ad esempio begin, commit o rollback) per conto del componente EJB. Questo approccio dichiarativo semplifica la programmazione delle chiamate nell'EJB.
Lettura correlata: Per ulteriori informazioni sull'architettura J2EE e le specifiche JTA, vedere http://java.sun.com/j2ee/docs.html.