Hi,
I am seeing a strange problem whereby I get the following exception when trying to connect to a JNDI data source from my application:
org.springframework.jndi.JndiLookupFailureException: JndiObjectTargetSource failed to obtain new target object; nested exception is javax.naming.NamingException
org.springframework.jndi.JndiObjectTargetSource.getTarget(JndiObjectTargetSource.java:138)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:184)
$Proxy0.getConnection(Unknown Source)
org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:210)
$Proxy34.prepareStatement(Unknown Source)
com.myCompany.acpa.healthcheck.HealthCheckServlet.getDataSourceURL(HealthCheckServlet.java:187)
com.myCompany.acpa.healthcheck.HealthCheckServlet.processRequest(HealthCheckServlet.java:114)
com.myCompany.acpa.healthcheck.HealthCheckServlet.doGet(HealthCheckServlet.java:63)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
javax.naming.NamingException
org.apache.naming.NamingContext.lookup(NamingContext.java:805)
org.apache.naming.NamingContext.lookup(NamingContext.java:140)
org.apache.naming.NamingContext.lookup(NamingContext.java:781)
org.apache.naming.NamingContext.lookup(NamingContext.java:140)
org.apache.naming.NamingContext.lookup(NamingContext.java:781)
org.apache.naming.NamingContext.lookup(NamingContext.java:140)
org.apache.naming.NamingContext.lookup(NamingContext.java:781)
org.apache.naming.NamingContext.lookup(NamingContext.java:153)
org.apache.naming.SelectorContext.lookup(SelectorContext.java:137)
javax.naming.InitialContext.lookup(InitialContext.java:351)
org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:155)
org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:88)
org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:153)
org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178)
org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105)
org.springframework.jndi.JndiObjectTargetSource.getTarget(JndiObjectTargetSource.java:131)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:184)
$Proxy0.getConnection(Unknown Source)
org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:210)
$Proxy34.prepareStatement(Unknown Source)
com.myCompany.acpa.healthcheck.HealthCheckServlet.getDataSourceURL(HealthCheckServlet.java:187)
com.myCompany.acpa.healthcheck.HealthCheckServlet.processRequest(HealthCheckServlet.java:114)
com.myCompany.acpa.healthcheck.HealthCheckServlet.doGet(HealthCheckServlet.java:63)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
The strange thing is that the same war file deployed in another tcServer instance (in a different environment) works fine, even with the same config files deployed (server.xml, wrapper.conf, catalina.properties).
So the same war file and config files works in one tcServer instance, but not another. My server.xml contains 2 other JNDI data sources both of which my application can connect to successfully.
The strange thing is that when I changed the name of one of these other data sources I got a slightly different error:
org.springframework.jndi.JndiLookupFailureException: JndiObjectTargetSource failed to obtain new target object; nested exception is javax.naming.NameNotFoundException: Name fsaDS is not bound in this Context
org.springframework.jndi.JndiObjectTargetSource.getTarget(JndiObjectTargetSource.java:138)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:184)
$Proxy0.getConnection(Unknown Source)
org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:210)
$Proxy34.prepareStatement(Unknown Source)
com.myCompany.acpa.healthcheck.HealthCheckServlet.getDataSourceURL(HealthCheckServlet.java:187)
com.myCompany.acpa.healthcheck.HealthCheckServlet.processRequest(HealthCheckServlet.java:106)
com.myCompany.acpa.healthcheck.HealthCheckServlet.doGet(HealthCheckServlet.java:63)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
javax.naming.NameNotFoundException: Name abcDataSource not bound in this Context
org.apache.naming.NamingContext.lookup(NamingContext.java:770)
org.apache.naming.NamingContext.lookup(NamingContext.java:140)
org.apache.naming.NamingContext.lookup(NamingContext.java:781)
org.apache.naming.NamingContext.lookup(NamingContext.java:153)
org.apache.naming.factory.ResourceLinkFactory.getObjectInstance(ResourceLinkFactory.java:97)
javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
org.apache.naming.NamingContext.lookup(NamingContext.java:793)
org.apache.naming.NamingContext.lookup(NamingContext.java:140)
org.apache.naming.NamingContext.lookup(NamingContext.java:781)
org.apache.naming.NamingContext.lookup(NamingContext.java:140)
org.apache.naming.NamingContext.lookup(NamingContext.java:781)
org.apache.naming.NamingContext.lookup(NamingContext.java:140)
org.apache.naming.NamingContext.lookup(NamingContext.java:781)
org.apache.naming.NamingContext.lookup(NamingContext.java:153)
org.apache.naming.SelectorContext.lookup(SelectorContext.java:137)
javax.naming.InitialContext.lookup(InitialContext.java:351)
org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:155)
org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:88)
org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:153)
org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178)
org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105)
org.springframework.jndi.JndiObjectTargetSource.getTarget(JndiObjectTargetSource.java:131)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:184)
$Proxy0.getConnection(Unknown Source)
org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:210)
$Proxy34.prepareStatement(Unknown Source)
com.myCompany.acpa.healthcheck.HealthCheckServlet.getDataSourceURL(HealthCheckServlet.java:187)
com.myCompany.acpa.healthcheck.HealthCheckServlet.processRequest(HealthCheckServlet.java:106)
com.myCompany.acpa.healthcheck.HealthCheckServlet.doGet(HealthCheckServlet.java:63)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
So this suggests to me that for the problematic JNDI data source, it can find it in the server.xml, but there is some other naming error.
Anyone any ideas here? I can upload code snippets if they help, but it seems like an environmental problem.