- Este tópico contém 2 respostas, 2 vozes e foi atualizado pela última vez 10 anos, 10 meses atrás por
Tércio Costa.
-
AutorPosts
-
11 de outubro de 2013 às 5:45 pm #106007
Tércio Costa
ParticipanteEstou com um problema com a minha aplicação java usando o Oracle XE 11g.
Após um determinado tempo, percebi que está aumentando muito o número de processos no banco de dados e como ele tem um limite a aplicação para de funcionar, somente liberando esses processos se eu fechar o programa. o erro do Oracle é o ORA-12516.
Já aumentei esses processos para 300, mas quando chega a esse número a aplicação para, sendo necessário fechar. Não sei se estou fazendo correto as minhas conexões, estou usando o Oracle UCP para gerenciar um pool. vou colar aqui a classe:
package util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.ucp.jdbc.PoolDataSourceFactory;
import oracle.ucp.jdbc.PoolDataSource;public class PoolConnectionDB {
private PoolDataSource pds;
private String ip, usuario, senha;public PoolConnectionDB() {
this.setDados();
this.configurar();
}//configurações do pool
public void configurar() {try {
//cria o pool
pds = PoolDataSourceFactory.getPoolDataSource();//propriedades
pds.setConnectionFactoryClassName(“oracle.jdbc.pool.OracleDataSource”);
pds.setURL(“jdbc:oracle:thin:@//”+ip+”:1521/XE”);
pds.setUser(usuario);
pds.setPassword(senha);//quantidade de conexões
pds.setInitialPoolSize(1);
pds.setMinPoolSize(1);
pds.setMaxPoolSize(5);//validar a conexão borrowed do pool
pds.setValidateConnectionOnBorrow(true);
pds.setSQLForValidateConnection(“SELECT sysdate FROM dual”);}
catch(SQLException e) {
System.out.println(“Erro ao configurar o pool, mensagem: “+e.getMessage());
}
}//retorna conexão com o banco
public Connection getConexao() {
try {
return pds.getConnection();
}
catch(SQLException e) {
System.out.println(“Erro ao pegar conexao, mensagem: “);
e.printStackTrace();
}
return null;
}public void liberaRecurso(Connection conn, PreparedStatement ps) {
try {
if(conn != null) {
conn.close();
conn = null;
}
if(ps != null) {
ps.close();
ps = null;
}
}
catch(SQLException e) {
System.out.println(“Erro ao liberar recurso, mensagem: “+e.getMessage());
}
}public void liberaRecursoFULL(Connection conn, PreparedStatement ps, ResultSet rs) {
try {
if(conn != null) {
conn.close();
conn = null;
}
if(ps != null) {
ps.close();
ps = null;
}
if(rs != null) {
rs.close();
rs = null;
}
}
catch(SQLException e) {
System.out.println(“Erro ao liberar recurso, mensagem: “+e.getMessage());
}
}public void setDados() {
ip = Variaveis.ip;
usuario = “system”;
senha = “123456”;
}}
ao fazer uma query eu sempre coloco no bloco finally para liberar os recursos.Qual será o problema?
11 de outubro de 2013 às 7:07 pm #106008Fábio Prado
Participante@Terciosc, vc sempre fecha conexão após acessar o BD?
Veja se o link abaixo te ajuda:
https://forums.oracle.com/thread/362226[]s
Fábio Prado
http://www.fabioprado.net11 de outubro de 2013 às 11:38 pm #106025Tércio Costa
Participantesim, estou sempre fechando com o metodo liberarecurso
e quando faço a query select count(*) from v$session; o número está sempre aumentado!
e ao fazer um:
pds.getStatistics().getTotalConnectionsCount()
está sempre retornando 1! -
AutorPosts
- Você deve fazer login para responder a este tópico.