`I have been facing this issue quite a long time. I have tried solutions but no luck.
Iam migrating java version from jdk8 to jdk17.
Stacktrace:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘transactionManager’ defined in ServletContext resource [/WEB-INF/spring-config/transactionContext.xml]: JTA UserTransaction is not available at JNDI location [java:comp/UserTransaction]
..
Caused by: org.springframework.transaction.TransactionSystemException: JTA UserTransaction is not available at JNDI location [java:comp/UserTransaction]
… 55 more
Caused by: javax.naming.NamingException: Unexpected exception resolving reference
org.springframework.transaction.jta.JtaTransactionManager.lookupUserTransaction(JtaTransactionManager.java:574)
… 59 more
This is deployment issue.
Iam using the following versions & configuration respectively.
JAVA: JDK 17
Spring:6.0.18
Hibernate jpa version:6.4.4.Final
Jakarta: 10
Tomcat: 10.1
Transaction.xml
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager"/>
<property name="transactionSynchronizationRegistryName"
value="java:comp/TransactionSynchronizationRegistry" />
<property name="userTransactionName" value="java:comp/UserTransaction" />
<bean>
<tx:annotation-driven transaction-manager="transactionManager" />
Context.xml
<Resource accessToUnderlyingConnectionAllowed="true" allowLocalTransactions="true" auth="Container" className="org.enhydra.jdbc.pool.StandardXAPoolDataSource" driverClassName="org.postgresql.Driver" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" maxActive="100" maxIdle="20" maxWait="10000" minIdle="5" name="jdbc/meerkatDataSource" password="projectSpecificPassword" type="javax.sql.DataSource" url="projectSpecificURL" username="projectSpecificUsername" validationQuery="select 1 from Dual"/>
Persistence.xml
<property name = "hibernate.jndi.class" value="javax.naming.InitialContext" />
<property name="hibernate.jndi.url" value="javax.naming.Context.PROVIDER_URL"/>
<property name="jta.UserTransaction" value="java:comp/UserTransaction"/>
<property name ="hibernate.transaction.coordinator.class" value="jta" />
<property name ="hibernate.transaction.jta.platform_resolver" value="org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformResolver" />
<property name = "hibernate.transaction.jta.platform" value ="org.hibernate.engine.transaction.jta.platform.internal.JOTMJtaPlatform"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
Any suggestion or guidance will be helpful.`