Tomcat JNDI Datasources

I tried to configure a JNDI datasource in tomcat 5.0,

I am facing the following error

java.sql.SQLException: Cannot load JDBC driverclass'null'

at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:529)

at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:312)

at com.scb.controller.actions.TestAction.testDatasource(TestAction.java:70)

at com.scb.controller.actions.TestAction.execute(TestAction.java:46)

at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:53)

at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:64)

at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)

at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)

at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)

at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)

at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)

at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)

at com.scb.controller.ControllerServlet.process(ControllerServlet.java:157)

at com.scb.controller.ControllerServlet.doGet(ControllerServlet.java:99)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:288)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:263)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:561)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1018)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:196)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:561)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1018)

at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2748)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:186)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)

at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:561)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1018)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:163)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:561)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1018)

at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:199)

at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:294)

at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:375)

at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:664)

at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:606)

at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:777)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:631)

at java.lang.Thread.run(Thread.java:534)

My code :

System.out.println("Looking up for datasource!");

Context envContext = (Context)context.lookup("java:comp/env");

System.out.println("Env context = " + envContext);

ds = (DataSource)envContext.lookup("jdbc/amadeus");

System.out.println("datasource obtained and trying to establish connection");

System.out.println(" Ds = 1 " + ds);

connection = ds.getConnection();

statement = connection.createStatement();

System.out.println("Executing query");

rs = statement.executeQuery("SELECT SYSDATE FROM DUAL");

Please help if you have any ideas.

[5097 byte] By [reflex2javaa] at [2007-11-26 15:58:56]
# 1

You forgot to specify the database driver in your datasource declaration (which should be in the context.xml file). The tomcat example lists this:

<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"

maxActive="100" maxIdle="30" maxWait="10000"

username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"/>

So you probably have no driverClassName. Also, the jar file containing the driver needs to be in tomcat/common/lib.

gimbal2a at 2007-7-8 22:20:06 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...