VRaptor + tratamento de exceção

Oi pessoal,

Estou com problema ao lançar a exceção, pois uso uma arquiteura com DAO -> BO -> controller.
Minha regra de negocio está no BO, então se houver algum erro lanço BOExcption, ai está o problema pq uso o controle de transação do vraptor e só aparece o erro quando chega na jsp. Alguém tem uma solução para este problema.

Aqui deveria haver um erro de constraint, mas ele deixa passar pois somente faz o save quando retorno para jsp.

public Produto saveProduto(Produto model) throws BOException, ApplicationException {
		try {
			model = dao.save(model);
		}catch (ConstraintViolationException e){
			throw new BOException("There is an element with this name.");
		} catch (HibernateException e) {
			throw new ApplicationException(ACMSolutionUtil.getErrorStackTrace(e));
		}
		return model;
	}

Exemplo do metodo da controller.

	public void saveProduto(Produto produto) {
		try {
			produto = ProdutoBo.saveProduto(produto);
			result.use(Results.http()).body(produto.getId().toString());  
		} catch (BOException e) {
			session.setAttribute("erroMessage", new ErroMessage(e.getMessage()));
			result.notFound();
			e.printStackTrace();
		} catch (ApplicationException e) {
			result.forwardTo(ErrorController.class).returnException(new ErroMessage(e.getMessage()));
			e.printStackTrace();
		}
	}	

o erro só acontece qdo vc commita a transação, então vc precisa ou controlar transações no dao, ou fazer um session.flush() após fazer o save.

Ok, funcionou com o flush.

Mas para a organização do projeto, qual a melhor forma: fazer sempre o flush após o save e continuar usando o controle de transação do vraptor, ou usar o spring para controlar a transação no DAO e não usar o flush após o save?

Valeu mais uma vez Lucas…

algo parecido com isso sim…