क्या JRE लाइब्रेरी में कक्षाएं बाहरी / गैर-JRE असेंबली से अवलोकन योग्य और / या अतुल्यकालिक रीड का समर्थन करती हैं?


12

ऑब्जेक्ट संदर्भों पर थ्रेड-सुरक्षित तरीके से काम करने के लिए मैं अपने क्रॉस-प्लेटफ़ॉर्म लाइब्रेरी (जैसे JRE पर) को कैसे लागू कर सकता हूं, ताकि अन्य प्लेटफार्मों पर देशी फ्रंट-एंड ऑब्जेक्ट का निरीक्षण कर सकें और ऑब्जर्वेबल पैटर्न का लाभ उठा सकें?

थोड़ा बैकग्राउंड - अधिकांश फ्रंट-एंड फ्रेमवर्क में उपयोग किए जाने वाले डेटा बाइंडिंग की एक अवधारणा है। C # और Java में यह ऑब्जर्व करने योग्य विशेषता से संबंधित है जो एक वर्ग को परिवर्तन होने पर घटनाओं को फायर करने की क्षमता देता है, जिसमें कई नियंत्रण या "पर्यवेक्षक" सदस्यता ले सकते हैं। इस तरह पर्यवेक्षकों को अपडेट के लिए तुलना करते हुए, मतदान / संसाधन को पढ़ना नहीं है।

मैं एक विश्लेषण इंजन पर काम करना चाहता हूं जो समय के साथ डेटा की सूचियों में बदलाव करता है। यह अच्छा होगा कि विश्लेषण चलने के दौरान सामने वाले को इन सूचियों का पालन करने में सक्षम होना चाहिए। मुझे लगता है कि इसके लिए विश्लेषण इंजन में किसी ऑब्जेक्ट को पास करने में सक्षम होना चाहिए, जो लाइब्रेरी में लिखा है कि उम्मीद है कि क्रॉस-प्लेटफॉर्म है, और उस ऑब्जेक्ट पर थ्रेड-सुरक्षित रीड्स बनाने में सक्षम हो। या फिर, पुस्तकालय का अवलोकन करने योग्य अनुबंधों को पूरा करें।

जिस तरह से यह पुराने यूनिक्स-शैली सीएलआई इंजन में संभाला जाता है, वह स्टड / स्टडआउट / स्टडर का उपयोग करने के लिए है, और नियमित अंतराल पर इंजन पोस्ट अपडेट है। इसके लिए मानक ओवरहेड और टेक्स्ट पार्सिंग की आवश्यकता होती है, जिसे मैं संभव होने पर टाल दूंगा।


2
"इज़ एक्स संभव?" की तुलना में मूल प्रश्न को थोड़ा संकीर्ण बनाना सबसे अच्छा है, क्योंकि इसका सही उत्तर लगभग हमेशा "हाँ, यदि आप पर्याप्त प्रयास करते हैं।" ऐसा लगता है कि आप वास्तव में पूछना चाहते हैं "मैं स्टड / स्टडआउट के ओवरहेड के बिना एक्स कैसे कर सकता हूं?" जो मामले में, बस एक सांख्यिकीय या गतिशील रूप से जुड़े पुस्तकालय का उपयोग क्यों नहीं किया जाता है? क्या आपको किसी कारण से UI से अलग प्रोग्राम होने के लिए इस लाइब्रेरी की आवश्यकता है?
Ixrec

धन्यवाद, Ixrec। क्या आपको लगता है कि मैंने इसे अपने शीर्षक में सुझाया है? इसका कारण यह है कि मैं पुस्तकालय को पोर्टेबल होना चाहूंगा, और मूल निवासी होने का कारण यह होगा, क्योंकि मुझे लगता है कि देशी UI फ्रेमवर्क आम तौर पर बेहतर काम करता है (राय अलर्ट!), लेकिन मैं इंजन के तर्क को दो बार लिखना नहीं चाहता। ।
ब्रैंडन अर्नोल्ड

