Injetar uma Conexão no DAO usando Struts

4 respostas
G
Oi amigos, Estou migrando meu sistema que usava apenas Servlet para struts e estou com o seguinte problema: Antes de usar struts eu Tinha uma classe chamada FiltroConexao que implementava Filter. Lá eu criava minha conexão, pendurava na requisição e na minha classe adicionaCompromissoServlet eu usava o seguinte código:
//....
Connection conexao = (Connection) req.getAttribute("conexao");
// Acessa o banco
CompromissoDAO dao = new CompromissoDAO(conexao);
dao.insere(compromisso);
//....

O problema é que agora uso struts e não mais servlets. Minha action ficou assim:

public class AdicionaCompromissosAction {

private Compromisso compromisso;

@Action(value = "adicionaCompromisso", results = { @Result(name = "ok", location = "/compromisso-adicionado.jsp") })
public String execute() {
//Aqui eu deveria pegar a conexão e injetá-la no DAO
new CompromissoDAO(?????????).adiciona(compromisso);
return "ok";
}

public Compromisso getCompromisso() {
return compromisso;
}

public void setCompromisso(Compromisso compromisso) {
this.compromisso = compromisso;
}
}

Minha pergunta é: Como devo fazer agora para pegar minha conexão na requisição e injetá-la no DAO através do construtor???

4 Respostas

drsmachado

Camarada, leia as regras do fórum.
Leia isto também http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor/8

Criar um atributo Connection e seus respectivos getters e setters na action.

G
drsmachado:
Camarada, leia as regras do fórum. Leia isto também http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor/8

Criar um atributo Connection e seus respectivos getters e setters na action.

Criei um atributo Connection e seus respectivos getters e setters na action, mas dando NullPointerException.
Criei um Filtro, onde penduro a conexão na requisição e declarei no web.xml. O código segue abaixo:

public class FiltroConexao implements Filter {
	@Override
	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {
		try {
			Connection conexao = new ConnectionFactory().getConnection();
			req.setAttribute("conexao", conexao);
			System.out.println("pendurei na requisição...");
			chain.doFilter(req, res);
			System.out.println("Vou fechar a conexão...");
			conexao.close();
		} catch (SQLException e) {
			throw new ServletException(e);
		}
	}

	@Override
	public void destroy() {

	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {

	}

}

Não consigo perceber onde estou errando.

von.juliano

Você pode criar um interceptor para isso, que além de Interceptor implemente ServletRequestAware, para que o struts tê de acesso ao request.

E usa as tags code, ninguém vai ler seu código se não usar.

G

von.juliano:
Você pode criar um interceptor para isso, que além de Interceptor implemente ServletRequestAware, para que o struts tê de acesso ao request.

E usa as tags code, ninguém vai ler seu código se não usar.

Obrigado pela dica das tags! Realmente faz toda diferença!
Usando Filtro e um atributo do tipo Connection com get e set na Action não seria suficiente para pegar essa conexão de volta na requisição?

Criado 5 de outubro de 2011
Ultima resposta 5 de out. de 2011
Respostas 4
Participantes 3