मैं केवल उन प्रक्रियाओं को लेन-देन करना पसंद करता हूं जिन्हें लेन-देन की आवश्यकता होती है और सेवा में लेनदेन की स्थिति को नियंत्रित नहीं किया जाता है। आप एक सेवा विधि बना सकते हैं जो अन्य सेवा विधियों को englobes और वसंत लेनदेन के साथ लेनदेन का प्रबंधन @Transactional एनोटेशन में प्रचार के साथ।
@Transactional(propagation =...)
संपादित
अगर मैं उदाहरण saveUser() और saveEmail() (क्योंकि मैं एक डेटाबेस में ईमेल की दुकान से उन्हें बाद में भेजने के लिए - एक कतार की तरह) के लिए 2 तरीकों था मैं में पैदा करेगा मेरी सेवा एक विधि saveUserAndSendEmail (उपयोगकर्ता उपयोगकर्ता) जो लेनदेन होगी। यह विधि saveUser और saveEmail() को प्रत्येक को @Repository घटक में कॉल करेगी क्योंकि वे डेटाबेस से निपटती हैं। तो मैं उन्हें डेटाबेस के साथ संभालने के तरीकों @ रिपोजिटरी घटकों में रखूंगा और फिर मैं @Service घटक में लेनदेन को नियंत्रित करता हूं। फिर नियंत्रक को केवल डेटा प्रदान करने और जब भी आवश्यकता हो, कॉल करने के बारे में चिंता करनी होगी। लेकिन मैं एक लेनदेन करता हूं क्योंकि मैं डेटाबेस में बदलाव नहीं करना चाहता जब तक कि पूरी विधि सफलतापूर्वक निष्पादित न हो जाए।
लेकिन यह वह शैली है जिसका मैं आमतौर पर उपयोग करता हूं, मैं यह नहीं कह रहा हूं कि यह जाने का रास्ता होना चाहिए।
ऐसा लगता है कि यह पसंदीदा डिजाइन है लेकिन क्यों? मुझे लगता है कि मुझे लोड करने की आवश्यकता है IenuItems(), loadUserInfo(), loadDocument() - कई विधियां। आपके अनुसार मुझे एक लोडमेनूइटम और यूज़र इंफो और डॉक्यूमेंट() विधि बनाना है - क्या यह ठीक है? –
@ एंड्रे मैंने नहीं कहा है कि यह पसंदीदा डिजाइन है। जिस तरह से मैं आमतौर पर काम करता हूं क्योंकि मैं पसंद करता हूं कि नियंत्रक को लेनदेन प्रबंधन से अवगत होने की आवश्यकता नहीं है। लोड के साथ शुरू होने वाली विधियों के नाम के अनुसार ... यदि वे केवल डेटाबेस से वास्तविक हैं तो आपको लेनदेन करने की आवश्यकता क्यों है? – Javi
ठीक है, अगर आपके पास दो विधियां हैं: createUser(), sendEmail() विभिन्न सेवाओं (उपयोगकर्ता और मेल) से। और आपको उन्हें एक लेनदेन नियंत्रक में कॉल करने की आवश्यकता है। आपको क्या करना चाहिये? –