VRaptor: Controller + Service + GenericDAO

5 respostas
daogenericvraptorjava
W

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 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 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!

5 Respostas

J

Sem dizer o erro vai ficar difícil alguem te ajudar. VRaptor é independente de padrão de persistencia.

W

No projeto atual não uso o GenericDao, e para cada modelo DAO eu uso a anotação @Component, mas quando anoto na classe que usa o GenericDao retorna um erro. Eu tentei pegar um exemplo para o VRaptor com GenericDao, mas não encontrei.

W

Esse é o erro que o console me retorna.

10:34:12,441 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor PendingTasksInterceptor

Jan 05, 2018 10:34:12 AM org.apache.catalina.core.StandardWrapperValve invoke

10:34:12,459 DEBUG [TaskLogger          ] Task TaskOrcamentoController.enviaLembretes was successfully scheduled. Trigger Expression Cron: 0 0 4 ? * *

10:34:12,459 DEBUG [TaskLogger          ] Task TaskOrcamentoController.enviaLembretes was successfully scheduled. Trigger Expression Cron: 0 0 4 ? * *

GRAVE: Servlet.service() for servlet [jsp] in context with path [] threw exception

java.util.ConcurrentModificationException

10:34:12,459 DEBUG [TaskLogger          ] Task TaskOrcamentoController.enviaLembretes was successfully scheduled. Trigger Expression Cron: 0 0 4 ? * *

at java.util.HashMap$HashIterator.nextEntry(Unknown Source)

10:34:12,459 DEBUG [TaskLogger          ] Task TaskOrcamentoController.enviaLembretes was successfully scheduled. Trigger Expression Cron: 0 0 4 ? * *

at java.util.HashMap$EntryIterator.next(Unknown Source)

at java.util.HashMap$EntryIterator.next(Unknown Source)

at br.com.caelum.vraptor.tasks.jobs.request.PendingTasksInterceptor.schedulePendingTasks(PendingTasksInterceptor.java:52)

at br.com.caelum.vraptor.tasks.jobs.request.PendingTasksInterceptor.intercept(PendingTasksInterceptor.java:41)

at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)

at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)

at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:93)

at br.com.caelum.vraptor.ioc.guice.GuiceProvider.provideForRequest(GuiceProvider.java:82)

at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:99)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)

at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Unknown Sourc
J

Posta a classe com problema, que usa o GenericDao.

J

Vi agora que tinha postado no início. Veja se essas dicas ajudam:


Senao, tente ver diretamente com os desenvolvedores do VRaptor, pois é um framework pouco usado e vai ter dificuldades mesmo em encontrar soluções prontas.

Criado 5 de janeiro de 2018
Ultima resposta 7 de jan. de 2018
Respostas 5
Participantes 2