Bom dia!
Tenho uma rotina que roda de tempos em tempos, processando uma fila de tarefas. A cada tarefa que ela processa, eu conecto no BD, processo o que preciso e desconecto. Sei que a rotina está perfeita, funciona bem sem problemas. Tenho inclusive clientes em uso já com essa rotina, em MySQL.
Acontece que nosso sistema roda com vários BDs, e agora estava eu testando tudo pq um cliente passará a usar essa mesma rotina, mas com SQLServer. E com SQLServer eu tive um problema, durante a execução da rotina, ele funciona bem por um tempo e de repente dá a seguinte mensagem de erro justamente no momento em que tenta fazer uma conexão com o BD:
<blockquote>STACK TRACE:
java.sql.SQLException: Network error IOException: Address already in use: connect
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:385)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:182)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
</blockquote>
Pesquisei e descobri que esse erro se refere ao fato de a máquina não ter nenhuma porta disponível para usar para conectar com o BD. Então eu fui no prompt do MS-DOS, e dei o famoso comando “netstat”. Qual foi minha surpresa quando vi uma lista enorme de portas abertas com o IP do meu servidor de dados SQLServer! Praticamente todas no estado TIME_WAIT. Fechei todo o sistema, percebi que não muda nada… então fiquei olhando e notei que ele tem uma espécie de “tempo” pra liberar as portas que estão como TIME_WAIT, ou seja, não estão mais sendo usadas, mas também não foram liberadas ainda pelo windows. Elas ficam ali, “esperando dar seu tempo”.
Depois de um tempo vi que todas as TIME_WAIT foram liberadas, ai rodo o sistema e tudo funciona normalmente até estourar o limite de portas mais uma vez.
Por favor, eu uso o sistema com MySQL, Oracle e SQLServer. Até agora, só o SQLServer apresentou essa situação. Alguém sabe o que posso fazer? Algo que eu possa fazer pra forçar o Windows a liberar essa porta que não estou mais usando já no ato da desconexão com o BD?
Grata,
Renata
