OSGi क्या हल करता है?


279

मैंने विकीपीडिया और OSGi के बारे में अन्य साइटों पर पढ़ा है , लेकिन मैं वास्तव में बड़ी तस्वीर नहीं देखता हूं। यह कहता है कि यह एक घटक-आधारित प्लेटफ़ॉर्म है, और यह कि आप रनटाइम पर मॉड्यूल पुनः लोड कर सकते हैं। साथ ही हर जगह दिया गया "व्यावहारिक उदाहरण" एक्लिप्स प्लगिन फ्रेमवर्क है।

मेरे प्रश्न हैं:

  1. OSGi की स्पष्ट और सरल परिभाषा क्या है?

  2. यह किन सामान्य समस्याओं को हल करता है?

"सामान्य समस्याओं" से मेरा मतलब है कि हम रोज़मर्रा की समस्याओं का सामना करते हैं, जैसे "OSGi हमारी नौकरियों को अधिक कुशल / मजेदार / सरल बनाने के लिए क्या कर सकता है?"

जवाबों:


95

OSGi की घटक प्रणाली आपको क्या लाभ प्रदान करती है?
खैर, यहाँ काफी एक सूची है:

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

पुन: उपयोग - ओएसजीआई घटक मॉडल एक आवेदन में कई तीसरे पक्ष के घटकों का उपयोग करना बहुत आसान बनाता है। ओपन सोर्स प्रोजेक्ट्स की बढ़ती संख्या उनके JAR को OSGi के लिए तैयार प्रदान करती है। हालाँकि, तैयार किए गए बंडलों के रूप में व्यावसायिक पुस्तकालय भी उपलब्ध हो रहे हैं।

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

आसान परिनियोजन - OSGi तकनीक केवल घटकों के लिए एक मानक नहीं है। यह भी निर्दिष्ट करता है कि घटकों को कैसे स्थापित और प्रबंधित किया जाता है। इस API का उपयोग प्रबंधन एजेंट प्रदान करने के लिए कई बंडलों द्वारा किया जाता है। यह प्रबंधन एजेंट कमांड शेल, टीआर -69 प्रबंधन प्रोटोकॉल ड्राइवर, ओएमए डीएम प्रोटोकॉल ड्राइवर, अमेज़ॅन के ईसी 2 के लिए क्लाउड कंप्यूटिंग इंटरफ़ेस या आईबीएम टिवोली प्रबंधन प्रणाली के रूप में सरल हो सकता है। मानकीकृत प्रबंधन एपीआई मौजूदा और भविष्य की प्रणालियों में ओएसजीआई प्रौद्योगिकी को एकीकृत करना बहुत आसान बनाता है।

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

अनुकूली - ओएसजीआई घटक मॉडल को घटकों के मिश्रण और मिलान की अनुमति देने के लिए जमीन से डिज़ाइन किया गया है। इसके लिए आवश्यक है कि घटकों की निर्भरता को निर्दिष्ट करने की आवश्यकता है और इसके लिए ऐसे वातावरण में रहने के लिए घटकों की आवश्यकता होती है, जहाँ उनकी वैकल्पिक निर्भरताएँ हमेशा उपलब्ध न हों। OSGi सर्विस रजिस्ट्री एक डायनामिक रजिस्ट्री है जहाँ बंडल पंजीकरण कर सकते हैं, प्राप्त कर सकते हैं और सेवाओं को सुन सकते हैं। यह गतिशील सेवा मॉडल बंडल को यह पता लगाने की अनुमति देता है कि सिस्टम पर क्या क्षमताएं उपलब्ध हैं और वे जो कार्यक्षमता प्रदान कर सकते हैं उसे अनुकूलित करें। यह कोड को अधिक लचीला और परिवर्तनों के लिए लचीला बनाता है।

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

