transactions introduction - unitrentolatemar.science.unitn.it/segue_userfiles/2010web...for...

46
Introduction Transactions

Upload: others

Post on 28-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Introduction

Transactions

Page 2: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Bank

package transactions_1;import java.sql.*;public class Bank {

public Connection getConnection(String jdbcDriverName, String jdbcURL) { try { Class.forName(jdbcDriverName); return DriverManager.getConnection(jdbcURL); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; }

public void releaseConnection(Connection conn) { if (conn!=null) try { conn.close(); } catch (SQLException ex) { ex.printStackTrace(); } }

1. getConnection/setConnection

Page 3: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Bank public void deposit(int account, double amount, Connection conn) throws SQLException{ String sql="UPDATE Account SET Balance = Balance + "+ amount+ "WHERE AccountId = "+account; Statement stmt=conn.createStatement(); stmt.executeQuery(sql); System.out.println("Deposited "+amount+" to account "+account); }

public void withdraw(int account, double amount, Connection conn) throws SQLException{ String sql="UPDATE Account SET Balance = Balance - "+ amount+ "WHERE AccountId = "+account; Statement stmt=conn.createStatement(); stmt.executeQuery(sql); System.out.println("Withdrew "+amount+" from account "+ account); }

2. deposit/withdraw

Page 4: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Bank

public void printBalance(Connection conn) { ResultSet rs=null; Statement stmt=null; try { stmt=conn.createStatement(); rs=stmt.executeQuery("SELECT * FROM Account"); while (rs.next()) System.out.println("Account "+rs.getInt(1)+ " has a balnce of "+rs.getDouble(2)); } catch (SQLException ex) { ex.printStackTrace(); } finally { try { if (rs!=null) rs.close(); if (stmt!=null) stmt.close(); } catch (SQLException ex) { ex.printStackTrace(); } } }

3. printBalance

Page 5: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Bank

public void transferFunds(int fromAccount, int toAccount, double amount, Connection conn){ Statement stmt=null; try { withdraw(fromAccount, amount, conn); deposit(toAccount,amount,conn); } catch (SQLException ex) { System.out.println("An error occured!"); ex.printStackTrace(); } }

4. trasferFunds

Page 6: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Bank

public static void main(String[] args) { if (args.length <3) { System.exit(1); } Connection conn=null; Bank bank = new Bank(); try { conn=bank.getConnection(args[0],args[1]); bank.transferFunds(1,2,Double.parseDouble(args[2]),conn); bank.printBalance(conn); } catch (NumberFormatException ex) { ex.printStackTrace(); } finally {bank.releaseConnection(conn);} }}

5. main

Page 7: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Bank

public void transferFunds(int fromAccount, int toAccount, double amount, Connection conn){ Statement stmt=null; try { conn.setAutoCommit(false); withdraw(fromAccount, amount, conn); deposit(toAccount,amount,conn); conn.commit(); } catch (SQLException ex) { System.out.println("An error occured!"); ex.printStackTrace(); try { conn.rollback(); } catch (SQLException e) { e.printStackTrace(); } } }

transferFunds – fixed version!

TRANSACTIO

N

TRANSACTIO

N

Page 8: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Actors

A transactional object (or transactional component) is anapplication component that is involved in a transaction.A transaction manager is responsible for managing thetransactional operations of the transactional components.A resource is a persistent storage from which you read orwrite.A resource manager manages a resource. Resourcemanagers are responsible for managing all state that ispermanent.The most popular interface for resource managers is theX/Open XA resource manager interface (a de factostandard): a deployment with heterogeneous resourcemanagers from different vendors can interoperate.

Page 9: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Distributed Systems

LocalTransactionManager A

ResourceManager A

DB A DB B1a DB B1bMessagingServer B2a

ResourceManager B2

LocalTransactionManager B

ResourceManager B1

DistributedTransaction

Manager

Page 10: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Who begins a transaction?

Who begins a transaction? Who issues either a commit or abort?This is called demarcating transactional boundaries .

There are three ways to demarcate transactions:•programmatically:

you are responsible for issuing a begin statement and either acommit or an abort statement.

•declaratively,the EJB container intercepts the request and starts up atransaction automatically on behalf of your bean.

•client-initiated.write code to start and end the transaction from the client codeoutside of your bean.

Page 11: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Programmatic vs. declarative

programmatic transactions:your bean has full control over transactionalboundaries.For instance,you can use programmatictransactions to run a series of minitransactions within a beanmethod.When using programmatic transactions,always try to completeyour transactions in the same method that you beganthem.Doing otherwise results in spaghetti code where it isdifficult to track the transactions;the performance decreasesbecause the transaction is held open longer.declarative transactions:your entire bean method must either run under atransaction or not run under a transaction.Transactions are simpler! (just declare them in the descriptor)

Page 12: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Client-initiated

Client initiated transactions:A nontransactional remote client calls an enterprise bean thatperforms its own transactions The bean succeeds in thetransaction,but the network or application server crashesbefore the result is returned to a remote client.The remoteclient would receive a Java RMI RemoteException indicating anetwork error,but would not know whether the transaction thattook place in the enterprise bean was a success or a failure.

With client-controlled transactions, if anything goeswrong,the client will know about it.The downside to client-controlled transactions is that if theclient is located far from the server, transactions are likely totake a longer time and the efficiency will suffer.

Page 13: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

ACID

Transactions

Page 14: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

The ACID PropertiesAtomicity guarantees that many operations are bundledtogether and appear as one contiguous unit of work .

Consistency guarantees that a transaction leaves the system ’sstate to be consistent after a transaction completes.

Isolation protects concurrently executing transactions fromseeing eachother ’s incomplete results.

Durability guarantees that updates to managed resources,suchas database records,survive failures. (Recoverable resourceskeep a transactional log for exactly this purpose.If the resourcecrashes,the permanent data can be reconstructed by reapplyingthe steps in the log.)

Page 15: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Lost Update

Read A

Write A

Increm. ARead A

Write A

Increm. A

DBbegin

commit

begin

commit

Page 16: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Dirty Read

Read A

Write A

Increm. A

Read A

Write A

Increm. A

DBbegin

rollback

begin

commit

begin

commit

Page 17: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Unrepeatable Read

Read A

Read A

Write A

Increm. A

DBbegin

commit

begin

commitRead A

Page 18: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Phantom Read (ghost update)

Read A

Read A

Write AA=A-1

DBbegin

commit

begin

commit

Read B Read B

Write BB=B+1

IC=A+B

IntegrityConstraint:A+B=100

Integrity constraint violated!

Page 19: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Isolation levels

ISOLATIONLEVEL

Dirty Read UnrepeatableRead

Phantom Read

READUNCOMMITTED

SI SI SI

READCOMMITTED

NO SI SI

REPEATABLEREAD

NO NO SI

SERIALIZABLE NO NO NO

Default level for manyDBMS

Page 20: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Isolation levels

BMT:you specify isolation levels with your resource manager API (such asJDBC).For example,you could call java.sql.Connection.SetTransactionIsolation(...).

CMT:there is no way to specify isolation levels in the deployment descriptor.You need to either use resource manager APIs (such as JDBC),or rely onyour container ’s tools or database ’s tools to specify isolation.

Page 21: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Isolation portability problems

Unfortunately, there is no way to specify isolation forcontainer-managed transactional beans in a portableway—you are reliant on container and database tools.

This means if you have written an application, you cannot ship thatapplication with built-in isolation. The deployer now needs to knowabout transaction isolation when he uses the container’s tools, andthe deployer might not know a whole lot about your application’stransactional behavior.

Page 22: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Pessimistic and Optimistic Concurrency Control Strategies

TIPO Dimension Concurrency Problems

Pessimistic —Your EJB locks thesource data for the entire time itneeds data, not allowing anythingelse to potentially update the datauntil it completes its transaction.

Small Systems Low Does not scale well

Optimistic - Your EJB implementsa strategy to detect whether achange has occurred to the sourcedata between the time it was readand the time it now needs to beupdated. Locks are placed on thedata only for the small periods oftime the EJB interacts with thedatabase.

Large Systems High Complexity of thecollision detectioncode

Page 23: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Transactions e EJB

Transactions

Page 24: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Transactional ModelsA flat transaction is the simplest transactional model tounderstand.A flat transaction is a series of operationsthat are performed atomically as a single unit of work .

A nested transaction allows you to embed atomic units ofwork within other units of work.The unit of work that isnested within another unit of work can roll back withoutforcing the entire transaction to roll back.(subtransactions can independently roll back withoutaffecting higher transactions in the tree)(Not currently mandated by the EJB specification)

Other models: chained transactions and sagas.(Not supported by the EJB specification)

Page 25: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

EJB Transaction Attribute Values

RequiredYou want your method to always run in a transaction.If a transaction is already running,your bean joins in on thattransaction. If no transaction is running,the EJB containerstarts one for you.

NeverYour bean cannot be involved in a transaction.If the client calls your bean in a transaction,the containerthrows an exception back to the client(java.rmi.RemoteException ifremote, javax.ejb.EJBException if local).

Page 26: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

EJB Transaction Attribute Values

SupportsThe method runs only in a transaction if the client hadone running already —it joins that transaction.If the client does not have a transaction,the bean runs with notransaction at all.

Mandatorya transaction must be already running when your beanmethod is called. If a transaction isn ’t running,javax.ejb.TransactionRequiredException is thrown back to thecaller (or javax.ejb.TransactionRequiredLocalException if theclient is local).

Page 27: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

EJB Transaction Attribute Values

NotSupportedyour bean cannot be involved in a transaction at all.For example,assume we have two enterprise beans,A andB.Let ’s assume bean A begins a transaction and then callsbean B. If bean B is using the NotSupported attribute,thetransaction that A started is suspended. None of B’soperations are transactional,such as reads/writes todatabases. When B completes,A ’s transaction is resumed.

Page 28: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

EJB Transaction Attribute Values

RequiresNew

You should use the RequiresNew attribute if you always wanta new transaction to begin when your bean is called. If atransaction is already underway when your bean is called,thattransaction is suspended during the bean invocation.

The container then launches a new transaction and delegatesthe call to the bean.The bean performs its operations andeventually completes.The container then commits or abortsthe transaction and finally resumes the old transaction. If notransaction is running when your bean is called,there isnothing to suspend or resume.

Page 29: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

EJB Transaction Attribute Values

TIPO PRECONDIZIONE POSTCONDIZIONE

Required Nessuna transazione NUOVAPRE-ESISTENTE PRE-ESISTENTE

RequiresNew Nessuna transazione NUOVAPRE-ESISTENTE NUOVA

Supports Nessuna transazione Nessuna transazionePRE-ESISTENTE PRE-ESISTENTE

Mandatory Nessuna transazione errorPRE-ESISTENTE PRE-ESISTENTE

NotSupported Nessuna transazione Nessuna transazionePRE-ESISTENTE Nessuna transazione

Never Nessuna transazione Nessuna transazionePRE-ESISTENTE error

Page 30: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

EJB Transaction Attribute Values<assembly-descriptor> <container-transaction>

<method><ejb-name>Employee</ejb-name><method-name>*</method-name>

</method><trans-attribute>Mandatory</trans-attribute>

</container-transaction> <container-transaction>

<method><ejb-name>Employee</ejb-name><method-name>setName</method-name><method-param>String</method-param>

</method><trans-attribute>Required</trans-attribute>

</container-transaction></assembly-descriptor>

Page 31: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Transactions and Session Beans

stateful session beans:it is possible that the business method that started a transactioncompletes without committing or rolling back the transaction. Insuch a case, the Container must retain the association between thetransaction and the instance across multiple client calls until theinstance commits or rolls back the transaction. When the clientinvokes the next business method, the Container must invoke thebusiness method in this transaction context.

If a stateless session bean instance starts a transaction in a businessmethod, it must commit the transaction before the business methodreturns.

Page 32: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Java Transactions

Transactions

Page 33: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Object Transaction Service

Object Management Group (OMG) developed astandardized Object Transaction Service (OTS) as anoptional CORBA service.

OTS improved on earlier transaction systems that didn ’tsupport multiple parties participating in a transaction.

OTS is a suite of well-defined interfaces that specify howtransactions can run behind the scenes —interfaces thatthe transaction manager,resource manager, andtransactional objects use to collaborate.

Page 34: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Object Transaction Service

OTS is decomposed into two parts:

The CosTransactions interfaces are the basic interfacesthat transactional objects/components, resources,resource managers, and transaction managers use tointeroperate. These interfaces ensure that anycombination of these parties is possible.

The CosTSPortability interface offers a portable way toperform transactions with many participants.

Page 35: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Java Transaction Service

Sun has split up OTS into two sub-APIs:the JavaTransaction Service (JTS)and the Java Transaction API(JTA).

The Java Transaction Service (JTS)is a Java mapping ofCORBA OTS for system-level vendors. JTS defines theinterfaces used by transaction managers and resourcemanagers behind the scenes.It is used to have various vendors ’ products interoperate.It also defines various objects passed around and used bytransaction managers and resource managers.

As an application programmer, you should not care aboutmost of OTS,and you should not care about JTS at all. Whatyou should care about is the Java Transaction API (JTA).

Page 36: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Java Transaction API

JTA consists of two sets of interfaces:

•one for X/Open XA resource managers (which you don ’tneed to worry about)

•one that we will use to support programmatic transactioncontrol: javax.transaction.UserTransaction .

Page 37: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

javax.transaction.UserTransactionMethods for Transactional Boundary Interaction

begin()Begins a new transaction.This transaction becomesassociated with the current thread.commit()Runs the two-phase commit protocol on an existingtransaction associated with the current thread. Each resourcemanager will make its updates durable

getStatus()Retrieves the status of the transaction associated with thisthread.rollback()Forces a rollback of the transaction associated with thecurrent thread.

Page 38: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

javax.transaction.UserTransactionMethods for Transactional Boundary Interaction

setRollbackOnly()Calls this to force the current transaction to roll back.This will eventually force the transaction to abort.

setTransactionTimeout(int)The transaction timeout is the maximum amount of time that atransaction can run before it ’s aborted.This is useful to avoiddeadlock situations,when precious resources are being heldby a transaction that is currently running.

Page 39: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

The javax.transaction.Status Constants

STATUS_ACTIVEA transaction is currently happening and is active.STATUS_NO_TRANSACTIONNo transaction is currently happening.STATUS_MARKED_ROLLBACK The current transactionwill eventually abort because it ’s been marked forrollback.This could be because some party calledUserTransaction.setRollbackOnly().STATUS_ROLLING_BACK The current transaction is inthe process of rolling back.STATUS_ROLLEDBACK The current transaction has beenrolled back.STATUS_UNKNOWN The status of the current transactioncannot be determined.

Page 40: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

The javax.transaction.Status Constants

STATUS_PREPARING The current transaction ispreparing to be committed (during Phase One of the two-phase commit protocol).

STATUS_PREPARED The current transaction has beenprepared to be committed (Phase One is complete).

STATUS_COMMITTING The current transaction is in theprocess of being com mitted right now (during PhaseTwo).

STATUS_COMMITTED The current transaction has beencommitted (Phase Two is complete).

Page 41: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

The javax.transaction.Status Constants

import javax.transaction.UserTransaction;…UserTransaction userTrantry { java.util.Properties env =... // Get the JNDI initial context Context ctx =new InitialContext(env); userTran=(javax.transaction.UserTransaction) ctx.lookup("java:comp/UserTransaction"); // Execute the transaction userTran.begin(); /* perform business operations */ userTran.commit();}catch (Exception e){ //deal with any exceptions}

Set environment up.Youmust set the JNDIInitialContextfactory,the ProviderURL,and any login namesor passwords necessaryto access JNDI.

Look up the JTAUserTransaction interfacevia JNDI.The container isrequired to make the JTAavailable at the locationjava:comp/UserTransaction

Page 42: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Dooming transactionsIf you ’re performing programmatic or client-initiated transactions, youare calling the begin() and commit() methods.You can easily doom atransaction by calling rollback() on the JTA, rather than commit().

The best way to doom a transaction from a bean with container-managed transactions is to call setRollbackOnly() on your EJB contextobject.If the transaction participant is not an Container Managed EJBcomponent, you can doom a transaction by looking up the JTA andcalling the JTA ’s setRollbackOnly() method,

Container-managed transactional beans can detect doomedtransactions by calling the getRollbackOnly()method on the EJBcontext object. If this method returns true ,the transaction is doomed.Other participants,such as bean-managed transactional beans,can callthe JTA ’s getStatus() method.

Page 43: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Two Phases Commit

Transactions

Page 44: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Distributed Systems

LocalTransactionManager A

ResourceManager A

DB A DB B1a DB B1bMessagingServer B2a

ResourceManager B2

LocalTransactionManager B

ResourceManager B1

DistributedTransaction

Manager

Page 45: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Distributed Systems: Two Phase commit

Phase One begins by sending a “before commit” message to all resourcesinvolved in the transaction. At this time,the resources involved in atransaction have a final chance to abort the transaction. If any resourceinvolved decides to abort, the entire transaction is cancelled and noresource updates are performed. Otherwise, the transaction proceeds oncourse and cannot be stopped, unless a catastrophic failure occurs.Toprevent catastrophic failures,all resource updates are written to atransactional log or journal. This journal is persistent,so it survivescrashes and can be consulted after a crash to reapply all resourceupdates.

Phase Two occurs only if Phase One completed without an abort. At thistime,all of the resource managers, which can all be located and controlledseparately, perform the actual data updates.

Page 46: Transactions Introduction - UniTrentolatemar.science.unitn.it/segue_userFiles/2010Web...For instance,you can use programmatic transactions to run a series of minitransactions within

Distributed Systems: Two Phase commitIn the distributed two-phase commit, there is one master transactionmanager called the distributed transaction coordinator .

1.The transaction coordinator sends a prepare to commit message to eachtransaction manager involved.

2.Each transaction manager may propagate this message to the resourcemanagers that are tied to that transaction manager.

3.Each transaction manager reports back to the transaction coordinator.Ifeveryone agrees to commit, the commit operation that’s about to happenis logged in case of a crash.

4.Finally,the transaction coordinator tells each transaction manager tocommit. Each transaction manager in turn calls each resourcemanager,which makes all resource updates permanent and durable. Ifanything goes wrong,the log entry can be used to reapply this last step.