Pelo o que eu vi sua aplicação é web, use um datasource para gerenciar suas conexões.
Java_Player
Poderia explicar melhor como faço isso?
É complicado?
Devo criar uma classe que implementa javax.sql.DataSource?
rodrigopmatias
eu uso um esquema parecido com este seu ai aqui onde trabalho, mas também tem o esquema de datasource como o amigo ja falou, vai de vc escolher qual vc acha melhor. usando datasource vc ira colocar as configurações de conexão dentro do XML context.xml que sua aplicação obrigatoriamente ja deve ter que ter (caso tomcat não conheços os demais servidores). mas a sua solução é eficiente, só para ficar melhor talvez eu tornaria a conexão um singleton com um spool e uma fila.
mueller
Uma boa opção é o c3p0.
Pedrosa
Poderia explicar melhor como faço isso?
É complicado?
Devo criar uma classe que implementa javax.sql.DataSource?
publicclassDAOUtils{publicstaticfinalStringDATASOURCE_NAME="java:comp/env/jdbc/datasource";publicstaticfinalStringOPEN_DATASOURCE="Erro acessando a fonte de dados";publicstaticfinalStringOPEN_CONNECTION="Erro durante abertura da conexao";publicstaticfinalStringCLOSE_RESULTSET="Erro durante fechamento do resultset";publicstaticfinalStringCLOSE_STATEMENT="Erro durante fechamento do statement";publicstaticfinalStringCLOSE_CONNECTION="Erro durante fechamento da conexao";publicstaticfinalStringROLLBACK_CONNECTION="Erro durante rollback da conexão";publicstaticfinalStringSQL_ERROR="Erro durante execucao da instrucao SQL";privatestaticMapcache=Collections.synchronizedMap(newHashMap());privatestaticDataSourcegetDataSource()throwsDAOException{try{Contextic=newInitialContext();Stringdsname=(String)ic.lookup(DATASOURCE_NAME);DataSourcesource=(DataSource)cache.get(dsname);if(source==null){source=(DataSource)ic.lookup(dsname);cache.put(dsname,source);}returnsource;}catch(NamingExceptionnae){thrownewDAOException(OPEN_DATASOURCE,nae);}}publicstaticConnectiongetConnection()throwsDAOException{DataSourcesource=getDataSource();try{returnsource.getConnection();}catch(SQLExceptionsqle){thrownewDAOException(OPEN_CONNECTION,sqle);}}publicstaticvoidrollbackConnection(Connectionconnection){try{if(connection!=null&&!connection.isClosed()){connection.rollback();}}catch(SQLExceptionsqle){thrownewDAOException(ROLLBACK_CONNECTION,sqle);}}publicstaticvoidcloseResultset(ResultSetresultset)throwsDAOException{try{if(resultset!=null){resultset.close();resultset=null;}}catch(SQLExceptionsqle){thrownewDAOException(CLOSE_RESULTSET,sqle);}}publicstaticvoidcloseStatement(PreparedStatementstatement)throwsDAOException{try{if(statement!=null){statement.close();}}catch(SQLExceptionsqle){thrownewDAOException(CLOSE_STATEMENT,sqle);}}publicstaticvoidcloseConnection(Connectionconnection)throwsDAOException{try{if(connection!=null&&!connection.isClosed()){connection.close();}}catch(SQLExceptionsqle){thrownewDAOException(CLOSE_CONNECTION,sqle);}}}
eu uso essa classe para conectar com o banco, as propriedades de acesso ao banco vc pode configurar no oracle-ds.xml no caso do JBOSS:
Java Player, a primeira mudança que eu te indico é mudar o nome da classe. Quando der nomes a classes, pense sempre na responsabilidade que ela tem.
No seu caso, a classe não é uma Conexao; ela serve para criar conexões. Por isso um nome como FabricaDeConexoes seria mais adequado.
mister_m
É muito melhor usar um DataSource mesmo. Verifique na doc do seu container web como defini-lo.
nicholas.bittencourt
Uma coisa que percebi é que você usa uma conexão para todos as requisições enquanto a aplicação está no ar. Já pensou o que pode acontecer se um desenvolvedor dá um conn.comit() no meio do tratamento de exceção ou outro? Acho que vale uma revisão de como tratar a concorrência de usuarios ao acessar a conexão.