2010-09-27 12 views
12

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

क्या उपरोक्त का जवाब स्टैंडअलोन ऐप के मामले में अलग होगा?

धन्यवाद!

उत्तर

12

तुम एक JVM तर्क के रूप में सिस्टम डिफ़ॉल्ट वर्ग लोडर सेट कर सकते हैं:

java -Djava.system.class.loader 
    =com.test.YourCustomClassLoader com.test.YourMainClass 

बिलाव एक जावा आवेदन के रूप में शुरू होता है के रूप में, आप इस पैरामीटर भी %TOMCAT_HOME%\bin\run.bat या $TOMCAT_HOME/bin/run.sh निष्पादन पर सेट कर सकते हैं,। पूरा करने के लिए

संपादित करें: आप डी सिस्टम वर्ग लोडर के रूप में अपने classloader सेट करते हैं, यह बिलाव घटक कक्षाएं, विभिन्न पुस्तकालयों, और अपनी खुद की कक्षाओं लोड करने के लिए इस्तेमाल किया जाएगा। यदि आप चाहते हैं कि आपके क्लास लोडर का उपयोग केवल आपके एप्लिकेशन वर्गों (पुस्तकालयों सहित) के लिए किया जाए, तो आपको अपने संदर्भ के लिए Loader तत्व कॉन्फ़िगर करना चाहिए। लोडर तत्व को आपके Context तत्व के अंदर परिभाषित किया जाना चाहिए, जिसे context.xml फ़ाइल पर परिभाषित किया जा सकता है। अधिक जानकारी:

+0

किसी कारण से मुझे java.lang.Error: java.lang.IleglegalStateException: पुनरावर्ती आमंत्रण। यह वही है जो मैंने किया था: क्लासलोडर को उपclassing, c'tor की आपूर्ति जो क्लासलोडर को पैरामीटर के रूप में लेता है, इसे -Djava.system.class.loader का उपयोग करके कॉन्फ़िगर किया गया है, और ... बूम! वीएम की शुरुआत के दौरान त्रुटि हुई :-(क्या मुझे कुछ याद आया? – Seffy

+0

आपके कोड पर नजर डाले बिना, मैं आपको निश्चित रूप से नहीं बता सकता। –

+0

मैंने इसे थोड़ा मुख्य एप्लीकेशन के साथ परीक्षण किया है, और यह ठीक है। –

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