Pessoal ,
Tenho um Web Service em um servidor JBOSS que faz conexão com o banco Oracle usando um datasource ws.xml a aplicação funciona um bom tempo sem problemas.
Mais inesperadamente ele perde a conexão e começa a apresentar um o erro:
ERROR 00:00:30 [Banco] :Unable to get managed connection for lote; - nested throwable: (javax.resource.ResourceException: Unable to get managed connection for lote)
O erro só para de ocorrer depois que faço undeploy e deploy novamente do datasource ws.xml.
Se alguem souber os possíveis motivos de estar apresentando esse erro ou como posso resolver.
Segue abaixo o codigo do arquivo ws.xml :
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>lote</jndi-name>
<connection-url>jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=ON)(ADDRESS_LIST=(LOAD_BALANCE=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=XXXX)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=XXXX)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xxxx)))</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>XXXX</user-name>
<password>XXXX</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 fonte da classe que chama a conexão
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class Banco {
private Connection conn = null;
private boolean conectado = false;
private Integer codCid;
public Integer getCodCid() {
return codCid;
}
public Banco(Integer codigoCidade) {
this.codCid = codigoCidade;
try {
conectar("lote_" + codigoCidade.toString(), codigoCidade);
conectado = true;
} catch (NamingException e) {
try {
conectar("lote", codigoCidade);
conectado = true;
} catch (NamingException ei) {
conectado = false;
ei.printStackTrace();
} catch (SQLException ei) {
conectado = false;
ei.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private void conectar(String dsnome, Integer codigoCidade)
throws NamingException, SQLException {
InitialContext ctx = null;
DataSource ds = null;
ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/" + dsnome);
conn = (ds.getConnection());
}
public Connection conn() {
return conn;
}
public void fecharBanco() {
if (this.isConectado() && this.conn() != null)
try {
this.conn().close();
this.conectado = false;
} catch (SQLException e) {
e.printStackTrace();
}
}
public boolean isConectado() {
return conectado;
}
}
Obrigado