반응형
ibatis + JNDI를 이용한 DBCP 를 활용하여 Struct2 환경의 사용자 정의 트랜잭션을

처리하는 방법에 대해서 알아보자. 우선 준비물이 필요하다.

[1] 필요한 Library들을 다운받는다.

commons-dbcp-1.4.jar
commons-collections-3.2.1.jar
commons-pool-1.4.jar

위 3개가 필요하다. 다운로드는 jakarta 홈페이지 가면 다운가능하다. 최신버젼을 받는것이 좋다고 본다. ㅋ

[2] JNDI 설정 (Eclipse 기준)

[2-1] Tomcat 6.0 기준으로 Eclipse에서 보면 Server 라는 Project가 생성된 것
        을 확인 할 수 있다. 해당 파일에서 server.xml을 찾아서 해당 위치
        Resource를 가져다 
놓는다.


위 그림에서 server.xml을 열어 아래 코드를 추가한다.

<Context docBase="RUNA_FRAMEWORK" path="/RUNA_FRAMEWORK" reloadable="true" source="org.eclipse.jst.jee.server:RUNA_FRAMEWORK">
<Resource 
    name="jdbc/TestDB" ==> JNDI 이름
    username="rangi" ==> DB 접속 계정명
    password="rangi" ==> DB 접속 비밀번호
    url="jdbc:mysql://127.0.0.1:3306/mands" ==> 접속 URL
    driverClassName="com.mysql.jdbc.Driver" ==> 접속 DB Driver name
    type="javax.sql.DataSource"      ==> return Type을 DataSource로 한다.
    auth="Container" 
    maxActive="100" 
    maxIdle="30" 
    maxWait="10000"  
/>
</Context>

[2-2] 현재 생성된 Project의 web.xml 파일을 열어 Web Service 시작시 JNDI를
        참조 할 수 있도록 설정해준다.


위 그림에서 web.xml을 열어 아래 코드를 추가한다.

<resource-ref>
   <description>DB Connection</description>
   <res-ref-name>jdbc/TestDB</res-ref-name> => 요기에 JNDI 이름
   <res-type>javax.sql.DataSource</res-type> => return 되는 형태의 타입을 적어줌
   <res-auth>Container</res-auth>
</resource-ref>

이제 JNDI 설정은 끝났다. 의외로 별로 어렵지 않다.

[3] Java Source를 통해 JNDI를 호출해 보자.

ibatis에서 트랜잭션을 관리하기 위해 사용자 정의 트랜잭션 방식을 사용한다.
내용인즉 이렇다. ibatis는 트랜잭션을 관리를 해주지만, 별도 사용자가 트랜잭션을 관리하는
방식이 기존의 코딩하시는 분들도 편하고 biz단과 dao단을 분리 가능하기 때문이다.
아래 코드를 보자.

public class CommonBiz {
  // ibatis sqlMapper 객체 선언
  protected static SqlMapClient sqlMapper;

  // Connection 객체 선언
  protected static Connection conn = null;

  // ibatis Session 객체 선언
  protected static SqlMapSession session = null;

  static {
     try {
           // sqlMapConfig file 로부터 CONFIG파일을 Reader로 가져온다.
           Reader reader = Resources.getResourceAsReader(CommonConfig.getKey("sqlmap_config_path"));

          // Reader로 부터 읽어온 내역을 sqlMapper에 맵핑한다.
          sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);

          // JNDI로 부터 Context값을 얻어와 DataSource를 생성한다.
          Context envContext = (Context) new InitialContext();
          DataSource ds = (DataSource) envContext.lookup("java:/comp/env/jdbc/TestDB");
          conn = ds.getConnection();
          conn.setAutoCommit(true);
          System.out.println("Connection Success");

 
         // DataSource를 Session에 맵핑 하여 Connection을 전달한다.
         session = sqlMapper.openSession(conn);
         
         reader.close();
     } catch (IOException e) {
     } catch (NamingException e) {
     } catch (SQLException e) {

     }
   }
}

위 소스중에서 노란색으로 된 부분이 DataSource를 읽어오는 부분이며, 핑크색 으로 된부분
이 DataSource를 가져와 SqlMapper에 Mapping하는 부분이다.

[4] Ibatis 설정 파일을 셋팅한다.

[4-1] sqlMapper를 생성한다.

 <sqlMapConfig>
    <settings
        cacheModelsEnabled="true"
        enhancementEnabled="true"
        lazyLoadingEnabled="true"
        maxRequests="32"
        maxSessions="10"
        maxTransactions="5"
        useStatementNamespaces="false" 
    />

    <sqlMap resource="config/ibatis/test/test.xml" />
</sqlMapConfig>

내용은 머 별거 없다. 위 내용에 대해서는 언급하지 않겠다.

[4-2] test.xml 파일을 생성한다.

<sqlMap namespace="test">
    <select id="selectAllAccounts" resultClass="java.util.HashMap">
    SELECT * FROM score
    </select>
</sqlMap>

[5] Action 코딩을 한다. (요게 마지막)

try {
List<?> list = session.queryForList("selectAllAccounts");
for (int i = 0; i < list.size(); i++) {
HashMap data = (HashMap) list.get(i);
System.out.println(data.get("score"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
}


요렇게 하면 끝.ㅋㅋㅋㅋ

에고 장시간 글을 썼다. 엄청 힘드네~~ 30분이나 글을 썼다.

또 까먹을까봐 이렇게 기록해 둔다. 이제 앞으로 까먹지 말고 여기서 복사 만 해서 써야징...

헤헤헤헤헤헤

                                                                                - 2010.12.22 랑이씀 -
반응형

'Framework' 카테고리의 다른 글

[ ibatis SqlMapConfig Warning 제거 ]  (0) 2010.12.21
반응형
ibatis SqlMapConfig을 Warning을 제거하는 방법에 대해 알아보자.

아래와 같은 에러 발생시..

[ 에러 화면 ]

위 warning이 eclipse에서는 error로 표현되어 돌아가는데는 지장이 없지만,..

엄청나게 보기 싫다. 

그래서 찾아본 결과 ibatis주소를 다음과 같이 변경하니 깔끔하게 되었다.

www.ibatis.com => ibatis.apache.org 변경하니 큰 무리가 없었다.

아래 변경한 것을 참조로 보도록 하자.

[ 변경후 에러없어진 화면 ]

이상 ... ㅋㅋㅋ 보기좋다~~~


                                                                   - 2010.12.21 랑이씀 -
반응형

'Framework' 카테고리의 다른 글

[ ibatis 사용자 정의 트랜잭션 처리방안 ]  (0) 2010.12.22

+ Recent posts