Bom dia.
Eu criei uma tela nova na aplicação, porém, esta tela em específico aparentemente não fecha as conexões com o banco.
Não sei se é uma prática ruim, mas eu uso um converter que vai receber o ID da entidade e carregar ela direto no controller. (Não uso o @Load pois ela pode ser nula)
@Convert(SellerGroup.class)
public class SellerGroupConverter implements Converter<SellerGroup> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final SellerGroupDAO sellerGroupDAO;
public SellerGroupConverter(SellerGroupDAO sellerGroupDAO) {
this.sellerGroupDAO = sellerGroupDAO;
}
@Override
public SellerGroup convert(String value, Class<? extends SellerGroup> type,
ResourceBundle bundle) {
try {
return sellerGroupDAO.get(Long.parseLong(value));
} catch (NumberFormatException e) {
logger.error("Cannot convert '" + value + "' to java.lang.Long.", e);
throw e;
}
}
}
No meu controller eu simplesmente recebo esse objeto e o devolvo à tela (com mais alguns parâmetros…)
@Get("/seller/group/detail")
public void detalhe(SellerGroup obj, boolean returnToInitial,
boolean returnToList, Long coordenadorId) {
// faz as coisas.
}
Esse método deve carregar a detalhe.jsp…
Mas eu vi no log que o VRaptor está indo para a detalhe.json.jsp
17/05/12 10:27 DEBUG br.com.caelum.vraptor.view.DefaultPageResult:66
forwarding to /WEB-INF/jsp/sellerGroup/detalhe.json.jsp
Eu habilitei também o Hibernate Statistics
17/05/12 10:27 DEBUG frontend.rsedw.provider.SessionProvider:22
Openning session.
17/05/12 10:27 DEBUG org.hibernate.internal.SessionImpl:253
Opened session at timestamp: [telefone removido]
17/05/12 10:27 DEBUG frontend.rsedw.provider.SessionProvider:24
connectionCount: 22
17/05/12 10:27 DEBUG frontend.rsedw.provider.SessionProvider:26
sessionOpenCount: 26
17/05/12 10:27 DEBUG frontend.rsedw.provider.SessionProvider:29
sessionCloseCount: 16
17/05/12 10:27 DEBUG frontend.rsedw.provider.SessionProvider:36
Getting session.
Acontece o seguinte: chega uma hora que o sistema trava simplesmente por que ele não está fechando as conexões… E é só nessa tela de detalhe…
17/05/12 10:27 DEBUG org.hibernate.engine.jdbc.internal.LogicalConnectionImpl:295
Obtaining JDBC connection
17/05/12 10:27 DEBUG com.mchange.v2.resourcepool.BasicResourcePool:554
acquire test -- pool is already maxed out. [managed: 10; max: 10]
17/05/12 10:27 DEBUG com.mchange.v2.resourcepool.BasicResourcePool:1291
awaitAvailable(): com.mchange.v2.c3p0.impl.NewPooledConnection@19b6225
17/05/12 10:27 DEBUG com.mchange.v2.resourcepool.BasicResourcePool:1644
trace com.mchange.v2.resourcepool.BasicResourcePool@98a8b8 [managed: 10, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@19b6225)
O único lugar que eu abro a session é no SessionProvider (inclusive fiz uma busca por um openSession e só encontrou lá mesmo.)
Minha dúvida é: será que eu estou passando algum parâmetro errado para o VRaptor e este está interpretando a minha action como um JSON e por isso não está executando o @PreDestroy da classe SessionProvider? :?
Outra dúvida que eu sempre tive mas sempre esquecia de perguntar: por que eu não posso redirecionar para um @Post usando o result.redirectTo?
