Exceptions no dao com vraptor [Resolvido]

Galera, bom dia

To com uma dúvida e gostaria que me ajudassem.
Como o meu Dao é responsável por manipular os dados no banco, ele saberá se a manipulação deu certo ou não… pois bem, eu posso deixar pra ele a responsabilidade de informar ao usuário se deu sucesso ou falha, ou isso não seria responsabilidade dele?
Tenho comigo de que esse Result aí tá errado, dá impressão de que o Controller devia mostrar a mensagem, mas dessa forma eu não precisaria fazer a mesma coisa em todos os Controllers, eu apenas chamaria o gravar(…, …), outra coisa, como eu to utilizando i18n eu teria que passar também o localization para o gravar do Dao para informar o status no idioma correto.

Tenho na minha classe Dao hoje o seguinte:

 public boolean gravar(Object object, Result result) {
       try {
            Transaction tx = session.beginTransaction();
            session.update(object);
            tx.commit();
            result.include("status", "Sucesso");
            return true;
        } catch (StaleObjectStateException staleObjectStateException) {
            this.session.evict(object);
            this.session.getTransaction().rollback();
            result.include("status", "Falha, o registro já foi manipulado anteriormente");
            return false;
        } catch (HibernateException hibernateException) {
            this.session.evict(object);
            this.session.getTransaction().rollback();
            result.include("status", "Falha");
            return false;
        } catch (Exception exception) {
            this.session.evict(object);
            this.session.getTransaction().rollback();
            result.include("status", "Falha");
            return false;
        }
    }

Está correta a maneira como estou fazendo??

Obrigado.

Pelo que eu vi, seu DAO não está exibindo a mensagem ao usuário.

E necessário ter em mente que existe o papel de quem mostra a mensagem de erro, mas também existe o papel de quem prove a mensagem de erro.

É o DAO que consegue falar qual a mensagem errada, então ele deve passar.

Se for o caso de ter um arquivo com as mensagens de erros, deve passar apenas a chave. Ao invés de “Falha, o registro já foi manipulado anteriormente” retornar “erro.arquivoJaFoiManipulado” e com isso a view iria buscar o valor no bundle.

olá Hebert Coelho

Na minha view eu tenho o parametro “status” que foi setada no Dao na linha

result.include("status", "Falha, o registro já foi manipulado anteriormente");  

A minha dúvida era realmente conceitual (digamos assim). Essa linha acima está na classe correta? (aparentemente sim) pois é ela quem sabe se o erro ocorreu e qual erro ocorreu e então o meu Dao identifica o status e deixa pronto na view pra ser exibida ao usuário.

Pela sua resposta eu entendi que o que estou fazendo está correto, exeto a mensagem em si onde eu devo passar a chave, certo?

Obrigado

[quote=Edifran]olá Hebert Coelho

Na minha view eu tenho o parametro “status” que foi setada no Dao na linha

result.include("status", "Falha, o registro já foi manipulado anteriormente");  

A minha dúvida era realmente conceitual (digamos assim). Essa linha acima está na classe correta? (aparentemente sim) pois é ela quem sabe se o erro ocorreu e qual erro ocorreu e então o meu Dao identifica o status e deixa pronto na view pra ser exibida ao usuário.

Pela sua resposta eu entendi que o que estou fazendo está correto, exeto a mensagem em si onde eu devo passar a chave, certo?

Obrigado[/quote]Exato, pelo menos penso assim.
Eu vejo que o DAO deveria informar apenas a chave do erro pois se um dia a mensagem mudar, o DAO (que nunca deveria saber disso) seria afetado.

Valeu, obrigado Hebert Coelho.
Abraço.