JNDI - Unable to get managed connection

Tenho um aplicação que faz um conexão com banco Oracle usando um datasource JNDI, a aplicação conecta-se normal e funciona normalmente por alguns dias, repentinamento a conexão cai e começa a apresentar o erro :

Unable to get managed connection for lote; - nested throwable: (javax.resource.ResourceException: Unable to get managed connection for lote)

Quando executo testes o banco esta normal e outras aplicações estão conectando normalmente. Então eu simplesmente faço undeploy do arquixo XML do datasource e deploy novamente a conexão volta ao normal.

O que pode estar causando esse erro ? E existe alguma forma de quando ocorrer esse erro no JNDI a própria aplicação refazer a conexao JNDI.

Segue abaixo o XML do datasource:

<?xml version="1.0" encoding="UTF-8"?>

	<!-- $Id: mysql-ds.xml 41016 2006-02-07 14:23:00Z acoliver $ -->
	<!--
		Datasource config for MySQL using 3.0.9 available from:
		http://www.mysql.com/downloads/api-jdbc-stable.html
	-->

<datasources>
	<local-tx-datasource>
		<jndi-name>lote</jndi-name>
		<connection-url>jdbc:oracle:thin:@XXX.XXX.XXX.XXX:1521:xxx</connection-url>
		<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
		<user-name>usario</user-name>
		<password>senha</password>
		<exception-sorter-class-name>
			org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
		</exception-sorter-class-name>
		<!--
			should only be used on drivers after 3.22.1 with "ping" support
			<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name>
		-->
		<!--
			sql to call when connection is created <new-connection-sql>some
			arbitrary sql</new-connection-sql>
		-->
		<!--
			sql to call on an existing pooled connection when it is obtained from
			pool - MySQLValidConnectionChecker is preferred for newer drivers
			<check-valid-connection-sql>some arbitrary
			sql</check-valid-connection-sql>
		-->

		<min-pool-size>5</min-pool-size>
		<max-pool-size>500</max-pool-size>
		<idle-timeout-minutes>1</idle-timeout-minutes>
		<track-statements />

		<!--
			corresponding type-mapping in the standardjbosscmp-jdbc.xml
			(optional)
		-->
		<!--metadata>
			<type-mapping>mySQL</type-mapping>
		</metadata-->
	</local-tx-datasource>	
</datasources>

Segue abaixo o codigo que utilizo na aplicação para conexão:

        InitialContext ctx = null;   
        DataSource ds = null;   
        ctx = new InitialContext();   
        ds = (DataSource) ctx.lookup("java:comp/env/jdbc/lote");   
        Connection conn = (ds.getConnection());   

Obrigado

O Jboss não faz uma gerência muito boa de pool de conexões, acho a do tomcat muito melhor. Na verdade vc tem por obrigação devolver as conexões (e todos os objetos criados a partir de suas conexões - resultsets e statements) ao pool de conexão explicitamente. Seu pool de conexão está exaurido.

O que é devolver a conexão ao Pool seria como descrevo abaixo:
Sempre que realizar uma consulta no banco fechar o ResultSet e o PreparedStatement com
resultSet.close();
pstmt.close();
E após realizar todas as operações fechar o objeto Connection :
conn.close();

Seria isso ? ou tem mais alguma coisa que tenha que fazer ?

É. lembre-se de colocar estes fechamentos dentro de um bloco finnaly. O JBoss não te dá realmente objetos do tipo JDBC mas algo do mesmo tipo que ele implementa (por interface ou herança, não importa). Desta forma esses métodos close() não fecham realmente a comunicação com o BD, mas algo como devolver a conexão.

valew pela resposta.
Sempre faço esse procedimento para fechar os objetos.
Suspeito também de problemas na rede do cliente, mais isso foge do meu controle.
Por enquanto encontramos uma solução paliativa para fazer que a conexão refaça caso seja perdida :

Existe um elemento chamado que se colocado dentro do arquivo de datasource com um SQL correto e condizente com o banco utilizado, o mesmo realiza a select a cada estabelecimento de conexões obsoletas, bom pelo menos o que ele entende como obsoleta (This is a SQL statement that should be run on a connection before it is returned from the pool to test its validity to test for stale pool connections), e quando ao realizar este teste se a conexão tiver sido perdida ele refaz a conexão.

Segue link abaixo da discussão que se parecia com a nossa.
http://old.nabble.com/Deploy-JBoss-datasource-td18070502.html

Obrigado