New feature: TransactionManager

1 view
Skip to first unread message

Pedro Viegas

unread,
Jan 23, 2025, 8:59:20 AMJan 23
to 'Pedro Viegas' via DIF2 Group

Boa tarde,

 

Na DIF 3.0.3-1 passa a existir o DIFTransactionManager.

O objetivo é tratar daquele código repetitivo de abrir e fechar ou fazer rollback de uma sessão para várias ações.

 

O antigo:

 

boolean wasActive = DIFRepositoryFactory.openTransaction();
try
{
   (...)
 
    if (!wasActive)
    {
        DIFRepositoryFactory.getSession().getTransaction().commit();
    }
}
catch (Exception e)
{
    e.printStackTrace();

    if
(!wasActive)
    {
       
try
       
{
            DIFRepositoryFactory.getSession().getTransaction().rollback()
;
       
}
       
catch (Exception innerException)
        {
            e.printStackTrace()
;
       
}
    }
}

 

O novo código com a feature:

 

DIFSingleTransactionManager tm = HibernateUtil.getTransactionManager(DIFRepositoryFactory.getSession());
 
try
{
   (...)
 
    tm.commit();
}
catch (Exception e)
{
    e.printStackTrace();
   
tm.rollback();
}

 

No futuro ainda o integrarei na geração de código das SessionFactories de Hibernate para simplificar ainda mais a primeira linha mas ainda não o fiz.

 

Nota muito importante esta funcionalidade não é apenas facilitar. É normalização do tratamento das exceções. O rollback mesmo que falhe não gera exceção, e o commit se falhar tenta fazer rollback, mas não deixando depois de lançar a exceção original provocada pelo commit.

 


Com os melhores cumprimentos,

Best regards,

 

Pedro Viegas
Director Departamento de Desenvolvimento
(Development Manager)
Digitalis Informática Lda
R&D: http://development.digitalis.pt

signature_1033656615

Reply all
Reply to author
Forward
0 new messages