'2012/04/22'에 해당되는 글 1건

  1. 2012.04.22 [2장] Spring 을 이용한 Database 및 Transaction Setting 2
Spring2012. 4. 22. 00:03
  1. 목표
    Database 연결과, Transction 을 Setting 과 Test를 한다.

  2. 학습
  • Default Setting Information
    • Add Library
  • commons-dbcp - Database Connection Pool은 DBCP 를 이용한다.
  • commons-pool - DBCP를 사용하기 위한 필수 Library
  • 접속을 원하는 Database 의 Driver
  • aopalliance - Spring AOP를 사용하기 위한 Library
  • jakarta-oro - Spring AOP를 사용하기 위한 Library
  • com.springsource.org.aspectj.tools -  Spring AOP를 사용하기 위한 Library


  • Add context
    • datasource-context.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


<!-- hsql  -->

  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="net.sf.log4jdbc.DriverSpy"/>

<property name="url" value="jdbc:log4jdbc:hsqldb:hsql://localhost/javaworld"/>

<property name="username" value="sa"/>

</bean>

<!-- hsql  -->

</beans>


    • transaction-context.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">


<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

 <property name="dataSource" ref="dataSource"/>

</bean>


<!-- if do you want Annotaion 

참조 : http://www.egovframe.org/wiki/doku.php?id=egovframework:rte:psl:transaction:declarative_transaction_management

-->

<tx:annotation-driven transaction-manager="txManager"/>

<!-- if do you want Annotaion  -->


<!-- if Method throw Exception, rollback! -->

<tx:advice id="txAdvice" transaction-manager="txManager">

<tx:attributes>

<tx:method name="*" rollback-for="Exception"/>

</tx:attributes>

</tx:advice>

<!-- if Method throw Exception, rollback! -->


<!-- Aop setting -->

<aop:config>

<aop:pointcut id="requiredTx"

expression="execution(* kr.pe.lahuman.service.impl.*Impl.*(..))"/>

<aop:advisor advice-ref="txAdvice"

pointcut-ref="requiredTx" />

</aop:config>

<!-- Aop setting -->

</beans>


  • 주요 Class
    • TestDao

package kr.pe.lahuman.service.impl;


import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.Collection;

import java.util.HashMap;

import java.util.List;

import java.util.Map;


import javax.sql.DataSource;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.core.RowMapper;

import org.springframework.stereotype.Repository;

import org.springframework.transaction.annotation.Transactional;


@Repository

public class TestDao {


@Autowired

public void setDataSource(DataSource dataSource) {

this.jdbcTemplate = new JdbcTemplate(dataSource);

}

private JdbcTemplate jdbcTemplate;

public String getData(String str) {

return str;

}

public void deleteAllData(){ 

this.jdbcTemplate.update(

"delete from test_str");

}

private void insertMethod(String str) {

this.jdbcTemplate.update(

"insert into test_str(str) " +

"values(?)", 

str);

}

public String insert(String str) throws Exception{

//insert

insertMethod(str);

return str;

}

public Collection<Map<String, String>> getList()throws Exception{

Collection<Map<String, String>> results = this.jdbcTemplate.query(

   "select str from test_str",

   new RowMapper() {


       public Object mapRow(ResultSet rs, int rowNum) throws SQLException {

           Map<String, String> map = new HashMap<String, String>();

           map.put("str", rs.getString("str"));

           return map;

       }

   });

return results;

}

}




    • TestServiceImpl

package kr.pe.lahuman.service.impl;


import java.util.Collection;

import java.util.Map;


import kr.pe.lahuman.service.TestService;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.transaction.PlatformTransactionManager;

import org.springframework.transaction.TransactionStatus;

import org.springframework.transaction.annotation.Transactional;

import org.springframework.transaction.support.DefaultTransactionDefinition;


@Service

public class TestServiceImpl implements TestService {


@Autowired

private TestDao testDao;


@Override

public String getData(String str) throws Exception{

return testDao.getData(str);

}



@Override

@Transactional(rollbackFor=Exception.class) //anotation을 사용할 경우

public String insert2Error(String str) throws Exception {

testDao.insert(str);

testDao.insert(str);

testDao.insert(str);

testDao.insert(str);

testDao.insert(str);

testDao.insert(str);

//강제로 Exception 발생

throw new Exception("Insert Error");

}



@Override

public String insert(String str) throws Exception {

return testDao.insert(str);

}



@Override

public Collection<Map<String, String>> getList() throws Exception {

return testDao.getList();

}



@Override

public void deleteAllData() throws Exception {

testDao.deleteAllData();

}


}



첨부 파일 : 


RestWeb.zip.001


RestWeb.zip.002


Posted by lahuman