ClassCastException DataSource cannot be passed to javax.sql.ConnectionPoolDataSource

I get this exception:

java.lang.ClassCastException: org.apache.tomcat.jdbc.pool.DataSource cannot be cast to javax.sql.ConnectionPoolDataSource 

When I try to run my webapp (in Tomcat6) that uses the tomcat jdbc pool, which works easily with Tomcat7

I included these banks already in the tomcat 6 lib folder:

 tomcat-jdbc.jar tomcat-juli.jar 

What could be the problem?

Update:

 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 } 

Configuration:

 <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"/> 

When I change the "type":

  type="javax.sql.ConnectionPoolDataSource" 

I get this warning:

 WARNING: javax.sql.ConnectionPoolDataSource is not a valid class name/type for this JNDI factory. 

Call getConnection() to return NULL.

Import

 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; 
+4
source share
1 answer

As an end user, you will never have to use ConnectionPoolDataSource directly. It is intended for factory for physical connections ( PooledConnection ). This PooledConnection is stored in the connectionpool. When you execute DataSource.getConnection , the data source will check the PooledConnection from the pool and return the logical connection obtained by PooledConnection.getConnection() to you as the end user and return the physical connection to the pool when this logical Connection closed.

Thus, the design

 User -- uses --> DataSource (with connectionpooling) -- uses --> ConnectionPoolDataSource 

or

 ConnectionPoolDataSource --> creates PooledConnection --> DataSource --> returns Connection --> User 

Using a DataSource is fact-independent if the DataSource provides the connection or not (it should be transparent to you).

See also my previous answer to another question: fooobar.com/questions/1453696 / ...

In other words, your code should be changed to:

 protected static Connection getConnection() throws NamingException, SQLException { InitialContext cxt = new InitialContext(); String jndiName = "java:/comp/env/jdbc/MyDBHrd"; DataSource dataSource = (DataSource) cxt.lookup(jndiName); Connection conn = dataSource.getConnection(); return conn; } 
+1
source

All Articles