VRaptor: Controller + Service + Dao

15 views
Skip to first unread message

Wellington Alves das Neves

unread,
Jan 5, 2018, 10:03:59 AM1/5/18
to caelum-vraptor

Bom dia,

Estou em dúvida de como utilizar um Generic Dao no Vraptor, pois criei as seguintes classes;

Interface GenericDao

public interface GenericDao<E,K> {
    void add(E entity) ;
    void saveOrUpdate(E entity) ;
    void update(E entity) ;
    void remove(E entity);
    E find(K key);
    List<E> getAll() ;
}

Implementação do GenericDao

public abstract class GenericDaoImpl<E, K extends Serializable> implements GenericDao<E, K> {

    protected final Session session;
    protected final Class<E> clazz;
    protected Class<? extends E> daoType;
    private Transaction tx;

    @SuppressWarnings("unchecked")
    protected GenericDaoImpl(Session session) {
        this.session = session;
        this.clazz = (Class<E>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

        Type t = getClass().getGenericSuperclass();
        ParameterizedType pt = (ParameterizedType) t;
        daoType = (Class) pt.getActualTypeArguments()[0];
    }

    @Override
    public void add(E entity) {
        this.tx = this.session.beginTransaction();
        this.session.persist(entity);
        this.session.flush();
        this.tx.commit();
    }

    @Override
    public void saveOrUpdate(E entity) {
        this.tx = this.session.beginTransaction();
        this.session.merge(entity);
        this.session.flush();
        this.tx.commit();
    }

    @Override
    public void update(E entity) {
        this.tx = this.session.beginTransaction();
        this.session.merge(entity);
        this.session.flush();
        this.tx.commit();
    }

    @Override
    public void remove(E entity) {
        this.tx = this.session.beginTransaction();
        this.session.delete(entity);
        this.tx.commit();
    }

    @Override
    public E find(K key) {
        return null; 
    }

    @Override
    public List<E> getAll() {
        return null; 
    }
}

Para cada modelo vou criar uma interface como a seguinte;

Interface PacoteDao

public interface IPacoteDao extends GenericDao<Pacote, Integer>{
    void alterarSituacao(Long pacoteId, Pacote.PacoteSituacao situacao);
    void removerAgendamento(Agendamento agendamento, Boolean remover, HistoricoAcesso log);
    Long contarAgendamentosPendentes(Unidade unidade, LocalDate startDate, LocalDate endDate);
    Long contarPorSituacao(Unidade unidade, Pacote.PacoteSituacao situacao);
    Long contarFinalizamNoPeriodo(Unidade unidade, LocalDate startDate, LocalDate endDate);
    List<PacoteView> listar(Unidade unidade, Boolean novos, Boolean concluidos,
                            Boolean cancelados, LocalDate periodoInicio, LocalDate periodoFim);

}

Implementação PacoteDao

public class PacoteDaoImpl extends GenericDaoImpl<Pacote, Integer>
        implements IPacoteDao {

    protected PacoteDaoImpl(Session session) {
        super(session);
    }

    @Override
    public void alterarSituacao(Long pacoteId, Pacote.PacoteSituacao situacao) {}    
    @Override
    public void removerAgendamento(Agendamento agendamento, Boolean remover, HistoricoAcesso log) {}

    @Override
    public Long contarAgendamentosPendentes(Unidade unidade, LocalDate startDate, LocalDate endDate) {}

    @Override
    public Long contarPorSituacao(Unidade unidade, Pacote.PacoteSituacao situacao) {}

    @Override
    public Long contarFinalizamNoPeriodo(Unidade unidade, LocalDate startDate, LocalDate endDate) {}

    @Override
    public List<PacoteView> listar(Unidade unidade, Boolean novos, Boolean concluidos, Boolean cancelados, LocalDate periodoInicio, LocalDate periodoFim) {}

}

Quando eu incluo a anotação @Component na classe PacoteDaoImpl ocorre um erro ao rodar o projeto. Como é a primeira vez que implemento o uso de GenericDao no Vraptor, estou com dificuldades para implementá-lo.

A minha idéia é dividir os escopos; Controller --> Service --> Dao.

Conto com a ajuda!

Giovanny Brandalise

unread,
Jan 5, 2018, 11:42:10 AM1/5/18
to caelum-vraptor

Wellington poderia postar o erro que acontece ao executar o projeto para facilitar a análise por favor?
Reply all
Reply to author
Forward
0 new messages