वर्जनिंग - ओएसजीआई तकनीक जार नरक को हल करती है। JAR नर्क वह समस्या है जो पुस्तकालय A पुस्तकालय B के साथ काम करता है; संस्करण = 2, लेकिन पुस्तकालय C केवल B के साथ काम कर सकता है; संस्करण = 3। मानक जावा में, आप भाग्य से बाहर हैं। OSGi वातावरण में, सभी बंडलों को ध्यान से संस्करणित किया जाता है और केवल बंडलों जो सहयोग कर सकते हैं को एक ही वर्ग स्थान में एक साथ तार दिया जाता है। यह बंडल A और C दोनों को अपनी लाइब्रेरी के साथ कार्य करने की अनुमति देता है। हालांकि इस संस्करण के मुद्दे के साथ सिस्टम को डिजाइन करने की सलाह नहीं दी जाती है, लेकिन कुछ मामलों में यह जीवन रक्षक हो सकता है।

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

छोटा - OSGi रिलीज़ 4 फ्रेमवर्क को लगभग 300KB JAR फ़ाइल में लागू किया जा सकता है। यह कार्यक्षमता की मात्रा के लिए एक छोटा ओवरहेड है जिसे OSGi सहित किसी एप्लिकेशन में जोड़ा जाता है। OSGi इसलिए उपकरणों की एक बड़ी रेंज पर चलता है: बहुत छोटे से, छोटे से लेकर मेनफ्रेम तक। यह केवल चलाने के लिए एक न्यूनतम जावा वीएम पूछता है और इसके शीर्ष पर बहुत कम जोड़ता है।

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

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

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

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

हर जगह चलता है - ठीक है, यह निर्भर करता है। जावा का मूल लक्ष्य कहीं भी दौड़ना था। जाहिर है, सभी कोड को हर जगह चलाना संभव नहीं है क्योंकि जावा वीएम की क्षमताएं अलग-अलग हैं। एक मोबाइल फोन में एक वीएम संभवतः एक ही पुस्तकालयों का समर्थन नहीं करेगा, जो कि आईबीएम मेनफ्रेम बैंकिंग एप्लिकेशन चला रहा है। ध्यान रखने के लिए दो मुद्दे हैं। सबसे पहले, ओएसजीआई एपीआई को उन कक्षाओं का उपयोग नहीं करना चाहिए जो सभी वातावरणों पर उपलब्ध नहीं हैं। दूसरा, एक बंडल शुरू नहीं होना चाहिए यदि इसमें कोड शामिल है जो निष्पादन वातावरण में उपलब्ध नहीं है। इन दोनों मुद्दों का OSGi विनिर्देशों में ध्यान रखा गया है।

स्रोत: www.osgi.org/Technology/WhyOSGi


2
मुझे लगता है कि एक SOA (स्टेटलेस / स्टेटफुल) का उपयोग करके कम से कम इन लाभों को प्राप्त किया जा सकता है। जब मैं किसी घटक के पैचेड / अपडेटेड संस्करण को किसी भिन्न (संस्करणित) अंत-बिंदु पर तैनात करता हूं, तो मेरे पास बस निर्भर घटक हो सकता है, और नए सिरे से बिंदु पर पैच किए गए सेवा का उपयोग कर सकता है। चूँकि मेरे पास पुराने संस्करण और नए संस्करण दोनों एक ही समय पर तैनात और चल सकते हैं, इसलिए मेरे पास निर्भर घटक पुराने संस्करण और नए संस्करण दोनों के विभिन्न भागों का उपयोग कर सकते हैं।
माइकमे

1
ऐसा लगता है कि लोग माइक्रोसर्ज करने के लिए बहुत परेशानी के दौर से गुजर रहे हैं और SOA टू (उम्मीद है) OSGi की तुलना में 20% अधिक कार्यक्षमता प्राप्त करते हैं। कंपनियों को दो बार सोचना चाहिए कि ओएसजीआई इतने कम अतिरिक्त काम के लिए कितना देता है। एक ही प्रक्रिया में एक ही JVM पर सभी सेवाएँ, जहाँ कई सेवाओं को ऑफ़लाइन या आवश्यकतानुसार लिया जा सकता है।
टेडी

OSGi बंडलों बस मायावी 'घटक' है कि लोगों को उम्र के लिए देख रहा है के लिए निकटतम अमूर्त हो सकता है!
टेडी

SOA और microservices कुछ लाभ प्रदान कर सकते हैं लेकिन बहुत अधिक लागत पर। दोनों ही मामलों में सभी संचार नेटवर्क पर होता है जो स्थानीय कॉल की तुलना में बहुत महंगा है। SOA और microservices में संस्करणों का प्रबंधन भी काफी बुरा सपना है। तुलना में OSGi सेवा कॉल करना किसी भी जावा विधि कॉल के समान सस्ता है।
क्रिश्चियन श्नाइडर

