Externally stored transaction
Long transactions, which may take some hours, might become very large and are difficult to store in memory. In order to provide performant transaction mechanisms in this case, too, transactions might be stored to disk.
Usually, external transactions are not nested, but one always may begin a pool or external transaction within an external transaction.
Except, that external transactions are stored to different media, they behave like pool transactions.
... fragment ( Property &person ) {
person.objectSpace().beginTransaction(true); // external transaction
if ( updatePersonIncome(person) ) // updates income for all persons
person.objectSpace().rollBack(); // error encountered
else
person.objectSpace().commitTransaction();
}
External transactions cannot be used in connection with replication server. Since replication server behaves critical for very long transactions, one should not create long transactions when running a replication server, and thus, external transactions do not make sense in this case.