Dica JMX
A Cada dia que passa eu me surpreendo com uma nova “ferramenta” ou utilidade do JMX-Console do JBoss. Desta vez eu estava com um problema na minha aplicação em que as conexões com o banco, de repente, ficavam todas ocupadas, e com isso subia uma exceção falando que a aplicação esperou por 30 segundos, e mesmo assim não conseguiu obter nenhuma conexão do pool. Puts! Foi um parto. Revisei todos os meus DAOs para ver se estava fechando corretamente as conexões. Verifiquei os mapeamentos no spring para ver se algum DAO estava como singleton e por conta disso acabar segurando uma conexão (uma vez que havia um objeto connection dentro do meu DAO abstrato) e mesmo assim nada… Não sabia e não tinha ideia de onde estava ficando pendente a conexão. Eis que surgiu uma luz no fim do túnel. Estava olhando o JBoss console e encontrei 2 MBeans/Serviços que me ajudaram muito o ManagedConnectionPool, e o TransactionManager.
Ambos podem ser iniciado a partir do jmx-console da sua aplicação, basta procurar por esses nomes lá. Com eles, consegui descobrir que ao abrir uma conexão com o banco em um SessionBean (que apenas fazia uma consulta), a mesma ficava atrelada à transação, e ao acessar um WebService dentro desta transação com um tempo de resposta demorado, corria o perigo de esgotar as minhas conexões, dado um acesso concorrente. Depois desta constatação, bastou mudar o tipo de transação do session bean para NOT_SUPPORTED que tudo começou a funcionar.
Portanto, ai vai a dica: ManagedConnectionPool, e TransactionManager, podem te ajudar muito a encontrar possíveis problemas de esgotamento do pool de conexões e deadlocks de transações (respectivamente).
