방법 1) <tx:advice> XML을 이용한 방법 -> 패턴을 지정하여 일치하는 메서드 호출 시 자동으로 트랜잭션 제어(servlet-context.xml)
방법 2) @Transactional 선언적 트랜잭션 처리 방법
-> RunTimeException(Unchecked Exception) 처리를 기본값으로 갖음.
checked Exception
예외처리 필수 -> SQL 관련 예외, 파일 업로드 관련 예외
Unchecked Exception
예외처리 선택
@Transactional(rollbackFor= {Exception.class})
rollbackFor : rollback을 수행하기 위한 예외의 종류를 작성
else { // 이미지 삽입 실패
// 강제로 예외 발생시켜서 rollback을 수행하게 함
// -> 사용자 정의 예외
throw new InsertFailException();
}
board.model.exception.InsertFailException
// 사용자 정의 예외 생성 방법
// 1) 기존에 존재하는 예외 클래스 하나를 상속 받음
// 단, RuntimeException 과 상속관계인 예외를 상속 받으면 unchecked Exception이 된다.
// 2) 생성자 작성시 super() 생성자를 이용해서 코드를 구현
public class InsertFailException extends RuntimeException{
public InsertFailException() {
super("게시글 삽입 실패");
}
public InsertFailException(String message) {
super(message);
}
}
throws IOException (controller, service, serviceImpl)