2009-02-05 22 views
7

मेरे पास एक प्रक्रिया है जिसमें एक जेएमएस संदेश भेजना शामिल है। प्रक्रिया एक लेनदेन का हिस्सा है। यदि लेनदेन का बाद का हिस्सा विफल रहता है, तो एक संदेश जो पिछले भाग के बाद संदेश भेजता है, मुझे संदेश रद्द करना होगा। एक विचार मैंने किसी भी तरह संदेश पर सेट किया था कि इसे एक निश्चित समय के लिए नहीं चुना जाना चाहिए, और यदि मुझे रोलबैक की आवश्यकता है, तो मैं संदेश भेज सकता हूं और रद्द कर सकता हूं। मैसेजिंग को नहीं जानते, मुझे नहीं पता कि विचार संभव है या नहीं। या, क्या कोई बेहतर विचार है? धन्यवादजेएमएस रोलबैक

उत्तर

7

आप जेएमएस और जेटीए (जावा लेनदेन एपीआई) का एक साथ उपयोग कर सकते हैं - see here। ऐसा करने पर, एक जेएमएस संदेश भेजने या प्राप्त संदेश की खपत वास्तव में लेनदेन प्रतिबद्धता के हिस्से के रूप में परमाणु रूप से होती है।

इसका क्या अर्थ है? यदि लेनदेन विफल रहता है या वापस लुढ़का जाता है, तो "भेजा गया" संदेश बाहर नहीं जाता है और किसी भी "प्राप्त" संदेश वास्तव में उपभोग नहीं होते हैं। आपके जेएमएस और जेटीए प्रदाता द्वारा आपके लिए सभी को संभाला गया।

आपको जेटीए का समर्थन करने वाले जेएमएस कार्यान्वयन का उपयोग करने की आवश्यकता है। लगता है जैसे आप पहले से ही लेनदेन का उपयोग कर रहे हैं, इसलिए ऐसा करने के लिए कुछ विन्यास करने का मामला हो सकता है (हाथ को जोर से लहराते हुए ...)।

मुझे इसका उपयोग करने का अनुभव हुआ है (बीईए वेबलॉगिक 7 डब्ल्यू/बीईए वेबलॉगिक एकीकरण)। विज्ञापन के रूप में काम किया - "बाहरी दुनिया" ने जेएमएस सामानों का कोई प्रभाव नहीं देखा जब तक मैंने लेनदेन सफलतापूर्वक नहीं किया।

8

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

उदाहरण के लिए यदि आप एक्सए लेनदेन के साथ जेएमएस का उपयोग कर रहे हैं तो निम्नलिखित संभव है।

Start Transaction 
     | 
    DB Insert 
     | 
    Send JMS Msg 
     | 
    More DB Inserts 
     | 
    Commit Transaction <- Only at this point will the database records be inserted and the JMS message sent. 

XA Tranactions पूर्ण जावा ईई कंटेनर तो XA लेनदेन बिलाव में उपलब्ध नहीं हैं में ही उपलब्ध हैं।

शुभकामनाएं!

कार्ल

+0

इसके अलावा खाते के प्रदर्शन भूमि के ऊपर में रखते हैं: http://stackoverflow.com/questions/12305900/performance-overhead-of-xa-data-sources-best-practices – Vadzim

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