2010-07-23 7 views
5

"SQL Maps 작업을위한 스레드 안전 클라이언트"라는 API 상태를 알고 있지만 어떻게 작동하는지 이해하고 싶습니다.이 스레드가 멀티 스레드 환경에서 실행되고 있는지 궁금합니다. 거래. 사용 예를 들어 :iBatis SqlMapClient 및 스레드 안전성

void doSomeSql() throws SQLException{ 
    sqlMapper.startTransaction(); 
    sqlMapper.startBatch(); 
    final Map paramMap = new HashMap(); 
    paramMap.put("data", "data"); 
    Integer num = (Integer) sqlMapper.queryForObject("getRowCount", paramMap);//get row count 
    sqlMapper.insert("insertData", paramMap); //insert row 
    num = (Integer) sqlMapper.queryForObject("getRowCount", paramMap);//get row count again 
    sqlMapper.executeBatch(); 
    sqlMapper.commitTransaction(); 
} 

이는 일괄 처리를 실행하는 일부 스레드가 될 여러 스레드가이 호출 할 수있는 위치에 사용되는 단 하나의 공유 sqlMapper 객체가 된 경우 때문에 executeBatch에라는 또 다른 스레드()? 다른 스레드에서 동일한 sqlMapper를 사용하여 삭제 등의 업데이트를 수행하는 방법이 많이있는 경우 문제가됩니다.

한 스레드에서 트랜잭션을 시작하고 이전 스레드가 완료되기 전에 다른 스레드가 커밋되기를 원합니다.

나는이 모든 것을 동기화 할 수는 있지만 오히려하지 않아도된다고 알고 있습니다.

답변

2

각 스레드는 고유 한 DB 연결을 가지며 트랜잭션은 원하는대로 작동합니다. DB 연결도 마찬가지입니다.

관련 문제