Spring - Spring + iBatis ¿¬µ¿½Ã iBatis Transaction ½ÇÇà ¾ÈµÇ´Â ¹®Á¦
ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÏ´Ù 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¸¦ ±¸ÇöÇÕ´Ï´Ù.