90

मुझे OSGi से निम्नलिखित लाभ मिले हैं:

  • प्रत्येक प्लगइन एक संस्करणित विरूपण साक्ष्य है जिसका अपना स्वयं का क्लास लोडर है।
  • प्रत्येक प्लगइन दोनों विशिष्ट जार पर निर्भर करता है जिसमें यह होता है और अन्य विशिष्ट संस्करण प्लग-इन भी होते हैं।
  • वर्जनिंग और आइसोलेटेड क्लास लोडर की वजह से एक ही आर्टवर्क के अलग-अलग वर्जन को एक ही समय में लोड किया जा सकता है। यदि आपके एप्लिकेशन का एक घटक प्लग-इन के एक संस्करण पर निर्भर करता है और दूसरा किसी अन्य संस्करण पर निर्भर करता है, तो वे दोनों एक ही समय में लोड किए जा सकते हैं।

इसके साथ, आप अपने एप्लिकेशन को संस्करणित प्लगइन कलाकृतियों के एक सेट के रूप में संरचना कर सकते हैं जो मांग पर लोड किए गए हैं। प्रत्येक प्लगइन एक स्टैंडअलोन घटक है। जिस तरह मावेन आपको अपने निर्माण में मदद करता है, इसलिए यह दोहराए जाने योग्य है और इसके द्वारा बनाई गई कलाकृतियों के विशिष्ट संस्करणों द्वारा निर्धारित किया जाता है, ओएसजीआई आपको रनटाइम में ऐसा करने में मदद करता है।


14
इस मजबूत संस्करण तंत्र के सबसे बड़े लाभों में से एक यह है कि निर्भरता को परिनियोजन के दौरान सत्यापित किया जाता है, जिसका अर्थ है कि आपको रन टाइम के दौरान NoClassDefFoundErrors के बजाय परिनियोजन समय पर निर्भरता में त्रुटि मिली है। मॉड्यूल सिस्टम के अलावा, OSGi सेवा परत उल्लेख के लायक है। इसे शुरू करना उतना आसान नहीं है क्योंकि यह आपकी वास्तुकला को प्रभावित करता है (और इसका उपयोग करना हमेशा उचित नहीं होता है), लेकिन इसे अपनाने के बाद यह एक बहुत शक्तिशाली प्रणाली है।
Barend

58

मैं OSGi मॉड्यूल (कम से कम वर्तमान में) की हॉटप्लगैबिलिटी के बारे में बहुत ज्यादा परवाह नहीं करता हूं। यह अधिक लागू प्रतिरूपकता है। क्लासपैथ पर किसी भी समय लाखों "सार्वजनिक" कक्षाएं उपलब्ध न होना परिपत्र निर्भरता से अच्छी तरह से बचाता है: आपको वास्तव में अपने सार्वजनिक इंटरफेस के बारे में सोचना होगा - न केवल जावा भाषा के निर्माण के संदर्भ में "सार्वजनिक", बल्कि आपके पुस्तकालय के संदर्भ में / मॉड्यूल: क्या (वास्तव में) घटक हैं, जिसे आप दूसरों के लिए उपलब्ध कराना चाहते हैं? क्या (वास्तव में) इंटरफेस हैं (अन्य मॉड्यूल के) आपको वास्तव में अपनी कार्यक्षमता को लागू करने की आवश्यकता है?

यह अच्छा है, यह हॉटप्लग इसके साथ आता है, लेकिन मैं हॉटप्लगैबिलिटी के सभी संयोजनों के परीक्षण के बजाय अपने सामान्य अनुप्रयोगों को फिर से शुरू करूंगा ...


9
आप गुएस और पैकेज का उपयोग करके समान प्राप्त कर सकते हैं, केवल इंटरफेस और मॉड्यूल का निर्यात कर सकते हैं और बाकी सब को निजी तौर पर चिह्नित कर सकते हैं
पाब्लो फर्नांडीज

