Boa tarde pessoal!
Tenho um projeto praticamente pronto e funcionando, usando apenas o Spring MVC, porém estou fazendo umas revisões nele para melhorar as práticas e escritas.
Resolvi usar Filter para fazer a conexão com o BD,dessa maneira não precisarei me preocupar em ficar fechando as conexões já que nessa revisão ví que esqueci um monte delas aberta.
Fiz o FJ11 e FJ-21 na caelum, refiz todo o curso em casa e ok, funciona tudo direitinho
Estou tentando usar no meu projeto o mesmo modelo de filtro que aprendi no FJ-21, mas na hora de chamar ele no método está dando o seguinte erro:
org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: java.lang.NoSuchMethodError: br.com.press.produtividade.dao.PlantaDAO: method <init>()V not found
Mesmo usando o modo de conexão antigo sem chama-la pelo filtro, já constatei que o filter está funcionando, está debugando corretamente no Sysout.
Vou colocar as classes aqui, podem me apontar o erro por favor? ja tentei muitas coisas e nada:
FiltroConexao.java
package br.com.press.filtros;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import br.com.press.factory.ConnectionFactory;
//
public class FiltroConexao implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
System.err
.println("####--CONEXÃO COM O BANCO DE DADOS ABERTA-####");
Connection connection = new ConnectionFactory().getConnection();
// pendurando a connection na requisição
request.setAttribute("conexao", connection);
chain.doFilter(request, response);
connection.close();
System.err
.println("####--CONEXÃO COM O BANCO DE ENCERRADA--#### \n");
} catch (SQLException e) {
throw new ServletException(e);
}
}
}
PlantaDAO.java
package br.com.press.produtividade.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.press.produtividade.model.Plantas;
public class PlantaDAO {
private Connection connection;
/*
//CONSTRUTOR COM MODO DE CONEXÃO ANTIGO, ESTAVA FUNCIONANDO CORRETAMENTE
public PlantaDAO() {
try {
this.connection = new ConnectionFactory().getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
*/
public PlantaDAO(Connection connection) {
this.connection = connection;
}
public List<Plantas> lista(HttpServletRequest request,HttpServletResponse response) {
Connection connection =(Connection)request.getAttribute("conexao"); //ADICIONEI ESTA LINHA E INSTANCIEI O REQUEST E RESPONSE ACIMA
try {
List<Plantas> plantas = new ArrayList<Plantas>();
String sql = "select * from plantas "/*where id_planta = ?*/;
PreparedStatement stmt = this.connection.prepareStatement(sql);
//stmt.setLong(1,id);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
// adiciona a planta na lista
plantas.add(populaPlanta(rs));
}
rs.close();
stmt.close();
System.out.println("fechou a conexão da planta");
return plantas;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
private Plantas populaPlanta(ResultSet rs) throws SQLException {
Plantas planta = new Plantas();
// popula o objeto planta
planta.setId(rs.getLong("id_planta"));
planta.setNomePlanta(rs.getString("nome_planta"));
planta.setSiglaPlanta(rs.getString("sigla_planta"));
return planta;
}
}
trecho do webxml
<filter>
<filter-name>FiltroConexao</filter-name>
<filter-class>br.com.press.filtros.FiltroConexao</filter-class>
</filter>
<filter-mapping>
<filter-name>FiltroConexao</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Desde já, obrigado!