Olá pessoal,
Acho que vocês irão ver muitos posts meus por aqui falando de VRaptor3.. :roll: :wink:
Bom.. eu sou iniciante total... mas já de cara quero logo aprender o VRaptor3!! :D Estou usando o blank-project do VRaptor3, porém eu tô seguindo a apostila Fj28 da Caelum e lá eles usam o VRaptor 2.5 eu acho. :roll:
É o seguinte, cheguei na parte que configura o interceptor no meu projeto.
Eu fiz todo o código da apostila no entanto to achando que na versão 3 do Vraptor deve ser diferente a configuração do Interceptor.
Na anotação @InterceptedBy do controller, a classe DaoInterceptor.class fica grifada de vermelho.
Segue meu controller:
package br.com.jcomputacao.vraptor.controller;
import br.com.caelum.vraptor.Resource;
import br.com.jcomputacao.vraptor.dao.Dao;
import br.com.jcomputacao.vraptor.dao.DaoFactory;
import br.com.jcomputacao.vraptor.dao.ProdutoDao;
import br.com.jcomputacao.vraptor.loja.DaoInterceptor;
import br.com.jcomputacao.vraptor.model.Produto;
import java.sql.SQLException;
import java.util.List;
import org.vraptor.annotations.InterceptedBy;
@Resource
@InterceptedBy(DaoInterceptor.class) << A classe fica grifada de vermelho aki
public class ProdutosController {
private final DaoFactory daofactory;
public ProdutosController(DaoFactory daofactory) {
this.daofactory = daofactory ;
}
public void form () {
}
public void adiciona(Produto produto) throws SQLException {
this.daofactory.beginTransaction();
this.daofactory.getProdutoDao().adiciona(produto);
this.daofactory.commit();
}
public List<Produto> lista() {
return dao.listaTodos();
}
}
Segue meu DaoInterceptor:
package br.com.jcomputacao.vraptor.loja;
import org.vraptor.LogicException;
import org.vraptor.LogicFlow;
import org.vraptor.annotations.Out;
import org.vraptor.view.ViewException;
import br.com.caelum.vraptor.InterceptionException;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;
import br.com.caelum.vraptor.resource.ResourceMethod;
import br.com.jcomputacao.vraptor.dao.DaoFactory;
public class DaoInterceptor implements Interceptor {
private final DaoFactory factory = new DaoFactory();
public void intercept(LogicFlow flow) throws LogicException, ViewException {
// executa a lógica
flow.execute();
// se sobrou transação sem comitar, faz rollback
if (factory.hasTransaction()) {
factory.rollback();
}
factory.close();
}
@Out(key="br.com.jcomputacao.vraptor.dao.DaoFactory")
public DaoFactory getFactory() {
return factory;
}
@Override
public boolean accepts(ResourceMethod arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public void intercept(InterceptorStack arg0, ResourceMethod arg1,
Object arg2) throws InterceptionException {
// TODO Auto-generated method stub
}
}
Meu DaoFactory:
package br.com.jcomputacao.vraptor.dao;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.jcomputacao.vraptor.model.Produto;
import br.com.jcomputacao.vraptor.util.HibernateUtil;
import br.com.jcomputacao.vraptor.dao.Dao;
public class DaoFactory {
private final Session session;
private Transaction transaction;
public DaoFactory() {
session = HibernateUtil.getSession();
}
public void beginTransaction() {
this.transaction = this.session.beginTransaction();
}
public void commit() {
this.transaction.commit();
this.transaction = null;
}
public boolean hasTransaction() {
return this.transaction != null;
}
public void rollback() {
this.transaction.rollback();
this.transaction = null;
}
public void close() {
this.session.close();
}
public Dao<Produto>getProdutoDao() {
return new Dao<Produto>(this.session, Produto.class);
}
}
