2015-10-08 6 views
7

मैं पूरी तरह उलझन में हूं कि क्लास लोडिंग टॉमकैट में कैसे होती है। तो अगर मेरा सवाल बेवकूफ लगता है तो कृपया मेरे साथ भालू।टॉमकैट लिब फ़ोल्डर में स्प्रिंग जार

हम एकल टॉमकैट सर्वर पर एकाधिक वसंत वेबपैप्स तैनात करते हैं। मेमोरी पदचिह्न को कम करने के लिए, हमने टॉमकैट लिब फ़ोल्डर में वसंत, हाइबरनेट और डेटाबेस ड्राइवर जार रखने का विचार किया ताकि वे सभी वेबैप द्वारा साझा किए जा सकें।

मैंने वसंत निर्भरताओं को provided के रूप में चिह्नित करके पहली बार शुरू किया और उन जारों को tomcat lib में कॉपी किया। लेकिन सर्वर स्टार्टअप पर मैंने commons-logging, commons-fileupload, jackson, jackson के लिए कई ClassNotFoundErrors प्राप्त करना शुरू किया, इसलिए मुझे इन जारों को टॉमकैट लिब में भी ले जाना पड़ा।

लेकिन फिर यह फिश महसूस कर रहा था। अगर भविष्य में मैं अपने प्रोजेक्ट में एक और वसंत निर्भरता जोड़ता हूं, तो वसंत-डेटा-कैसंद्रा कहें। क्या मुझे इसके आश्रित जारों को भी स्थानांतरित करने की आवश्यकता होगी? यह अनदेखा हो सकता है। इसके अलावा मुझे रनटाइम पर सीएनएफ त्रुटियां मिल सकती हैं।

मैंने this लिंक का पालन करने की कोशिश की और वसंत-संदर्भ और वसंत-वेब को वापस युद्ध युद्ध में वापस लाया। लेकिन यह काम नहीं किया, WebApplicationIntializer प्रारंभिकरण के दौरान कुछ कक्षाओं पर ClassNotFound मिला। मैंने classes getting loaded in tomcat के आदेश को समझने की कोशिश की, लेकिन ज्यादा समझ में नहीं आया।

फिर मुझे JDBC driver loading के लिए एक पूर्ण भिन्न स्पष्टीकरण मिला जो कि अन्य सभी स्पष्टीकरणों के विपरीत है और मुझे पूरी तरह उलझन में छोड़ दिया।



जैसा कि मैंने अधिक पढ़ सकते हैं, मुझे लगता है कि यह एक सही दृष्टिकोण बिल्ला lib करने के लिए वसंत जार ले जाने के लिए नहीं है, लेकिन अभी भी एक अच्छा तर्क नहीं मिला है। और फिर जेडीबीसी चालक क्यों काम करता है? क्या कोई समझा सकता है? प्रत्येक वेबपैप के लिए क्लासलोडर भी प्रत्येक वर्ग की एक प्रति बनाता है?

संपादित करें 1: मुझे पता चला कि स्प्रिंग जार में कुछ निर्भरता optional हैं, और यदि मेरे वेबैप में उपयोग में हैं तो इसकी आवश्यकता होगी। तो वसंत-वेब jackson पुस्तकालयों पर निर्भर करता है लेकिन मेरे ऐप के लिए वैकल्पिक है। इसलिए मुझे यह पता लगाने की ज़रूरत है कि मेरे प्रोजेक्ट के लिए कौन से जार की आवश्यकता है और वसंत द्वारा भी जरूरी है, उन जारों को टॉमकैट लिब में ले जाना होगा।

उत्तर

1

मैं जो कुछ जानता हूं उसे समझाऊंगा।

जब आप अपने बिल्ला पर एक युद्ध की तैनाती, वर्ग लोड हो रहा है इस तरह होगा:

  1. वर्ग अपने युद्ध classloader
  2. अगर माता-पिता के इस कदम नहीं मिला (बिल्ला/lib में लोड करने के लिए रंग-रूप फ़ोल्डर)

क्या अपने मामले में भी हो कि वसंत है भी निर्भरता का एक बहुत है, अगर आप इसे अपने युद्ध में पैकेज, अपनी निर्भरता के रूप में अच्छी तरह से पैक किया गया है और सब कुछ ठीक काम किया होता। लेकिन चूंकि आपने प्रदान किए गए वसंत को परिभाषित किया है, इसलिए इसकी सभी निर्भरताओं को भी प्रदान किया जाता है, और जब आप इसे/lib फ़ोल्डर में डालते हैं, वसंत सुलभ है, लेकिन इसकी निर्भरताएं नहीं हैं।

आपको क्या करना है, सभी वसंत निर्भरताओं और निर्भरता की निर्भरताओं (आदि) को lib फ़ोल्डर में भी रखा गया है। एक और समाधान है कि आप अपने क्लासलोडिंग पदानुक्रम में मध्यस्थ WAR को परिभाषित करें जिसमें आपकी सभी सामान्य libs शामिल होंगी। इनपुट के लिए धन्यवाद

+0

धन्यवाद। ऐसा लगता है कि समस्याएं पैदा करने वाली निर्भरताएं 'वैकल्पिक' थीं।इसलिए ट्रांजिटिव निर्भरताओं को ढूंढना वास्तव में मुश्किल है, मुझे – sidgate

+0

की आवश्यकता होगी यदि आप अपने युद्धों को बनाने के लिए मेवेन का उपयोग करते हैं, तो यह सभी आर्टिफैक्ट में सभी ट्रांजिटिव डीपी पैकेज करता है। –

+0

सभी नहीं, वैकल्पिक निर्भरता शामिल नहीं हैं – sidgate

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