2011-09-01 19 views
9

मैं एक मॉड्यूलर वेब अनुप्रयोग बनाने के लिए एक समाधान है, जो अर्थ में मॉड्यूलर है कि उपयोगकर्ता के लिए एक सरल जार जो तब के लिए अपने स्वयं के डेटा प्रदान करेगा के रूप में अपने स्वयं के प्लगइन प्रदान कर सकते हैं की तलाश में था मेरी वेब एप्लिकेशन और मेरा वेबपैप इसे प्रदर्शित करने के लिए ज़िम्मेदार होगा।OSGi बनाने मॉड्यूलर वेब अनुप्रयोग

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

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

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

उत्तर

5

OSGi spec विवरण WAB (वेब ​​संग्रह बंडल) स्वरूप।

और Pax Web WAB/युद्ध webapps के लिए महान समर्थन प्रदान करता है (PAX वेब विषुव, फेलिक्स, आदि पर ठीक चलाता है)

पैक्स वेब आप ServletContext के माध्यम से BundleContext मिलता है, जैसे का उपयोग करना:

BundleContext bundleContext = (BundleContext) getServletContext().getAttribute("osgi-bundlecontext"); 

संचालित pluggability आप का उल्लेख उपयोगकर्ता के लिए, मैं तुम्हें एक ServiceTracker का उपयोग (जब तक आप घोषणात्मक सेवा का उपयोग कर रहे हैं) उनके पंजीकरण के लिए सुनने के लिए प्लगइन बंडलों को लागू करने के लिए और अपने webapp में कुछ सेवा इंटरफेस प्रदान सुझाव दिया था। आप अपलोड सर्वलेट से आसानी से install bundles पर भी सक्षम हो सकते हैं। प्लगइन्स अपलोड करने

मेरा अनुमान है कि उपयोगकर्ताओं में लॉग इन और अधिकृत करना होगा, इसलिए सुरक्षा के मुद्दों इस बिंदु पर पूरा किया गया है जाएगा।


संपादित करें: पर्याप्त नहीं टिप्पणी क्षेत्र

क्षमा याचना में स्थान के रूप में यहाँ टिप्पणी का जवाब दे रहे, लगता है कि मैं आप सवाल का गलत मतलब निकाला - आपका मौजूदा webapp कंटेनर (रों) हैं और आप एक युद्ध की तैनाती करना चाहते हैं ओएसजीआई कार्यक्षमता के साथ? यदि ऐसा है तो या तो ServletBridge का उपयोग करें क्योंकि अन्य ने आपके WAR में ओएसजीआई फ्रेमवर्क का उल्लेख किया है या एम्बेड किया है (यह अपेक्षाकृत आसान है, उदाहरण के लिए this देखें)।

तुम भी ServletContext से BundleContext प्राप्त करने का प्रयास करके इस वैकल्पिक बना सकता है और अगर यह अशक्त रिटर्न तो अपने स्वयं के एम्बेडेड ढांचे का शुभारंभ।इस तरह यह एक देशी ओएसजीआई कंटेनर (जैसे ग्लासफ़िश) या जावा ईई ऐप सर्वर में चलाएगा।

अन्यथा, पैक्सवेब एचटीपीएस सेवा और वेब ऐप ओएसजीआई चश्मे का कार्यान्वयन है, लेकिन जीवन को आसान बनाने के लिए बहुत से एक्सटेंशन के साथ - लेकिन आप इसे ओएसजीआई कंटेनर में तैनात करते हैं।

+0

नमस्ते आपका उत्तर दिलचस्प है कि मैं डब्ल्यूएबी के बारे में जानता हूं, जो मैंने अपने प्रश्न में उल्लेख किया है, "मैं ओजीआई समर्थन प्रदान करने और वेब एप्लिकेशन को ओजीआई बंडल के रूप में तैनात करने के लिए अपने वेब कंटेनर पर भरोसा नहीं कर सकता"। लेकिन मुझे पैक्स वेब से अवगत नहीं था, आपके द्वारा दिया गया आधिकारिक लिंक जेटी के लिए वार्ब्स के रूप में युद्धों को तैनात करने के लिए एक विस्तार का सुझाव देता है? क्या आप आगे समझा सकते हैं? – FUD

+0

धन्यवाद, मैं लिंक में सुझाए गए तरीके को बेकार कर दूंगा। – FUD

1

ServletBridge एक वेब कंटेनर के भीतर एक OSGi contianer एम्बेड करने के लिए है। दूसरा विकल्प एक ओएसजीआई कंटेनर में एक वेब कंटेनर (एक बंडल के रूप में) को एम्बेड करना है। निम्नलिखित आलेख में कुछ विवरण हैं कि इसे कैसे प्राप्त किया जाए।

http://java.dzone.com/articles/osgi-and-embedded-jetty

+0

धन्यवाद मुझे इसके बारे में पता है, लेकिन मैं किसी भी विशेष वेब कंटेनर तक सीमित नहीं होना चाहता हूं और अधिकांश सर्वर एम्बेड करने का विकल्प एक विकल्प नहीं है। – FUD

2

आप Apache Sling में देखना चाहते हो सकता है। यह एक वेब ढांचा है जिसमें एक एम्बेडेड ओएसजीआई कंटेनर है। ओएसजीआई कंटेनर को Apache Felix कहा जाता है और यह बहुत अच्छा है।

+0

यह अच्छा लग रहा है लेकिन मैं फ्रेमवर्क का समर्थन करने के द्वारा प्रतिबंधित नहीं होना चाहता, उदाहरण के लिए मैं अपने वेब एप्लिकेशन के लिए जेएसएफ का उपयोग करना चाहता हूं। शायद मुझे अपने प्रश्न में उल्लेख किया जाना चाहिए था। – FUD

1

आप ChonCMS प्रयास कर सकते हैं - http://www.choncms.com

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

नुकसान यह हो सकता है कि इसमें दस्तावेज़ीकरण की कमी हो, लेकिन आप पूछ सकते हैं, यह खुला स्रोत है, मुझे यकीन है कि वे सवालों के जवाब देने में खुश होंगे, और इससे भी बेहतर आप योगदान कर सकते हैं - यह अभी भी ऊष्मायन चरण में है।

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