2008-09-04 50 views
14

के बीच ओरेकल लेनदेन का प्रचार हमारे पास एक मौजूदा सी ++ एप्लिकेशन है जिसे हम धीरे-धीरे एक नई जावा-आधारित प्रणाली के साथ प्रतिस्थापित करने जा रहे हैं। जब तक हम जावा में सब कुछ पूरी तरह से कार्यान्वित नहीं कर लेते हैं, हम उम्मीद करते हैं कि सी ++ और जावा को एक दूसरे के साथ संवाद करना होगा (आरएमआई, एसओएपी, मैसेजिंग इत्यादि - हमने फैसला नहीं किया है)।सी ++ और जावा

अब मेरे प्रबंधक सोचता है कि हम एक ही Oracle DB लेनदेन में भाग लेने के जावा और सी ++ पक्षों की आवश्यकता होगी। यह संबंधित है, लेकिन एक एकल प्रक्रिया होने के सामान्य विघटित लेनदेन की समस्या से अलग है, जिसमें 2 लेनदेन संसाधन, जैसे कि डीबी और एक संदेश कतार है।

मुझे लगता है कि प्रक्रियाओं में एक सौदे के प्रचार के लिए एक प्रदर्शन और स्थिरता बिंदु देखने के लिए, लेकिन मैं अभी भी एक समाधान के लिए कहा जा रहा हूँ से एक भयानक विचार है।

मैं एक्सए लेनदेन से परिचित हूं और मैंने जेबॉस लेनदेन प्रबंधक के साथ कुछ काम किया है, लेकिन मेरे गुगलिंग ने 2 प्रक्रियाओं के बीच एक्सए लेनदेन को प्रसारित करने के लिए कुछ भी अच्छा नहीं किया है।

हम जावा पक्ष पर वसंत का उपयोग कर रहे हैं और उनके प्रलेखन स्पष्ट रूप से कहा है कि वे लेन-देन प्रचार के साथ किसी भी मदद प्रदान नहीं करते। है, जो प्रचार के लिए समर्थन कर सकते हैं (नहीं है कि मैं कोई निश्चित दस्तावेज़ीकरण देख सकते हैं):

हम एक पारंपरिक जावा ईई सर्वर (IBM Websphere उदाहरण के लिए) का उपयोग कर की योजना नहीं बना रहे हैं।

समाधान पर किसी भी मदद या पॉइंटर्स की सराहना की जाती है।

+0

क्या आप जेएमवी संग्रहीत प्रक्रिया के रूप में एप्लिकेशन को "एम्बेड" कर सकते हैं? फिर आप डेटाबेस कनेक्शन के माध्यम से सी ++ से अपने एप्लिकेशन के खंड को "बस" कॉल कर सकते हैं। – ibre5041

+0

सैद्धांतिक रूप से आप भी ऑपॉजिट कर सकते हैं। एक सी-संग्रहित प्रक्रिया मैम, जो डेटाबेस से वापस "कनेक्ट" होगा। फिर यह प्रक्रिया एक ही लेनदेन में भाग लेगी। – ibre5041

+0

आप वितरित लेनदेन "नाम" भी कर सकते हैं। यानी आप इसे एक पकाया नाम असाइन करें। फिर एक और प्रक्रिया, एक ही लेनदेन में "शामिल" हो सकती है। इस उद्देश्य के लिए AFAIK DBMS_XA या DBMS_TRANSACTION का उपयोग किया जा सकता है। – ibre5041

उत्तर

10

वहाँ ओरेकल के अंदर DBMS_XA पैकेज का उपयोग एक ही लेन-देन में काम करने के कई सत्रों की अनुमति के लिए की an example on Laurent Schneider's blog है। इसलिए किसी भी प्रकार के अतिरिक्त समन्वयक की आवश्यकता के बिना उसी लेनदेन में भाग लेने वाले जावा और सी ++ सत्र होना संभव होगा।

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

दूसरी ओर, मैं आपके प्रारंभिक मूल्यांकन से दृढ़ता से सहमत हूं कि प्रक्रियाओं के बीच लेनदेन को समन्वयित करना प्रदर्शन, स्थिरता, सादगी और रखरखाव दृष्टिकोण से एक बुरा विचार होने की संभावना है। दूसरी ओर, यह अच्छी तरह से कैसे सी ++ कोड सेवानिवृत्त होने जा रही है के आधार पर एक वैध व्यापार आवश्यकता हो सकती है (यानी कि क्या यह इस तरह से कि लेन-देन किया जा सकता है या तो विशेष रूप से जावा या विशेष रूप से सी ++ में कोड को बदलने के लिए संभव है)

0

मेरा मानना ​​है कि जेबॉस लेनदेन प्रबंधक वेब सेवा कॉल में 2pc tx प्रचार का समर्थन करता है। आप कर सकते हैं, मुझे लगता है कि इस तरह से अपने सिस्टम को एकीकृत करें, लेकिन प्रदर्शन बदबू आ जाएगी।

4

मैं इनमें से कुछ चिंताओं को हल करने के लिए Hazlecast संदेश और वितरित स्मृति ताले का उपयोग कर रहा हूं, हालांकि इस तरह के एक उपकरण का उपयोग करने के लिए आपको उन हिस्सों में अपने सॉफ़्टवेयर को फिर से डिजाइन करना होगा जहां आप एक ही डेटा को स्पर्श करते हैं। सी ++ ग्राहक डॉक्स here जावा ग्राहक here

ओरेकल भी इसी तरह के उत्पाद Oracle जुटना कहा जाता है कि आप मदद कर सकते हैं, देव गाइड में locking देखना है।

इसके अलावा डेटाबेस में Oracle Streams Advanced queueing (लेनदेन संबंधी लगातार कतार) नामक एक एमक्यू सिस्टम शामिल है जो कुछ स्थितियों में आपकी मदद कर सकता है। ओरेकल एक्यू ओरेकल ट्रिगर के साथ अच्छी तरह से एकीकृत करता है।

साथ ही वहाँ Database Change Notification आप कैश को अपडेट करने या अद्यतन की प्रक्रिया सूचना देने में सहायता मिल सकती है, इस Optimistic Offline Lock pattern के साथ एक साथ इस्तेमाल किया जा सकता है।

भी देखें Software transactional memory

अपाचे Zookeeper भी वितरित locking साथ आप कर सकते हैं।

+0

प्रदान कर सकते हैं विस्तृत जवाब के लिए धन्यवाद जो मुझे कई दृष्टिकोणों का वर्णन करना है जिन्हें मुझे जांचना होगा। मैं आपको बक्षीस देने के लिए जा रहा हूं क्योंकि यह इस सवाल का एकमात्र नया जवाब है। हालांकि, मैं अभी भी और विकल्पों की तलाश कर रहा हूं, विशेष रूप से हल्के समाधान जिनके लिए संभवतः महंगा तृतीय-पक्ष उत्पादों (न ही ऑरैकल एंटरप्राइज़ संस्करण) की आवश्यकता नहीं है। – MRalwasser

+0

मुझे नहीं लगता कि ऐसा करने का एक आसान तरीका है। सिस्टम क्या करता है और ऐसा लगता है कि विकल्प "विरासत कोड के साथ काम करना" http://programmers.stackexchange.com/a/122100 पर एक विकल्प है – oluies

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