title: Unable to use JNDI DataSource provided by Tomcat in Spring?
body: <p>I want to use JNDI DataSource provided by Tomcat in Spring based application. I use Tomcat 7 pool. Tried to configure as described <a href="https://stackoverflow.com/questions/9183321/how-to-use-jndi-datasource-provided-by-tomcat-in-spring">here</a>.</p>
  
  <p>Configured server.xml of Tomcat:</p>
  
  <pre><code>  &lt;GlobalNamingResources&gt;
      &lt;Resource name="jdbc/ApsuserAtAzistst"
                auth="Container"
                type="org.apache.tomcat.jdbc.pool.DataSource"
                driverClassName="oracle.jdbc.OracleDriver"
                url="jdbc:oracle:thin:@10.0.153.10:1525:AZISTST"
                username="APSUSER"
                password="PASSWORDOFAPSUSER"
                initialSize="1"
                minIdle="1"
                maxIdle="1"
                maxActive="3"
                maxWait="1000"
                validationQuery="select 1 from dual"
                jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport(threshold=1500)"
              /&gt;
    &lt;/GlobalNamingResources&gt;
  </code></pre>
  
  <p>created META-INF\context.xml with content:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;Context&gt;
      &lt;ResourceLink name="jdbc/ApsuserAtAzistst"
                    global="jdbc/ApsuserAtAzistst"
                    type="org.apache.tomcat.jdbc.pool.DataSource"/&gt;
  &lt;/Context&gt;
  </code></pre>
  
  <p>and configured applicationContext.xml</p>
  
  <pre><code>&lt;beans profile="dev,test,default"&gt;
      &lt;bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"&gt;
          &lt;property name="jndiName" value="java:comp/env/jdbc/ApsuserAtAzistst"/&gt;
      &lt;/bean&gt;
  &lt;/beans&gt;
  </code></pre>
  
  <p>When I run applcation I receive an error:</p>
  
  <pre><code>SEVERE: Exception processing Global JNDI Resources
  javax.naming.NamingException: Cannot create resource instance
      at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:146)
      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:147)
      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:684)
      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)
  </code></pre>
  
  <p>Everything works when I change applicationContext.xml to:</p>
  
  <pre><code>&lt;beans profile="dev,test,default"&gt;
      &lt;bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"&gt;
          &lt;property name="driverClassName" value="oracle.jdbc.OracleDriver"/&gt;
          &lt;property name="url" value="jdbc:oracle:thin:@10.0.153.10:1525:AZISTST"/&gt;
          &lt;property name="username" value="APSUSER"/&gt;
          &lt;property name="password" value="PASSWORDOFAPSUSER"/&gt;
          &lt;property name="initialSize" value="1"/&gt;
          &lt;property name="minIdle" value="1"/&gt;
          &lt;property name="maxIdle" value="1"/&gt;
          &lt;property name="maxActive" value="3"/&gt;
          &lt;property name="maxWait" value="1000"/&gt;
          &lt;property name="validationQuery" value="select 1 from dual"/&gt;
          &lt;property name="jdbcInterceptors"
                    value="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport(threshold=1500)"/&gt;
      &lt;/bean&gt;
  &lt;/beans&gt;
  </code></pre>
  
  <p>But I want to configure JNDI DataSource in Tomcat and use it. </p>