2

I have various versions of tomcat 6 and 7 running across my production environments, so I am attempting to reproduce this on my dev box by adding servers to Eclipse using the various tomcat versions.

I have a server setup running tomcat 6.0.51. To the server.xml, I am adding the various JNDI resources I need to run my application. Everything works as expected.

I am now setting up a tomcat 7.0.50 server instance in Eclispe and I add the exact same JNDI resouces. But this time I receive the following error:

Jun 02, 2017 9:23:42 AM org.apache.catalina.mbeans.GlobalResourcesLifecycleListener createMBeans
SEVERE: Exception processing Global JNDI Resources
javax.naming.NamingException: Could not load resource factory class [Root exception is java.lang.ClassNotFoundException: oracle.jdbc.pool.OracleDataSourceFactory]
    at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:84)
    at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
    at org.apache.naming.NamingContextBindingsEnumeration.nextElementInternal(NamingContextBindingsEnumeration.java:119)
    at org.apache.naming.NamingContextBindingsEnumeration.next(NamingContextBindingsEnumeration.java:73)
    at org.apache.naming.NamingContextBindingsEnumeration.next(NamingContextBindingsEnumeration.java:36)
    at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.createMBeans(GlobalResourcesLifecycleListener.java:140)
    at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.createMBeans(GlobalResourcesLifecycleListener.java:112)
    at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.lifecycleEvent(GlobalResourcesLifecycleListener.java:84)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
    at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:347)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:725)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:690)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456)
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.pool.OracleDataSourceFactory
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:82)
    ... 22 more

The resource definition, in both server.xml files looks like

<Resource auth="Container" 
    connectionCacheName="..."
    connectionCacheProperties="..."
    connectionCachingEnabled="true" 
    driverClassName="oracle.jdbc.OracleDriver"
    factory="oracle.jdbc.pool.OracleDataSourceFactory" 
    name="..."
    password="..." 
    type="oracle.jdbc.pool.OracleDataSource"
    url="jdbc:oracle:thin:@//***.***.***.***:1534/..." user="..." />

The jar file being used is the ojdbc.jar file and is located in the WEB-INF/lib folder inside the application folder.

So I am confused, why would this work in tc 6.0.51 but not in tc 7.0.50? What am I doing wrong?

I have reviewed a lot of "ClassNotFound" exceptions here on SO including this one which describes a very similar situation, but has no good answer.

I am not attempting to deploy, I am simply trying to run this app within Eclipse to debug an issue and I want to be sure I am reproducing the issue under the exact same conditions.

EDIT

Following Krishna's comment, I downloaded the suggested jar file and did actually move it from the webapp's WEB-INF/lib folder to the tc 7.0.50 install /lib folder.

Now the error has changed to:

Jun 02, 2017 11:46:17 AM org.apache.catalina.mbeans.GlobalResourcesLifecycleListener createMBeans
SEVERE: Exception processing Global JNDI Resources
javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassCastException: oracle.jdbc.pool.OracleConnectionPoolDataSource cannot be cast to javax.naming.spi.ObjectFactory]
    at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:105)
    at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
    at org.apache.naming.NamingContextBindingsEnumeration.nextElementInternal(NamingContextBindingsEnumeration.java:119)
    at org.apache.naming.NamingContextBindingsEnumeration.next(NamingContextBindingsEnumeration.java:73)
    at org.apache.naming.NamingContextBindingsEnumeration.next(NamingContextBindingsEnumeration.java:36)
    at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.createMBeans(GlobalResourcesLifecycleListener.java:140)
    at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.createMBeans(GlobalResourcesLifecycleListener.java:112)
    at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.lifecycleEvent(GlobalResourcesLifecycleListener.java:84)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
    at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:347)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:725)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:690)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456)
Caused by: java.lang.ClassCastException: oracle.jdbc.pool.OracleConnectionPoolDataSource cannot be cast to javax.naming.spi.ObjectFactory
    at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:101)
    ... 22 more

Reading this apache tomcat users mailing list I added the specified type of "javax.sql.DataSource", but to no avail.

Other suggestions?

Edit 2

Removing the factory="oracle.jdbc.pool.OracleDataSourceFactory" from the resource configuration did help the issue, but then is my connected to the database still a pooled connection?

1
  • Try downloading this jar file java2s.com/Code/JarDownload/ojdbc14/ojdbc14-9.2.0.1.jar.zip to CATALINA_HOME/lib directory & change factory="oracle.jdbc.pool.OracleDataSourceFactory" to factory="oracle.jdbc.pool.OracleConnectionPoolDataSource" Commented Jun 2, 2017 at 13:53

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.