Estou trabalhando em um sistema que utiliza CMT com spring ( org.springframework.orm.hibernate3.LocalSessionFactoryBean e propagation = REQUIRED ). Como é um sistema legado, mapeamos algumas partes que precisam de performance e a arquitetura de BD não colabora com o mapeamento ORM.
Partes críticas estamos substituindo por StoredProcedures. Minha dúvida é como devo proceder com os objetos oriundos da chamada de procedimentos transcionados atraves do CMT. Eu devo gerir o ciclo de vida ou como é CMT devo deixar a cargo do Spring neste caso ?
Conceito de codigo que eu encerro os recursos:
Connection con = null;
CallableStatement stCreate = null;
CallableStatement stSearch = null;
try
con = getCurrentSession().connection();
stCreate = con.prepareCall(" { call procedure_inclusao(?) } ");
stSearch = con.prepareCall(" { call procedure_inclusao(?,?) } ");
// setting parameters ..
stCreate.execute();
stSearch.execute();
ResultSet rsSearch = (ResultSet) stSearch.getObject(2);
//some logic ...
} catch( Exception e ){
log.error("Persist problem ..." );
throw new DataAccessException("Persist problem", e);
} finally {
// close all resources came from getCurrentSession CMT
try{
if(rsSearch!=null) rsSearch.close();
if(stCreate!=null) stCreate.close();
if(stSearch!=null) stSearch.close();
if(con!=null) con.close();
} catch (Exception e){
log.error("error trying closing resources");
}
}
Devo fazer isto mesmo ? estou procurando documentação mas até agora não encontrei nada referente…