2013-09-04 2 views
6

मेरे पास स्प्रिंग, हाइबरनेट, टॉमकैट 7 & माईएसक्ल का उपयोग कर जावा वेब एप्लिकेशन है। मैं डेटाबेस संचालन के लिए डेटास्रोत का उपयोग करता हूं। मैं जार फ़ाइलों को लोड करने के लिए मानक स्थान क्या है (Tomcat-jdbc.jar & Mysql-connector.jar) से मानक स्थान क्या है, इस बारे में मैं बहुत स्पष्ट नहीं हूं? यह काम करता है अगर मैं दोनों जार को CATALINA_HOME/lib/ या webapps/myApp/WEB-INF/lib में रखता हूं। लेकिन मुझे केवल /WEB-INF/lib/ से CATALINA_HOME/lib/और mysql-connector.jar से टॉमकैट-जेडीबीसी का उपयोग करने के लिए कहा गया था, जो Sql Driver के लिए अपवाद देता है। क्या कोई मुझे बता सकता है कि इन जारों के लिए सही स्थान कौन सा है?जेडीबीसी ड्राइवर जेएआर फाइलों को डेटासेट के साथ टॉमकैट परिनियोजन पर कहाँ रहना चाहिए?

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" 
     destroy-method="close"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="${db.url}" /> 
     <property name="username" value="${db.username}" /> 
     <property name="password" value="${db.password}" /> 
     <property name="initialSize" value="${db.initialSize}" /> 
     <property name="minIdle" value="${db.minIdle}" /> 
     <property name="maxActive" value="${db.maxActive}" /> 
     <property name="maxIdle" value="${db.maxIdle}" /> 
     <property name="testWhileIdle" value="${db.testWhileIdle}" /> 
     <property name="minEvictableIdleTimeMillis" value="${db.minEvictableIdleTimeMillis}" /> 
     <property name="timeBetweenEvictionRunsMillis" value="${db.timeBetweenEvictionRunsMillis}" /> 
     <property name="validationQuery" value="${db.validationQuery}" /> 
    </bean> 
+0

क्या आपके पास अपने क्लासपाथ पर MySQL ड्राइवर है? – NickJ

+0

हां। /WEB-INF/lib/mysql-connector.jar – PeterGriffin

+0

यह भी पढ़ें [अपाचे टॉमकैट 6।0 क्लास लोडर हाउ-टू] (https://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html) –

उत्तर

0

यह जार के स्थान की बात आती है निर्णय लिया जाना, अंगूठे का नियम है कि:

  1. सर्वर lib स्थान में एक जार का प्रयोग करें।
  2. यदि जार उपलब्ध नहीं है, तो एप्लिकेशन के lib फ़ोल्डर में इसे शामिल करें।
  3. एक उपयुक्त जार ढूंढने के लिए, प्रणाली, निम्नलिखित खजाने में लग रहा है क्रम में:

बूटस्ट्रैप अपने JVM की कक्षाओं

सिस्टम वर्ग लोडर वर्गों (ऊपर वर्णित है)

/

आपके वेब एप्लिकेशन $ CATALINA_HOME/सामान्य/कक्षा

के वेब वेब एप्लिकेशन/WEB-INF/lib/*.jar के वेब-आईएनएफ/कक्षाएं

$ CATALINA_HOME/आम/समर्थन/*। जार

$ CATALINA_HOME/आम/i18n/*।

$ CATALINA_HOME जार/आम/lib/*। जार

$ CATALINA_BASE/साझा/कक्षाएं

$ CATALINA_BASE/साझा/lib/*। जार

+0

इस उत्तर की सूची टॉमकैट के बाद के संस्करणों के रूप में पुरानी है। संस्करण 8.0 के लिए, [क्लास लोडर हाउ-टू] (https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html) और [यह उत्तर] देखें (http://stackoverflow.com/ए/265552/642706) एक समान प्रश्न के लिए। –

9

कि जो डेटा स्रोत प्रबंधित कर रहा है पर निर्भर करता है।

यदि आप मैन्युअल रूप से new SomeDataSource() आदि जैसे डेटापोत का निर्माण और प्रबंधन कर रहे हैं, तो जेडीबीसी ड्राइवर जेएआर फ़ाइल वेबपैप के /WEB-INF/lib में रखी जा सकती है। लेकिन यदि ऐपसेवर पहले से ही अपने /lib में एक ही जेडीबीसी ड्राइवर जेएआर फ़ाइल प्रदान करने के लिए होता है, तो आप इसका उपयोग भी कर सकते हैं।

हालांकि, अगर आप appserver सब अपने आप में डेटा स्रोत का प्रबंधन करने के निर्देश देते रहे हैं और आप केवल, @Resource के माध्यम से अपने webapp में इसका इस्तेमाल कर रहे हैं आदि, तो JDBC ड्राइवर JAR फ़ाइल appserver की अपनी /lib में रखा जा रहा है , बहुत ही सरल कारण के लिए क्योंकि किसी भी (से) तैनात वेब अनुप्रयोगों से पूरी तरह से स्वतंत्र रूप से ऐप्स सर्वर के स्टार्टअप पर डेटा स्रोत तैयार किया जाता है। यह डेटा स्रोत बदले में सभी वेबैप के बीच साझा किया जा सकता है। यह तकनीकी रूप से काम नहीं करेगा अगर जेडीबीसी ड्राइवर जेएआर फाइल अभी तक तैनात वेबपैक्स में से एक में है।

+0

क्या होगा यदि प्रत्येक एप्लिकेशन विभिन्न डेटाबेस विक्रेताओं का उपयोग करता है? – PeterGriffin

+2

आप बस एक से अधिक डेटास्रोत बना सकते हैं। – BalusC

+0

FYI ... यह एक समान प्रश्न के लिए [बालससी द्वारा विस्तृत विस्तृत उत्तर] देखें (http://stackoverflow.com/a/2299870/642706)। –

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