Да, вы можете достичь этого. Вы говорите о так называемой «вложенной» транзакции
Прежде всего для Atomikis вы должны указать свойство com.atomikos.icatch.serial_jta_transactions = false
Если вы работаете с TransactionManager напрямую, вы должны приостановить tx1, прежде чем начинать tx2 (TransactionManager.suspend ()). После совершения транзакции tx2 вы должны возобновить tx1. И если при выполнении tx2 возникает ошибка, необходимо выполнить откат tx2, возобновить tx1 и откат tx1:
Пример
TransactionManager tm=...
tm.begin();
Transaction tx1 = tm.getTransaction();
//do somethins in tx1;
tm.suspend(tx1);
tm.begin();
Transaction tx2 = tm.getTransaction();
try{
//do something in tx2
tm.commit() ;// try to commit tx2
}cath(Throwable e){
tx2.rollback();
tm.resume(tx1)
tx1.rollback();
tx1 = null;
}
if(tx1!=null){
tm.resume(tx1);
tm.commit();
}