20
  • आप बिना किसी को बताए अपनी कार की मोटर को बदल सकते हैं।
  • आप ग्राहकों के लिए जटिल प्रणालियों को अनुकूलित कर सकते हैं। ग्रहण की शक्ति देखें।
  • आप संपूर्ण घटकों का पुन: उपयोग कर सकते हैं। सिर्फ वस्तुओं से बेहतर।
  • आप घटक आधारित अनुप्रयोग विकसित करने के लिए एक स्थिर मंच का उपयोग करते हैं। इसके लाभ बहुत बड़े हैं।
  • आप ब्लैक बॉक्स कॉन्सेप्ट के साथ कंपोनेंट्स बना सकते हैं। अन्य घटकों को छिपे हुए इंटरफेस के बारे में जानने की जरूरत नहीं है, वे सिर्फ प्रकाशित इंटरफेस देखते हैं।
  • आप एक ही सिस्टम में कई समान घटकों का उपयोग कर सकते हैं, लेकिन अलग-अलग रिलीज में, एप्लिकेशन से समझौता किए बिना। ओएसजीआई जार हेल समस्या का हल करता है।
  • OSGi के साथ आप CBD के साथ आर्किटेक्ट सिस्टम के लिए सोच विकसित करते हैं

बहुत सारे लाभ हैं (मैं अभी इनको याद दिलाता हूं), उन सभी के लिए उपलब्ध है जो जावा का उपयोग करते हैं।


15

स्पष्टता के लिए संपादित किया गया। OSGi पेज ने खदान से बेहतर सरल उत्तर दिया

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

एकल एप्लिकेशन संरचना में, ग्रहण आईडीई का कहना है, जब आप एक नया प्लगइन स्थापित करते हैं, तो पुनरारंभ करना कोई बड़ी बात नहीं है। पूरी तरह से ओएसजीआई कार्यान्वयन का उपयोग करते हुए, आपको रनटाइम पर प्लगइन्स को जोड़ने में सक्षम होना चाहिए, नई कार्यक्षमता प्राप्त करना चाहिए, लेकिन ग्रहण को फिर से शुरू नहीं करना होगा।

फिर, हर दिन के लिए एक बड़ा सौदा नहीं, छोटे अनुप्रयोग का उपयोग।

लेकिन, जब आप मल्टी-कंप्यूटर को देखना शुरू करते हैं, तो एप्लीकेशन फ्रेमवर्क वितरित करते हैं, बस यहीं से दिलचस्प शुरुआत होती है। जब आपके पास क्रिटिकल सिस्टम के लिए 100% अपटाइम होना चाहिए, तो पुर्जे को गर्म करने या रनटाइम में नई कार्यक्षमता जोड़ने की क्षमता उपयोगी है। दी, अभी भी अधिकांश भाग के लिए ऐसा करने की क्षमता है, लेकिन OSGi सब कुछ सामान्य इंटरफेस के साथ एक अच्छा सा ढाँचा बनाने की कोशिश कर रहा है।

क्या OSGi सामान्य समस्याओं को हल करता है, मुझे इस पर यकीन नहीं है। मेरा मतलब है, यह हो सकता है, लेकिन सरल समस्याओं के लिए ओवरहेड इसके लायक नहीं हो सकता है। लेकिन यह विचार करने के लिए कुछ है जब आप बड़े, नेटवर्क वाले, अनुप्रयोगों से निपटने के लिए शुरू कर रहे हैं।


क्या आप कह रहे हैं कि वितरित वातावरण में ओएसजीआई सेवा की खोज के लिए एक अंतर-जेवीएम तंत्र प्रदान करता है? मेरे अपने प्रश्न ( stackoverflow.com/questions/375725/… ) का उत्तर दिया गया है जैसे कि OSGi सिंगल-वीएम है
oxbow_lakes 15:18

"नेटवर्क" से आपका क्या मतलब है "विभिन्न प्रकार के नेटवर्क के डिवाइस पर संरचना को गतिशील रूप से बदलें"?
थिलो

क्या माइक्रोसॉफ़्ट समान समस्याओं को हल नहीं कर रहे हैं?
विभा

12

कुछ चीजें जो मुझे OSGi पर पागल करती हैं:

