JTA(Java Transaction API) 글로벌 트랜잭션을 지원하는 트랜잭션 매너지를 지원하기 위한 API 애플리케이션에서는 기존의 방법대로 DB는 JDBC, 메시징 서버는 JMS 같은 API를 사용해서 필요한 작업을 수행한다. 단, 트랜잭션은 JDBC나 JMS API를 사용해서 직접 제어하지 않고 JTA를 통해 트랜잭션 매니저가 관리하도록 위임한다. 트랜잭션 매니저는 DB와 메시징 서버를 제어하고 관리하는 각각의 리소스 매니저와 XA 프로토콜을 통해 연결된다.
토비의 스프링 3.1 - 4장 예외 실습 중 한 구문(p314)이 자꾸 빨간줄이 떴다.assertThat(set.translate(null, null, sqlEx), is(DuplicateKeyException.class));내용은 "Wrong 1st argument type." T type의 아규먼트가 들어와야 하는데 DataAccessException type의 아규먼트가 들어왔다는 것이다.다른 junit 라이브러리를 import 하기도 했지만 달라진 건 없었다. 검색해보니 junit 버전에 따라 assertThat이 요구하는 아규먼트가 다른 것 같은데(본인은 junit 4.12 사용중) 위와 같을 땐 is 대신 instanceOf를 사용하면 된다고 한다. assertThat(set.translate..
DataAccessException과 예외 추상화댜앙한 데이터 엑세스 기술: JDBC, JDO, JPA, TopLink, ORM, iBatis 등DAO를 따로 만드는 이유는 데이터 엑세스 로직을 담은 코드를 성격이 다른 코드에서 분리해놓기 위해서다. 또한 전략 패턴을 적용해 구현 방법을 변경해서 사용할 수 있게 만들기 위해서이기도 하다. 그러나 클라이언트 입장에서는 DAO가 사용한 데이터 엑세스 기술에 따라 예외 처리 방법이 달라져야 한다.이 문제를 해결하기 위해 스프링은 DataAccessException 계층구조를 만들었다. DataAccessException은 자바의 주요 데이터 엑세스 기술에서 발생할 수 있는 대부분의 예외를 추상화하고 있다.
예외를 처리하는 일반적인 방법 예외 복구예외상황을 파악하고 문제를 해결해서 정상 상태로 돌려놓는 방법 예외처리 회피예외처리를 자신이 담당하지 않고 자신을 호출한 쪽으로 던져버리는 방법 예외 전환발생할 예외를 적절한 예외로 전환하여 던지는 방법목적1. 예외상황에 대에 의미를 분명하게 해줄 수 있는 예외로 바꿔주기 위해ex) SQLException -> DuplicateUserIdException이런 경우 중첩 예외로 만드는 것이 좋다목적2. 포장(wrap)하여 예외 처리를 쉽고 단순하게 만들기 위해중첩 예외를 이용해 새로운 예외를 만들고 원인이 되는 예외를 내부에 담아서 던지는 방식은 동일주로 예외처리를 강제하는 체크 예외를 언체크 에외인 런타임 예외로 바꾸는 경우 사용ex) SQLException -> ..
예외의 종류와 특징자바에서 throw를 통해 발생시킬 수 있는 예외는 크게 세 가지가 있다. Errorjava.lang.Error의 서브클래스들시스템 관련 에러주로 자바 VM에서 발생시키기 때문에 코드에서 잡을 수 없음 ex) OutOfMemoryError, ThreadDeath Exception과 체크 예외java.lang.Exception의 클래스와 서브클래스들크게 체크 예외와 언체크 예외로 구분됨체크 예외: RuntimeException 클래스를 상속하지 않은 Exception 서브 클래스체크 예외는 반드시 예외 처리 코드를 작성해야 함. 작성하지 않으면 컴파일 에러 발생(IOException, SQLException 등) RuntimeException과 언체크/런타임 예외언체크 예외: Runtim..
피해야 할 초난감 예외처리 코드 예외 블랙홀모든 예외는 처리돼야 한다. catch 블록을 이용해 에러 메시지를 출력한 것은 예외를 처리한 게 아니다.굳이 예외를 잡아서 뭔가 조치를 취할 방법이 없다면 잡지 말아야 한다. 메소드에 throws SQLException을 선언해서 메소드 밖으로 던지고 자신을 호출한 코드에 예외처리 책임을 전가해버려라. 무의미하고 무책임한 throws예외 이름을 정확하게 선언하지 않는 기계적인 throws Exception 처리
- Total
- Today
- Yesterday