2009-02-01 14 views
9

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

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

मैं अब एक निर्णय मैं बनाने के लिए संघर्ष कर रहा हूँ, जो मौसम

है
  1. मेरा पूरा आवेदन एक OSGi बंडल कंटेनर में डिफ़ॉल्ट रूप से स्थापित हो जाना चाहिए; या
  2. मेरा एप्लिकेशन एक एम्बेडेड ओएसजीआई कंटेनर लॉन्च करना चाहिए और सभी प्लग सेवाओं के लिए इसके साथ बातचीत करना चाहिए।

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

उत्तर

0

क्या आपने स्प्रिंग एप्लिकेशन सर्वर देखा है? क्या यह आपको इस सामान को प्रबंधित करने की अनुमति नहीं देता है?

+0

यह एक स्टैंडअलोन डेस्कटॉप ऐप है। – Cogsy

+0

इसके आगे: यदि यह एक स्टैंडअलोन डेस्कटॉप एप्लिकेशन है, तो एक्लिप्स और नेटबीन्स दोनों में प्लग करने योग्य आर्किटेक्चर हैं। ग्रहण Equinox/OSGi का उपयोग करता है। – Fortyrunner

2

विकल्प 1 के लिए) आप वास्तव में अपने पूरे आवेदन को एक बंडल में नहीं चाहते हैं - आप ओएसजीआई से सभी लाभ खो देंगे - लेकिन वास्तव में यह आपके आवेदन के आकार पर निर्भर करता है।

यह वास्तव में निर्भर करता है कि आप कहां आवेदन करना चाहते हैं और आप कौन सा कार्य करना चाहते हैं। इसके अलावा आप शायद उजागर सेवाओं तक पहुंचने के लिए कुछ प्रकार का रिमोटिंग करना चाहते हैं।

विकल्प 1) आपको किसी प्रकार का http/servlet बंडल सक्षम करना होगा (विकल्प में एक पुल मौजूद है) विकल्प 2 में) आप एप्लिकेशन को एप्लिकेशन सर्वर के अंदर चला सकते हैं ताकि आपको इसके बारे में चिंता न करें ।

पहला प्रश्न जो आप खुद से पूछना चाहते हैं वह परिचालन माहौल के बारे में है। आवेदन चलाने के लिए कौन जा रहा है? क्या उन्हें ओएसजीआई पर प्रशिक्षित करने की आवश्यकता है? क्या वे जे 2 ईई स्टैक के साथ अधिक आरामदायक हैं?

मुझे लगता है कि आपके लिए सबसे अच्छा विकल्प आपके विकल्पों को खुला रखना है, 1) और 2 के बीच कोई वास्तविक अंतर नहीं है) लेकिन ओएसजीआई फ्रेमवर्क, या तो आपका कोड या फ्रेमवर्क कोड क्या देख रहा है। आपका आवेदन स्वयं, यानी आपके आवेदन का गठन करने वाले बंडल बिल्कुल वही होंगे।

मेरी सलाह ओएसजीआई रनटाइम के साथ शुरू करने के बारे में बहुत ज्यादा चिंता नहीं करेगी - लेकिन ओएसजीआई विकास पर शुरू करें - आपको "ओएसजीआई-स्टाइल" विकसित करने और मानक जेआरई पर्यावरण में चलने से कुछ भी नहीं रोकता है।

1

मुझे लगता है कि आप विकल्प 1 के साथ जाना चाहते हैं, और आपके एप्लिकेशन में ओएसजीआई कंटेनर (ज्यादातर आउट ऑफ़ द बॉक्स) के अंदर बंडलों का एक सेट शामिल है।

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

तो मैं कहूंगा कि यहां तक ​​कि कम समय में, विकल्प 1 शायद आसान है।

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

1

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

0

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

1 से भी कई लाभ हैं, और इसे हासिल करना इतना मुश्किल नहीं है। मैं जो अनुशंसा करता हूं वह निम्नलिखित है:

  • एप्लिकेशन को कई मॉड्यूल में अलग करें क्योंकि यह आपके लिए तार्किक लगता है।

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

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

  • ऐप के किन हिस्सों के बारे में सोचें जो आप प्लगइन के लिए बेनकाब करना चाहते हैं। फिर इन भागों में से ओएसजीआई सेवाएं बनाएं - यानी ओएसजीआई रजिस्ट्री में इंटरफेस प्रकाशित करें। आपको किसी भी विशिष्ट चीज़ को लागू करने की आवश्यकता नहीं है - आप किसी भी जावा ऑब्जेक्ट को प्रकाशित कर सकते हैं। प्लगइन फिर लुकअप के लिए regitry का उपयोग करेंगे।

  • प्लगइन के लिए भी यही है - आप प्लगइन से क्या प्राप्त करना चाहते हैं और प्लगइन को कार्यान्वित और प्रकाशित करने वाले संबंधित इंटरफेस को परिभाषित कर सकते हैं और आपका ऐप रजिस्ट्री में देख सकता है।

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

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