2010-07-23 31 views
5

Tôi biết trạng thái API "Một khách hàng an toàn chủ đề để làm việc với Bản đồ SQL của bạn", nhưng tôi muốn hiểu cách hoạt động tốt hơn một chút và tự hỏi liệu có ai đang chạy môi trường đa luồng này không với các giao dịch. Ví dụ sử dụng:iBatis SqlMapClient và an toàn thread

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(); 
} 

Nếu đây đã được sử dụng vào nơi nhiều luồng có thể gọi đây và chỉ có một đối tượng sqlMapper chia sẻ sẽ có được một số bài mà đang thực hiện đợt vì một thread gọi executeBatch()? Điều này sẽ trở thành một vấn đề nếu tôi có rất nhiều phương pháp khác làm cập nhật của xóa vv bằng cách sử dụng cùng một sqlMapper trong các chủ đề khác.

Tôi không muốn bắt đầu giao dịch trong một chuỗi và có một chuỗi khác cam kết trước khi chuỗi trước đó được thực hiện.

Tôi hiểu rằng tôi có thể đồng bộ hóa tất cả điều này, nhưng không muốn phải làm như vậy.

Trả lời

2

Mỗi chuỗi sẽ nhận được kết nối DB của riêng mình và các giao dịch hoạt động theo cách bạn muốn: chúng cũng theo kết nối DB.

Các vấn đề liên quan