ola pessoal…
tenho uma webapp em struts.
uso hibernate para persistencia.
criei um filter que controla sessions e transactions com o banco de dados.
public class SessionFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
Session session = null;
Transaction tx = null;
if (request instanceof HttpServletRequest){
session = Persistencia.initSession();
tx = session.beginTransaction();
request.setAttribute("sessionDB", session);
}
chain.doFilter(request, response);
if (request instanceof HttpServletRequest){
if (request.getAttribute("transaction") != null &&
request.getAttribute("transaction").equals("true")){
tx.commit();
}else{
tx.rollback();
}
request.removeAttribute("transaction");
session.close();
request.removeAttribute("sessionDB");
}
}
}
tudo funciona perfeitamente até um ponto.
se voces repararem, a cada request é criado uma session e uma transação com o banco de dados.
aconteceu por duas vezes um fato q eu nao entendi.
dois usuarios estavam trabalhando normalmente no sistema, e, em um instante, eles fizeram operações identicas, ou seja, ambos entraram no cadastro de cliente e cadastraram dois clientes diferentes mas quando foram salvar os dados no banco, foi salvo dois registros identicos, iguais porem com id diferente.
é como se a session estivesse fora de sincronismo, mas teoricamente so daria erro se fosse a mesma session, o que não é.
para cada request há uma nova session, que ao final do request é fechado.
será que alguem pode me ajudar?
