프로젝트 개발을 하다보면 light한 환경을 요하는 경우가 있습니다. 이럴 경우 spring framework를 대신하여 dbcp + ibatis를 가지고 개발을 진행하는 경우도 발생할 것입니다. 이럴 경우 유용하리라 생각되어 설치과정을 공유합니다.
일단 Tomcat 환경에서 설치 과정을 설명하겠습니다.
1. DBCP 설치
- 실치 과정은 여기에 가시면 설치과정을 설명해 놓았습니다.
2. iBatis 설치
- 여기에 가서 다운로드
- ${ProjectWebRoot}/WEB-INF/lib에 ibatis-2.3.0.677.jar 카피
3. sqlmap.xml 정의
4. com/mimul/dwr/app/resource/database.properties 정의
driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@mimuluserdb:1521:mimuluser
username=mimuluser
password=mimuluser
5. com/mimul/dwr/app/sql/Mimul.xml 정의
- DDL2iBatis.exe를 활용하여 자동 생성하게 하는 것이 개발 속도가 올라갑니다.
6. DAO에서 사용하기 위한 SqlConfig 객체 정의(dbcp+ibatis연결 정보 정의)
7. DAO 클래스 정의
크게 어려운 점은 없습니다. 그리고 transaction 무결성을 보장하기 위해서는 executor.startBatch();와 executor.executeBatch(); transaction 처리 로직을 넣으시면 됩니다.
나머진 자동으로 iBatis에서 트랜젝션 자원의 할당 및 해지의 라이프사이클을 관리해 줍니다.
[원문] http://mimul.com/pebble/default/2007/12/09/1197199680000.html
일단 Tomcat 환경에서 설치 과정을 설명하겠습니다.
1. DBCP 설치
- 실치 과정은 여기에 가시면 설치과정을 설명해 놓았습니다.
2. iBatis 설치
- 여기에 가서 다운로드
- ${ProjectWebRoot}/WEB-INF/lib에 ibatis-2.3.0.677.jar 카피
3. sqlmap.xml 정의
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <properties resource="com/mimul/dwr/app/resource/database.properties"/> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" maxRequests="40" maxSessions="20" maxTransactions="5" useStatementNamespaces="false" /> <transactionManager type="JDBC"> <dataSource type="DBCP"> <property name="driverClassName" value="${driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> <!-- OPTIONAL PROPERTIES BELOW --> <property name="initialSize" value="5"/> <property name="maxActive" value="30"/> <property name="maxIdle" value="20"/> <property name="maxWait" value="60000"/> <property name="poolPreparedStatements" value="true"/> <property name="validationQuery" value="select 0 from dual"/> <property name="testOnBorrow" value="true"/> <property name="maximumActiveConnections" value="10"/> <property name="maximumIdleConnections" value="5"/> <property name="maximumWait" value="60000"/> <property name="logAbandoned" value="false"/> <property name="removeAbandoned" value="false"/> <property name="removeAbandonedTimeout" value="50000"/> </dataSource> </transactionManager> <sqlMap resource="com/mimul/dwr/app/sql/Mimul.xml"/> </sqlMapConfig>
4. com/mimul/dwr/app/resource/database.properties 정의
driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@mimuluserdb:1521:mimuluser
username=mimuluser
password=mimuluser
5. com/mimul/dwr/app/sql/Mimul.xml 정의
- DDL2iBatis.exe를 활용하여 자동 생성하게 하는 것이 개발 속도가 올라갑니다.
<?xml version='1.0'?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"> <sqlMap namespace="Mimul"> <cacheModel id="mimul-cache" type="MEMORY"> <flushInterval hours="24"/> <flushOnExecute statement="insertMimul"/> <flushOnExecute statement="updateMimul"/> <flushOnExecute statement="deleteMimul"/> <property name="reference-type" value="WEAK" /> </cacheModel> <resultMap class="com.mimul.dwr.model.Mimul" id="mimul-result" > <result property="lseq" column="lseq" /> <result property="sseq" column="sseq" /> <result property="assetid" column="assetid" /> <result property="title" column="title" /> <result property="imgurl" column="imgurl" /> <result property="vodurl" column="vodurl" /> <result property="use" column="use" /> <result property="chgdate" column="chgdate" /> </resultMap> <select id="getMimul" resultClass="com.mimul.dwr.model.Mimul" parameterClass="Integer" > <![CDATA[ SELECT lseq, sseq, assetid, title, imgurl, vodurl, use, chgdate FROM mimul WHERE lseq = #lseq# ]]> </select> <update id="updateMimul" parameterClass="com.mimul.dwr.model.Mimul" > <![CDATA[ UPDATE mimul SET sseq = #sseq#, assetid = #assetid#, title = #title#, imgurl = #imgurl#, vodurl = #vodurl#, use = #use#, chgdate = #chgdate# WHERE lseq = #lseq# ]]> </update> <insert id="insertMimul" parameterClass="com.mimul.dwr.model.Mimul" > <selectKey resultClass="int" keyProperty="lseq" > SELECT mimul_lseq_seq.nextval as lseq FROM dual </selectKey> INSERT INTO mimul (lseq, sseq, assetid, title, imgurl, vodurl, use, chgdate) VALUES (#lseq#, #sseq#, #assetid#, #title#, #imgurl#, #vodurl#, #use#, #chgdate#) </insert> <delete id="deleteMimul" parameterClass="com.mimul.dwr.model.Mimul" > <![CDATA[ DELETE FROM mimul WHERE lseq = #lseq# ]]> </delete> </sqlMap>
6. DAO에서 사용하기 위한 SqlConfig 객체 정의(dbcp+ibatis연결 정보 정의)
import java.io.File; import java.io.Reader; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; import com.jaeminara.common.log.LogPool; public class SqlConfig { private static SqlMapClient sqlMap = null; private static SqlConfig instance_ = null; private SqlConfig() throws Exception { Reader reader = null; StringBuffer rsc = null; try { if (sqlMap == null) { rsc = new StringBuffer(200); rsc.append("com").append(File.separator); rsc.append("jaeminara").append(File.separator); rsc.append("dwr").append(File.separator); rsc.append("app").append(File.separator); rsc.append("sql").append(File.separator).append("sqlmap.xml"); reader = Resources.getResourceAsReader(rsc.toString()); sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); reader.close(); } } catch (Exception e) { System.out.println(e); throw e; } finally { if (reader != null) reader.close(); reader = null; rsc = null; } } public static SqlConfig instance() { try { if (instance_ == null) { synchronized (SqlConfig.class) { if (instance_ == null) instance_ = new SqlConfig(); } } } catch (Exception e) { System.out.println(e); } return instance_; }
/** * Return SqlMapClient for SDP schema * * @return */ public static SqlMapClient getSqlMapInstance() { return sqlMap; } }
7. DAO 클래스 정의
import java.util.HashMap; import java.util.List; import java.util.Map; import com.ibatis.sqlmap.client.SqlMapClient; import com.mimul.common.log.LogPool; import com.mimul.dwr.model.getMimulByLSEQ;
public class MimulDao { private SqlMapClient smc = SqlConfig.instance().getSqlMapInstance(); public void MimulDao() {} public Mimul getMimulByLSEQ(int lseq) throws Exception { Mimul mimul = null; try { if (lseq == 0) { LogPool.instance("DAO").debug("getMimulByLSEQ() : Parameter is null!"); return null; } mimul = (Mimul) smc.queryForObject("getMimul", lseq); } catch (Exception e) { LogPool.instance("DAO").error(e); throw e; } return mimul; } // 기타 필요한 함수 정의 }
크게 어려운 점은 없습니다. 그리고 transaction 무결성을 보장하기 위해서는 executor.startBatch();와 executor.executeBatch(); transaction 처리 로직을 넣으시면 됩니다.
나머진 자동으로 iBatis에서 트랜젝션 자원의 할당 및 해지의 라이프사이클을 관리해 줍니다.
[원문] http://mimul.com/pebble/default/2007/12/09/1197199680000.html
'JSP & WEB & Ajax' 카테고리의 다른 글
Spring 개발을 위한 Eclipse 개발 환경 구성하기 [펌] (0) | 2009.12.03 |
---|---|
계층형 게시판의 테이블 구조. [펌] (0) | 2009.12.02 |
JSP 답변형 게시판 [펌] (0) | 2009.11.25 |
Extjs Grouping Header Grid Plugins [펌] (0) | 2009.11.24 |
Extjs 기본 사용법 - JsonReader를 이용한 Grid [펌] (0) | 2009.11.24 |