2010-08-23 4 views
2

DAO에서 예외를 처리하는 관리 방법을 생각해 내고 있습니다. 일반적으로 내 DAO의 방법은 다음과 같습니다 에러가 나는 사용자 지정 오류 화면을 표시 한 후 모든 server.log에 기록됩니다 위의 코드와 전면 페이지에서 발생자바에서 예외를 처리 할 수있는 편리한 방법

public ArrayList fetchColors (String id) 
{ 
    //call iBatis SqlMapClient 
    //put results in a list 
    //return list 
} 

합니다. 그러나 stacktrace를 server.log에 넣지 않고 대신 my_app.log에 쓰려면 (log4j를 사용하고 있습니다). 그래서

난 다음에 방법 위의 변환 계획입니다 :

public ArrayList fetchColors (String id) throws SqlException 
{ 
    try { 
    //call iBatis SqlMapClient 
    //put results in a list 
    } 
    catch (SqlException e) 
    { 
     logger.log (e); 
     throws e; 
    } 
    //return list 
} 

질문 :

  • 이 문제를 접근하는 가장 좋은 방법이 있나요?
  • 나는 DAO에서 많은 메소드를 가지고 있고 각각의 메소드에 대해 위의 작업을 수행하는 것은 PITA가 될 것이다. DAO의 모든 메소드에 똑같은 것을 적용 할 수있는 쉬운 방법이 있는가?
+0

이것이 나에게 가장 좋은 방법이라고 생각됩니다. 자바는 매우 장황한 언어입니다. – Mike

답변

2

A '콜백'예외를 처리 한 곳에서 로그인하려면 솔루션 :

//Skeleton to handle exception and log in one place 
public void doBusiness(CallBack callBack) throws SqlException{ 
    try{ 
     callBack.invoke(); 
    }catch(SqlExceptione){ 
     logger.log (e); 
     throws e; 
    } 
} 

이 좋아 호출 :

interface CallBack{ 
    void invoke(); 
} 

같은 골격 방법을 정의

public ArrayList fetchColors (String id) throws SqlException{ 
    doBusiness(new CallBack(){ 

     public void invoke() { 
       //call iBatis SqlMapClient 
       //put results in a list  
      }   
    }); 
} 
4

여기 AOP를 사용할 수 있습니다. 예 :

또한 메모로 로그 파일에서 스택 추적을 볼 수 있도록 항상 로그해야합니다.

logger.log (e, e);

관련 문제