निम्नलिखित को पूरा करने का सबसे अच्छा तरीका क्या है?@MessageDriven लेनदेन और पुनर्विक्रेता semantics
- @MessageDriven सेम डेटाबेस पर कुछ काम करता है
- विफलता पर, मैं डीबी लेनदेन
- वापस रोल करना चाहते हैं लेकिन मैं यह भी JMS संदेश redelivered नहीं बनना चाहते, यानी, फिर से नहीं है प्रयत्न।
मैं कुछ तरीके कि पराक्रम काम के बारे में सोच सकते हैं। क्या कोई अन्य है, और कौन सा सबसे अच्छा है?
उपयोग
@TransactionManagement(type=BEAN)
औरUserTransaction
, और स्पष्ट रूप से वापस अपवाद को पकड़ने के बाद रोल। उदा .: कंटेनर से प्रबंधित लेनदेनcatch (Exception e) { e.printStackTrace(); utx.rollback(); }
का प्रयोग करें,
onMessage
पर@TransactionAttribute(value=NOT_SUPPORTED)
निर्दिष्ट और फिर@TransactionAttribute(value=REQUIRED)
के साथ एक अलग विधि के लिए डीबी गतिविधि प्रतिनिधि।लेनदेन को अकेले हैंडलिंग छोड़ दें और सर्वर में पुनः प्रयास संपत्ति को फिर से कॉन्फ़िगर करें। मैं ग्लासफ़िश 3.1.1 का उपयोग कर रहा हूं, और मुझे बिल्कुल यकीन नहीं है कि इसे कैसे सेट किया जाए।
अकेले सबकुछ छोड़ दें और
onMessage
शरीर में पुनः वितरण के लिए संदेश की जांच करें, और फिर से वितरित होने पर बाहर निकलें। (message.getJMSRedelivered()
?)
क्या वहां अच्छी तरह से काम किया है? क्या इससे निपटने के लिए एक मानक/सर्वोत्तम अभ्यास तरीका है?
धन्यवाद, यह पूरी तरह से काम किया। एमडीबी में @ ट्रान्सएक्शन एट्रिब्यूट के बारे में नोट महत्वपूर्ण था - आप सही हैं, आप केवल 'मैसेज' पर टिप्पणी कर सकते हैं। मैंने अंत में 'मैसेज' को एनोटेट नहीं किया लेकिन तर्क को 'REQUIRES_NEW' के साथ किसी अन्य ईजेबी में स्थानांतरित कर दिया। – wrschneider
बस एक नोट के रूप में, यह "आवश्यक" के साथ एनजेबी बच्चे के साथ काम करता है। – apetrelli