Duvidas sobre controle de exceptions entre camadas

Meu sistema tem a seguinte arquitetura:

MVC(Struts)
Business Delegate
SessionFacade(EJB stateless)
BusinessObject
DAO(JDBC)
TO e VL para trafegar os dados

Atualmente controlo os erros da seguinte maneira:

Os meu TO e VL tem dois atributos, int codErro e String msg. Uso estes atributos para definir o codigo e a mensagem de erro, na camada de apresentação verifico estes atributos com a intenção de passar uma mensagem amigavel ao cliente.

Estou querendo mudar, quer controlar as exception e disponibilizar um logging para a aplicacao, neste caso não utilizaria mais o modelo acima citado.no caso seria criado DAOException e BusinessException onde os erros seriam generalizados nestas exception, ou seja, a camada de business só receberia um DAOException, que seria lancado pela camada
de persistencia, neste caso a camada de persistencia trataria e faria o log detalhado do erro e depois lancava uma DAOException, a camada de negocio faria o mesmo e lancaria para camada de apresentacao que trataria a BusinessException e mandaria uma mensagem de acordo para o
cliente(browser)

O que voces acham, como voce tratam este assunto de tratamento de erros e a propagação dele entre as camadas…

Algum material na web para leitura complementar seria bem vindo…

Obrigado galera.

Cuidado para não fazer muito wrapping de exceptions e não gerar logs repetidamente para o mesmo erro.

Então louds, estou tentando tomar o maximo de cuidado para isto, pretendo logar nas camadas onde é o contexto do erro.

Mas voce acha a que esta opcao e melhor do que a minha atual, ou seja controlar atraves do atributos do to e do vo???

Na segunda opcao terei que criar varias checked exceptions, não seria um problema para o tamanho do sistema, perfomance, etc…

Obrigado pelo post…

Usar exception é uma solução muito superior.

Quanto ao uso de exceptions checadas ou não, esse é um longo debate, no forum devem ter algumas threads sobre o assunto. Minha opinião é que elas só devem ser checadas se existir algo que o cliente possa ou deva fazer em resposta (cancelar transação, fechar arquivo, retentar, etc).

Então se no teu sistema uma DAOException é fatal, não tem resposta senão avisar o usuario que não deu certo, coloca ela estendendo de RuntimeException. O que você pode fazer é colocar alguns atributos a mais nela e tua camada de negocios agarrar, acrescentar informação de contexto e re-arremessar a exception.

Beleza louds…

Agradeço suas palavras…

Valeu!!!