मेरे पास एक springframework एप्लिकेशन है जिसमें मैं एक लेनदेन श्रोता को एक लेनदेन में जोड़ना चाहता हूं जो वर्तमान में प्रगति पर है। प्रेरणा एक पोस्ट प्रतिबद्ध कार्रवाई को ट्रिगर करना है जो डाउनस्ट्रीम सिस्टम को सूचित करती है। मैं कुछ सेवा विधि के आसपास एक लेनदेन लपेटने के लिए @ ट्रांसेक्शनल का उपयोग कर रहा हूं - जहां मैं पोस्ट लेनदेन श्रोता बनाने/पंजीकृत करना चाहता हूं। मैं निम्नलिखित "जैसे" कुछ करना चाहता हूं।गतिशील रूप से वसंत के साथ लेनदेन श्रोता पंजीकृत करें?
public class MyService {
@Transaction
public void doIt() {
modifyObjects();
// something like this
getTransactionManager().registerPostCommitAction(new
TransactionSynchronizationAdapter() {
public void afterCommit() {
notifyDownstream();
}
});
}
}
स्प्रिंग एक TransactionSynchronization इंटरफेस और अनुकूलक वर्ग लगती है जो मैं वास्तव में क्या चाहते हैं; हालांकि यह तुरंत स्पष्ट नहीं है कि वर्तमान लेनदेन, या लेनदेन प्रबंधक के साथ गतिशील रूप से पंजीकरण कैसे करें। यदि मैं इससे बच सकता हूं तो मैं JtaTransactionManager को उपclass नहीं करना चाहूंगा।
प्रश्न: क्या किसी ने इससे पहले किया है।
प्रश्न: मेरे एडाप्टर को पंजीकृत करने का सबसे आसान तरीका क्या है?
हालांकि, कोई अच्छा सुझाव किसी लेनदेन में निष्पादित नहीं होगा? मैं केवल सफल पूरा करना चाहता हूँ। साथ ही, क्या मैं उन एओपी एनोटेशन का उपयोग डिफ़ॉल्ट वसंत (मैं कोड बुनाई का उपयोग नहीं कर रहा हूं) बस जेडीके प्रॉक्सी के साथ कर सकता हूं। – Justin
विधियों को अपवाद फेंकने पर रिटर्न सलाह नहीं चलती है, इसलिए जब यह विधि परिणाम देता है और अपवाद फेंकते समय वापस रोलिंग करता है तो यह रिटर्नशिपल पर निर्भर करता है, जो आम तौर पर होता है। पहलुओं को स्प्रिंग्स गतिशील प्रॉक्सी के माध्यम से बुलाया जाता है, इसलिए यह कोई भी कोड बुनाई नहीं करता है (जब तक कि आप वसंत के लिए इंटरफेस प्रदान नहीं करते हैं, जहां वसंत सीजीएलआईबी के साथ रनटाइम पर कोड बुनाई में वापस आ जाएगा)। दिलचस्प के लिए – krock
+1, लेकिन मैं अभी भी परीक्षण के बिना आश्वस्त नहीं हूँ। कम से कम 2 @AfterReturning शामिल हैं: @ ट्रांसेक्शनल और फिर मेरा कस्टम पहलू। यदि @ ट्रान्ससेनल रन चलता है, तो मेरा रन चलता है सब ठीक है; हालांकि दूसरे आदेश में मैं लेनदेन प्रतिबद्धता की स्थिति से स्वतंत्र रूप से निष्पादित करूंगा। एक अच्छा और सीधा जवाब के लिए – Justin