2010. 4. 7. 00:14
반응형

이것은 잘못 짜진 내용이다..

SqlMapClientFactory 가 제대로된 Singleton을 형성하지 못할것 같다.

제대로 하기 위해선 생성된 sqlmapClient를 map식이든 따로 저장할 저장소가 필요할 것으로 보임.
map으로 key를 구분하여 저장함.
key가 없을때에만 생성하여 singleton을 유지함.
..


> IBatisDao.java
package db.ibatis;
import com.ibatis.sqlmap.client.SqlMapClient;
public class IBatisDao {
    protected SqlMapClient client;

    public void setSqlMap(int conNum) {
        this.client = SqlMapClientFactory.getSqlMapClient(conNum);
    }
}


> SqlMapClientFactory.java
package db.ibatis;

import java.io.Reader;
import java.util.HashMap;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class SqlMapClientFactory {

    private static HashMap<String, SqlMapClient> clientMap = new HashMap<String, SqlMapClient>();

    private static final String SQLMAP_CONFIG_RESOURCE_DB1 =
            "db/ibatis/conf_db1.xml";
    private static final String SQLMAP_CONFIG_RESOURCE_DB2 =
            "db/ibatis/conf_db2.xml";

    public static SqlMapClient getSqlMapClient(){
        return getSqlMapClient(1);
    }

    public static SqlMapClient getSqlMapClient(int conNum) {
        if(conNum == 1)
            return getSqlMapClient(SQLMAP_CONFIG_RESOURCE_DB1);
        else if(conNum == 2)
            return getSqlMapClient(SQLMAP_CONFIG_RESOURCE_DB2);
        else
            return getSqlMapClient(SQLMAP_CONFIG_RESOURCE_DB1);
    }

    public static SqlMapClient getSqlMapClient(String configuration) {
        SqlMapClient sqlMapClient   = clientMap.get(configuration);
        if(sqlMapClient == null){
            sqlMapClient    = load(configuration);
            clientMap.put(configuration, sqlMapClient);
        }
        return sqlMapClient;
    }

    private static SqlMapClient load(String configuration) {
        try {
            Reader reader   = Resources.getResourceAsReader(configuration);
            return SqlMapClientBuilder.buildSqlMapClient(reader);
        } catch (Exception e) {
            throw new RuntimeException("Error initializing SqlConfig class. Cause :" + e);
        }
    }
}

 

 

반응형

'Jsp-Servlet > IBatis' 카테고리의 다른 글

ibatis key값 대소문자에 대한 처리  (2) 2011.05.13
mybatis 버그!! ognl??  (6) 2011.03.15
ibatis에서 jdbc를 불러와 metadata 출력  (4) 2011.02.18
ibatis 동적sql 레퍼런스  (1) 2010.04.06
Posted by seongsland