वामावर्त, Clojure के लिए ग्रहण प्लगइन, मिश्रित जावा और Clojure में लिखा है। यह अभी तक clojure.osgi 1.2.10 का उपयोग करता है।
तो यह अवधारणा के एक जीवित सबूत है कि यह संभव है। और AFAIK, सैकड़ों लोगों द्वारा काउंटरक्लॉक वार का सफलतापूर्वक उपयोग किया जाता है।
वहाँ, कुछ कमी कर रहे हैं यद्यपि: Clojure के नाम स्थान "वैश्विक" कुछ "रूट classloader" है। E.G. यदि आप क्लोजर को नामित बंडल के अंदर पैकेज करते हैं, तो myapp.clojure कहें, तो आपके पास शायद अन्य बंडलों का एक गुच्छा होगा जिसके लिए myapp.clojure की आवश्यकता होगी। उदाहरण के लिए कहें myapp.bundle1, myapp.bundle2। जब आप ऐसा करते हैं, और, प्रत्येक बंडल से, बंडल नेमस्पेस मेमोरी (आवश्यकता) में लोड होते हैं, प्रत्येक को दाएं क्लासलोडर के भीतर से लोड किया जाएगा (myapp.bundle1 के नामस्थान myapp.bundle1 के संदर्भ क्लासलोडर के भीतर लोड हो जाएंगे, और myapp.bundle2 के नामस्थान myapp.bundle2 के संदर्भ क्लासलोडर के भीतर लोड हो जाएंगे)। यह बहुत अच्छा है, क्योंकि यह जावा इंटरऑप को ठीक काम करने की इजाजत देता है।
लेकिन बस याद रखें कि अंत में, बंडल 1 & बंडल 2 से लोड किए गए नामस्थान बंडल myapp.clojure में "वैश्विक नामस्थान दुनिया" द्वारा आयोजित किए जाएंगे।
ईमानदारी से कहूं तो यह अभी तक वामावर्त के लिए एक समस्या साबित नहीं हुआ है। क्योंकि एक ही फ़ीचर के अंदर, बंडल साझा करने के बाद एक सिंगल क्लोजर इंस्टेंस लगभग ठीक है।
संभावित कमियां हैं:
- अगर आप तीसरे पक्ष के पुस्तकालयों, उदा का उपयोग tools.logging, आप myapp.bundle1 में नेमस्पेस नहीं रख पाएंगे टूल.लॉगिंग के संस्करण एक्स पर निर्भर करते हैं, और साथ ही myapp.bundle2 tools.logging के संस्करण वाई पर निर्भर करता है। यही है, आपकी सुविधा के अंदर जहां आपके पास बंडल myapp.clojure के माध्यम से एक साझा क्लोजर है, उदाहरण के लिए, यदि आप वेबएप काम करते हैं, तो आप ओएसजीआई नियम लागू नहीं करते हैं।
- बड़े पैमाने पर लागू होने पर अच्छी तरह से स्केल नहीं करता है: यदि प्रत्येक ग्रहण फ़ीचर क्लोजर के अपने संस्करण को दोबारा बनाना था, तो स्मृति की कुछ अपशिष्ट होगी। लेकिन यह कमी व्यावहारिक से अधिक सैद्धांतिक है, फिर भी। और यह एक समस्या है जिसे बाद में संबोधित किया जा सकता है, जब इसकी आवश्यकता उभरती है।
ध्यान दें कि एक ग्रहण आरसीपी उत्पाद के लिए, ग्रहण प्लगइन के विपरीत, ये दोष गायब हो जाते हैं।
आप देखना चाहते हैं कि वामावर्त clojure repackaged है चाहते हैं, और clojure.osgi का उपयोग करता है, तो आप अपने sourcecode देख सकते हैं:
http://github.com/laurentpetit/ccw.clojure.git http://github.com/laurentpetit/ccw.git
HTH,
- लौरेंत
स्रोत
2011-12-04 20:54:04
इसके बारे में सोचने के बाद थोड़ा सा दिमागी तूफान था और ओएसजीआई और क्लोजर की खोज की और ओएसजीआई के तहत चल रहे क्लोजर के बारे में इस ब्लॉगपोस्ट में आया (http://www.talios.com/clojure_running_succ essfully_under_osgi.htm) और एक [ईमेल थ्रेड] (http://osdir.com/ml/clojure/2009-10/msg00113.html) का अर्थ है कि यह एक अच्छा विचार नहीं है। थोड़ा सा उलझा हुआ। – Punit