आपकी समस्या यह है कि jTDS डिफ़ॉल्ट रूप से DBCP2 कनेक्शन को मान्य करने के तरीके का समर्थन नहीं करता है (मैं मान रहा हूँ कि आप DBCP2 का उपयोग <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource">
) समाधान नीचे देखें।
आमतौर पर त्रुटि स्टैकट्रेस जैसा दिखाया गया है:
Caused by: java.lang.AbstractMethodError
at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)
at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:913)
समस्या, हालांकि, SQL सर्वर संस्करण से संबंधित नहीं है, लेकिन उपयोग किए गए DBCP (Tomcat) संस्करण (या टॉमकैट सर्वर संस्करण जिस पर प्रोजेक्ट परिनियोजित किया गया है) से संबंधित है।
एक बार जब मैं jTDS 1.3.1 का उपयोग कर रहा था और प्रोजेक्ट ने ठीक काम किया (और SQLServer 2012 से भी जुड़ा) Tomcat7 के तहत। जब मैं टॉमकैट 8 में बदल गया, तो वह त्रुटि दिखाई दी।
कारण, जैसा कि jTDS फ़ोरम में संकेत दिया गया है , है:
- (Tomcat7 DBCP 1 का उपयोग करता है और Tomcat 8 DBCP 2 का उपयोग करता है )
- DBCP 1.x के विपरीत , डीबीसीपी 2 कॉल करेगा
java.sql.Connection.isValid(int)
कनेक्शन सत्यापित करने के लिए - jTDS
.isValid()
लागू नहीं करता है , इसलिए jTDS ड्राइवर DBCP 2 के साथ काम नहीं करेगा, जब तक कि... - ...जब तक आप
validationQuery
सेट नहीं करते हैं पैरामीटर, जो DBCP को.isValid()
. कॉल नहीं करेगा कनेक्शन की वैधता का परीक्षण करने के लिए।
समाधान
तो, समाधान validationQuery
सेट करना है पैरामीटर , जो DBCP2 को .isValid()
. कॉल नहीं करेगा कनेक्शन की वैधता का परीक्षण करने के लिए। यहां बताया गया है:
टॉमकैट पर
validationQuery="select 1"
Add जोड़ें अपने टॉमकैट <Resource>
के लिए कनेक्शन पूल के लिए टैग, जो आमतौर पर META-INF/context.xml
. में होता है आपके ऐप का या conf/server.xml
:
<Resource ... validationQuery="select 1" />
वसंत पर
स्प्रिंग के माध्यम से DBCP2 का उपयोग करते समय, समाधान कुछ इस प्रकार है:
<bean id="..." ...>
...
<property name="validationQuery" value="select 1" />
</bean>
साधारण जावा कोड पर
dataSource.setValidationQuery("select 1");