spring - "@ ट्रांसेक्शनल" को सेवा परत या डीएओ कहां रखा जाना चाहिए




dao transactional (4)

आदर्श रूप से, सेवा परत (प्रबंधक) आपके व्यापार तर्क का प्रतिनिधित्व करता है और इसलिए इसे @ ट्रान्सैक्शनल के साथ एनोटेट किया जाना चाहिए।

सेवा परत डीबी संचालन करने के लिए विभिन्न डीएओ को कॉल कर सकती है। आइए उन परिस्थितियों को मानें जहां आपके पास सेवा पद्धति में 3 डीएओ संचालन हैं। यदि आपका पहला डीएओ ऑपरेशन असफल रहा, तो दो अन्य अभी भी पास हो सकते हैं और आप असंगत डीबी राज्य समाप्त कर देंगे। एनोटेटिंग सर्विस लेयर आपको ऐसी परिस्थितियों से बचा सकता है।

सबसे पहले यह संभव है कि मैं कुछ ऐसा पूछ रहा हूं जिसे पहले पूछा गया है और उत्तर दिया गया है लेकिन मुझे एक खोज परिणाम वापस नहीं मिला। ठीक है आम तौर पर (या हमेशा तक :)) हम सेवा परत पर लेनदेन संबंधी एनोटेशन को परिभाषित करते हैं सामान्य वसंत हाइबरनेट क्रूड आमतौर पर होता है

नियंत्रक-> प्रबंधक-> दाओ-> ओआरएम।

अब मुझे एक ऐसी स्थिति है जहां मुझे क्लाइंट साइट के आधार पर डोमेन मॉडल के बीच चयन करना होगा। मान लें कि क्लाइंट ए मेरे डोमेन मॉडल का उपयोग कर रहा है, सब कुछ अच्छा है लेकिन फिर एक अन्य क्लाइंट साइट मुझे एक वेब सेवा देगी और हमारे डोमेन मॉडल का उपयोग नहीं करेगी।

मुझे किस परत को प्रतिस्थापित करना चाहिए। मेरा मानना ​​है कि इसे दाओ होना है जो मुझे वेब सेवा से डेटा प्राप्त कर रहा है और उसे वापस भेज देगा। दो अलग-अलग लिखित दाओ परतें और परिदृश्य के आधार पर प्लग इन हैं।

अब मुझे एहसास हुआ है कि जब हम सेवा परत में @ ट्रांसेक्शनल डालते हैं तो हम तंग युग्मन कर रहे हैं (यदि ऐसी कोई चीज है या ढीली युग्मन नहीं है)। इतने सारे मस्तिष्क गलत नहीं हो सकते हैं या वे हैं (मुझे शक है)।

तो सवाल यह है कि "कहां होना चाहिए" @ ट्रान्ससेक्शनल "सेवा परत या डीएओ रखा जा सकता है?" और क्या यह सेवा परत नीचे की ओर है मुझे बदलना चाहिए।


आप अपनी सेवाओं को लेनदेन के लिए चाहते हैं। यदि आपके डीएओ लेनदेन कर रहे हैं, और आप प्रत्येक सेवा में अलग-अलग डीएओ कहते हैं, तो आपके पास एकाधिक टीएक्स होंगे, जो आप नहीं चाहते हैं। सेवा को लेनदेन को कॉल करें, और उन विधियों के अंदर सभी डीएओ कॉल विधि के लिए टीएक्स में भाग लेंगे।


यदि आप क्लाइंट बी के लिए डोमेन मॉडल बदलना चाहते हैं, तो आपको सेवा परत पर @ ट्रांसेक्शनल का उपयोग करना चाहिए, जहां आपको एक अलग मॉडल में एक ही डेटा प्रदान करना होगा, आप एक अलग सेवा प्रदान करके डीएओ परत को प्रभावित किए बिना डोमेन मॉडल बदल सकते हैं या एक इंटरफ़ेस बनाकर और विभिन्न मॉडल में इंटरफ़ेस को कार्यान्वित करके और उसी सेवा के साथ क्लाइंट के आधार पर मॉडल को पॉप्युलेट करें। यह निर्णय व्यवसाय की आवश्यकता और परियोजना के दायरे पर आधारित है।


यह एप्लिकेशन प्रकारों के आधार पर व्यक्तिगत पसंद है, यदि एप्लिकेशन कई मॉड्यूल में लेयर किया गया है और अधिकांश ऑपरेशंस @CRUD आधारित हैं, तो सेवा स्तर पर @transactional एनोटेशन होने से अधिक sence .. इंजन प्रकार एप्लिकेशन जैसे शेड्यूलर, जॉब सर्वर, @ etl रिपोर्ट ऐप्स, जहां सत्र और उपयोगकर्ता अवधारणा मौजूद नहीं है, तो संदर्भ स्तर पर प्रचार लेनदेन सबसे उपयुक्त है ... हमें लेन-देन विरोधी एंटी पैटर को समाप्त करने वाले हर किसी को @transactional डालकर क्लस्टरड लेनदेन बनाने का अंत नहीं करना चाहिए ... वैसे भी व्यावहारिक लेनदेन के लिए नियंत्रण जेटीए 2 सबसे उपयुक्त उत्तर है ... फिर यह मौसम पर निर्भर करता है जिसे आप किसी दिए गए परिस्थितियों में उपयोग कर सकते हैं ...







transactional