Olá tenho uma aplicação que usa na camada de Persistencia JPA tenha a interface Dao que e implementado pela classe concreta
GenericaJPADao desta forma:
public class GenericJPADao<T> implements Dao<T>{
private EntityManager entityManager; //Injetado por IoC
private Class persistenceClass;
public GenericJPADao(Class persistenceClass){
this.persistenceClass=persistenceClass;
}
public void delete(T entity) throws DaoException {
try {
entityManager.remove(entity);
} catch (IllegalStateException e) {
throw new DaoException(e);
}catch (IllegalArgumentException e) {
throw new DaoException(e);
}catch (TransactionRequiredException e) {
throw new DaoException(e);
}catch (Exception e) {
throw new DaoException(e);
}
}
Minha duvida e a seguinte olhando a API do JPA, este metodo delete pode lançar estas tres exception, mas eu nao quero que minha camada de Negocios conheça estas exception, entao criei DaoException, agora neste caso faz diferença fazer isto:
Sei que isto eh ruim(coisa de preguiçoso), mas no caso acima nao vejo ganho nenhum a este. Logico que em outros locais quando quero alguma excessao em particular faço isso:
public void save(T entity) throws ConstraintViolationDaoException, DaoException {
try {
entityManager.persist(entity);
} catch (EntityExistsException e) {
throw new ConstraintViolationDaoException(e);
}catch (Exception e) {
throw new DaoException(e);
}
}
Mas no caso acima, achei igual fazer catch-exception para tudo.
Na minha opnião, exceções desse tipo não devem ser captiradas pela aplicação, deixe que o container faça o tratamento delas, redirecionando para uma pagina de erro amigável.
Encapsular exceções dessa forma só vai encher o código de try-catchs que não agregam nada para a aplicação.
[quote=Rubem Azenha]Na minha opnião, exceções desse tipo não devem ser captiradas pela aplicação, deixe que o container faça o tratamento delas, redirecionando para uma pagina de erro amigável.
Encapsular exceções dessa forma só vai encher o código de try-catchs que não agregam nada para a aplicação.[/quote]
Rubem como eu poderia fazer esse tratamento no container, quando estou usando um framework, que encapsula estas exceções
em exceções mais genéricas?
Pra grande maioria dos casos, isso é suficiente.
Apenas configure corretamente o sistema de logging do seu container para escrever as stacktraces em um arquivo de log.