简体   繁体   中英

Specify Oracle DB/Schema name in tomcat context.xml

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.st artup.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:6 06) 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!

You can try to use the following in your context.xml :

<Manager className="org.apache.catalina.session.PersistentManager"
         maxIdleBackup="10">
  <Store className="org.apache.catalina.session.JDBCStore"
         connectionURL="jdbc:oracle:thin:USERNAME/PASSWORD@//HOSTNAME/SID"
         driverName="oracle.jdbc.driver.OracleDriver"
         sessionAppCol="app_name"
         sessionDataCol="session_data"
         sessionIdCol="session_id"
         sessionLastAccessedCol="last_access"
         sessionMaxInactiveCol="max_inactive"
         sessionTable="tomcat_sessions"
         sessionValidCol="valid_session" />
</Manager>

Make sure to replace the values in the connectionURL attribute, and to add the Oracle JDBC driver ( ojdbc6.jar ) to your tomcat's lib directory.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM