Veja se está bom este metodo de conexao com o MySQL

3 respostas
M

Boa tarde, alguém com bastante experiencia poderia me dizer se este tipo de conexão com o mysql está correto? Ou melhor está satisfatório? As queries estão tudo rodando mas não sei se o modelo é aplicável.

Estou criando a conexão através de um DataSource.

- server.xml :

<Context crossContext="true" debug="5" docBase="sgm" path="/sgm" reloadable="true" source="org.eclipse.jst.jee.server:sgm">
	<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="100" maxIdle="30" maxWait="10000" name="jdbc/ConexaoDB"       
              password="221088" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/SGM" username="root"/>
</Context>

- UtilDAO:

public class UtilDAO
{
	private static Connection conn;
	private static DataSource ds;
	
	@SuppressWarnings("unused")
	public static Connection getConexao() throws SQLException
	{
		try{
			Context ctx = new InitialContext();
			if(ctx == null ) 
				throw new Exception("Boom - No Context");

			ds=(DataSource)ctx.lookup("java:comp/env/jdbc/ConexaoDB");

		}catch(Exception e) {
			e.printStackTrace();
		}

		conn = ds.getConnection();
		return conn;
	}
	
	public static void fecharConexao(ResultSet rs,
							  PreparedStatement pstmt,
							  Connection conexao) throws SQLException
	{
		if(!rs.isClosed())
			rs.close();
		
		if(!pstmt.isClosed())
			pstmt.close();
		
		if(!conexao.isClosed())
			conexao.close();
	}
}

-Metodo para Exemplo em utilizar a conexão e fecha-la no DAO!

public ArrayList<PessoaJuridica> listarPJ() throws Exception
{		
		ArrayList<PessoaJuridica> pjs = new ArrayList<PessoaJuridica>();
		String sql = "select cd_empresa,ch_nome,ch_razao,ch_cnpj "+
					 "from pessoajuridica;";
		PreparedStatement pstmt=null;
		ResultSet rs = null;
		
		try
		{
			pstmt = this.conexao.prepareStatement(sql);
			rs = pstmt.executeQuery();
			
			while(rs.next())
			{
				PessoaJuridica pj = new PessoaJuridica();
				
				pj.setCodigo(rs.getInt("cd_empresa"));
				pj.setNome(rs.getString("ch_nome"));
				pj.setRazao(rs.getString("ch_razao"));
				pj.setCnpj(rs.getString("ch_cnpj"));
				
				pjs.add(pj);
			}
			
		}catch (Exception e)
		{
			e.printStackTrace();			
		}
		finally
		{
			UtilDAO.fecharConexao(rs, pstmt, conexao);
		}
		return pjs;
}

Por favor alguma critica??

Obrigado.

3 Respostas

lele_vader

Se for a versão com servlet 3 eu acho que você pode usar a anotação @Resource e carregar o jndi e passar as informações de conexão eu acho

M

Pois então, até poderia colocar essa anotação, mas meu foco é saber se com este modelo de conexão eu consigo manter uma performance boa, ou se a conexão irá realmente fechar e etc…

Obrigado!

lele_vader

Na versão mais nova também acredito que com o fechamento automático de recursos pode-se fechar o ResultSet o preparedStatement e a connection eu acho.

No mais eu acho que só seria melhor se você fizesse lookup só uma vez e guardasse no objeto do datasource, imagina se tem muitos acessos simultâneos. Toda vez você vai fazer lookup para o mesmo jndi.

Alguém mais experiente pode opinar também.

Vlw.

Criado 20 de junho de 2012
Ultima resposta 21 de jun. de 2012
Respostas 3
Participantes 2