मेरे पास टॉमकैट 3.2.1 के तहत चल रहा एक वेबपैप है जिसे विरासत सी ++ कोड में डेटा और विधियों तक पहुंचने के लिए क्रम में जेएनआई कॉल करने की आवश्यकता है। एक सर्वलेट webapp अपने init
विधि के भाग के रूप, का कारण बनता है कि, एक डेटा सेट कि webapp उदाहरण के लिए विशिष्ट सी ++ डेटा संरचनाओं में लोड करने के लिए की स्टार्टअप पर भरी हुई है।.dll पहले से ही किसी अन्य क्लासलोडर में लोड हो गया है?
इस सर्वलेट के लिए यह जावा कोड निम्नलिखित शामिल हैं:
static
{
try {
System.loadLibrary("JCoreImpl");
System.out.println("JCoreImpl loaded");
m_bLibraryLoaded = true;
} catch (UnsatisfiedLinkError e) {
m_bLibraryLoaded = false;
System.out.println("JCoreImpl NOT loaded " + e);
}
}
चीजें ठीक से काम करता है, तो वहाँ केवल एक webapp है (यह "webapps/aaa" कहते हैं)।
अगर मैं ("webapps/bbb") कि webapps के समान है एक दूसरे webapp है/aaa सी ++ डेटा संरचनाओं में इस्तेमाल किया डेटा सेट, के अलावा तो webapps/aaa अप ठीक शुरू होता है, लेकिन जब webapps/bbb शुरू कर दिया है मैं बताने वाला कोई त्रुटि मिलती है:
JCoreImpl NOT loaded java.lang.UnsatisfiedLinkError: Native Library
E:\WebStation\binDebug\JCoreImpl.dll already loaded in another classloader
मैं अपने webapps से प्रत्येक के लिए देशी पुस्तकालय का एक अलग इंस्टेंस की आवश्यकता के रूप में प्रत्येक उदाहरण डेटा है कि कि के लिए अद्वितीय है को रोकने के लिए की जरूरत है विशेष वेबपैप मैंने मेल अभिलेखागार के माध्यम से खोज की है और क्रेग मैकलनहैन द्वारा क्लासलोडर पदानुक्रम समझाते हुए ईमेल पढ़े हैं। लेकिन मैं प्रत्येक वेबपैप के लिए मूल लाइब्रेरी का अनन्य उदाहरण लोड करने के लिए विशिष्ट कुछ भी नहीं ढूंढ पाया है।