我正在将一个Web应用程序(WAR)部署到Tomcat 8 Web容器中。
WAR包在“/WEB-INF/lib”目录中包含以下jTDS JDBC驱动程序:
<dependency org="net.sourceforge.jtds" name="jtds" rev="1.3.1" />
(文件为:jtds-1.3.1.jar
)。
这是在META-INF/context.xml
中定义资源的方式:
<Resource name="jdbc/jtds/sybase/somedb"
auth="Container"
type="javax.sql.DataSource"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sybase://localhost:2501/somedb"
username="someuser" password="somepassword"
/>
在我的代码中,我通常通过正常方式获取javax.sql.DataSource:
InitialContext cxt = new InitialContext();
if ( cxt == null ) {
throw new RuntimeException("Uh oh -- no context!");
}
DataSource ds = (DataSource) cxt.lookup( lookupName );
我通过打印进一步验证,ds
数据源对象是预期类型:
org.apache.tomcat.dbcp.dbcp2.BasicDataSource
...但是当我尝试从中获取连接时:
Connection conn = ds.getConnection();
我得到了以下跟踪信息:
java.lang.AbstractMethodError
net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)
org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:924)
org.apache.tomcat.dbcp.dbcp2.PoolableConnection.validate(PoolableConnection.java:282)
org.apache.tomcat.dbcp.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:359)
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2316)
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2299)
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2043)
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1543)
出了什么问题?
validationQuery
添加到驱动程序的配置中解决了这个问题。 - rodvlopes