상세 컨텐츠

본문 제목

chap 12 - 기초설정, 간단 게시판(트랜잭션처리 안한것)

Spring

by hongkd 2020. 1. 6. 16:45

본문

[ pom.xml ]

AOPWebTest [ pom.xml ] 에서 필요부분을 복사해 왔다.

 

위에는 오라클에서 트랜잭션 처리하는 부분이다.

 

[ web.xml ]

 

*.action 추가와 아래 UTF-8을 추가해주었다.

 

http://localhost:9090/trantestanno/   이라고 url 주소에 쳤을경우

시작페이지인 http://localhost:9090/trantestanno/index.action 으로 나오게끔 해주고 싶다.

[ web.xml ]에서 추가만 해주면 된다.

 

[ web.xml ]

 

DB를 설정해 보자.

mapper.xml 설정

 

[ root-context.xml ]

SpringBegin 에서 [ root-context.xml ]를 복사해와서 수정해 주었다.

 

위에 트랜잭션 처리를 하기위해서는 또 추가를 해줘야 한다.

 

[ root-context.xml ]

@어노테이션으로 사용해서 트랜잭션을 해주겠다. 라는 말이다.

위에가 트랜잭션을 처리해주는 .class 이다.

 

[ servlet-context.xml ]

SpringBegin 에서 [ servlet-context.xml ] 에서 복사해 와서 편집해왔다.

위에 처럼 추가를 하나 해주었다.

 

 

root-context.xml 에서 설정해준 mapper 만들기

 

[ trantestanno.xml ]

 

Controller 파일을 만들어야 한다.

[ NoticeController.java ]

 

의존객체(의존객체 주입 IOC,DI)를 해주어야 한다.

 

service, model 패키지를 만든다.

 

 

 

[ NoticeService.java ]

[ NoticeDAO.java ]

 

DAO에서 의존객체주입을 한다.

[ root-context.xml ]

[ NoticeDAO.java ]

[ NoticeService.java ]

[ NoticeController.java ]

 

SQL 파일 만들기

 

-- 고립성에 대한 설명

 

동일한 데이터에 대해서 DML(update)가 일어나고 있는데

여기서 검정색 화면의 update 후 엔터를 했을경우 commit 인지 rollback 인지 아직 해주지 않았기 때문에

흰색 화면에서 update 후 엔터를 했을경우 앞서 검정화면의 update를 해주었기때문에 자동으로

그 컬럼은 락이 걸린다.

즉, 흰색화면은 대기상태가 된다.

 

여기서 검정화면에서 commit 을 해주면 락이 풀린다.

그후 흰색화면은 update가 되어진다.

 

 

위에 check조약은 일부러 error를 발생하고자 만들어 놓았다.

 

여기서 글을 써서 point 가 3이 되어지면 error가 발생할 텐데 그전까지 개발자가 if 문을 사용하여 잡아주었는데 

이제는 트랜잭션 처리로 자동으로 rollback을 하여 글을 작성시 저장되어 지지 않게 한다.

 

[ NoticeController.java ]

 

Bootstrap을 사용한다.

[ index.jsp ] , [ header.jsp ], [ footer.jsp ] 는 교수님 파일을 받아왔다.

 

 

나의 포인트 만들기

 

[ header.jsp ]

 

나의 포인트 페이지 요청

 

[ NoticeController.java ]

[ InterNoticeService.java ]

[ NoticeService.java ]

 

[ InterNoticeDAO.java ]

[ NoticeDAO.java ]

 

[ trantestanno.xml ]

[ point.jsp ]

 

 

 

 

[ header.jsp ]

[ NoticeController.java ]

[ add_notransaction.jsp ]

교수님의 자료를 받아온 것이다.

위에는 input 태그인데 읽기전용 해놓은 것이다. 글쓰기 불가능

위의 내용은 취소번튼을 눌렀을시 새로고침 을 한것이다. 

이유는 위에 input태그의 읽기 전용 때문이다.

 

 

 

 

[ add_notransaction.jsp ]

[ NoticeController.java ]

[ NoticeVO.java ]

[ NoticeController.java ]

[ InterNoticeService.java ]

[ NoticeService.java ]

[ InterNoticeDAO.java ]

[ NoticeDAO.java ]

 

[ trantestanno.xml ]

[ addEnd_notransaction.jsp ]

[ NoticeController.java ]

[ InterNoticeService.java ]

[ NoticeService.java ]

[ InterNoticeDAO.java ]

[ NoticeDAO.java ]

[ trantestanno.xml ]

 

[ noticeList.jsp ]

글번호를 클릭하면 상세내용보기를 하는데 다음 시간에 이어서 한다.

여기서 3번째로 글을 써보면~~~

완료를 누르면 아래처럼 오류가 나온다.

이유는 ~

제약조건에 위배가 되었기 때문이다.

 

오류인데 위에처럼 글목록이 DB에 들어온다....

 

하지만 위에처럼 point 는 2 가 유지된다.

 

결론은 잘못된 것이다.....

 

즉, 모두 rollback 이 되어야 하는 것이다.

이 rollback 은 우리가 아닌 앞으로 스프링 컨테이너가 해줄것이다.

 

다음 시간에 이어서 한다.~

관련글 더보기