वसंत प्रोग्रामेटिक लेनदेन का समर्थन करता है जो हमें TX प्रबंधन पर बढ़िया दाग नियंत्रण प्रदान करता है। वसंत के TransactionTemplate उपयोग
1.:: स्प्रिंग प्रलेखन के अनुसार, एक द्वारा कार्यक्रम संबंधी TX प्रबंधन का उपयोग कर सकतेवसंत प्रोग्रामेटिक लेनदेन प्रबंधन चेतावनी?
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus status) {
try {
updateOperation1();
updateOperation2();
} catch (SomeBusinessExeption ex) {
status.setRollbackOnly();
}
} });
2. सीधे PlatformTransactionManager लाभ (डीएओ में एक PlatformTransactionManager कार्यान्वयन इंजेक्षन):
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setName("SomeTxName");
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
//txManager is a reference to PlatformTransactionManager
TransactionStatus status = txManager.getTransaction(def);
try {
updateOperation1();
updateOperation2();
}
catch (MyException ex) {
txManager.rollback(status);
throw ex;
}
txManager.commit(status);
के लिए सरलीकरण की खातिर, मान लीजिए कि हम जेडीबीसी डेटाबेस ऑपरेशन से निपट रहे हैं।
मैं के लिए किसी भी डेटाबेस कार्यों दूसरा टुकड़ा में updateOperation1(),updateOperation2()
में हुआ सोच रहा हूँ, या तो यह, JDBCTemplate
या JDBCDaoSupport
साथ लागू किया गया है, अगर नहीं, आपरेशन वास्तव में किसी भी लेन-देन के भीतर नहीं किया जाता है, यह क्या है?
मेरा विश्लेषण यह है कि यदि हम JDBCTemplate
या JDBCDaoSupport
का उपयोग नहीं करते हैं, तो हम अनिवार्य रूप से डेटास्र प्रबंधन से कनेक्शन बनायेंगे/पुनर्प्राप्त करेंगे। हम जो कनेक्शन प्राप्त करते हैं वह निश्चित रूप से लेनदेन का प्रबंधन करने के लिए अंतर्निहित कनेक्शन PlatformTransactionManager
द्वारा उपयोग नहीं किया जाता है।
मैंने वसंत स्रोत कोड खोला और स्कीम संबंधित वर्ग को पाया कि PlatformTransactionManager
ConnectionHolder
में निहित कनेक्शन पुनर्प्राप्त करने का प्रयास करेगा जो बदले में TransactionSynchronizationManager
से पुनर्प्राप्त किया गया था। मैंने यह भी पाया JDBCTemplate
और JDBCDaoSupport,
भी से TransactionSynchronizationManager.
क्योंकि TransactionSynchronizationManager
धागा प्रति कनेक्शन सहित कई संसाधन प्रबंधन करता है इसी तरह की दिनचर्या के सिलसिले प्राप्त करने की कोशिश (मूल रूप से Threadlocal
का उपयोग एक धागा कामयाब संसाधन की अपनी अनूठी उदाहरण मिल सुनिश्चित करने के लिए)
तो मुझे लगता है कि प्लेटफ़ॉर्म ट्रान्सक्शन मैनेजर और JDBCTemplate
या JDBCDaoSupport
द्वारा पुनर्प्राप्त कनेक्शन समान है, यह समझा सकता है कि कैसे वसंत प्रोग्रामैटिक लेनदेन सुनिश्चित करता है कि updateOperation1(),updateOperation2()
लेनदेन द्वारा संरक्षित किया गया था।
क्या मेरा विश्लेषण सही है? यदि ऐसा है, तो वसंत दस्तावेज ने इस चेतावनी पर जोर क्यों नहीं दिया है?