Pessoal, to com o seguinte problema:
Tenho que lançar uma exceção (própria) entre três módulos, em camadas diferentes, assim:
Camada de Infra - UsuarioDAOJdbc ( onde a excessão pode ocorrer )
public Usuario obterUsuarioPorUsername(String username) throws DAOException{
Usuario usuario = null;
String sql = "select * from usuario where login = ?";
PreparedStatement st = null;
ResultSet rs = null;
Connection con = DBUtil.getInstance().getConnection();
try {
st = con.prepareStatement(sql);
st.setString(1, username);
rs = st.executeQuery();
if (rs.next()) {
String nome = "";
String user = "";
String senha = "";
usuario= new Usuario(nome,user,senha);
usuario.setNome(rs.getString("nome"));
usuario.setUsername(rs.getString("login"));
usuario.setPassword(rs.getString("senha"));
}
} catch (SQLException ex) {
throw new DAOException(ex);
} finally {
try {
con.close();
DBUtil.getInstance().limpaCon();
} catch (SQLException e) {
throw new DAOException(ex);
}
}
return usuario;
}
Camada de Domínio - UsuarioRepositório (a “ponte” entre a camada da aplicação e a de infra)
public class UsuarioRepositorio {
private IUsuarioDAO usuarioDao = new UsuarioDAOJdbc();
public Usuario obterUsuarioPorUsername(String username) throws RepositorioException
{
return usuarioDao.obterUsuarioPorUsername(username);
}
}
Camada de aplicação- UsuarioRepositório (a “ponte” entre a camada da aplicação e a de infra)
...
UsuarioRepositorio ur = new UsuarioRepositorio();
try {
Usuario usuario = ur.obterUsuarioPorUsername(username);
if (usuario == null) {
return "/login.jsp?mensagem=Acesso Restrito";
} else {
System.out.println("Menu!!!!");
request.getSession().setAttribute("username", username);
return "/menu.jsp";
}
// Onde a exceção deve ser tratada
} catch (RepositorioException e) {
String message = "Houve um erro.";
return "/login.jsp?mensagem=Deu problema de excessão !!!!";
}
}
A questão é: Como “escrevo” as classes DAOException e RepositorioException , afim de que lançem a exceção desde a camada de DAO (usando DAOException) até a camada da aplicação (usando RepositorioException) ?
Anida não consegui compreender bem esse esquema de “lançar” exceções para uma outra classe “tratar”.
Agradeço qualquer ajuda
Grande abraço a todos
Fábio
