I'm trying to add JDBC Session Persistence in Tomcat as explained here: Tomcat Link I have created a sessions table in Oracle within my_schema database/schema and is trying to map it in the Tomcat context.xml. My mapping is as below:
<Resource name="jdbc/sessions" auth="Container" type="javax.sql.DataSource"
username="test_user"
password="test_user"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=my-host-blah.com)(PORT=1234))(ADDRESS=(PROTOCOL=TCP)(HOST=my-host-blah.com)(PORT=1244)))(CONNECT_DATA=(SERVICE_NAME=someservice)))"
maxActive="20"
maxIdle="10"
validationQuery="select 1" />
<Manager className="org.apache.catalina.session.PersistentManager"
distributable="true" processExpiresFrequency="3" maxIdleBackup="1" >
<Store className="org.apache.catalina.session.JDBCStore"
dataSourceName="jdbc/sessions"
sessionAppCol="app_name" sessionDataCol="session_data" sessionIdCol="session_id"
sessionLastAccessedCol="last_access" sessionMaxInactiveCol="max_inactive"
sessionTable="tomcat_sessions" sessionValidCol="valid_session" />
</Manager>
But the above config is causing NullPointerException on tomcat start. I know that the url, username and password are correct because if I write a simple Java program and connect/query the my_schema.tomcat_sessions table, it works fine. But I'm not sure how to specify the specific DB/schema name in the above configuration. The exception I'm getting is below:
SEVERE: Error manager.start() java.lang.NullPointerException at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:190) at org.apache.catalina.session.JDBCStore.open(JDBCStore.java:861) at org.apache.catalina.session.JDBCStore.getConnection(JDBCStore.java:833) at org.apache.catalina.session.JDBCStore.start(JDBCStore.java:968) at org.apache.catalina.session.PersistentManagerBase.start(PersistentManagerBase.java:995) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4713) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:943) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:778) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:504) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1315) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1061) at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) at org.apache.catalina.core.StandardService.start(StandardService.java:525) at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) at org.apache.catalina.startup.Catalina.start(Catalina.java:595) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
I wonder if the problem is because I'm not specifying the DB/schema name anywhere? I tried changing driverClassName to oracle.jdbc.OracleDriver, but no luck. I made sure that $TOMCAT_HOME/lib has ojdbc6.jar file. Any other thoughts/ideas? Thanks!
---->HOST=my-host-blah.comis that something you need to change ? - Mohammad Adilusername="test_user"and the "database":SERVICE_NAME=someservice. The NPE looks more like you are missing a jar file. Which JDBC driver version are you using (note: the number in the filename is not the driver version, it's the target Java version of the driver) - a_horse_with_no_namedriverNameproperty, which only matters because the JNDI lookup of thedataSourceNamemust have failed so it fell back to trying adriverName.Have a look in the Tomcat logs for the JNDI failure, it may tell you something. OTOH I am having exactly the same problem and my JNDI failure (in localhost.<date>.log isjavax.naming.NameNotFoundException: Name [comp/env] is not bound in this Context. Unable to find [comp].- user207421