2012-03-06 17 views
9

this problem को हल करने का प्रयास करते समय, मुझे कुछ अलग-अलग लेखों का सामना करना पड़ा, आदि "पृथक" क्लासलोडर का जिक्र करते हुए। मैं Google खोज के माध्यम से अलग क्लासलोडर के लिए परिभाषा नहीं ढूंढ पाया, इसलिए शायद यह शब्द व्यापक रूप से ज्ञात शब्दकोष नहीं है, और शायद अलग-अलग संदर्भों में एक अलग अर्थ है। http://maven.apache.org/plugins/maven-surefire-plugin/examples/class-loading.htmlजावा में एक अलग क्लासलोडर क्या है?

इसके अलावा संदर्भ an article explaining how to create an "isolated" ClassLoader नीचे जवाब में से एक:

वैसे भी, Maven के अचूक प्लगइन एक अलग classloader उपयोग कर सकते हैं।

ऊपर दिए गए संदर्भ में एक अलग क्लासलोडर की परिभाषा नहीं है; वे मानते हैं कि पाठक जानता है कि इसका क्या अर्थ है या इसे देख सकते हैं। हालांकि, दूसरे लिंक में "पृथक" का अर्थ है:

बूटस्ट्रैपिंग आपको सिस्टम कंपाथ प्रदूषित किए बिना अपने कंटेनर को चलाने देता है। यह आपको अपने नियोजित अनुप्रयोगों को अपने माता-पिता के रूप में अनपोल सिस्टम क्लासपाथ के साथ चलाने की अनुमति देता है। आपने क्लासलोडर अलगाव हासिल किया है।

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

मैं विशेष रूप से एक Google या SO खोज लिंक चाहता हूं जिसमें एक लिंक स्पष्ट रूप से उत्तर धारण करता है। एक उत्तर का सीधा लिंक भी काम करता है। :)

+0

कृपया एक लिंक या उद्धरण प्रदान करें जो आपके प्रश्न के संदर्भ में देता है। (बीटीडब्लू, लोभ का पाप नहीं है? :-)) –

+0

@ स्टीफन: अगर आप अंदर आते हैं तो आप अपनी धार्मिक उत्साह छोड़ देते हैं तो हम इसकी सराहना करेंगे। –

+2

ठीक है, हम लैरी वॉल से जानते हैं कि एक प्रोग्रामर के तीन महान गुण आलस्य, अधीरता और हब्रिज हैं, और चूंकि लोभ एक गुण नहीं है, यह एक पाप होना चाहिए। तो यह तूम गए वहाँ। –

उत्तर

8

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

+0

उदाहरण के लिए: classloader1 = नया URLClassLoader (oneUrl, parent); classloader2 = नया URLClassLoader (anotherUrl, पैरेंट); ई से अलग 2 वर्गलोडर बनाएगा। अन्य, प्रत्येक व्यक्ति को किसी दिए गए वर्ग के अलग-अलग संस्करण (और शायद अन्य उपयोग भी हो सकते हैं), सही? – apollodude217

+1

@ apollodude217 - हाँ, यह सही है। हालांकि, महत्वपूर्ण बात यह है कि न तो एक यूआरएल और न ही किसी अन्य यूआरएल को पैरेंट क्लासलोडर द्वारा लोड किए गए वर्गों का संदर्भ देना चाहिए (इसलिए उदाहरण मुख्य क्लासलोडर को बिना अतिरिक्त जार के चलाता है)। – jtahlborn

2

यहां how to create an isolated classloader है, आप किसी भी समय एक प्रोग्राम को बूटस्ट्रैप करने के लिए उपयोगी एक अपूर्ण सिस्टम क्लासपाथ बनाना चाहते हैं।

+0

यह वास्तव में उन लेखों में से एक था जो मैंने अलग-अलग क्लासलोडर को देखने की कोशिश करते समय पढ़ा था, और यह संदर्भ से मुझे स्पष्ट नहीं है कि यह क्या है। मैं देखता हूं कि लेखक क्या कर रहा है, लेकिन मुझे नहीं पता कि इसका कौन सा हिस्सा अपने क्लासलोडर को "पृथक" बनाता है। – apollodude217

1

उस लेख से मेरी समझ से जो आपने एक पृथक वर्ग लोडर से जुड़ा हुआ है वह एक वर्ग लोडर है जो मुख्य सिस्टम क्लास लोडर से अलग है। यही है, पृथक वर्ग लोडर द्वारा लोड की गई कक्षाएं जेआरई में प्रत्येक वर्ग के लिए उपलब्ध नहीं होंगी (केवल वे जिन्हें पृथक वर्ग लोडर स्वयं लोड किया गया है [और किसी भी वर्ग वर्ग लोडर द्वारा लोड की गई कक्षाएं])।

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

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