2010-07-23 14 views
5

मुझे एपीआई स्टेटस "आपके एसक्यूएल मैप्स के साथ काम करने के लिए एक थ्रेड सेफ क्लाइंट" पता है, लेकिन मैं समझना चाहता हूं कि यह थोड़ा बेहतर कैसे काम करता है और सोच रहा था कि कोई भी इस इनए बहु-थ्रेडेड वातावरण को चला रहा है या नहीं लेनदेन के साथ। उदाहरण का उपयोग कर के लिए: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

प्रत्येक थ्रेड को अपना डीबी कनेक्शन मिलेगा, और लेनदेन आपके इच्छित तरीके से काम करेंगे: वे प्रति डीबी कनेक्शन भी हैं।

संबंधित मुद्दे