1) निहितार्थ और उनके संदर्भ लोडर के पास उनके लिए बहुत सारी क्विर्क्स हैं, और कुछ हद तक async हो सकती हैं (हम संगम के अंदर फेलिक्स का उपयोग करते हैं)। एक शुद्ध वसंत (कोई डीएम) की तुलना में जहां [मुख्य] ​​बहुत कुछ सिंक के माध्यम से चल रहा है।

2) गर्म भार के बाद कक्षाएं समान नहीं होती हैं। उदाहरण के लिए, आप हाइबरनेट पर एक tangosol कैश परत है। यह OSGi दायरे से बाहर, Fork.class से भरा है। आपने एक नया जार लोड किया है, और फोर्क नहीं बदला है। क्लास [फोर्क]! ​​= क्लास [फोर्क]। यह समान अंतर्निहित कारणों के लिए, क्रमांकन के दौरान भी प्रकट होता है।

3) क्लस्टरिंग।

आप इन चीजों के आसपास काम कर सकते हैं, लेकिन यह एक प्रमुख प्रमुख दर्द है, और आपकी वास्तुकला को दोषपूर्ण बनाता है।

और आप में से जो हॉटप्लगिंग का विज्ञापन कर रहे हैं .. OSGi का # 1 क्लाइंट? ग्रहण। बंडल को लोड करने के बाद ग्रहण क्या करता है?

यह पुनः आरंभ करता है।


यह बताना न भूलें कि OSGi निर्भरता ग्राफ के उस नए बंडल से टूटने के बाद भी ग्रहण बूट नहीं हो सकता है।
मार्टिन विसेनी

6

ओएसजीआई आपके कोड को फेंक देता है NoClassDefFoundErrorऔर ClassNotFoundExceptionबिना किसी स्पष्ट कारण के (सबसे शायद इसलिए कि आप ओएसजीआई कॉन्फ़िगरेशन फ़ाइल में एक पैकेज निर्यात करना भूल गए थे); चूँकि इसके पास ClassLoaders है इसलिए यह आपकी कक्षा को com.example.Fooअसफल बना सकता है com.example.Fooक्योंकि यह वास्तव में दो अलग-अलग वर्ग है जो दो अलग-अलग classloaders द्वारा लोड किए गए हैं। यह एक ग्रहण प्लगइन स्थापित करने के बाद एक OSGi कंसोल में अपना ग्रहण बूट बना सकता है।

मेरे लिए, OSGi ने केवल जटिलता को जोड़ा (क्योंकि यह मेरे लिए एक और मानसिक मॉडल जोड़ दिया), अपवादों के कारण झुंझलाहट को जोड़ा; मुझे वास्तव में इस "ऑफ़र" की गतिशीलता की आवश्यकता नहीं थी। यह सभी मॉड्यूल के लिए OSGi बंडल कॉन्फ़िगरेशन की आवश्यकता के बाद से घुसपैठ कर रहा था; यह निश्चित रूप से सरल नहीं था (एक बड़ी परियोजना में)।

मेरे बुरे अनुभव के कारण, मैं उस राक्षस से दूर रहता हूं, बहुत-बहुत धन्यवाद। मैं नहीं बल्कि जार निर्भरता नरक से पीड़ित हूँ, क्योंकि जिस तरह से अधिक आसानी से समझ में आता है वह क्लास लोडर नरक OSGi का परिचय देता है।


5

मैं अभी तक OSGi का "प्रशंसक" नहीं हूँ ...

मैं फॉर्च्यून 100 कंपनियों में एक एंटरप्राइज़ एप्लिकेशन के साथ काम कर रहा हूं। हाल ही में, हम जिस उत्पाद का उपयोग करते हैं, वह ओएसजीआई कार्यान्वयन के लिए "उन्नत" है।

स्थानीय cba तैनाती शुरू ... [2/18/14 8: 47: 23: 727 EST] 00000347 CheckForasis

अंत में तैनात किया गया और "निम्नलिखित बंडलों को समाप्त कर दिया जाएगा और फिर से शुरू किया जाएगा" [2/18/14 9: 38: 33: 108 ईएसटी] 00000143 मेष राशि: I CWSAI0054I: आवेदन के लिए एक अपडेट ऑपरेशन के भाग के रूप में।

