Embora você possa usar o antigo truque "selecionar 1 do dual", a desvantagem disso é que ele emite uma consulta extra toda vez que você empresta uma conexão do pool. Para grandes volumes, isso é um desperdício.
O JBoss fornece um validador de conexão especial que deve ser usado para Oracle:
<valid-connection-checker-class-name>
org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker
</valid-connection-checker-class-name>
Isso faz uso do método proprietário ping() na classe Oracle JDBC Connection e usa o código de rede subjacente do driver para determinar se a conexão ainda está ativa.
No entanto, ainda é um desperdício executar isso toda vez que uma conexão é emprestada, portanto, você pode usar o recurso em que um thread em segundo plano verifica as conexões no pool e descarta silenciosamente as inativas. Isso é muito mais eficiente, mas significa que se as conexões não morrer, qualquer tentativa de usá-los antes que o thread em segundo plano execute sua verificação falhará.
Veja a documentação do wiki para saber como configurar a verificação de antecedentes (procure por
background-validation-millis
).