3.2.6.2.2. TransactionalDataManager
TransactionalDataManager is a bean of the middle tier which mimics the DataManager interface but can join an existing transaction. It has the following features:
-  If there is an active transaction, joins it, otherwise creates and commits a transaction same as DataManager.
-  It accepts and returns entities in detached state. The developer should load entities with appropriate views and explicitly use the save()method to save modified instances to the database.
-  It applies row-level security, works with dynamic attributes and cross-datastore references in the same way as DataManager.
Below is a simple example of using TransactionalDataManager in a service method:
@Inject
private TransactionalDataManager txDataManager;
@Transactional
public void transfer(Id<Account, UUID> acc1Id, Id<Account, UUID> acc2Id, Long amount) {
    Account acc1 = txDataManager.load(acc1Id).one();
    Account acc2 = txDataManager.load(acc2Id).one();
    acc1.setBalance(acc1.getBalance() - amount);
    acc2.setBalance(acc2.getBalance() + amount);
    txDataManager.save(acc1);
    txDataManager.save(acc2);
}You can find more complex example in the framework test: DataManagerTransactionalUsageTest.java
| 
 |