51 मिनट ... हर बार कोड बदलता है ... पिछले संस्करण (गैर-ओएसजीआई) पुराने विकास मशीनों पर 5 मिनट से भी कम समय में तैनात होंगे।

16 गिग रैम और 40 फ्री गिग डिस्क और इंटेल i5-3437U 1.9 गीगाहर्ट्ज सीपीयू वाली मशीन पर

इस अपग्रेड के "लाभ" को सुधार (उत्पादन) की तैनाती के रूप में बेचा गया था - एक गतिविधि जो हम साल में लगभग 4 बार करते हैं शायद एक साल में 2-4 छोटे फिक्स तैनाती के साथ। 15 लोगों (क्यूए और डेवलपर्स) के लिए प्रति दिन 45 मिनट जोड़ना मैं कभी भी उचित होने की कल्पना नहीं कर सकता। बड़े उद्यम अनुप्रयोगों में, यदि आपका आवेदन एक मुख्य अनुप्रयोग है, तो इसे बदलना सही है, इसलिए (छोटे बदलावों के दूरगामी प्रभाव तक पहुंचने की क्षमता है - उद्यम के सभी उपभोक्ताओं के साथ संवाद और योजना बनाई जानी चाहिए), एक स्मारक गतिविधि - गलत वास्तुकला OSGi। यदि आपका एप्लिकेशन एंटरप्राइज़ एप्लिकेशन नहीं है - अर्थात प्रत्येक उपभोक्ता का अपना स्वयं का सिलवाया मॉड्यूल हो सकता है, जो अपने साइलोएड डेटाबेस में डेटा के अपने साइलो को मार सकता है और एक सर्वर पर चल रहा है जो कई अनुप्रयोगों को होस्ट करता है, तो शायद OSGi को देखें। कम से कम,


4
OSGi 5 से 51 मिनट तक तैनाती का कारण नहीं बन सकता क्योंकि इसमें लगभग कोई ओवरहेड नहीं है। स्टार्टअप समय में यह वृद्धि कुछ और के कारण होनी चाहिए, या, सक्रियण को क्रमिक रूप से प्रारंभ करके क्रमिक रूप से मानकीकृत करके। यह OSGi का दोष नहीं है क्योंकि सामान्य तौर पर लोगों को स्टार्टअप का समय कम मिलता है।
पीटर क्रिएन्स

दिलचस्प जवाब। मैं अभी OSGi के बारे में पढ़ रहा हूँ ... हाँ देर से आने वाला। लेकिन मेरी चिंता उद्यम के संदर्भ में डेटा को लेकर है। इसी तरह का मुद्दा मेरे पास है।
बिल रोसमस

4

अगर जावा आधारित एप्लिकेशन को जेवीएम को बंद किए बिना मॉड्यूल (एप्लिकेशन की आधार कार्यक्षमता को विस्तारित करना) को जोड़ने या हटाने की आवश्यकता होती है, तो OSGI को नियोजित किया जा सकता है। आमतौर पर अगर जेवीएम को बंद करने की लागत अधिक है, तो बस अद्यतन करने या कार्यक्षमता बढ़ाने के लिए।

उदाहरण :

  1. ग्रहण : प्लगइन्स को इंस्टॉल, अनइंस्टॉल, अपडेट और इंटर-डिपेंड करने के लिए प्लेटफॉर्म प्रदान करता है।
  2. AEM : WCM एप्लिकेशन, जहां कार्यक्षमता परिवर्तन व्यवसाय संचालित होगा, जो रखरखाव के लिए कई बार खर्च नहीं कर सकता है।

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


3

मैं लगभग 8 या इतने सालों से OSGi के साथ काम कर रहा हूं और मेरा कहना है कि आपको OSGi पर तभी विचार करना चाहिए जब आपको रनटाइम पर किसी कंपोनेंट को अपडेट करने, हटाने, इंस्टॉल करने या बदलने की आवश्यकता हो। इसका मतलब यह भी है कि आपको एक मॉड्यूलर मानसिकता और समझ होनी चाहिए कि मॉड्यूलरिटी का मतलब क्या है। कुछ तर्क हैं कि OSGi हल्का है - हाँ, यह सच है लेकिन कुछ अन्य ढांचे भी हैं जो हल्के और बनाए रखने और विकसित करने में आसान हैं। उसी को सुरक्षित करने के लिए जावा ब्ला ब्ला जाता है।

