2010-09-07 14 views
7

स्प्रिंग के लेनदेन प्रबंधक के गतिविधि को शुरू करने (शुरू करने, & रोलबैक) की विभिन्न पोस्टिंग की गई हैं। हालांकि, मैं हाल ही में एक डेडलॉक मुद्दे पर आया जिसके लिए केवल लॉगिंग गतिविधि पर्याप्त नहीं है।स्प्रिंग लेनदेन सामग्री को लॉग इन करने के लिए कैसे करें

हमारे कोड में मौलिक मुद्दा लेनदेन प्रचारों का एक गन्दा उपयोग है और आवश्यक है REQUIRES_NEW। इतने सारे विधि कॉल हैं कि आगे और आगे हम एक दूसरे पर ढेर सारे लेन-देन के साथ समाप्त होते हैं। हां, कोड बेस बहुत बड़ा है और समाधान जरूरी है ... (हम सभी जानते हैं कि यह क्या है।)

समस्या एक डेडलॉक थी क्योंकि कोड को लेन-देन में क्वेरी इकाइयों में जोड़ा गया था जो उप-अनुक्रमिक रूप से दूसरे में संशोधित थे लेन-देन। स्प्रिंग एक अपवाद को थूकता है जो इकाई एक्स के अपडेट को बताता है क्योंकि यह लॉक है। अब, यह जानना अच्छा है, लेकिन किसी को दोषपूर्ण कोड कैसे मिलता है: क्वेरी जो प्रारंभिक लॉकिंग करती है।

मेरा प्रश्न (आखिरकार): क्या लेनदेन में जोड़े जाने वाली संस्थाओं को लॉग करने का कोई तरीका है? इस तरह मैं विशेष रूप से इकाई को लॉक करने वाले लेनदेन की तलाश कर सकता हूं वसंत शिकायत कर रहा है।

धन्यवाद! :-)

उत्तर

0

अपने ORM में क्वेरी लॉग इन करने का प्रयास करें। हो सकता है कि यह "खराब" लेनदेन ढूंढने का आसान तरीका हो।

1

वसंत प्रतिनिधि लेनदेन प्रबंधक को सौंपते हैं, इसलिए वसंत को पता नहीं है कि लेनदेन में कौन सी संस्थाएं छूती हैं, लेनदेन प्रबंधक करता है। जैसा कि डोनज़ ने कहा, सूचना के लिए लेनदेन प्रबंधक को देखना सबसे अच्छा जांच दृष्टिकोण है।

आप सभी लेनदेन परिभाषाओं पर भी जा सकते हैं और को छोड़कर सबकुछ से REQUIRES_NEW को हटा सकते हैं, केवल लिखना/लिखना हमेशा टाइप विधियों (जैसे ऑडिटिंग या लॉगिंग)। यदि आपके पास अपने मुख्य व्यवसाय तर्क में REQUIRES_NEW है, तो यह एक बग या कुछ बहुत ही अजीब डिज़ाइन है। इसे स्पष्ट रूप से हटाने से आपके विचार से कम दुष्प्रभाव हो सकते हैं।

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