This is an automated email from the ASF dual-hosted git repository.

zstan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new d6d54fdbbad IGNITE-28588 Update Spring to 6.2.19 (#13342)
d6d54fdbbad is described below

commit d6d54fdbbad43d08832ab9ee6291796e61f363d4
Author: Aleksandr Nikolaev <[email protected]>
AuthorDate: Mon Jul 13 11:40:08 2026 +0300

    IGNITE-28588 Update Spring to 6.2.19 (#13342)
---
 checkstyle/checkstyle.xml                          |  2 +-
 .../misc/springbean/SpringBeanExample.java         | 12 ++----
 modules/calcite/pom.xml                            |  6 +++
 .../resources/jetty/rest-jetty-ssl-client-auth.xml | 13 +-----
 .../src/test/resources/jetty/rest-jetty-ssl.xml    | 17 +-------
 .../src/test/resources/jetty/rest-jetty.xml        | 14 +-----
 .../src/test/resources/jetty/router-jetty-ssl.xml  | 17 +-------
 .../src/test/resources/jetty/router-jetty.xml      | 14 +-----
 modules/core/pom.xml                               |  8 ++--
 .../ignite/internal/IgniteComponentType.java       |  4 +-
 .../processors/rest/GridRestProcessor.java         |  4 ++
 modules/core/src/test/webapp/WEB-INF/web.xml       |  8 ++--
 .../deployment/uri/tasks/GarHelloWorldTask.java    |  7 +--
 .../uri/tasks/GridUriDeploymentTestTask1.java      |  7 ++-
 .../uri/tasks/GridUriDeploymentTestTask2.java      |  6 ++-
 .../uri/tasks/GridUriDeploymentTestTask9.java      |  6 ++-
 modules/jta/pom.xml                                | 27 ++++--------
 .../org/apache/ignite/cache/jta/CacheTmLookup.java |  2 +-
 .../ignite/cache/jta/jndi/CacheJndiTmFactory.java  |  2 +-
 .../ignite/cache/jta/jndi/CacheJndiTmLookup.java   |  2 +-
 .../cache/jta/reflect/CacheReflectionTmLookup.java |  2 +-
 .../jta/websphere/WebSphereLibertyTmFactory.java   |  2 +-
 .../cache/jta/websphere/WebSphereTmFactory.java    | 18 ++++----
 .../processors/cache/jta/CacheJtaManager.java      |  8 ++--
 .../processors/cache/jta/CacheJtaResource.java     |  4 +-
 .../cache/CacheJndiTmFactorySelfTest.java          | 16 +++----
 ...ridCacheJtaConfigurationValidationSelfTest.java |  2 +-
 ...ridCacheJtaFactoryConfigValidationSelfTest.java |  2 +-
 .../cache/GridJtaLifecycleAwareSelfTest.java       |  6 +--
 .../cache/GridJtaTransactionManagerSelfTest.java   | 50 ++++++++++++++--------
 .../cache/jta/AbstractCacheJtaSelfTest.java        | 32 +++++++-------
 .../GridPartitionedCacheJtaFactorySelfTest.java    |  4 +-
 ...PartitionedCacheJtaLookupClassNameSelfTest.java |  4 +-
 modules/rest-http/pom.xml                          | 12 ++++--
 .../protocols/http/jetty/GridJettyRestHandler.java | 22 ++++------
 .../http/jetty/GridJettyRestProtocol.java          | 50 ++++++++++------------
 .../protocols/http/jetty/IgniteRestExtension.java  |  2 +-
 .../rest/protocols/http/jetty/WelcomeHandler.java  | 15 +++----
 .../http/jetty/IgniteRestExtensionTest.java        |  4 +-
 .../resource/GridResourceSpringBeanInjector.java   |  6 +--
 .../resource/GridResourceProcessorSelfTest.java    |  2 +-
 .../uri/GridUriDeploymentSpringDocument.java       |  6 +--
 .../uri/GridUriDeploymentSpringParser.java         | 10 +++--
 .../scanners/http/GridHttpDeploymentSelfTest.java  |  5 ++-
 .../src/main/webapp/WEB-INF/web.xml                | 10 ++---
 modules/web/ignite-websphere-test/pom.xml          | 12 ++++--
 .../apache/ignite/webtest/TestJtaTxServlet.java    |  8 ++--
 .../src/main/webapp/WEB-INF/web.xml                | 10 ++---
 modules/web/pom.xml                                | 12 +++---
 .../ignite/cache/websession/WebSessionFilter.java  |  8 ++--
 .../internal/websession/WebSessionSelfTest.java    | 11 ++---
 .../internal/websession/WebSessionServerStart.java |  4 +-
 modules/web/src/test/webapp2/WEB-INF/web.xml       |  8 ++--
 parent/pom.xml                                     | 21 +++++++--
 54 files changed, 270 insertions(+), 296 deletions(-)

diff --git a/checkstyle/checkstyle.xml b/checkstyle/checkstyle.xml
index d1423237dad..7bb56603bc6 100644
--- a/checkstyle/checkstyle.xml
+++ b/checkstyle/checkstyle.xml
@@ -64,7 +64,7 @@
             <property name="customImportOrderRules"
                       
value="STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE###STATIC"/>
             <property name="standardPackageRegExp" value="^java\."/>
-            <property name="specialImportsRegExp" value="^javax\."/>
+            <property name="specialImportsRegExp" value="^(javax|jakarta)\."/>
             <property name="sortImportsInGroupAlphabetically" value="true"/>
             <property name="separateLineBetweenGroups" value="false"/>
         </module>
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/misc/springbean/SpringBeanExample.java
 
b/examples/src/main/java/org/apache/ignite/examples/misc/springbean/SpringBeanExample.java
index 66b22fa8681..d514db2512c 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/misc/springbean/SpringBeanExample.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/misc/springbean/SpringBeanExample.java
@@ -53,11 +53,9 @@ public final class SpringBeanExample {
         System.out.println();
         System.out.println(">>> Spring bean example started.");
 
-        // Initialize Spring factory.
-        ClassPathXmlApplicationContext ctx =
-            new 
ClassPathXmlApplicationContext("org/apache/ignite/examples/misc/springbean/spring-bean.xml");
-
-        try {
+        // Initialize Spring factory (closed automatically, which stops the 
local cluster node).
+        try (ClassPathXmlApplicationContext ctx =
+            new 
ClassPathXmlApplicationContext("org/apache/ignite/examples/misc/springbean/spring-bean.xml"))
 {
             // Get ignite from Spring (note that local cluster node is already 
started).
             Ignite ignite = (Ignite)ctx.getBean("mySpringBean");
 
@@ -81,9 +79,5 @@ public final class SpringBeanExample {
             System.out.println(">>> Check all nodes for output (this node is 
also part of the cluster).");
             System.out.println(">>>");
         }
-        finally {
-            // Stop local cluster node.
-            ctx.destroy();
-        }
     }
 }
diff --git a/modules/calcite/pom.xml b/modules/calcite/pom.xml
index c178cef41dc..27c49c5b415 100644
--- a/modules/calcite/pom.xml
+++ b/modules/calcite/pom.xml
@@ -69,6 +69,12 @@
             <groupId>org.apache.calcite</groupId>
             <artifactId>calcite-core</artifactId>
             <version>${calcite.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.commons</groupId>
+                    <artifactId>commons-dbcp2</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>
diff --git 
a/modules/clients/src/test/resources/jetty/rest-jetty-ssl-client-auth.xml 
b/modules/clients/src/test/resources/jetty/rest-jetty-ssl-client-auth.xml
index 00158a85cc2..b95d81dd1ef 100644
--- a/modules/clients/src/test/resources/jetty/rest-jetty-ssl-client-auth.xml
+++ b/modules/clients/src/test/resources/jetty/rest-jetty-ssl-client-auth.xml
@@ -19,7 +19,7 @@
 
 <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" 
"http://www.eclipse.org/jetty/configure.dtd";>
 <Configure id="Server" class="org.eclipse.jetty.server.Server">
-    <Arg name="threadpool">
+    <Arg>
         <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
             <Set name="minThreads">5</Set>
             <Set name="maxThreads">10</Set>
@@ -76,17 +76,6 @@
         </Arg>
     </Call>
 
-    <Set name="handler">
-        <New id="Handlers" 
class="org.eclipse.jetty.server.handler.HandlerCollection">
-            <Set name="handlers">
-                <Array type="org.eclipse.jetty.server.Handler">
-                    <Item>
-                        <New id="Contexts" 
class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
-                    </Item>
-                </Array>
-            </Set>
-        </New>
-    </Set>
 
     <Set name="stopAtShutdown">false</Set>
 </Configure>
diff --git a/modules/clients/src/test/resources/jetty/rest-jetty-ssl.xml 
b/modules/clients/src/test/resources/jetty/rest-jetty-ssl.xml
index d84df0d48b3..d34d2c9ada2 100644
--- a/modules/clients/src/test/resources/jetty/rest-jetty-ssl.xml
+++ b/modules/clients/src/test/resources/jetty/rest-jetty-ssl.xml
@@ -20,7 +20,7 @@
 <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" 
"http://www.eclipse.org/jetty/configure.dtd";>
 
 <Configure id="Server" class="org.eclipse.jetty.server.Server">
-    <Arg name="threadpool">
+    <Arg>
         <!-- Default queued blocking thread pool -->
         <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
             <Set name="minThreads">10</Set>
@@ -38,7 +38,7 @@
         </Call>
     </New>
 
-    <New id="sslContextFactory" 
class="org.eclipse.jetty.util.ssl.SslContextFactory">
+    <New id="sslContextFactory" 
class="org.eclipse.jetty.util.ssl.SslContextFactory$Server">
         <Set name="keyStorePath"><SystemProperty 
name="CLIENTS_MODULE_PATH"/>/src/test/keystore/server.jks</Set>
         <Set name="keyStorePassword">123456</Set>
         <Set name="keyManagerPassword">123456</Set>
@@ -77,18 +77,5 @@
             </New>
         </Arg>
     </Call>
-
-    <Set name="handler">
-        <New id="Handlers" 
class="org.eclipse.jetty.server.handler.HandlerCollection">
-            <Set name="handlers">
-                <Array type="org.eclipse.jetty.server.Handler">
-                    <Item>
-                        <New id="Contexts" 
class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
-                    </Item>
-                </Array>
-            </Set>
-        </New>
-    </Set>
-
     <Set name="stopAtShutdown">false</Set>
 </Configure>
diff --git a/modules/clients/src/test/resources/jetty/rest-jetty.xml 
b/modules/clients/src/test/resources/jetty/rest-jetty.xml
index d84bf8ae49c..c4dcc0f37af 100644
--- a/modules/clients/src/test/resources/jetty/rest-jetty.xml
+++ b/modules/clients/src/test/resources/jetty/rest-jetty.xml
@@ -20,7 +20,7 @@
 <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" 
"http://www.eclipse.org/jetty/configure.dtd";>
 
 <Configure id="Server" class="org.eclipse.jetty.server.Server">
-    <Arg name="threadpool">
+    <Arg>
         <!-- Default queued blocking thread pool -->
         <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
             <Set name="minThreads">20</Set>
@@ -61,17 +61,5 @@
         </Arg>
     </Call>
 
-    <Set name="handler">
-        <New id="Handlers" 
class="org.eclipse.jetty.server.handler.HandlerCollection">
-            <Set name="handlers">
-                <Array type="org.eclipse.jetty.server.Handler">
-                    <Item>
-                        <New id="Contexts" 
class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
-                    </Item>
-                </Array>
-            </Set>
-        </New>
-    </Set>
-
     <Set name="stopAtShutdown">false</Set>
 </Configure>
diff --git a/modules/clients/src/test/resources/jetty/router-jetty-ssl.xml 
b/modules/clients/src/test/resources/jetty/router-jetty-ssl.xml
index 093fa181535..85081526a7d 100644
--- a/modules/clients/src/test/resources/jetty/router-jetty-ssl.xml
+++ b/modules/clients/src/test/resources/jetty/router-jetty-ssl.xml
@@ -20,7 +20,7 @@
 <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" 
"http://www.eclipse.org/jetty/configure.dtd";>
 
 <Configure id="Server" class="org.eclipse.jetty.server.Server">
-    <Arg name="threadpool">
+    <Arg>
         <!-- Default queued blocking thread pool -->
         <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
             <Set name="minThreads">10</Set>
@@ -38,7 +38,7 @@
         </Call>
     </New>
 
-    <New id="sslContextFactory" 
class="org.eclipse.jetty.util.ssl.SslContextFactory">
+    <New id="sslContextFactory" 
class="org.eclipse.jetty.util.ssl.SslContextFactory$Server">
         <Set name="keyStorePath"><SystemProperty 
name="CLIENTS_MODULE_PATH"/>/src/test/keystore/server.jks</Set>
         <Set name="keyStorePassword">123456</Set>
         <Set name="keyManagerPassword">123456</Set>
@@ -77,18 +77,5 @@
             </New>
         </Arg>
     </Call>
-
-    <Set name="handler">
-        <New id="Handlers" 
class="org.eclipse.jetty.server.handler.HandlerCollection">
-            <Set name="handlers">
-                <Array type="org.eclipse.jetty.server.Handler">
-                    <Item>
-                        <New id="Contexts" 
class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
-                    </Item>
-                </Array>
-            </Set>
-        </New>
-    </Set>
-
     <Set name="stopAtShutdown">false</Set>
 </Configure>
diff --git a/modules/clients/src/test/resources/jetty/router-jetty.xml 
b/modules/clients/src/test/resources/jetty/router-jetty.xml
index 8815431069b..eecb262972c 100644
--- a/modules/clients/src/test/resources/jetty/router-jetty.xml
+++ b/modules/clients/src/test/resources/jetty/router-jetty.xml
@@ -20,7 +20,7 @@
 <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" 
"http://www.eclipse.org/jetty/configure.dtd";>
 
 <Configure id="Server" class="org.eclipse.jetty.server.Server">
-    <Arg name="threadpool">
+    <Arg>
         <!-- Default queued blocking thread pool -->
         <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
             <Set name="minThreads">20</Set>
@@ -61,17 +61,5 @@
         </Arg>
     </Call>
 
-    <Set name="handler">
-        <New id="Handlers" 
class="org.eclipse.jetty.server.handler.HandlerCollection">
-            <Set name="handlers">
-                <Array type="org.eclipse.jetty.server.Handler">
-                    <Item>
-                        <New id="Contexts" 
class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
-                    </Item>
-                </Array>
-            </Set>
-        </New>
-    </Set>
-
     <Set name="stopAtShutdown">false</Set>
 </Configure>
diff --git a/modules/core/pom.xml b/modules/core/pom.xml
index cb39794de74..4f5c28a4125 100644
--- a/modules/core/pom.xml
+++ b/modules/core/pom.xml
@@ -162,15 +162,15 @@
         </dependency>
 
         <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-servlets</artifactId>
+            <groupId>org.eclipse.jetty.ee11</groupId>
+            <artifactId>jetty-ee11-servlets</artifactId>
             <version>${jetty.version}</version>
             <scope>test</scope>
         </dependency>
 
         <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-webapp</artifactId>
+            <groupId>org.eclipse.jetty.ee11</groupId>
+            <artifactId>jetty-ee11-webapp</artifactId>
             <version>${jetty.version}</version>
             <scope>test</scope>
         </dependency>
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/IgniteComponentType.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/IgniteComponentType.java
index 8e9e483af45..6a895088bf7 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/IgniteComponentType.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/IgniteComponentType.java
@@ -208,7 +208,7 @@ public enum IgniteComponentType {
         try {
             Class.forName(cls);
         }
-        catch (ClassNotFoundException e) {
+        catch (ClassNotFoundException | LinkageError e) {
             if (mandatory)
                 throw componentException(e);
 
@@ -263,7 +263,7 @@ public enum IgniteComponentType {
         try {
             cls = Class.forName(clsName);
         }
-        catch (ClassNotFoundException ignored) {
+        catch (ClassNotFoundException | LinkageError ignored) {
             try {
                 cls = Class.forName(noOpClsName);
             }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
index a7e0cc58d9d..e417ede2f6e 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
@@ -1017,6 +1017,10 @@ public class GridRestProcessor extends 
GridProcessorAdapter implements IgniteRes
                 log.debug("Failed to initialize HTTP REST protocol (consider 
adding ignite-rest-http " +
                     "module to classpath).");
         }
+        catch (LinkageError e) {
+            U.warn(log, "Failed to initialize HTTP REST protocol (consider 
adding ignite-rest-http " +
+                "module and its dependencies to classpath).", e);
+        }
         catch (NoSuchMethodException | InvocationTargetException | 
InstantiationException | IllegalAccessException e) {
             throw new IgniteCheckedException("Failed to initialize HTTP REST 
protocol.", e);
         }
diff --git a/modules/core/src/test/webapp/WEB-INF/web.xml 
b/modules/core/src/test/webapp/WEB-INF/web.xml
index e3523c76af0..a1451584cc4 100644
--- a/modules/core/src/test/webapp/WEB-INF/web.xml
+++ b/modules/core/src/test/webapp/WEB-INF/web.xml
@@ -17,11 +17,11 @@
   limitations under the License.
 -->
 
-<web-app xmlns="http://java.sun.com/xml/ns/javaee";
+<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee";
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
-                             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd";
-         version="3.0">
+         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
+                             
https://jakarta.ee/xml/ns/jakartaee/web-app_6_1.xsd";
+         version="6.1">
 
     <!-- Declare listener for web sessions caching. -->
     <listener>
diff --git 
a/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GarHelloWorldTask.java
 
b/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GarHelloWorldTask.java
index df71641a542..1bcb94160f0 100644
--- 
a/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GarHelloWorldTask.java
+++ 
b/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GarHelloWorldTask.java
@@ -29,8 +29,8 @@ import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.compute.ComputeTaskName;
 import org.apache.ignite.compute.ComputeTaskSplitAdapter;
 import org.jetbrains.annotations.Nullable;
-import org.springframework.beans.factory.support.AbstractBeanFactory;
-import org.springframework.beans.factory.xml.XmlBeanFactory;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
 import org.springframework.core.io.ClassPathResource;
 
 /**
@@ -43,7 +43,8 @@ public class GarHelloWorldTask extends 
ComputeTaskSplitAdapter<String, String> {
     /** {@inheritDoc} */
     @Override public Collection<? extends ComputeJob> split(int gridSize, 
String arg) throws IgniteException {
         // Create Spring context.
-        AbstractBeanFactory fac = new XmlBeanFactory(
+        DefaultListableBeanFactory fac = new DefaultListableBeanFactory();
+        new XmlBeanDefinitionReader(fac).loadBeanDefinitions(
             new 
ClassPathResource("org/apache/ignite/spi/deployment/uri/tasks/gar-spring-bean.xml",
 getClass().getClassLoader()));
 
         fac.setBeanClassLoader(getClass().getClassLoader());
diff --git 
a/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GridUriDeploymentTestTask1.java
 
b/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GridUriDeploymentTestTask1.java
index d95c411e74c..1348d7f8066 100644
--- 
a/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GridUriDeploymentTestTask1.java
+++ 
b/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GridUriDeploymentTestTask1.java
@@ -23,7 +23,8 @@ import java.util.Map;
 import org.apache.ignite.compute.ComputeJob;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.compute.ComputeTaskSplitAdapter;
-import org.springframework.beans.factory.xml.XmlBeanFactory;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
 import org.springframework.core.io.ClassPathResource;
 
 /**
@@ -32,7 +33,9 @@ import org.springframework.core.io.ClassPathResource;
 public class GridUriDeploymentTestTask1 extends 
ComputeTaskSplitAdapter<Object, Object> {
     /** */
     public GridUriDeploymentTestTask1() {
-        XmlBeanFactory factory = new XmlBeanFactory(new 
ClassPathResource("spring1.xml", getClass().getClassLoader()));
+        DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
+        new XmlBeanDefinitionReader(factory).loadBeanDefinitions(
+            new ClassPathResource("spring1.xml", getClass().getClassLoader()));
 
         factory.setBeanClassLoader(getClass().getClassLoader());
 
diff --git 
a/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GridUriDeploymentTestTask2.java
 
b/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GridUriDeploymentTestTask2.java
index 1325efd17aa..cf661982b4a 100644
--- 
a/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GridUriDeploymentTestTask2.java
+++ 
b/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GridUriDeploymentTestTask2.java
@@ -23,7 +23,8 @@ import java.util.Map;
 import org.apache.ignite.compute.ComputeJob;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.compute.ComputeTaskSplitAdapter;
-import org.springframework.beans.factory.xml.XmlBeanFactory;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
 import org.springframework.core.io.ClassPathResource;
 
 /**
@@ -35,7 +36,8 @@ public class GridUriDeploymentTestTask2 extends 
ComputeTaskSplitAdapter<Object,
 
     /** */
     public GridUriDeploymentTestTask2() {
-        XmlBeanFactory factory = new XmlBeanFactory(
+        DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
+        new XmlBeanDefinitionReader(factory).loadBeanDefinitions(
             new 
ClassPathResource("org/apache/ignite/spi/deployment/uri/tasks/spring2.xml",
                 getClass().getClassLoader()));
 
diff --git 
a/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GridUriDeploymentTestTask9.java
 
b/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GridUriDeploymentTestTask9.java
index e3469516d91..93b277c9f85 100644
--- 
a/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GridUriDeploymentTestTask9.java
+++ 
b/modules/extdata/uri/src/main/java/org/apache/ignite/spi/deployment/uri/tasks/GridUriDeploymentTestTask9.java
@@ -23,7 +23,8 @@ import java.util.Map;
 import org.apache.ignite.compute.ComputeJob;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.compute.ComputeTaskSplitAdapter;
-import org.springframework.beans.factory.xml.XmlBeanFactory;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
 import org.springframework.core.io.ClassPathResource;
 
 /**
@@ -35,7 +36,8 @@ public class GridUriDeploymentTestTask9 extends 
ComputeTaskSplitAdapter<Object,
 
     /** */
     public GridUriDeploymentTestTask9() {
-        XmlBeanFactory factory = new XmlBeanFactory(
+        DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
+        new XmlBeanDefinitionReader(factory).loadBeanDefinitions(
             new 
ClassPathResource("org/apache/ignite/spi/deployment/uri/tasks/spring9.xml",
                 getClass().getClassLoader()));
 
diff --git a/modules/jta/pom.xml b/modules/jta/pom.xml
index 5a031057f2a..21909a7f794 100644
--- a/modules/jta/pom.xml
+++ b/modules/jta/pom.xml
@@ -41,9 +41,9 @@
         </dependency>
 
         <dependency>
-            <groupId>javax.transaction</groupId>
-            <artifactId>jta</artifactId>
-            <version>1.1</version>
+            <groupId>jakarta.transaction</groupId>
+            <artifactId>jakarta.transaction-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
 
         <dependency>
@@ -53,16 +53,16 @@
         </dependency>
 
         <dependency>
-            <groupId>org.ow2.jotm</groupId>
-            <artifactId>jotm-core</artifactId>
-            <version>${jotm.version}</version>
+            <groupId>org.jboss.narayana.jta</groupId>
+            <artifactId>narayana-jta</artifactId>
+            <version>${narayana.version}</version>
             <scope>test</scope>
         </dependency>
 
         <dependency>
-            <groupId>javax.resource</groupId>
-            <artifactId>connector-api</artifactId>
-            <version>1.5</version>
+            <groupId>org.jboss.logging</groupId>
+            <artifactId>jboss-logging</artifactId>
+            <version>${jboss.logging.version}</version>
             <scope>test</scope>
         </dependency>
 
@@ -100,15 +100,6 @@
             <scope>test</scope>
         </dependency>
 
-        <!-- JDK9+ -->
-
-        <dependency>
-            <groupId>org.jboss.spec.javax.rmi</groupId>
-            <artifactId>jboss-rmi-api_1.0_spec</artifactId>
-            <version>${jboss.rmi.version}</version>
-            <scope>test</scope>
-        </dependency>
-
     </dependencies>
 
     <build>
diff --git 
a/modules/jta/src/main/java/org/apache/ignite/cache/jta/CacheTmLookup.java 
b/modules/jta/src/main/java/org/apache/ignite/cache/jta/CacheTmLookup.java
index 7f973848a84..8a0659e2a9c 100644
--- a/modules/jta/src/main/java/org/apache/ignite/cache/jta/CacheTmLookup.java
+++ b/modules/jta/src/main/java/org/apache/ignite/cache/jta/CacheTmLookup.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.cache.jta;
 
-import javax.transaction.TransactionManager;
+import jakarta.transaction.TransactionManager;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.configuration.TransactionConfiguration;
 import org.jetbrains.annotations.Nullable;
diff --git 
a/modules/jta/src/main/java/org/apache/ignite/cache/jta/jndi/CacheJndiTmFactory.java
 
b/modules/jta/src/main/java/org/apache/ignite/cache/jta/jndi/CacheJndiTmFactory.java
index 10f3f86c779..b6c778c7ba6 100644
--- 
a/modules/jta/src/main/java/org/apache/ignite/cache/jta/jndi/CacheJndiTmFactory.java
+++ 
b/modules/jta/src/main/java/org/apache/ignite/cache/jta/jndi/CacheJndiTmFactory.java
@@ -20,10 +20,10 @@ package org.apache.ignite.cache.jta.jndi;
 import java.util.Arrays;
 import java.util.Hashtable;
 import java.util.Map;
+import jakarta.transaction.TransactionManager;
 import javax.cache.configuration.Factory;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
-import javax.transaction.TransactionManager;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.internal.util.typedef.internal.U;
 
diff --git 
a/modules/jta/src/main/java/org/apache/ignite/cache/jta/jndi/CacheJndiTmLookup.java
 
b/modules/jta/src/main/java/org/apache/ignite/cache/jta/jndi/CacheJndiTmLookup.java
index dfd8b5e3cca..db01b36d484 100644
--- 
a/modules/jta/src/main/java/org/apache/ignite/cache/jta/jndi/CacheJndiTmLookup.java
+++ 
b/modules/jta/src/main/java/org/apache/ignite/cache/jta/jndi/CacheJndiTmLookup.java
@@ -18,9 +18,9 @@
 package org.apache.ignite.cache.jta.jndi;
 
 import java.util.List;
+import jakarta.transaction.TransactionManager;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
-import javax.transaction.TransactionManager;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.cache.jta.CacheTmLookup;
 import org.jetbrains.annotations.Nullable;
diff --git 
a/modules/jta/src/main/java/org/apache/ignite/cache/jta/reflect/CacheReflectionTmLookup.java
 
b/modules/jta/src/main/java/org/apache/ignite/cache/jta/reflect/CacheReflectionTmLookup.java
index 25b06de2201..96cf03de0d6 100644
--- 
a/modules/jta/src/main/java/org/apache/ignite/cache/jta/reflect/CacheReflectionTmLookup.java
+++ 
b/modules/jta/src/main/java/org/apache/ignite/cache/jta/reflect/CacheReflectionTmLookup.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.cache.jta.reflect;
 
 import java.lang.reflect.InvocationTargetException;
-import javax.transaction.TransactionManager;
+import jakarta.transaction.TransactionManager;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.cache.jta.CacheTmLookup;
 import org.apache.ignite.internal.util.typedef.internal.A;
diff --git 
a/modules/jta/src/main/java/org/apache/ignite/cache/jta/websphere/WebSphereLibertyTmFactory.java
 
b/modules/jta/src/main/java/org/apache/ignite/cache/jta/websphere/WebSphereLibertyTmFactory.java
index aa579ade02f..581078a97e2 100644
--- 
a/modules/jta/src/main/java/org/apache/ignite/cache/jta/websphere/WebSphereLibertyTmFactory.java
+++ 
b/modules/jta/src/main/java/org/apache/ignite/cache/jta/websphere/WebSphereLibertyTmFactory.java
@@ -18,8 +18,8 @@
 package org.apache.ignite.cache.jta.websphere;
 
 import java.lang.reflect.InvocationTargetException;
+import jakarta.transaction.TransactionManager;
 import javax.cache.configuration.Factory;
-import javax.transaction.TransactionManager;
 import org.apache.ignite.IgniteException;
 
 /**
diff --git 
a/modules/jta/src/main/java/org/apache/ignite/cache/jta/websphere/WebSphereTmFactory.java
 
b/modules/jta/src/main/java/org/apache/ignite/cache/jta/websphere/WebSphereTmFactory.java
index 85886df7eed..7276e12932f 100644
--- 
a/modules/jta/src/main/java/org/apache/ignite/cache/jta/websphere/WebSphereTmFactory.java
+++ 
b/modules/jta/src/main/java/org/apache/ignite/cache/jta/websphere/WebSphereTmFactory.java
@@ -21,16 +21,16 @@ import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
+import jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
+import jakarta.transaction.InvalidTransactionException;
+import jakarta.transaction.NotSupportedException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.Synchronization;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
 import javax.cache.configuration.Factory;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
 import javax.transaction.xa.XAResource;
 import org.apache.ignite.IgniteException;
 
diff --git 
a/modules/jta/src/main/java/org/apache/ignite/internal/processors/cache/jta/CacheJtaManager.java
 
b/modules/jta/src/main/java/org/apache/ignite/internal/processors/cache/jta/CacheJtaManager.java
index b98a7f8b006..854773ad259 100644
--- 
a/modules/jta/src/main/java/org/apache/ignite/internal/processors/cache/jta/CacheJtaManager.java
+++ 
b/modules/jta/src/main/java/org/apache/ignite/internal/processors/cache/jta/CacheJtaManager.java
@@ -18,11 +18,11 @@
 package org.apache.ignite.internal.processors.cache.jta;
 
 import java.util.concurrent.atomic.AtomicReference;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
 import javax.cache.configuration.Factory;
-import javax.transaction.RollbackException;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cache.jta.CacheTmLookup;
 import org.apache.ignite.configuration.CacheConfiguration;
diff --git 
a/modules/jta/src/main/java/org/apache/ignite/internal/processors/cache/jta/CacheJtaResource.java
 
b/modules/jta/src/main/java/org/apache/ignite/internal/processors/cache/jta/CacheJtaResource.java
index 5b1b37a15db..81edfc40833 100644
--- 
a/modules/jta/src/main/java/org/apache/ignite/internal/processors/cache/jta/CacheJtaResource.java
+++ 
b/modules/jta/src/main/java/org/apache/ignite/internal/processors/cache/jta/CacheJtaResource.java
@@ -18,9 +18,9 @@
 package org.apache.ignite.internal.processors.cache.jta;
 
 import java.util.concurrent.atomic.AtomicReference;
+import jakarta.transaction.Status;
+import jakarta.transaction.Synchronization;
 import javax.cache.CacheException;
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
diff --git 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/CacheJndiTmFactorySelfTest.java
 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/CacheJndiTmFactorySelfTest.java
index f3781d4af58..8f3ba701440 100644
--- 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/CacheJndiTmFactorySelfTest.java
+++ 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/CacheJndiTmFactorySelfTest.java
@@ -18,16 +18,16 @@
 package org.apache.ignite.internal.processors.cache;
 
 import java.util.concurrent.Callable;
+import jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
+import jakarta.transaction.InvalidTransactionException;
+import jakarta.transaction.NotSupportedException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
 import javax.naming.Context;
 import javax.naming.InitialContext;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.cache.jta.jndi.CacheJndiTmFactory;
 import org.apache.ignite.testframework.GridTestUtils;
diff --git 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheJtaConfigurationValidationSelfTest.java
 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheJtaConfigurationValidationSelfTest.java
index db41a0cd4e7..c7957891836 100644
--- 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheJtaConfigurationValidationSelfTest.java
+++ 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheJtaConfigurationValidationSelfTest.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.internal.processors.cache;
 
 import java.util.concurrent.Callable;
-import javax.transaction.TransactionManager;
+import jakarta.transaction.TransactionManager;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cache.jta.CacheTmLookup;
 import org.apache.ignite.configuration.CacheConfiguration;
diff --git 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheJtaFactoryConfigValidationSelfTest.java
 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheJtaFactoryConfigValidationSelfTest.java
index ffb08e7da91..e7617f531bc 100644
--- 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheJtaFactoryConfigValidationSelfTest.java
+++ 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheJtaFactoryConfigValidationSelfTest.java
@@ -18,8 +18,8 @@
 package org.apache.ignite.internal.processors.cache;
 
 import java.util.concurrent.Callable;
+import jakarta.transaction.TransactionManager;
 import javax.cache.configuration.Factory;
-import javax.transaction.TransactionManager;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
diff --git 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridJtaLifecycleAwareSelfTest.java
 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridJtaLifecycleAwareSelfTest.java
index 695e9953298..9a4658e98d5 100644
--- 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridJtaLifecycleAwareSelfTest.java
+++ 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridJtaLifecycleAwareSelfTest.java
@@ -17,8 +17,8 @@
 
 package org.apache.ignite.internal.processors.cache;
 
+import jakarta.transaction.TransactionManager;
 import javax.cache.configuration.Factory;
-import javax.transaction.TransactionManager;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.jta.CacheTmLookup;
@@ -142,8 +142,8 @@ public class GridJtaLifecycleAwareSelfTest extends 
GridAbstractLifecycleAwareSel
 
     /** {@inheritDoc} */
     @Test
-    @Override public void testLifecycleAware() throws Exception {
-        // No-op, see anothre tests.
+    @Override public void testLifecycleAware() {
+        // No-op, see other tests.
     }
 
     /** */
diff --git 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridJtaTransactionManagerSelfTest.java
 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridJtaTransactionManagerSelfTest.java
index e85d196880f..cab956e9f0f 100644
--- 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridJtaTransactionManagerSelfTest.java
+++ 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/GridJtaTransactionManagerSelfTest.java
@@ -19,9 +19,10 @@ package org.apache.ignite.internal.processors.cache;
 
 import java.util.Arrays;
 import java.util.Collection;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
 import javax.cache.configuration.Factory;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
+import 
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.TransactionConfiguration;
@@ -31,9 +32,6 @@ import org.apache.ignite.transactions.TransactionIsolation;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
-import org.objectweb.jotm.Current;
-import org.objectweb.jotm.Jotm;
-import org.objectweb.jotm.rmi.RmiLocalConfiguration;
 
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.transactions.TransactionConcurrency.OPTIMISTIC;
@@ -45,8 +43,8 @@ import static 
org.apache.ignite.transactions.TransactionState.ACTIVE;
  */
 @RunWith(Parameterized.class)
 public class GridJtaTransactionManagerSelfTest extends GridCommonAbstractTest {
-    /** Java Open Transaction Manager facade. */
-    private static Jotm jotm;
+    /** Transaction manager. */
+    private static TransactionManager txMgr;
 
     /**
      * @return Test parameters.
@@ -77,18 +75,11 @@ public class GridJtaTransactionManagerSelfTest extends 
GridCommonAbstractTest {
     @Override protected void beforeTestsStarted() throws Exception {
         super.beforeTestsStarted();
 
-        jotm = new Jotm(true, false, new RmiLocalConfiguration());
-
-        Current.setAppServer(false);
+        txMgr = new TransactionManagerImple();
 
         startGrid();
     }
 
-    /** {@inheritDoc} */
-    @Override protected void afterTestsStopped() throws Exception {
-        jotm.stop();
-    }
-
     /**
      * Test for switching tx context by JTA Manager.
      *
@@ -102,7 +93,7 @@ public class GridJtaTransactionManagerSelfTest extends 
GridCommonAbstractTest {
             cfg.setDefaultTxConcurrency(txConcurrency);
             cfg.setDefaultTxIsolation(isolation);
 
-            TransactionManager jtaTm = jotm.getTransactionManager();
+            TransactionManager jtaTm = txMgr;
 
             IgniteCache<Integer, String> cache = jcache();
 
@@ -120,8 +111,21 @@ public class GridJtaTransactionManagerSelfTest extends 
GridCommonAbstractTest {
 
             assertEquals(Integer.toString(1), cache.get(1));
 
+            org.apache.ignite.transactions.Transaction igniteTx = 
grid().transactions().tx();
+
             jtaTm.suspend();
 
+            // Narayana's TransactionManagerImple.suspend() only detaches the 
JTA transaction from the
+            // current thread context without calling XAResource.end(xid, 
TMSUSPEND) on enlisted
+            // XA resources. This behavior is fully compliant with the JTA 
specification: the spec
+            // defines TransactionManager.suspend() as "suspend the current 
transaction and return
+            // it" without requiring end() callbacks on XA resources.
+            // The previous JTA provider (JOTM) called end(TMSUSPEND) as an 
implementation detail
+            // (not because the spec required it), which is why this test 
worked out of the box
+            // with JOTM. To compensate for Narayana's spec-compliant 
behavior, we must explicitly
+            // suspend the Ignite transaction to detach it from the thread.
+            igniteTx.suspend();
+
             assertNull(grid().transactions().tx());
 
             assertNull(cache.get(1));
@@ -148,6 +152,16 @@ public class GridJtaTransactionManagerSelfTest extends 
GridCommonAbstractTest {
 
             jtaTm.resume(tx1);
 
+            // Narayana's TransactionManagerImple.resume() only reattaches the 
JTA transaction to the
+            // current thread context without calling XAResource.start(xid, 
TMRESUME) on previously
+            // enlisted XA resources. This is also fully compliant with the 
JTA specification:
+            // TransactionManager.resume() is defined as "resume a previously 
suspended transaction"
+            // without requiring start() callbacks on XA resources.
+            // Similarly to suspend(), JOTM called start(TMRESUME) as an 
implementation detail,
+            // not because the spec required it. To compensate for Narayana's 
behavior, we must
+            // explicitly resume the Ignite transaction to reattach it to the 
thread.
+            igniteTx.resume();
+
             assertNotNull(grid().transactions().tx());
 
             assertEquals(ACTIVE, grid().transactions().tx().state());
@@ -177,7 +191,7 @@ public class GridJtaTransactionManagerSelfTest extends 
GridCommonAbstractTest {
             cfg.setDefaultTxConcurrency(txConcurrency);
             cfg.setDefaultTxIsolation(isolation);
 
-            TransactionManager jtaTm = jotm.getTransactionManager();
+            TransactionManager jtaTm = txMgr;
 
             IgniteCache<Integer, String> cache = jcache();
 
@@ -231,7 +245,7 @@ public class GridJtaTransactionManagerSelfTest extends 
GridCommonAbstractTest {
 
         /** {@inheritDoc} */
         @Override public TransactionManager create() {
-            return jotm.getTransactionManager();
+            return txMgr;
         }
     }
 }
diff --git 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/AbstractCacheJtaSelfTest.java
 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/AbstractCacheJtaSelfTest.java
index 8fb9f1e7b6c..0a2e9a4b421 100644
--- 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/AbstractCacheJtaSelfTest.java
+++ 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/AbstractCacheJtaSelfTest.java
@@ -19,8 +19,11 @@ package org.apache.ignite.internal.processors.cache.jta;
 
 import java.util.concurrent.Callable;
 import java.util.concurrent.CountDownLatch;
-import javax.transaction.Status;
-import javax.transaction.UserTransaction;
+import jakarta.transaction.Status;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.UserTransaction;
+import 
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple;
+import com.arjuna.ats.internal.jta.transaction.arjunacore.UserTransactionImple;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.configuration.CacheConfiguration;
@@ -30,8 +33,6 @@ import 
org.apache.ignite.internal.processors.cache.GridCacheAbstractSelfTest;
 import org.apache.ignite.testframework.GridTestSafeThreadFactory;
 import org.apache.ignite.transactions.Transaction;
 import org.junit.Test;
-import org.objectweb.jotm.Jotm;
-import org.objectweb.jotm.rmi.RmiLocalConfiguration;
 
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static 
org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
@@ -45,23 +46,20 @@ public abstract class AbstractCacheJtaSelfTest extends 
GridCacheAbstractSelfTest
     /** */
     private static final int GRID_CNT = 1;
 
-    /** Java Open Transaction Manager facade. */
-    protected static Jotm jotm;
+    /** Transaction manager. */
+    protected static TransactionManager txMgr;
+
+    /** User transaction. */
+    protected static UserTransaction userTx;
 
     /** {@inheritDoc} */
     @Override protected void beforeTestsStarted() throws Exception {
-        jotm = new Jotm(true, false, new RmiLocalConfiguration());
+        txMgr = new TransactionManagerImple();
+        userTx = new UserTransactionImple();
 
         super.beforeTestsStarted();
     }
 
-    /** {@inheritDoc} */
-    @Override protected void afterTestsStopped() throws Exception {
-        super.afterTestsStopped();
-
-        jotm.stop();
-    }
-
     /** {@inheritDoc} */
     @Override protected int gridCount() {
         return GRID_CNT;
@@ -101,7 +99,7 @@ public abstract class AbstractCacheJtaSelfTest extends 
GridCacheAbstractSelfTest
      */
     @Test
     public void testJta() throws Exception {
-        UserTransaction jtaTx = jotm.getUserTransaction();
+        UserTransaction jtaTx = userTx;
 
         IgniteCache<String, Integer> cache = jcache();
 
@@ -145,7 +143,7 @@ public abstract class AbstractCacheJtaSelfTest extends 
GridCacheAbstractSelfTest
      */
     @Test
     public void testJtaTwoCaches() throws Exception {
-        UserTransaction jtaTx = jotm.getUserTransaction();
+        UserTransaction jtaTx = userTx;
 
         IgniteEx ignite = grid(0);
 
@@ -205,7 +203,7 @@ public abstract class AbstractCacheJtaSelfTest extends 
GridCacheAbstractSelfTest
             @Override public Object call() throws Exception {
                 assertNull(grid(0).transactions().tx());
 
-                UserTransaction jtaTx = jotm.getUserTransaction();
+                UserTransaction jtaTx = userTx;
 
                 jtaTx.begin();
 
diff --git 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/GridPartitionedCacheJtaFactorySelfTest.java
 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/GridPartitionedCacheJtaFactorySelfTest.java
index ec9f8e8761d..df090fc0fd0 100644
--- 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/GridPartitionedCacheJtaFactorySelfTest.java
+++ 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/GridPartitionedCacheJtaFactorySelfTest.java
@@ -17,8 +17,8 @@
 
 package org.apache.ignite.internal.processors.cache.jta;
 
+import jakarta.transaction.TransactionManager;
 import javax.cache.configuration.Factory;
-import javax.transaction.TransactionManager;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.TransactionConfiguration;
 
@@ -42,7 +42,7 @@ public class GridPartitionedCacheJtaFactorySelfTest extends 
AbstractCacheJtaSelf
 
         /** {@inheritDoc} */
         @Override public TransactionManager create() {
-            return jotm.getTransactionManager();
+            return txMgr;
         }
     }
 }
diff --git 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/GridPartitionedCacheJtaLookupClassNameSelfTest.java
 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/GridPartitionedCacheJtaLookupClassNameSelfTest.java
index 573a5433189..09bc63a0d3b 100644
--- 
a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/GridPartitionedCacheJtaLookupClassNameSelfTest.java
+++ 
b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/GridPartitionedCacheJtaLookupClassNameSelfTest.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.internal.processors.cache.jta;
 
 import java.util.concurrent.Callable;
-import javax.transaction.TransactionManager;
+import jakarta.transaction.TransactionManager;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.cache.jta.CacheTmLookup;
@@ -66,7 +66,7 @@ public class GridPartitionedCacheJtaLookupClassNameSelfTest 
extends AbstractCach
     public static class TestTmLookup implements CacheTmLookup {
         /** {@inheritDoc} */
         @Override public TransactionManager getTm() {
-            return jotm.getTransactionManager();
+            return txMgr;
         }
     }
 
diff --git a/modules/rest-http/pom.xml b/modules/rest-http/pom.xml
index 24610347ac0..0125e003c89 100644
--- a/modules/rest-http/pom.xml
+++ b/modules/rest-http/pom.xml
@@ -82,9 +82,15 @@
             <version>${jetty.version}</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.eclipse.jetty.ee11</groupId>
+            <artifactId>jetty-ee11-servlet</artifactId>
+            <version>${jetty.version}</version>
+        </dependency>
+
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-servlet</artifactId>
+            <artifactId>jetty-session</artifactId>
             <version>${jetty.version}</version>
         </dependency>
 
@@ -95,8 +101,8 @@
         </dependency>
 
         <dependency>
-            <groupId>org.eclipse.jetty.toolchain</groupId>
-            <artifactId>jetty-jakarta-servlet-api</artifactId>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
             <version>${jetty-jakarta-servlet-api.version}</version>
         </dependency>
 
diff --git 
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
 
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
index dcb5d1d6e4b..c91ed3ec587 100644
--- 
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
+++ 
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
@@ -31,13 +31,14 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.InjectableValues;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import jakarta.servlet.ServletOutputStream;
 import jakarta.servlet.ServletRequest;
+import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.InjectableValues;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.IgniteSystemProperties;
@@ -72,8 +73,6 @@ import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.lang.IgniteClosure;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.plugin.security.SecurityCredentials;
-import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.handler.AbstractHandler;
 import org.jetbrains.annotations.Nullable;
 
 import static java.lang.String.format;
@@ -93,7 +92,7 @@ import static 
org.apache.ignite.internal.processors.rest.GridRestResponse.STATUS
 /**
  * Jetty REST handler. The following URL format is supported: {@code 
/ignite?cmd=cmdName&param1=abc&param2=123}
  */
-public class GridJettyRestHandler extends AbstractHandler {
+public class GridJettyRestHandler extends HttpServlet {
     /** */
     public static final String IGNITE_CMD_PATH = "/ignite";
 
@@ -270,16 +269,13 @@ public class GridJettyRestHandler extends AbstractHandler 
{
     }
 
     /** {@inheritDoc} */
-    @Override public void handle(String target, Request req, 
HttpServletRequest srvReq, HttpServletResponse res) {
-        if (log.isDebugEnabled())
-            log.debug("Handling request [target=" + target + ", req=" + req + 
", srvReq=" + srvReq + ']');
+    @Override protected void service(HttpServletRequest srvReq, 
HttpServletResponse res) {
+        String target = srvReq.getRequestURI();
 
-        if (!target.startsWith(IGNITE_CMD_PATH))
-            return;
+        if (log.isDebugEnabled())
+            log.debug("Handling request [target=" + target + ", srvReq=" + 
srvReq + ']');
 
         processRequest(target, srvReq, res);
-
-        req.setHandled(true);
     }
 
     /**
diff --git 
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestProtocol.java
 
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestProtocol.java
index 2631840cc0b..5bdad0701d9 100644
--- 
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestProtocol.java
+++ 
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestProtocol.java
@@ -44,20 +44,20 @@ import org.apache.ignite.internal.util.typedef.internal.A;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.spi.IgniteSpiException;
+import org.eclipse.jetty.ee11.servlet.FilterHolder;
+import org.eclipse.jetty.ee11.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee11.servlet.ServletHolder;
 import org.eclipse.jetty.server.AbstractNetworkConnector;
 import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.Handler;
 import org.eclipse.jetty.server.HttpConfiguration;
 import org.eclipse.jetty.server.HttpConnectionFactory;
 import org.eclipse.jetty.server.NetworkConnector;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.SslConnectionFactory;
-import org.eclipse.jetty.server.handler.HandlerList;
-import org.eclipse.jetty.servlet.FilterHolder;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.util.MultiException;
+import org.eclipse.jetty.server.handler.ContextHandlerCollection;
 import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
 import org.eclipse.jetty.util.thread.QueuedThreadPool;
 import org.eclipse.jetty.xml.XmlConfiguration;
 import org.jetbrains.annotations.Nullable;
@@ -238,17 +238,6 @@ public class GridJettyRestProtocol extends 
GridRestProtocolAdapter {
         catch (Exception e) {
             boolean failedToBind = e instanceof SocketException;
 
-            if (e instanceof MultiException) {
-                if (log.isDebugEnabled())
-                    log.debug("Caught multi exception: " + e);
-
-                failedToBind = true;
-
-                for (Object obj : ((MultiException)e).getThrowables())
-                    if (!(obj instanceof SocketException))
-                        failedToBind = false;
-            }
-
             if (e instanceof IOException && X.hasCause(e, 
SocketException.class))
                 failedToBind = true;
 
@@ -309,7 +298,7 @@ public class GridJettyRestProtocol extends 
GridRestProtocolAdapter {
             XmlConfiguration cfg;
 
             try {
-                Resource rsrc = Resource.newResource(cfgUrl);
+                Resource rsrc = 
ResourceFactory.root().newResource(cfgUrl.toURI());
 
                 cfg = new XmlConfiguration(rsrc);
             }
@@ -336,18 +325,27 @@ public class GridJettyRestProtocol extends 
GridRestProtocolAdapter {
 
         assert httpSrv != null;
 
-        Handler extsHnd = loadExtensions();
-        WelcomeHandler welcomeHnd = new WelcomeHandler(log);
+        ContextHandlerCollection hnds = new ContextHandlerCollection();
 
-        httpSrv.setHandler(new HandlerList(jettyHnd, extsHnd, welcomeHnd));
+        loadExtensions(hnds);
+
+        // Main context serves the REST command endpoint and the welcome page.
+        // Its root context path ("/") is matched last, after the more 
specific extension contexts.
+        ServletContextHandler mainCtx = new 
ServletContextHandler(ServletContextHandler.NO_SESSIONS);
+
+        mainCtx.setContextPath("/");
+        mainCtx.addServlet(new ServletHolder(jettyHnd), IGNITE_CMD_PATH + 
"/*");
+        mainCtx.addServlet(new ServletHolder(new WelcomeHandler(log)), "/");
+
+        hnds.addHandler(mainCtx);
+
+        httpSrv.setHandler(hnds);
 
         override(getJettyConnector());
     }
 
-    /** */
-    private Handler loadExtensions() throws IgniteCheckedException {
-        HandlerList extsHnd = new HandlerList();
-
+    /** Discovers REST extensions and registers a dedicated servlet context 
for each one. */
+    private void loadExtensions(ContextHandlerCollection hnds) throws 
IgniteCheckedException {
         CommonUtils.loadService(IgniteRestExtension.class).forEach(exts::add);
 
         Set<String> paths = new HashSet<>();
@@ -372,13 +370,11 @@ public class GridJettyRestProtocol extends 
GridRestProtocolAdapter {
             A.ensure(!extCtx.isContextPathDefault(), "The context path must be 
configured: " + ext.getClass().getName());
             A.ensure(paths.add(extCtx.getContextPath()), "Duplicate REST 
context path: " + extCtx.getContextPath());
 
-            extsHnd.addHandler(extCtx);
+            hnds.addHandler(extCtx);
 
             if (log.isInfoEnabled())
                 log.info("Configured REST extension: " + 
ext.getClass().getName());
         }
-
-        return extsHnd;
     }
 
     /**
diff --git 
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/IgniteRestExtension.java
 
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/IgniteRestExtension.java
index 275cac62c22..ee4b749a4f9 100644
--- 
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/IgniteRestExtension.java
+++ 
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/IgniteRestExtension.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.internal.processors.rest.protocols.http.jetty;
 
-import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee11.servlet.ServletContextHandler;
 
 /**
  * Extension point for registering custom HTTP REST endpoints in the Jetty 
REST protocol.
diff --git 
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/WelcomeHandler.java
 
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/WelcomeHandler.java
index 72b162b467a..ed137e252cb 100644
--- 
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/WelcomeHandler.java
+++ 
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/WelcomeHandler.java
@@ -19,16 +19,15 @@ package 
org.apache.ignite.internal.processors.rest.protocols.http.jetty;
 
 import java.io.IOException;
 import java.io.InputStream;
+import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import org.apache.ignite.IgniteLogger;
-import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.handler.AbstractHandler;
 
 /**
  * Handles welcome page.
  */
-public class WelcomeHandler extends AbstractHandler {
+public class WelcomeHandler extends HttpServlet {
     /** Default page. */
     private final byte[] dfltPage;
 
@@ -51,14 +50,17 @@ public class WelcomeHandler extends AbstractHandler {
     }
 
     /** {@inheritDoc} */
-    @Override public void handle(String target, Request req, 
HttpServletRequest srvReq, HttpServletResponse res) throws IOException {
+    @Override protected void service(HttpServletRequest req, 
HttpServletResponse res) throws IOException {
         if (dfltPage == null || favicon == null || logo == null) {
             res.setStatus(HttpServletResponse.SC_NOT_FOUND);
-            req.setHandled(true);
 
             return;
         }
 
+        String target = req.getRequestURI();
+
+        res.setStatus(HttpServletResponse.SC_OK);
+
         if (target.startsWith("/favicon.ico")) {
             res.setContentType("image/x-icon");
             res.getOutputStream().write(favicon);
@@ -73,9 +75,6 @@ public class WelcomeHandler extends AbstractHandler {
         }
 
         res.getOutputStream().flush();
-
-        res.setStatus(HttpServletResponse.SC_OK);
-        req.setHandled(true);
     }
 
     /** */
diff --git 
a/modules/rest-http/src/test/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/IgniteRestExtensionTest.java
 
b/modules/rest-http/src/test/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/IgniteRestExtensionTest.java
index c057aa56443..7ea3a27cda5 100644
--- 
a/modules/rest-http/src/test/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/IgniteRestExtensionTest.java
+++ 
b/modules/rest-http/src/test/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/IgniteRestExtensionTest.java
@@ -29,8 +29,8 @@ import org.apache.ignite.internal.util.typedef.T2;
 import org.apache.ignite.plugin.security.SecurityException;
 import org.apache.ignite.resources.IgniteInstanceResource;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.ee11.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee11.servlet.ServletHolder;
 import org.junit.Test;
 
 import static org.apache.ignite.cluster.ClusterState.INACTIVE;
diff --git 
a/modules/spring/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceSpringBeanInjector.java
 
b/modules/spring/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceSpringBeanInjector.java
index 876e79fc093..9980bf9598e 100644
--- 
a/modules/spring/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceSpringBeanInjector.java
+++ 
b/modules/spring/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceSpringBeanInjector.java
@@ -21,12 +21,12 @@ import java.io.Serializable;
 import java.lang.reflect.Modifier;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.managers.deployment.GridDeployment;
+import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.resources.SpringResource;
 import org.springframework.beans.factory.NoSuchBeanDefinitionException;
 import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
 import org.springframework.context.ApplicationContext;
-import org.springframework.util.StringUtils;
 
 /**
  * Spring bean injector implementation works with resources provided
@@ -111,7 +111,7 @@ public class GridResourceSpringBeanInjector implements 
GridResourceInjector {
         String beanName = annotation.resourceName();
         Class<?> beanCls = annotation.resourceClass();
 
-        boolean oneParamSet = !StringUtils.isEmpty(beanName) ^ beanCls != 
SpringResource.DEFAULT.class;
+        boolean oneParamSet = !F.isEmpty(beanName) ^ beanCls != 
SpringResource.DEFAULT.class;
 
         if (!oneParamSet) {
             throw new IgniteCheckedException("Either bean name or its class 
must be specified in @SpringResource, " +
@@ -119,7 +119,7 @@ public class GridResourceSpringBeanInjector implements 
GridResourceInjector {
         }
 
         try {
-            return !StringUtils.isEmpty(beanName) ? 
springCtx.getBean(beanName) : springCtx.getBean(beanCls);
+            return !F.isEmpty(beanName) ? springCtx.getBean(beanName) : 
springCtx.getBean(beanCls);
         }
         catch (NoUniqueBeanDefinitionException e) {
             throw e;
diff --git 
a/modules/spring/src/test/java/org/apache/ignite/internal/processors/resource/GridResourceProcessorSelfTest.java
 
b/modules/spring/src/test/java/org/apache/ignite/internal/processors/resource/GridResourceProcessorSelfTest.java
index 828bf600bb5..15e9e324063 100644
--- 
a/modules/spring/src/test/java/org/apache/ignite/internal/processors/resource/GridResourceProcessorSelfTest.java
+++ 
b/modules/spring/src/test/java/org/apache/ignite/internal/processors/resource/GridResourceProcessorSelfTest.java
@@ -406,7 +406,7 @@ public class GridResourceProcessorSelfTest extends 
GridCommonAbstractTest {
 
         try {
             // Should not be null if task has been completed successfully 
(meaning all resources have been injected).
-            Assert.notNull(g.compute().execute(TestTask.class, null));
+            Assert.notNull(g.compute().execute(TestTask.class, null), "must 
not be null");
         }
         finally {
             stopGrid();
diff --git 
a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSpringDocument.java
 
b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSpringDocument.java
index 0143537c522..0a315901351 100644
--- 
a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSpringDocument.java
+++ 
b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSpringDocument.java
@@ -24,7 +24,7 @@ import org.apache.ignite.compute.ComputeTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.spi.IgniteSpiException;
 import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.xml.XmlBeanFactory;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
 
 /**
  * Helper class which helps to read deployer and tasks information from
@@ -32,7 +32,7 @@ import org.springframework.beans.factory.xml.XmlBeanFactory;
  */
 class GridUriDeploymentSpringDocument {
     /** Initialized springs beans factory. */
-    private final XmlBeanFactory factory;
+    private final DefaultListableBeanFactory factory;
 
     /** List of tasks from package description. */
     private List<Class<? extends ComputeTask<?, ?>>> tasks;
@@ -42,7 +42,7 @@ class GridUriDeploymentSpringDocument {
      *
      * @param factory Configuration factory.
      */
-    GridUriDeploymentSpringDocument(XmlBeanFactory factory) {
+    GridUriDeploymentSpringDocument(DefaultListableBeanFactory factory) {
         assert factory != null;
 
         this.factory = factory;
diff --git 
a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSpringParser.java
 
b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSpringParser.java
index 842a8cf9be0..f62ce2a146a 100644
--- 
a/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSpringParser.java
+++ 
b/modules/urideploy/src/main/java/org/apache/ignite/spi/deployment/uri/GridUriDeploymentSpringParser.java
@@ -24,7 +24,8 @@ import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.spi.IgniteSpiException;
 import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.xml.XmlBeanFactory;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
 import org.springframework.core.io.ByteArrayResource;
 import org.springframework.core.io.InputStreamResource;
 
@@ -52,8 +53,8 @@ final class GridUriDeploymentSpringParser {
      * @param log Logger
      * @return Grid wrapper for the input stream.
      * @throws org.apache.ignite.spi.IgniteSpiException Thrown if incoming 
input stream could not be
-     *      read or parsed by {@code Spring} {@link XmlBeanFactory}.
-     * @see XmlBeanFactory
+     *      read or parsed by {@code Spring} {@link 
DefaultListableBeanFactory}.
+     * @see DefaultListableBeanFactory
      */
     static GridUriDeploymentSpringDocument parseTasksDocument(InputStream in, 
IgniteLogger log) throws
         IgniteSpiException {
@@ -65,7 +66,8 @@ final class GridUriDeploymentSpringParser {
         try {
             U.copy(in, out);
 
-            XmlBeanFactory factory = new XmlBeanFactory(new 
ByteArrayResource(out.toByteArray()));
+            DefaultListableBeanFactory factory = new 
DefaultListableBeanFactory();
+            new XmlBeanDefinitionReader(factory).loadBeanDefinitions(new 
ByteArrayResource(out.toByteArray()));
 
             return new GridUriDeploymentSpringDocument(factory);
         }
diff --git 
a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/http/GridHttpDeploymentSelfTest.java
 
b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/http/GridHttpDeploymentSelfTest.java
index b366d4fe2fa..b7d7fb4c7ab 100644
--- 
a/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/http/GridHttpDeploymentSelfTest.java
+++ 
b/modules/urideploy/src/test/java/org/apache/ignite/spi/deployment/uri/scanners/http/GridHttpDeploymentSelfTest.java
@@ -30,6 +30,7 @@ import 
org.apache.ignite.testframework.junits.spi.GridSpiTestConfig;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.handler.ResourceHandler;
+import org.eclipse.jetty.util.resource.ResourceFactory;
 import org.junit.Test;
 
 /**
@@ -86,7 +87,7 @@ public class GridHttpDeploymentSelfTest extends 
GridUriDeploymentAbstractSelfTes
 
         ResourceHandler hnd = new ResourceHandler();
 
-        hnd.setDirectoriesListed(true);
+        hnd.setDirAllowed(true);
 
         String garPathTmp = 
GridTestProperties.getProperty("urideployment.path.tmp");
 
@@ -100,7 +101,7 @@ public class GridHttpDeploymentSelfTest extends 
GridUriDeploymentAbstractSelfTes
 
         rsrcBase = resourseBaseDir.getPath();
 
-        hnd.setResourceBase(rsrcBase);
+        hnd.setBaseResource(ResourceFactory.root().newResource(rsrcBase));
 
         srv.setHandler(hnd);
 
diff --git a/modules/web/ignite-appserver-test/src/main/webapp/WEB-INF/web.xml 
b/modules/web/ignite-appserver-test/src/main/webapp/WEB-INF/web.xml
index 6fe7358724e..44b1dd498ed 100644
--- a/modules/web/ignite-appserver-test/src/main/webapp/WEB-INF/web.xml
+++ b/modules/web/ignite-appserver-test/src/main/webapp/WEB-INF/web.xml
@@ -15,11 +15,11 @@
   ~ limitations under the License.
   -->
 
-<!DOCTYPE web-app PUBLIC
- "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd"; >
-
-<web-app>
+<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
+                             
https://jakarta.ee/xml/ns/jakartaee/web-app_6_1.xsd";
+         version="6.1">
   <display-name>Archetype Created Web Application</display-name>
 
     <listener>
diff --git a/modules/web/ignite-websphere-test/pom.xml 
b/modules/web/ignite-websphere-test/pom.xml
index 84dad0d4b6c..64954203288 100644
--- a/modules/web/ignite-websphere-test/pom.xml
+++ b/modules/web/ignite-websphere-test/pom.xml
@@ -43,12 +43,18 @@
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>ignite-jta</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>jakarta.transaction</groupId>
+                    <artifactId>jakarta.transaction-api</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>
-            <groupId>com.ibm.websphere.appserver.api</groupId>
-            
<artifactId>com.ibm.websphere.appserver.api.transaction</artifactId>
-            <version>1.1.113</version>
+            <groupId>jakarta.transaction</groupId>
+            <artifactId>jakarta.transaction-api</artifactId>
+            <version>2.0.1</version>
         </dependency>
     </dependencies>
 
diff --git 
a/modules/web/ignite-websphere-test/src/main/java/org/apache/ignite/webtest/TestJtaTxServlet.java
 
b/modules/web/ignite-websphere-test/src/main/java/org/apache/ignite/webtest/TestJtaTxServlet.java
index e7f33aa3fc3..f859bfdab58 100644
--- 
a/modules/web/ignite-websphere-test/src/main/java/org/apache/ignite/webtest/TestJtaTxServlet.java
+++ 
b/modules/web/ignite-websphere-test/src/main/java/org/apache/ignite/webtest/TestJtaTxServlet.java
@@ -19,13 +19,13 @@ package org.apache.ignite.webtest;
 
 import java.io.IOException;
 import java.io.PrintWriter;
-import javax.transaction.RollbackException;
-import javax.transaction.TransactionManager;
-import com.ibm.tx.jta.TransactionManagerFactory;
 import jakarta.servlet.ServletException;
 import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.UserTransaction;
+import javax.naming.InitialContext;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.Ignition;
@@ -56,7 +56,7 @@ public class TestJtaTxServlet extends HttpServlet {
 
             final IgniteCache<Integer, String> cache = ignite.cache("tx");
 
-            TransactionManager tmMgr = 
TransactionManagerFactory.getTransactionManager();
+            UserTransaction tmMgr = (UserTransaction)new 
InitialContext().lookup("java:comp/UserTransaction");
 
             tmMgr.begin();
 
diff --git a/modules/web/ignite-websphere-test/src/main/webapp/WEB-INF/web.xml 
b/modules/web/ignite-websphere-test/src/main/webapp/WEB-INF/web.xml
index 94cb0cf6b6d..c4d24ea9bd3 100644
--- a/modules/web/ignite-websphere-test/src/main/webapp/WEB-INF/web.xml
+++ b/modules/web/ignite-websphere-test/src/main/webapp/WEB-INF/web.xml
@@ -15,11 +15,11 @@
   ~ limitations under the License.
   -->
 
-<!DOCTYPE web-app PUBLIC
- "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd"; >
-
-<web-app>
+<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
+                             
https://jakarta.ee/xml/ns/jakartaee/web-app_6_1.xsd";
+         version="6.1">
   <display-name>Archetype Created Web Application</display-name>
 
     <listener>
diff --git a/modules/web/pom.xml b/modules/web/pom.xml
index d75e7d45420..26c082bb43d 100644
--- a/modules/web/pom.xml
+++ b/modules/web/pom.xml
@@ -47,8 +47,8 @@
         </dependency>
 
         <dependency>
-            <groupId>org.eclipse.jetty.toolchain</groupId>
-            <artifactId>jetty-jakarta-servlet-api</artifactId>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
             <version>${jetty-jakarta-servlet-api.version}</version>
         </dependency>
 
@@ -65,15 +65,15 @@
         </dependency>
 
         <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-servlets</artifactId>
+            <groupId>org.eclipse.jetty.ee11</groupId>
+            <artifactId>jetty-ee11-servlets</artifactId>
             <version>${jetty.version}</version>
             <scope>test</scope>
         </dependency>
 
         <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-webapp</artifactId>
+            <groupId>org.eclipse.jetty.ee11</groupId>
+            <artifactId>jetty-ee11-webapp</artifactId>
             <version>${jetty.version}</version>
             <scope>test</scope>
         </dependency>
diff --git 
a/modules/web/src/main/java/org/apache/ignite/cache/websession/WebSessionFilter.java
 
b/modules/web/src/main/java/org/apache/ignite/cache/websession/WebSessionFilter.java
index f4ce1f55a2f..c297f5c5c53 100644
--- 
a/modules/web/src/main/java/org/apache/ignite/cache/websession/WebSessionFilter.java
+++ 
b/modules/web/src/main/java/org/apache/ignite/cache/websession/WebSessionFilter.java
@@ -21,10 +21,6 @@ import java.io.IOException;
 import java.util.Collection;
 import java.util.Map;
 import java.util.Objects;
-import javax.cache.CacheException;
-import javax.cache.expiry.Duration;
-import javax.cache.expiry.ExpiryPolicy;
-import javax.cache.expiry.ModifiedExpiryPolicy;
 import jakarta.servlet.Filter;
 import jakarta.servlet.FilterChain;
 import jakarta.servlet.FilterConfig;
@@ -35,6 +31,10 @@ import jakarta.servlet.ServletResponse;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletRequestWrapper;
 import jakarta.servlet.http.HttpSession;
+import javax.cache.CacheException;
+import javax.cache.expiry.Duration;
+import javax.cache.expiry.ExpiryPolicy;
+import javax.cache.expiry.ModifiedExpiryPolicy;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteClientDisconnectedException;
diff --git 
a/modules/web/src/test/java/org/apache/ignite/internal/websession/WebSessionSelfTest.java
 
b/modules/web/src/test/java/org/apache/ignite/internal/websession/WebSessionSelfTest.java
index 45b4ecf838f..c5c6e69902d 100644
--- 
a/modules/web/src/test/java/org/apache/ignite/internal/websession/WebSessionSelfTest.java
+++ 
b/modules/web/src/test/java/org/apache/ignite/internal/websession/WebSessionSelfTest.java
@@ -57,12 +57,13 @@ import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.eclipse.jetty.ee11.servlet.ServletHolder;
+import org.eclipse.jetty.ee11.webapp.WebAppContext;
 import org.eclipse.jetty.security.HashLoginService;
 import org.eclipse.jetty.security.SecurityHandler;
+import org.eclipse.jetty.security.authentication.BasicAuthenticator;
 import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.util.security.Constraint;
-import org.eclipse.jetty.webapp.WebAppContext;
+import org.eclipse.jetty.util.resource.ResourceFactory;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -998,10 +999,10 @@ public class WebSessionSelfTest extends 
GridCommonAbstractTest {
         HashLoginService hashLoginSrvc = new HashLoginService();
         hashLoginSrvc.setName("Test Realm");
         createRealm();
-        hashLoginSrvc.setConfig("/tmp/realm.properties");
+        
hashLoginSrvc.setConfig(ResourceFactory.root().newResource("/tmp/realm.properties"));
         SecurityHandler securityHnd = ctx.getSecurityHandler();
         // DefaultAuthenticatorFactory doesn't default to basic auth anymore.
-        securityHnd.setAuthMethod(Constraint.__BASIC_AUTH);
+        securityHnd.setAuthenticator(new BasicAuthenticator());
         securityHnd.setLoginService(hashLoginSrvc);
 
         srv.setHandler(ctx);
diff --git 
a/modules/web/src/test/java/org/apache/ignite/internal/websession/WebSessionServerStart.java
 
b/modules/web/src/test/java/org/apache/ignite/internal/websession/WebSessionServerStart.java
index b620085e09e..a2d0ca6cd39 100644
--- 
a/modules/web/src/test/java/org/apache/ignite/internal/websession/WebSessionServerStart.java
+++ 
b/modules/web/src/test/java/org/apache/ignite/internal/websession/WebSessionServerStart.java
@@ -25,9 +25,9 @@ import jakarta.servlet.http.HttpServletResponse;
 import jakarta.servlet.http.HttpSession;
 import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.internal.util.typedef.internal.U;
+import org.eclipse.jetty.ee11.servlet.ServletHolder;
+import org.eclipse.jetty.ee11.webapp.WebAppContext;
 import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.webapp.WebAppContext;
 
 /**
  * Server starter for web sessions caching test.
diff --git a/modules/web/src/test/webapp2/WEB-INF/web.xml 
b/modules/web/src/test/webapp2/WEB-INF/web.xml
index d51b87d27a6..bb1e5ee85d8 100644
--- a/modules/web/src/test/webapp2/WEB-INF/web.xml
+++ b/modules/web/src/test/webapp2/WEB-INF/web.xml
@@ -17,11 +17,11 @@
   ~ limitations under the License.
   -->
 
-<web-app xmlns="http://java.sun.com/xml/ns/javaee";
+<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee";
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
-                             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd";
-         version="3.0">
+         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
+                             
https://jakarta.ee/xml/ns/jakartaee/web-app_6_1.xsd";
+         version="6.1">
 
     <!-- Declare listener for web sessions caching. -->
     <listener>
diff --git a/parent/pom.xml b/parent/pom.xml
index feef581d691..6acf8838ec5 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -83,10 +83,10 @@
         <javax.cache.bundle.version>1.0.0_1</javax.cache.bundle.version>
         <javax.cache.tck.version>1.1.1</javax.cache.tck.version>
         <javax.cache.version>1.0.0</javax.cache.version>
-        <jboss.rmi.version>1.0.6.Final</jboss.rmi.version>
+        <jboss.logging.version>3.6.3.Final</jboss.logging.version>
         <jetbrains.annotations.version>26.1.0</jetbrains.annotations.version>
-        <jetty.version>11.0.25</jetty.version>
-        
<jetty-jakarta-servlet-api.version>5.0.2</jetty-jakarta-servlet-api.version>
+        <jetty.version>12.1.10</jetty.version>
+        
<jetty-jakarta-servlet-api.version>6.1.0</jetty-jakarta-servlet-api.version>
         <jmh.version>1.37</jmh.version>
         <jna.version>4.5.2</jna.version>
         <jnr.posix.version>3.1.15</jnr.posix.version>
@@ -107,7 +107,7 @@
         <postgres.connector.version>42.7.3</postgres.connector.version>
         <slf4j.version>2.0.17</slf4j.version>
         <snappy.version>1.1.10.8</snappy.version>
-        <spring.version>5.3.39</spring.version>
+        <spring.version>6.2.19</spring.version>
         <surefire.version>3.5.6</surefire.version>
         <tomcat.version>10.0.27</tomcat.version>
         <yardstick.version>0.8.3</yardstick.version>
@@ -117,6 +117,7 @@
         <commons.lang3.version>3.20.0</commons.lang3.version>
         <ignite-kafka-ext.version>1.0.0</ignite-kafka-ext.version>
         <xstream.version>1.4.17</xstream.version>
+        <narayana.version>7.3.4.Final</narayana.version>
 
         <!-- Maven plugins versions -->
         <maven.javadoc.plugin.version>3.12.0</maven.javadoc.plugin.version>
@@ -683,6 +684,18 @@
                         <requireMavenVersion>
                             <version>[3.9.6,)</version>
                         </requireMavenVersion>
+                        <bannedDependencies>
+                            <excludes>
+                                <exclude>javax.transaction:jta</exclude>
+                                
<exclude>javax.transaction:javax.transaction-api</exclude>
+                                
<exclude>jakarta.transaction:jakarta.transaction-api:(,2.0.1)</exclude>
+                            </excludes>
+                            <message>
+                                Use 
jakarta.transaction:jakarta.transaction-api:2.0.1+ only.
+                                Add &lt;exclusions&gt; to the transitive 
source if this fails.
+                            </message>
+                        </bannedDependencies>
+
                     </rules>
                 </configuration>
                 <executions>

Reply via email to