2009-12-18 5 views
5

मैं वर्तमान में जेएनडीआई का उपयोग कर वेबलॉगिक 10.3 सर्वर से उपयोगकर्ता ट्रांज़ेक्शन और डेटासोर्स दोनों को पुनर्प्राप्त कर रहा हूं।वेबलॉगिक 10.3 का उपयोग कर उपयोगकर्ता ट्रांज़ेक्शन में भाग लेने के लिए जेएनडीआई डेटासोर्स से प्राप्त जेडीबीसी कनेक्शन कैसे प्राप्त करें?

मैं 'ग्लोबल लेनदेन का समर्थन' और उपयोग करने के लिए करने के लिए डेटा स्रोत निर्धारित किया है अप 'लॉगिंग अंतिम संसाधन'

मेरे आशा थी कि एक UserTranscation शुरुआत और उसके बाद कनेक्शन में भाग लेंगे डेटा स्रोत से एक JDBC कनेक्शन पुन: प्राप्त करने से सौदा।

यह मामला प्रतीत नहीं होता है, और मेरे सम्मिलित बयानों को तुरंत चलाया जा रहा है और लेनदेन वापस रोलिंग का कोई प्रभाव नहीं पड़ता है।

क्या मेरी उपरोक्त धारणाएं सही हैं?

क्या कोई मुझे इसे प्राप्त करने के तरीके पर कुछ दस्तावेज या नमूने की दिशा में इंगित कर सकता है?

अग्रिम में बहुत धन्यवाद

अद्यतन: हल करने

आदेश में:

private void doSomething() { 
Connection conn = null; 
try { 
    Hashtable env = new java.util.Hashtable(); 
    env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory"); 
    env.put(javax.naming.Context.PROVIDER_URL,"t3://localhost:8080"); 
    InitialContext ctx = InitialContext(env)); 

    UserTransaction transaction = null; 
    transaction = (UserTransaction) ctx.lookup("java:comp/UserTransaction"); 

    DataSource dataSource = (DataSource) context.lookup("jdbc/xxxxx/DataSource"); 
    conn = dataSource.getConnection(); 
    transaction.begin(); 
    // JDBC code goes here 
    transaction.commit(); 
} catch(Exception e) { 
    // TODO 
    if (transaction != null) { 
    try { 
    transaction.rollback(); 
    } catch (Exception ex) { 
    // TODO 
    } 
} finally { 
    if (con != null) { 
    conn.close 
    } 
} 
} 

अद्यतन 2:

के रूप में यहाँ का अनुरोध कोड मैं उपयोग कर रहा हूँ की एक कंकाल रूपरेखा है इस मुद्दे को मुझे 2 चीजें करना पड़ा:

  1. कोड के क्रम को पहले उपयोगकर्ता लेनदेन शुरू करने के लिए बदलें और फिर डेटास्टोर से एक कनेक्शन प्राप्त करें (जैसा कि पास्कल थिवेंट द्वारा इंगित किया गया है)।

  2. एक जेडबीसी/xxxxx/डेटासोर्स "द्वारा संदर्भित डेटासोर्स को XADatasource में संदर्भित करें। ऐसा इसलिए है क्योंकि मैं उपयोगकर्ता लेनदेन के अंदर कोड बुला रहा था जिसने अन्य डेटासोर्स का उपयोग किया जो पहले से ही एलएलआर का समर्थन करने के लिए कॉन्फ़िगर किया गया था और जैसा कि नीचे पास्कल थिवेंट द्वारा इंगित किया गया है, आपके पास केवल एक एलएलआर डाटासोर्स ट्रांसकेशन में भाग ले सकता है।

मैंने पास्कल थिवेन्ट के उत्तर को नीचे स्वीकार कर लिया है क्योंकि यह दोनों मुद्दों को समझाया गया है।

उत्तर

2

हां, आपकी धारणाएं सही हैं और Create LLR-enabled JDBC data sources के अनुसार, आपका डेटा स्रोत ठीक से कॉन्फ़िगर किया गया है।

क्या आपको उपयोगकर्ता लेनदेन शुरू करने के बाद कनेक्शन मिल गया है? क्या आप अपना कोड या छद्म कोड दिखा सकते हैं?

अद्यतन:Programming Considerations and Limitations for LLR Data Sources में उल्लेख किया है:

  • When programming with an LLR data source, you must start the global transaction before calling getConnection on the LLR data source. If you call getConnection before starting the global transaction, all operations on the connection will be made outside of the global transaction.

तो आप इस कोशिश कर सकते:

transaction.begin(); //start the global tx before calling getConnection() 
conn = dataSource.getConnection(); 
... 
transaction.commit(); 

UPDATE2: (जहां 2 कनेक्शन आ रहा है से समझने के लिए सुनिश्चित नहीं हैं आपका छद्म कोड यह नहीं दिखा रहा है)।हालांकि, एक ही Programming Considerations and Limitations for LLR Data Sources के अनुसार:

  • Only instances of a single LLR data source may participate in a particular transaction. A single LLR data source may have instances on multiple WebLogic servers, and two data sources are considered to be the same if they have the same configured name. If more than one LLR data source instance is detected and they are not instances of the same data source, the transaction manager will roll back the transaction.

वास्तव में, एक पूरी तरह से प्रतिनिधि उदाहरण के बिना, मैं अब तक आपकी मदद के लिए अंधेरे :)

+0

धन्यवाद चलने की तरह एक सा लग रहा है। मैंने अनुरोध के रूप में मेरे कोड की कंकाल रूपरेखा जोड़ा है। – lucasweb

+0

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

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