【发布时间】:2012-12-08 15:16:03
【问题描述】:
我遇到了这个异常:
java.lang.ClassCastException: org.apache.tomcat.jdbc.pool.DataSource cannot be cast to javax.sql.ConnectionPoolDataSource
当我尝试运行使用与 Tomcat7 无缝协作的 tomcat jdbc 池的 web 应用程序(在 Tomcat6 中)时
我已经在 tomcat 6 lib 文件夹中包含了这些 jars:
tomcat-jdbc.jar
tomcat-juli.jar
可能是什么问题?
更新:
protected static Connection getConnection() throws NamingException, SQLException {
InitialContext cxt = new InitialContext();
String jndiName = "java:/comp/env/jdbc/MyDBHrd";
ConnectionPoolDataSource dataSource = (ConnectionPoolDataSource) cxt.lookup(jndiName); // ClassCastException here....
PooledConnection pooledConnection = dataSource.getPooledConnection();
Connection conn = pooledConnection.getConnection();
return conn; // Obtain connection from pool
}
配置:
<Resource name="jdbc/MyDBHrd"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="false"
validationQuery="SELECT 1"
validationInterval="30000"
timeBetweenEvictionRunsMillis="30000"
maxActive="5000"
minIdle="10"
maxWait="10000"
initialSize="20"
removeAbandonedTimeout="120"
removeAbandoned="true"
logAbandoned="false"
minEvictableIdleTimeMillis="30000"
jmxEnabled="true"
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
username="sa"
password="password"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://192.168.114.130/MyDB"/>
当我改变“类型”时:
type="javax.sql.ConnectionPoolDataSource"
我收到此警告:
WARNING: javax.sql.ConnectionPoolDataSource is not a valid class name/type for this JNDI factory.
导致getConnection() 返回NULL。
进口:
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.ConnectionPoolDataSource;
import javax.sql.PooledConnection;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
【问题讨论】:
-
这似乎是错误导入的问题。确保您有有效的导入。
-
哪些错误的导入?你的意思是在代码中?但它在tomcat7中没有错误
-
在代码中是的。我建议发布一些代码并添加更多关于何时收到此错误的信息。
-
@Nambari 好的,我已经放置了 java 代码
-
Reference 缺少配置,因为我怀疑来自ServerFault