Implementar Filtro com DAO Genérico: VRaptor

1 resposta
Giulliano

Fala ae glr…seguinte estou tendo dificuldades para aplicar um filtro (Interceptor) com o VRpator. Estou seguindo a apostila da Caelum mas não estou fazendo o mesmo exemplo da apostila.

Eu tenho um DAO que uso para qualquer objeto, conforme código a seguir:

public class HibernateDAO<E> implements DAO<E> {

	private Session sessao;
	private Transaction transacao;
	
	//Construtor cria uma sessao do Hibernate
	public HibernateDAO(){
		this.sessao = FabricaSessao.getSession(sessao);
	}

	public void beginTransaction() {
		this.transacao = this.sessao.beginTransaction();
	}

	public void close() {
		this.sessao.close();
		this.sessao = null;
	}

	public void commit() {
		this.transacao.commit();
		this.transacao = null;
	}

	public boolean hasTransaction() {
		return transacao != null;
	}

	public void rollBack() {
		this.transacao.rollback();
	}
	
               //alguns CRUD e tal
}

Então preisaria implementar um Interceptor para verificar se alguma transação ficou em aberta:

public void intercept(LogicFlow flow) throws LogicException, ViewException {

		//executa as logics
		flow.execute();
		
		//Verifica se Existem transações em aberto e realiza o Roll Back
		if(HibernateDAO.this.hasTransaction()) //ISSO NÃO FUNCIONA
			HibernateDAO.this.getTransaction().rollback(); //ISSO TB NÃO FUNCIONA
		
	}

}

meu problema é : Como vou chamar a função hasTransaction sem que eu precise passar o tipo Genérico ? Se isso for possível.

Valews

1 Resposta

Giulliano

Bom…como ninguém se habilitou eu dei uma olhada no Pattern “factory”. E achei muito fraco comparando ele com o meu DAO. Para todo meu sistema eu tenho um único DAO que serve para qualquer classe. (Através do Generics)

Com o DAO factory eu preciso reescrever um DAO diferente para cada domínio que precise de persitência e fazer com que esse DAO implemente minha interface. Muito mais linhas de código e código repetido.

Criado 31 de janeiro de 2008
Ultima resposta 31 de jan. de 2008
Respostas 1
Participantes 1