728x90
23. (MYBoard) dao, biz, controller
MYBoardDao.java(interface)에 추상메소드 추가
public String test();
MYBoardDaoImpl.java(class)에 메소드 추가
@Override
public String test() {
return null;
}
MYBoardBiz.java(interface)에 추상메소드 추가
public String test();
MYBoardBizImpl.java(class)에 메소드 추가
@Transactional
@Override
public String test() {
dao.insert(new MYBoardDto(0, "test", "transaction test", "transaction이 뭐였는지??", null));
String test = dao.test();
test.length();
return test;
}
biz에서 다오를 2개 호출합니다.
하나의 기능을 하기 위해 2개의 query문이 최소한의 작업단위를 묶어주기 위해서 하나처럼 동작합니다.
원자성을 만족하기위해 두개의 명령중 하나만 실패해도 실패해야합니다.
MYBoardController에 테스트를 위해
@RequestMapping("/test.do")
public String test() {
logger.info("[Controller] : test.do");
biz.test();
return "redirect:list.do";
}
를 추가해보겠습니다.
24. servlet-context.xml : tx
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.mvc.upgrade" />
<!-- interceptor -->
<interceptors>
<interceptor>
<mapping path="/*"/>
<beans:bean class="com.mvc.upgrade.common.interceptor.LoginInterceptor" />
</interceptor>
</interceptors>
<!-- transaction -->
<tx:annotation-driven/>
</beans:beans>
servlet-context.xml로 와서 Namespaces tx를 체크합니다.
그리고 Source로 와서
이거 2줄 작성해주세요.
25. applicationContext.xml : transactionManager
<!-- transaction manager -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
지금 트랜잭션을 걸어준 것은 오라클이 가지고 있는 트랜잭션 매니저가 동작하게 되어있는데 Spring이 관리하게 해주고 싶다면 applicationContext에 tracsation을 다시 만들어 주어야한다.
26. index.jsp
<a href="test.do">트랜잭션 테스트...</a>
test.do로 이동하는 버튼을 만들고 실행시켜서 클릭해보면
트랜잭션 때문에 500에러 뜨는게 정상입니다!
혹시 500에러가 안뜨고 흰화면이 뜬다면 LoginInterceptor에서 test.do 추가해주세요!(interceptor 포스팅 참고!)
728x90
'Java 관련 > Spring Legecy' 카테고리의 다른 글
[Spring] 파일 업로드 / 다운로드(file upload / download) (0) | 2022.04.09 |
---|---|
[Spring] security(비밀번호 암호화) (0) | 2022.04.08 |
[Spring] Interceptor(인터셉터) (0) | 2022.04.06 |
[Spring] Login / Regist(로그인 / 회원가입) (0) | 2022.04.05 |
[Spring] 스프링MVC - AOP (0) | 2022.04.04 |