2012-04-18 14 views
7

मुझे एक आवश्यकता है जहां मुझे दिन में 4 बार अपने ओजीआई बंडल को फिर से लोड करने की आवश्यकता है। एक बंडल को फिर से लोड करने का अर्थ है स्थिर उदाहरण बीन्स, ऊंट मार्गों को फिर से लोड करना, पुनर्निर्माण और थ्रेड पूल इंजेक्शन, डेटाबेस कनेक्शन पूल ..etc (अन्य वसंत xml सामान)। मैंने एसएसएच के माध्यम से अपने बंडलों को रीफ्रेश करने की कोशिश की लेकिन मुझे इसके लिए बंडल आईडी की आवश्यकता है जो ओवरटाइम बदल सकता है। तो, मैं एक प्रबंधक बंडल जो प्रतीकात्मक नामों से बंडलों हो जाता है और उन्हें ताज़ा करता लिखा दिन में 4 बारosgi bundles को अपडेट करने के साथ समस्या

  osgi impl : felix 

      container : apache-servicemix-4.4.1-fuse-03-06 

      Service Dependency spec : Blueprint 

सभी आम कक्षाएं इस्तेमाल किया गया है एक सहायक बंडल व्याप्ति सहायक बंडल के साथ 3 बंडलों वहाँ रहे हैं और सेवा इंटरफेस इन 3 बंडलों में से कोई भी कोड साझा नहीं है (उनमें से कोई भी किसी भी पैकेज को निर्यात नहीं करता है)। उनमें से सभी ऊंट वीएम एंडपॉइंट्स और सेवाओं के माध्यम से बातचीत करते हैं। मैं केवल अन्य 3 बंडल रीफ्रेश करता हूं और सहायक बंडल कोई भी सेवाएं प्रदान नहीं करता है।

अब समस्या यह है कि जब भी मैं इन 3 बंडलों पर एक अद्यतन करता हूं तो वे शुरू होते हैं और ठीक काम करते हैं, लेकिन जब भी मैं ऐसा करता हूं तो मुझे jconsole पर 800-900 कक्षाओं में वृद्धि दिखाई देती है। जीसी को मजबूर करना भी इन वस्तुओं को साफ नहीं करता है। तो, ये पुरानी वायर्ड वस्तुएं क्या हो सकती हैं? सेवा निर्भरताओं को स्वचालित रूप से अपडेट किया जाना चाहिए और बंडलों के बीच कोई कोड निर्भरता नहीं है। मैंने अद्यतन के पहले और बाद में कक्षाओं की गिनती में अंतर की जांच की।

मैं कुछ वर्गों की कि गिनती देख सकते हैं दोगुनी हो गई है org.apache.activemq.camel.component.VmComponent, org.apache.commons.dbcp.BasicDataSource तरह आदि और कुछ कस्टम सेम है कि मैं मेरे ऊंट मार्गों में परिभाषित किया है। मैं ऊंट-कोर, ब्लूप्रिंट, क्वार्ट्ज ... आदि के लिए कंटेनर पर निर्भर हूं। बीन्स के साथ वास्तव में क्या होता है, वीएम एंडपॉइंट्स..एटीसी ऊंट-संदर्भ और ब्लूप्रिंट-कॉन्फ़िगरेशन एक्सएमएल अपडेट में परिभाषित घटकों में। एक बार जब आप बंडल अपडेट करते हैं तो मुझे फ्रेमवर्कवायरिंग.फ्रेशबंडल्स() को कॉल करने की अनुशंसा की जाती है। लेकिन, मेरे पास बंडलों के बीच कोई कोड साझाकरण नहीं है और मुझे लगता है कि किसी अन्य निर्भरता कंटेनर को संभालना चाहिए जो मुझे लगता है कि अब गलत है। और मुझे यकीन नहीं है कि servicemix में वर्तमान फ़ेलिक्स फ्रेमवर्क कार्यान्वयन फ्रेमवर्कवायरिंग.फ्रेशबंडल्स() (ref) का समर्थन करता है, मैं इसे काम नहीं कर पा रहा था। मैं इस समस्या को कैसे ठीक करुं ?

धन्यवाद sanre6

+0

क्या आपके पास पुरानी बंडल इंस्टेंस से थ्रेड हैं? – artbristol

+0

हां, उनकी गणना दोगुना हो गई है। क्या आप यह कहने की कोशिश कर रहे हैं कि मुझे बंडल को अपडेट करने से पहले अपने उदाहरण बंद कर दें, ऊंट मार्ग बंद करें? – sanre6

+0

हमें एक ही समस्या मिली। विषुव कार्यान्वयन पर स्विच करने से यह समस्या गायब हो जाती है, तो मुझे फ़ेलिक्स ओएसजीआई कंटेनर के साथ कोई समस्या संदेह है। –

उत्तर

0

मैं ऊंट के बारे में ज्यादा पता नहीं है, लेकिन आप runnables कि कक्षाओं बंडल का उल्लेख के साथ मंच प्रदान कर रहे हैं, तो आप यकीन है कि वे सब या रद्द हो अन्यथा ताज़ा करने पर नष्ट करने की जरूरत है, चूंकि वे जो थ्रेड चला रहे हैं, वे पुराने वर्ग के उदाहरणों के संदर्भ में होंगे (जो नए बंडल के क्लास उदाहरणों से अलग हैं, भले ही वे वास्तव में वही हैं)। इसलिए, बढ़ती कक्षा की गणना।

+0

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

1

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

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