The transaction contains a superclass Transaction for deriving the extensions TransferTransaction and ExchangeTransaction, which can be found in the corresponding packages. This superclass is planned to have methods for fault tolerance and recovery later in time. These things are belonging to pure transaction.
A transaction is the process of moving a objects from one place (sender) to another place (receiver), and with fulfilling some requirements besides (atomicity etc.).
Logically, a transaction is one object with two methods: startTransaction() at the sender's side, and receiveTransaction() at the receiver's side. If both are called (more or less) simultaneously, the transaction perform its service, and the result is the (new) object at the receiver's side. Note: With an exchange, both sides are sender and receiver.
Technically, a transaction consists of two transaction objects, one at each side, representing one half each: the sender and the receiver. Both these objects are of the same class. When the sender sets up its transaction part, the receiver should set up the receiver's part of the transaction, that is invoke the receive method.