OSGi को सही तरीके से उपयोग करने के लिए एक ठोस आर्किटेक्चर की आवश्यकता होती है और OSGi-System को बनाना काफी आसान है जो बिना किसी OSGi के एक स्टैंडअलोन-रन-जारे के रूप में आसानी से शामिल हो सकता है।


2

OSGi निम्नलिखित लाभ प्रदान करता है:

जावा पर आधारित एक पोर्टेबल और सुरक्षित निष्पादन वातावरण

■ एक सेवा प्रबंधन प्रणाली, जिसका उपयोग सेवा उपभोक्ताओं से बंडलों और डिकॉय सेवा प्रदाताओं में पंजीकरण और साझा करने के लिए किया जा सकता है

■ एक डायनामिक मॉड्यूल सिस्टम, जिसका उपयोग जावा मॉड्यूल को गतिशील रूप से स्थापित करने और अनइंस्टॉल करने के लिए किया जा सकता है, जिसे ओएसजीआई बंडल कहते हैं

■ एक हल्के और स्केलेबल समाधान


1

इसका उपयोग मोबाइल पर मिडलवेयर और एप्लिकेशन की अतिरिक्त पोर्टेबिलिटी लाने के लिए भी किया जा रहा है। मोबाइल पक्ष विनमो, सिम्बियन, Android उदाहरण के लिए उपलब्ध है। जैसे ही डिवाइस सुविधाओं के साथ एकीकरण होता है, खंडित हो सकता है।


1

बहुत कम से कम, OSGi आपको प्रतिरूपकता, कोड पुन: उपयोग, संस्करण और सामान्य रूप से एक परियोजना की पाइपलाइन के बारे में सोचता है।


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

1

अन्य लोगों ने पहले से ही लाभ के बारे में विस्तार से बताया है, मैं इसके द्वारा उन व्यावहारिक usecases की व्याख्या करता हूं जो मैंने या तो OSGi को देखा या उपयोग किया है।

  1. हमारे एक आवेदन में, हमारे पास ईवेंट आधारित प्रवाह है और फ्लो को OSGi प्लेटफॉर्म पर आधारित कल-पुर्जों में परिभाषित किया गया है, इसलिए यदि कोई ग्राहक अलग / अतिरिक्त प्रवाह चाहता है तो उसे बस एक और प्लगइन तैनात करना होगा, उसे हमारे कंसोल से कॉन्फ़िगर करें और वह हो गया ।
  2. इसका उपयोग विभिन्न स्टोर कनेक्टरों को तैनात करने के लिए किया जाता है, उदाहरण के लिए, मान लें कि हमारे पास पहले से ओरेकल डीबी कनेक्टर है और कल मोंगोडब को कनेक्ट करना आवश्यक है, फिर एक नया कनेक्टर लिखें और इसे तैनात करें और कंसोल के माध्यम से विवरणों को कॉन्फ़िगर करें और फिर से आप कर रहे हैं। Connectors की तैनाती OSGi प्लगइन ढांचे द्वारा नियंत्रित की जाती है।

1

इसकी आधिकारिक साइट में पहले से ही काफी ठोस कथन है, मैं इसके रूप में उद्धृत कर सकता हूं

OSGi तकनीक का इतना महत्वपूर्ण कारण यह है कि यह एक बहुत ही परिपक्व घटक प्रणाली प्रदान करती है जो वास्तव में वातावरण की एक आश्चर्यजनक संख्या में काम करती है। OSGi घटक प्रणाली वास्तव में IDE (ग्रहण), एप्लिकेशन सर्वर (GlassFish, IBM Websphere, Oracle / BEA Weblogic, Jonas, JBoss), एप्लिकेशन फ्रेमवर्क (स्प्रिंग, गाइस), औद्योगिक स्वचालन, आवासीय गेटवे, जैसे अत्यधिक जटिल अनुप्रयोगों के निर्माण के लिए उपयोग की जाती है। फोन, और भी बहुत कुछ।

डेवलपर के लिए लाभ के रूप में?

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

OSGi का उपयोग करने के लाभों में विवरण की जाँच करें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.