SPRING
2016.03.03 / 19:02

Spring - Spring + iBatis ¿¬µ¿½Ã iBatis Transaction ½ÇÇà ¾ÈµÇ´Â ¹®Á¦

dwsi
Ãßõ ¼ö 294

ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÏ´Ù TransactionÀ» ¼öÇàÇØ¾ß ÇÏ´Â query°¡ ÀÖ¾ú½À´Ï´Ù. ±×¶§ Àú´Â iBatisÀÇ TransactionÀ» ÅëÇØ ´ÙÀ½°ú °°ÀÌ ±¸ÇöÇÏ¿´½À´Ï´Ù.
(Spring¿¡¼­ Á¦°øÇÏ´Â SqlMapClientTemplate¸¦ ÀÌ¿ëÇÏ¿© iBatis¸¦ »ç¿ëÇß½À´Ï´Ù)

SqlMapClient sqlClient = template.getSqlMapClient();
try {
	sqlClient.startTransaction();
	template.insert("turotial.dataInsert", data);
	template.insert("tutorial.updateInfo", data);
	sqlClient.commitTransaction();
	return true;
} catch (SQLException e) {
	e.printStackTrace();
	return false;
} finally {
	sqlClient.endTransaction();
}



À§¿Í °°ÀÌ insertÇÏ°í updateºÎºÐÀ» iBatisÀÇ transactionÀ¸·Î ¹­À¸·Á°í ÇÏ¿´½À´Ï´Ù.

ÇÏÁö¸¸ ¿ì¿¬Ä¡ ¾Ê°Ô iBatisÀÇ TransactionÀÌ ¸ÔÈ÷Áö ¾Ê´Â°ÍÀ» ¹ß°ßÇÏ¿´½À´Ï´Ù. ¿ÖÀÌ·²±î °í¹ÎÇÏ´Ù°¡ Spring¿¡¼­ Á¦°øÇÏ´Â TransactionÀ» ÅëÇØ ±¸ÇöÇØ º¸±â·Î ÇÏ¿´°í, °á±¹ TransactionÀÌ Á¦´ë·Î µ¿ÀÛÇϴ°ÍÀ» È®ÀÎ ÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù.

Àú°°Àº °æ¿ì´Â Spring project¸¦ ÇÒ¶§ db¿¬µ¿¿¡ °ü·ÃÇÑ ¸ðµç beanµéÀ» applicationContext-iBatis.xml¿¡ ¸ô¾Æ µÓ´Ï´Ù.( °ü¸®ÇϱⰡ ´õ ÆíÇÏ´õ¶ó±¸¿ä.. °³ÀÎÀû »ý°¢ÀÔ´Ï´Ù.^^)

Àú´Â ÀÌ ibatis.xml ¿¡ ibatis¸¦ ÅëÇØ DB¿¡ Á¢±ÙÇÒ dataSource beanÀ» ¼³Á¤ÇØ µÎ¾ú½À´Ï´Ù.

1. transactionManager¿Í transactionTemplateÀ» beanÀ¸·Î µî·ÏÇÕ´Ï´Ù.

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
	<property name="jndiName" value="java:comp/env/jdbc/tutorial"/>
</bean>
	
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
	<property name="configLocation" "classpath:sqlMapConfig.xml" />
	<property name="dataSource" ref="dataSource" />
</bean>
	
<bean id="template"
          class="org.springframework.orm.ibatis.SqlMapClientTemplate"
          p:sqlMapClient-ref="sqlMapClient"/>
    
<bean id="transactionManager" "org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/>
    
<bean id="transactionTemplate"  
      class="org.springframework.transaction.support.TransactionTemplate"
      p:transactionManager-ref="transactionManager"/>



À§¿Í °°ÀÌ transactionManager¿Í transactionTemplate beanÀ» dataSource¸¦ ÅëÇØ »ý¼ºÇÕ´Ï´Ù.

2. transactionTemplate¸¦ »ç¿ëÇÒ bean¿¡ property·Î ¼³Á¤ÇÕ´Ï´Ù.

<bean id="tutorialDAO" class="tutorial.TutorialDAOImpl">
	<property name="template" ref="template"/>
	<property name="transactionTemplate" ref="transactionTemplate"/>
 </bean>



3. ÇØ´ç DAOImpl Ŭ·¡½º¿¡¼­ field·Î transactionTemplate¿Í setter method¸¦ ±¸ÇöÇÏ¿© DI°¡ µÇµµ·Ï ÀÛ¾÷ÇØ ÁÝ´Ï´Ù.

4. ´ÙÀ½°ú °°ÀÌ transactionTemplate¸¦ ÅëÇØ transactionÀ» ±¸ÇöÇÕ´Ï´Ù.

public boolean transactionTest(final TutirialVO vo ) throws SQLException{
	boolean result = false;
	result = (Boolean)transactionTemplate.execute( new TransactionCallback() {
		public Object doInTransaction(TransactionStatus status) {
			try {
				template.insert("Tutorial.insertData", vo);
				template.insert("Tutorial.updateData", vo);
				return true;
			}catch (Exception e){
				e.printStackTrace();
				status.setRollbackOnly();
				return false;
			}
		}
	});
	return result;
}


À§¿Í °°ÀÌ transactionTemplate.execute¸¦ ½ÇÇàÇÏ°í Àü´ÞÀÎÀÚ·Î TransactionCallBack ÀνºÅϽº¸¦ Àü´ÞÇϴµ¥, ÀϹÝÀûÀ¸·Î TransactionCallbackÀÌ ÀÎÅÍÆäÀ̽º À̱⠶§¹®¿¡ new·Î °´Ã¼¸¦ »ý¼ºÇÏ°í doInTransaction method¸¦ ±¸ÇöÇÕ´Ï´Ù.