2011-07-27 19 views
6

मेरे पास वेबस्पियर 6 में एक एमडीबी है। संदेश लिस्टर एक तिब्को ईएमएस कतार से जुड़ा हुआ है। एमडीबी में मैं एक वेबस्पेयर एमक्यू कतार में लिखने की कोशिश कर रहा हूं। मैं निम्नलिखित त्रुटि मिलती है:मौजूदा दो चरण सक्षम संसाधनों के साथ एक चरण सक्षम संसाधन करने का एक अवैध प्रयास

WMSG0042I: MDB Listener LoanIQ Payments Inbound started successfully for JMSDestination jms/eid/payments 
WTRN0063E: An illegal attempt to commit a one phase capable resource with existing two phase capable resources has occurred. 
WTRN0086I: XAException encountered during prepare phase for transaction 00000131...0001. Local resources follow. 
WTRN0089I: [email protected] 3fbe3fbe XAResource: [email protected] enlisted: true mcWrapper.hashCode()1038237154: Vote: commit. 
WTRN0089I: [email protected]:4e2e4e2e LocalTransaction:com.ibm.ejs.jms.JMSManagedSession$JMS [email protected] enlisted:true registeredForSynctruemcWrapper.hashcode()1032076676: Vote: none. 

QueueConnectionFactory उदाहरण एक com.ibm.ejs.jms.JMSQueueConnectionFactoryHandle है। क्या मुझे इससे XAConnection मिल सकता है? क्या मुझे यह करना ज़रूरी है? यदि संभव हो तो मैं वेनिला जेएमएस के साथ रहना पसंद करूंगा।

एमडीबी कार्यान्वयन जैसा है करने के लिए:

public void onMessage(Message message) { 
    // ^^ incoming message delivered from EMS queue via WAS MessageListener 
    TextMessage textMessage = (TextMessage) message; 
    QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup(factoryName); 
    Queue queue = (Queue) context.lookup(queueName); 
    QueueConnection connection = factory.createQueueConnection(); 
    connection.start(); 
    QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); 
    QueueSender sender = session.createSender(queue); 
    TextMessage message = session.createTextMessage("some new payload"); 
    sender.send(message); 
    // ^^ outgoing message sent to WebSphere MQ queue 
} 

उत्तर

7

त्रुटि को देखते हुए, आप एक XA संसाधन और एक JCA LocalTransaction

WTRN0089I: [email protected] 3fbe3fbe XAResource: [email protected] enlisted: true mcWrapper.hashCode()1038237154: Vote: commit.

और

WTRN0089I: [email protected]:4e2e4e2e LocalTransaction:com.ibm.ejs.jms.JMSManagedSession$JMS [email protected] enlisted:true registeredForSynctruemcWrapper.hashcode()1032076676: Vote: none.

आप की तरह लगता है है या तो XA सक्षम करने के लिए कनेक्शन फ़ैक्टरी सेट नहीं किया है, देखें:

http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/umj_pjcfm.html

(नीचे स्क्रॉल "XA सक्षम" पर) या TIBCO ईएमएस कनेक्शन XA सक्षम नहीं है। यदि यह उत्तरार्द्ध है, और कोई उपयुक्त एक्सए चालक नहीं है, तो आप WAS infocentre में अंतिम-प्रतिभागी समर्थन देख सकते हैं, जो आपको चाहिए जो कर सकता है - यानी WAS WMQ XA लेनदेन तैयार करेगा, स्थानीय रूप से तिब्को को प्रतिबद्ध करेगा, फिर प्रतिबद्ध करेगा डब्लूएमक्यू अगर तिब्को प्रतिबद्ध काम करता है (या अन्यथा रोलबैक)। यदि तिब्को कनेक्शन एक्सए सक्षम है, तो डब्ल्यूएएस में डब्लूएमक्यू के लिए पूर्ण एक्सए समर्थन है, इसलिए पूरे ऑपरेशन के लिए दो चरण के लेनदेन का उपयोग न करने का कोई कारण नहीं है।

के बारे में

The QueueConnectionFactory instance is a com.ibm.ejs.jms.JMSQueueConnectionFactoryHandle. Could I get an XAConnection from this? Do I need to? I'd prefer to stay with vanilla JMS if possible.

आप ऐसा नहीं करना चाहिए

, सादे JMS के लिए रहते हैं। शैली के सामान्य बिंदु के रूप में एक कनेक्शन फैक्टरी (क्यूईकनेक्शन फैक्ट्री नहीं) को भी डालना बेहतर होता है, और फिर क्रॉस-डोमेन ऑब्जेक्ट्स (कनेक्शन, सत्र, संदेश उत्पादक) के साथ रहता है।

+2

एमक्यू एक्सए सक्षम था। ऐसा लगता है कि ईएमएस ड्राइवर नहीं थे। [एलपीएस सक्षम करना] (https://www.ibm.com/developerworks/wikis/display/xdcomputegrid/Enabling+last+participant+support) काम किया। धन्यवाद। – Synesso

+0

एलपीएस सक्षम करने के लिए लिंक यहां पाया गया है। http://www-01.ibm.com/support/docview.wss?uid=swg21244805 – asgs

1

मुझे एक ही समस्या थी। मैंने अपनी कतार, क्यूसीएफ और एसी को कॉन्फ़िगर किया है लेकिन संदेश प्राप्त करने के बाद लेनदेन वापस लुढ़का रहा था और डीबी अपडेट भी विफल रहा था। मैंने मैसेज विधि में @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) जोड़ा।

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
public void onMessage(Message message) {//Logic } 

आशा है कि यह किसी की सहायता करे। संदेश सुनने के लिए एमडीबी के साथ मेरा 7 है।

`