Problema de transação em requisições simultâneas

Boa tarde pessoal,

estou com um problema em uma aplicação, onde utilizo JSF 2, hibernate e spring. O problema é o seguinte: tenho uma tela de geração de boletos, pois é, caso eu abra esta tela em duas sessões diferentes (navegadores diferentes ou máquinas diferentes) e clicar em gerar ao mesmo tempo terei um problema transacional pois se não o sistema permitirá uma geração duplicada, ou seja, dois boletos para o mesmo mês. Me disseram sobre duas possíveis soluções, uma refatoro meu bean para um bean do spring e adiciona a anotação de transação nele, outra utilizar o synchronized em um método estático que valida se já existe boleto para aquele mês já gerado.

Podem me ajudar neste problema?

Obrigado.

Bom para aqueles que possam enfrentar este problema, a resolução que foi usada neste foi criar um service onde se tem métodos com as implementações que não poderiam ser acessadas simultaneamente e foi colocado sobre eles a anotação @Transactional do spring. Dessa forma funcionou beleza. Vlw