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
