int funcionou = TRUE;
try {
Current::begin();
poupanca.debito(valor);
conta_corrente.credito(valor);
Current::commit();
}
catch(TransactionRolledBack) {
Current::rollback();
cout << "A transação foi abortada." << endl;
funcionou = FALSE;
}
catch(...) {
Current::rollback();
cout << "Transação falhou." << endl;
funcionou = FALSE;
}
if (funcionou)
cout << "Transação foi completada com sucesso. " << endl;
else
cout << "Transação foi abortada. " << endl;
CORBA::Object_var transacao =
Bootstrap.resolve_initial_references("TransactionCurrent");
CosTransactions::Current_var transaction_current_oref=
CosTransactions::Current::_narrow(transacao.in());
transacao->begin();
try {
minhaConta->transferencia(poupanca, CC, valor);
...
CORBA::Boolean report_heuristics = CORBA_TRUE;
transacao->commit(report_heuristics);
}
catch (...) {
// Se a operação falha, execute o rollback e gere a exceção novamente.
// Se o rollback falha, simplesmente gere a exceção original.
try {
transacao->rollback();
}
catch (...) {
log->registra("o roll-back falhou, o mar não está prá peixe");
}
throw;
try
{
ut.begin();
updateChecking(amount);
machineBalance -= amount;
insertMachine(machineBalance);
ut.commit();
} catch
(Exception ex) {
try {
ut.rollback();
} catch (SystemException syex) {
throw new EJBException
("Rollback failed: " + syex.getMessage());
}
throw new EJBException
("Transaction failed: " + ex.getMessage());
}
}