Senhores :D
A muito tempo trabalho com sistemas que exigem persistência em banco de dados. Acho que 90% dos casos para todos aqui são assim.
Com a evolução de frameworks como Hibernate, iBatis e servidores de aplicações que criam pools de conexão e outras facilidades, acabamos "perdendo" um pouco da manha de se fazer um código bom e eficaz para persistências sem ajuda de frameworks.
Estou em um projeto simples, é um robô que simula a nevegação de uma app de mainframe. A cada "navegada" ele salva alguns dados no oracle.
Tenho a seguinte classe:
public class OracleConnection {
private static Connection connection;
public static Connection getConection(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@//10.20.1.8:1521/teste";
String user = "userr";
String password = "123";
if(connection == null){
connection = DriverManager.getConnection(url, user, password);
}
return connection;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
}
Essa classe nada mais é do que um singleton para o objeto Connection. Tudo funciona, porém, recebi uma exception, cerca de 2 horas depois de estar rodando continuo.
SQLException: connecion is closed.
Depois dessa exception, inseri o seguinte na classe:
if(connection.isClosed()){
connection = null;
connection = DriverManager.getConnection(url, user, password);
}
Segundo o DBA, o problema era do banco(estava instavel).
Mas ficou a dúvida... a classe simples que fiz, é confiável? O fato de eu não estar fechando nunca a conexão, é um problema? Singleton pode atrapalhar em algo nesse caso?
A conexão é usada apenas para se fazer um select e um update.
