Hello
Tomcat 10.1, Java 17, MySQL Connector 9.0
Not sure if this is a Tomcat Config issue or Spring MVC 6 issue
I am converting from Spring MVC 4 to 6 and have the following set up in
Tomcat 10.1
Context.xml
<Resource name="jdbc/CodereaperDB" auth="Container"
type="javax.sql.DataSource"
maxTotal="20" minIdle="1" initialSize="1"
testOnBorrow="true" testWhileIdle ="true"
username="reference" password="XXXXXXX"
driverClassName="com.mysql.cj.jdbc.Driver"
validationQuery="select 1"
url="jdbc:mysql://192.168.0.28:3306/reference_tables?allowPublicKeyRetrieval
=true&useSSL=false&autoReconnect=true&"/>
Server.xml
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
ResourceLink name="jdbc/CodereaperDB"
global="jdbc/CodereaperDB"
auth="Container"
type="javax.sql.DataSource" />
</GlobalNamingResources>
When I deploy my Spring MVC 6 app I get the following in the Tomcat logs
Caused by: javax.naming.NameNotFoundException: Name [jdbc/jdbcCodereaperDB]
is not bound in this Context. Unable to find [jdbc].
at
org.apache.naming.NamingContext.lookup(NamingContext.java:520)
at
org.apache.naming.NamingContext.lookup(NamingContext.java:155)
at
org.apache.naming.SelectorContext.lookup(SelectorContext.java:144)
at
java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
at
org.springframework.jndi.JndiTemplate.lambda$lookup$0(JndiTemplate.java:157)
at
org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:92)
at
org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:157)
at
org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:179)
at
org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:9
6)
at
org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:114
)
at
org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObject
FactoryBean.java:239)
at
org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObject
FactoryBean.java:225)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
.initializeBean(AbstractAutowireCapableBeanFactory.java:1802)
... 88 more
Related cause:
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'dataSource' defined in class path resource
[atlas-dao-context.xml]: Name [jdbc/jdbcCodereaperDB] is not bound in this
Context. Unable to find [jdbc].
Should I still be using javax.sql.DataSource or should I use something else
in the Jakarta packages??
My Spring bean is below
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/jdbcCodereaperDB"/>
</bean>