이것은 잘못 짜진 내용이다..
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 |