सांख्यिकीय या गतिशील रूप से लिंक की गई लाइब्रेरी पोर्टेबल क्यों नहीं हो सकती है? पुन: शीर्षक, यह एक "बहुत व्यापक" प्रश्न का एक पाठ्यपुस्तक उदाहरण है; मैंने उस पर ध्यान केंद्रित नहीं किया क्योंकि आपके बाकी के प्रश्नों में कुछ अधिक विशिष्ट प्रश्न थे।
Ixrec

@ मैं यह कर सकता हूँ। प्रश्न मानता है कि यह एक पुस्तकालय है, जिसमें वे संभावनाएँ शामिल हैं। मैं बस यह सुनिश्चित करना चाहूंगा कि इस लाइब्रेरी का उपभोग करने वाले किसी भी एप्लिकेशन को उन वस्तुओं के संदर्भ में देखा जा सकेगा जो इसे अतुल्यकालिक रूप से पारित किए जाते हैं, जबकि उन्हें संचालित किया जा रहा है।
ब्रैंडन अर्नोल्ड

1
@Ixrec मैंने शीर्षक को कम व्यापक होने के लिए अद्यतन किया है
ब्रेंडन अर्नोल्ड

जवाबों:


1

आप अपाचे ऊंट एकीकरण फ्रेमवर्क का उपयोग करके अपने पुस्तकालय के मॉडल पर एक एकीकरण स्तरीय बना सकते हैं। नेट्टी घटक शायद आपकी आवश्यकताओं के अनुरूप हो। एक अवलोकन पैटर्न के साथ आपके एकीकरण स्तरीय को आपके मॉडल के प्राप्त परिवर्तनों को बदलना चाहिए और उन्हें फ्रंट-एंड ग्राहकों को सूचित करना चाहिए। अपनी आवश्यकता की व्याख्या करने का एक और समान तरीका एक घटना-संचालित वास्तुकला के बारे में सोचना है जहां जब आपका मॉडल बदलता है, तो आपके एकीकरण टियर में प्रेक्षक श्रोताओं को जेएमएस टॉपिक में एक संदेश प्रकाशित करता है ताकि फ्रंट-एंड में जुड़े सबसक्रिप्टर उन्हें प्राप्त होंगे।


0

मैंने एक पूरी तरह से अलग उत्तर लिखा है, यह सुझाव देते हुए कि आपका प्रकाशक एक कतार या एक पाइप को अपडेट लिखता है - लेकिन फिर मैंने सवाल को फिर से पढ़ा।

अगर मैं सही समझता हूं कि आपका सामान्य प्रश्न यह है कि आप JRE में चलने के लिए एक लाइब्रेरी लिखना चाहते हैं, जिसमें एक देशी फ्रंट-एंड जावा ऑब्जेक्ट की स्थिति को थ्रेड-सेफ तरीके से क्वेरी कर सकता है।

यह अविश्वसनीय रूप से व्यापक है क्योंकि एक जेआरई - जेएनआई, ईजेबी आरपीसी, आरपीसी-शैली HTTP इंटरफेस, मैसेज क्यू पर अनुरोध-प्रतिक्रिया आदि में लाइब्रेरी कोड के साथ बातचीत करने के सैकड़ों तरीके सामने हैं।

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

हालांकि, यह विचार करें कि क्या यह वह मॉडल है जिसका आप अनुसरण करना चाहते हैं। यह "मुझे मत पूछो, मैं तुम्हें बताऊंगा" मॉडल को स्थानांतरित करने के लिए क्लीनर हो सकता है, जिसमें आपकी लाइब्रेरी अपडेट को सामने वाले छोर तक धक्का देती है जिसमें पर्याप्त जानकारी होती है जिसे ऑब्जेक्ट को क्वेरी करने की आवश्यकता नहीं होती है।


अतिरिक्त टिप्पणी - क्या आपने अपने सामने और पीछे के छोरों के बीच एक मध्यस्थ के रूप में रेडिस (या समान) का उपयोग करने पर विचार किया है?
स्लिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.