diff --git a/build.gradle b/build.gradle
index 255ecde3a6d..c6cdde1364e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -32,7 +32,7 @@ configure(allprojects) { project ->
mavenBom "io.projectreactor:reactor-bom:2020.0.11"
mavenBom "io.r2dbc:r2dbc-bom:Arabba-SR10"
mavenBom "io.rsocket:rsocket-bom:1.1.1"
- mavenBom "org.eclipse.jetty:jetty-bom:9.4.43.v20210629"
+ mavenBom "org.eclipse.jetty:jetty-bom:11.0.6"
mavenBom "org.jetbrains.kotlin:kotlin-bom:1.5.30"
mavenBom "org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.5.2"
mavenBom "org.jetbrains.kotlinx:kotlinx-serialization-bom:1.2.2"
@@ -83,14 +83,10 @@ configure(allprojects) { project ->
exclude group: "xpp3", name: "xpp3_min"
exclude group: "xmlpull", name: "xmlpull"
}
- dependency "org.apache.johnzon:johnzon-jsonb:1.2.10"
+ dependency "org.eclipse:yasson:2.0.2"
dependency("org.codehaus.jettison:jettison:1.3.8") {
exclude group: "stax", name: "stax-api"
}
- dependencySet(group: 'org.jibx', version: '1.3.3') {
- entry 'jibx-bind'
- entry 'jibx-run'
- }
dependency "org.ogce:xpp3:1.1.6"
dependency "org.yaml:snakeyaml:1.29"
@@ -108,7 +104,6 @@ configure(allprojects) { project ->
}
entry 'activemq-stomp'
}
- dependency "org.apache.bcel:bcel:6.0"
dependency "org.apache.commons:commons-pool2:2.9.0"
dependencySet(group: 'org.apache.derby', version: '10.14.2.0') {
entry 'derby'
@@ -119,35 +114,28 @@ configure(allprojects) { project ->
dependency "org.freemarker:freemarker:2.3.31"
dependency "org.hsqldb:hsqldb:2.5.2"
dependency "org.quartz-scheduler:quartz:2.3.2"
- dependency "org.codehaus.fabric3.api:commonj:1.1.0"
- dependency "net.sf.ehcache:ehcache:2.10.6"
dependency "org.ehcache:jcache:1.0.1"
dependency "org.ehcache:ehcache:3.4.0"
- dependency "org.hibernate:hibernate-core:5.5.7.Final"
- dependency "org.hibernate:hibernate-validator:6.2.0.Final"
+ dependency "org.hibernate:hibernate-core-jakarta:5.5.7.Final"
+ dependency "org.hibernate:hibernate-validator:7.0.1.Final"
dependency "org.webjars:webjars-locator-core:0.47"
dependency "org.webjars:underscorejs:1.8.3"
- dependencySet(group: 'org.apache.tomcat', version: '9.0.52') {
+ dependencySet(group: 'org.apache.tomcat', version: '10.0.11') {
entry 'tomcat-util'
entry('tomcat-websocket') {
exclude group: "org.apache.tomcat", name: "tomcat-websocket-api"
exclude group: "org.apache.tomcat", name: "tomcat-servlet-api"
}
}
- dependencySet(group: 'org.apache.tomcat.embed', version: '9.0.52') {
+ dependencySet(group: 'org.apache.tomcat.embed', version: '10.0.11') {
entry 'tomcat-embed-core'
entry 'tomcat-embed-websocket'
}
dependencySet(group: 'io.undertow', version: '2.2.10.Final') {
entry 'undertow-core'
- entry('undertow-websockets-jsr') {
- exclude group: "org.jboss.spec.javax.websocket", name: "jboss-websocket-api_1.1_spec"
- }
- entry('undertow-servlet') {
- exclude group: "org.jboss.spec.javax.servlet", name: "jboss-servlet-api_3.1_spec"
- exclude group: "org.jboss.spec.javax.annotation", name: "jboss-annotations-api_1.2_spec"
- }
+ entry('undertow-servlet-jakartaee9')
+ entry('undertow-websockets-jsr-jakartaee9')
}
dependencySet(group: 'com.squareup.okhttp3', version: '3.14.9') {
@@ -162,15 +150,12 @@ configure(allprojects) { project ->
}
dependency 'org.apache.httpcomponents.client5:httpclient5:5.1'
dependency 'org.apache.httpcomponents.core5:httpcore5-reactive:5.1.1'
- dependency "org.eclipse.jetty:jetty-reactive-httpclient:1.1.9"
+ dependency "org.eclipse.jetty:jetty-reactive-httpclient:3.0.4"
dependency "org.jruby:jruby:9.2.19.0"
dependency "org.python:jython-standalone:2.7.1"
dependency "org.mozilla:rhino:1.7.11"
- dependency "commons-fileupload:commons-fileupload:1.4"
- dependency "org.synchronoss.cloud:nio-multipart-parser:1.1.0"
-
dependency("org.dom4j:dom4j:2.1.3") {
exclude group: "jaxen", name: "jaxen"
exclude group: "net.java.dev.msv", name: "xsdlib"
@@ -218,69 +203,50 @@ configure(allprojects) { project ->
dependency "org.skyscreamer:jsonassert:1.5.0"
dependency "com.jayway.jsonpath:json-path:2.6.0"
dependency "org.bouncycastle:bcpkix-jdk15on:1.66"
-
- dependencySet(group: 'org.apache.tiles', version: '3.0.8') {
- entry 'tiles-api'
- entry('tiles-core', withoutJclOverSlf4j)
- entry('tiles-servlet', withoutJclOverSlf4j)
- entry('tiles-jsp', withoutJclOverSlf4j)
- entry('tiles-el', withoutJclOverSlf4j)
- entry('tiles-extras') {
- exclude group: "org.springframework", name: "spring-web"
- exclude group: "org.slf4j", name: "jcl-over-slf4j"
- }
- }
- dependency("org.apache.taglibs:taglibs-standard-jstlel:1.2.5") {
- exclude group: "org.apache.taglibs", name: "taglibs-standard-spec"
- }
-
- dependency "com.ibm.websphere:uow:6.0.2.17"
dependency "com.jamonapi:jamon:2.82"
- dependency "joda-time:joda-time:2.10.10"
- dependency "org.eclipse.persistence:org.eclipse.persistence.jpa:2.7.9"
- dependency "org.javamoney:moneta:1.3"
- dependency "com.sun.activation:javax.activation:1.2.0"
- dependency "com.sun.mail:javax.mail:1.6.2"
- dependencySet(group: 'com.sun.xml.bind', version: '2.3.0.1') {
+ dependency "javax.cache:cache-api:1.1.1"
+ dependency "javax.money:money-api:1.1"
+ dependency "org.javamoney:moneta:1.4.2"
+
+ dependency "jakarta.activation:jakarta.activation-api:2.0.1"
+ dependency "jakarta.annotation:jakarta.annotation-api:2.0.0"
+ dependency "jakarta.ejb:jakarta.ejb-api:4.0.0"
+ dependency "jakarta.el:jakarta.el-api:4.0.0"
+ dependency "jakarta.enterprise.concurrent:jakarta.enterprise.concurrent-api:2.0.0"
+ dependency "jakarta.faces:jakarta.faces-api:3.0.0"
+ dependency "jakarta.inject:jakarta.inject-api:2.0.0"
+ dependency "jakarta.inject:jakarta.inject-tck:2.0.1"
+ dependency "jakarta.interceptor:jakarta.interceptor-api:2.0.0"
+ dependency "jakarta.jms:jakarta.jms-api:3.0.0"
+ dependency "jakarta.json:jakarta.json-api:2.0.1"
+ dependency "jakarta.json.bind:jakarta.json.bind-api:2.0.0"
+ dependency "jakarta.mail:jakarta.mail-api:2.0.1"
+ dependency "jakarta.persistence:jakarta.persistence-api:3.0.0"
+ dependency "jakarta.resource:jakarta.resource-api:2.0.0"
+ dependency "jakarta.servlet:jakarta.servlet-api:5.0.0"
+ dependency "jakarta.servlet.jsp:jakarta.servlet.jsp-api:3.0.0"
+ dependency "jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:2.0.0"
+ dependency "jakarta.transaction:jakarta.transaction-api:2.0.0"
+ dependency "jakarta.validation:jakarta.validation-api:3.0.0"
+ dependency "jakarta.websocket:jakarta.websocket-api:2.0.0"
+ dependency "jakarta.xml.bind:jakarta.xml.bind-api:3.0.1"
+ dependency "jakarta.xml.ws:jakarta.xml.ws-api:3.0.1"
+
+ dependency "com.sun.activation:jakarta.activation:2.0.1"
+ dependency "com.sun.mail:jakarta.mail:2.0.1"
+ dependencySet(group: 'com.sun.xml.bind', version: '3.0.2') {
entry 'jaxb-core'
entry 'jaxb-impl'
entry 'jaxb-xjc'
}
- dependency "javax.activation:javax.activation-api:1.2.0"
- dependency "javax.annotation:javax.annotation-api:1.3.2"
- dependency "javax.cache:cache-api:1.1.0"
- dependency "javax.ejb:javax.ejb-api:3.2"
- dependency "javax.el:javax.el-api:3.0.1-b04"
- dependency "javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0"
- dependency "javax.faces:javax.faces-api:2.2"
- dependency "javax.inject:javax.inject:1"
- dependency "javax.inject:javax.inject-tck:1"
- dependency "javax.interceptor:javax.interceptor-api:1.2.2"
- dependency "javax.jms:javax.jms-api:2.0.1"
- dependency "javax.json:javax.json-api:1.1.4"
- dependency "javax.json.bind:javax.json.bind-api:1.0"
- dependency "javax.mail:javax.mail-api:1.6.2"
- dependency "javax.money:money-api:1.0.3"
- dependency "javax.resource:javax.resource-api:1.7.1"
- dependency "javax.servlet:javax.servlet-api:4.0.1"
- dependency "javax.servlet.jsp:javax.servlet.jsp-api:2.3.2-b02"
- dependency "javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1"
- dependency "javax.transaction:javax.transaction-api:1.3"
- dependency "javax.validation:validation-api:2.0.1.Final"
- dependency "javax.websocket:javax.websocket-api:1.1"
- dependency "javax.xml.bind:jaxb-api:2.3.1"
- dependency "javax.xml.ws:jaxws-api:2.3.1"
-
- dependency "org.eclipse.persistence:javax.persistence:2.2.0"
-
// Substitute for "javax.management:jmxremote_optional:1.0.1_04" which
// is not available on Maven Central
dependency "org.glassfish.external:opendmk_jmxremote_optional_jar:1.0-b01-ea"
- dependency "org.glassfish:javax.el:3.0.1-b08"
- dependency "org.glassfish.main:javax.jws:4.0-b33"
- dependency "org.glassfish.tyrus:tyrus-container-servlet:1.13.1"
+ dependency "org.glassfish:jakarta.el:4.0.2"
+ dependency "org.glassfish.tyrus:tyrus-container-servlet:2.0.1"
+ dependency "org.eclipse.persistence:org.eclipse.persistence.jpa:3.0.2"
}
generatedPomCustomization {
enabled = false
diff --git a/integration-tests/integration-tests.gradle b/integration-tests/integration-tests.gradle
index f7408e5c6ec..5d864c7ba05 100644
--- a/integration-tests/integration-tests.gradle
+++ b/integration-tests/integration-tests.gradle
@@ -15,12 +15,12 @@ dependencies {
testImplementation(project(":spring-test"))
testImplementation(project(":spring-tx"))
testImplementation(project(":spring-web"))
- testImplementation("javax.inject:javax.inject")
- testImplementation("javax.resource:javax.resource-api")
- testImplementation("javax.servlet:javax.servlet-api")
+ testImplementation("jakarta.inject:jakarta.inject-api")
+ testImplementation("jakarta.resource:jakarta.resource-api")
+ testImplementation("jakarta.servlet:jakarta.servlet-api")
testImplementation("org.aspectj:aspectjweaver")
testImplementation("org.hsqldb:hsqldb")
- testImplementation("org.hibernate:hibernate-core")
+ testImplementation("org.hibernate:hibernate-core-jakarta")
}
normalization {
diff --git a/integration-tests/src/test/java/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests.java b/integration-tests/src/test/java/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests.java
index cf067e01415..48142f4c937 100644
--- a/integration-tests/src/test/java/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests.java
+++ b/integration-tests/src/test/java/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests.java
@@ -20,8 +20,7 @@ import java.io.IOException;
import java.lang.reflect.Method;
import java.util.List;
-import javax.servlet.ServletException;
-
+import jakarta.servlet.ServletException;
import org.junit.jupiter.api.Test;
import org.springframework.aop.support.AopUtils;
diff --git a/integration-tests/src/test/java/org/springframework/context/annotation/jsr330/ClassPathBeanDefinitionScannerJsr330ScopeIntegrationTests.java b/integration-tests/src/test/java/org/springframework/context/annotation/jsr330/ClassPathBeanDefinitionScannerJsr330ScopeIntegrationTests.java
index bd86cc9041d..f2bcce460c4 100644
--- a/integration-tests/src/test/java/org/springframework/context/annotation/jsr330/ClassPathBeanDefinitionScannerJsr330ScopeIntegrationTests.java
+++ b/integration-tests/src/test/java/org/springframework/context/annotation/jsr330/ClassPathBeanDefinitionScannerJsr330ScopeIntegrationTests.java
@@ -21,9 +21,8 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
+import jakarta.inject.Named;
+import jakarta.inject.Singleton;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -314,16 +313,16 @@ class ClassPathBeanDefinitionScannerJsr330ScopeIntegrationTests {
if (definition instanceof AnnotatedBeanDefinition) {
AnnotatedBeanDefinition annDef = (AnnotatedBeanDefinition) definition;
for (String type : annDef.getMetadata().getAnnotationTypes()) {
- if (type.equals(javax.inject.Singleton.class.getName())) {
+ if (type.equals(jakarta.inject.Singleton.class.getName())) {
metadata.setScopeName(BeanDefinition.SCOPE_SINGLETON);
break;
}
- else if (annDef.getMetadata().getMetaAnnotationTypes(type).contains(javax.inject.Scope.class.getName())) {
+ else if (annDef.getMetadata().getMetaAnnotationTypes(type).contains(jakarta.inject.Scope.class.getName())) {
metadata.setScopeName(type.substring(type.length() - 13, type.length() - 6).toLowerCase());
metadata.setScopedProxyMode(scopedProxyMode);
break;
}
- else if (type.startsWith("javax.inject")) {
+ else if (type.startsWith("jakarta.inject")) {
metadata.setScopeName(BeanDefinition.SCOPE_PROTOTYPE);
}
}
@@ -391,14 +390,14 @@ class ClassPathBeanDefinitionScannerJsr330ScopeIntegrationTests {
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
- @javax.inject.Scope
+ @jakarta.inject.Scope
public @interface RequestScoped {
}
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
- @javax.inject.Scope
+ @jakarta.inject.Scope
public @interface SessionScoped {
}
diff --git a/integration-tests/src/test/java/org/springframework/core/env/EnvironmentSystemIntegrationTests.java b/integration-tests/src/test/java/org/springframework/core/env/EnvironmentSystemIntegrationTests.java
index 20e23ecca31..2bbc001f28e 100644
--- a/integration-tests/src/test/java/org/springframework/core/env/EnvironmentSystemIntegrationTests.java
+++ b/integration-tests/src/test/java/org/springframework/core/env/EnvironmentSystemIntegrationTests.java
@@ -41,9 +41,6 @@ import org.springframework.context.support.GenericApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.context.support.StaticApplicationContext;
import org.springframework.core.io.ClassPathResource;
-import org.springframework.jca.context.ResourceAdapterApplicationContext;
-import org.springframework.jca.support.SimpleBootstrapContext;
-import org.springframework.jca.work.SimpleTaskWorkManager;
import org.springframework.mock.env.MockEnvironment;
import org.springframework.mock.env.MockPropertySource;
import org.springframework.mock.web.MockServletConfig;
@@ -535,22 +532,6 @@ public class EnvironmentSystemIntegrationTests {
assertThat(environment.getProperty("pSysProps1")).isEqualTo("pSysProps1Value");
}
- @Test
- void resourceAdapterApplicationContext() {
- ResourceAdapterApplicationContext ctx = new ResourceAdapterApplicationContext(new SimpleBootstrapContext(new SimpleTaskWorkManager()));
-
- assertHasStandardEnvironment(ctx);
-
- registerEnvironmentBeanDefinition(ctx);
-
- ctx.setEnvironment(prodEnv);
- ctx.refresh();
-
- assertHasEnvironment(ctx, prodEnv);
- assertEnvironmentBeanRegistered(ctx);
- assertEnvironmentAwareInvoked(ctx, prodEnv);
- }
-
@Test
void abstractApplicationContextValidatesRequiredPropertiesOnRefresh() {
{
diff --git a/integration-tests/src/test/resources/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests-context.xml b/integration-tests/src/test/resources/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests-context.xml
index 90ea7dc1f66..92abf56386a 100644
--- a/integration-tests/src/test/resources/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests-context.xml
+++ b/integration-tests/src/test/resources/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests-context.xml
@@ -41,7 +41,7 @@
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
- PROPAGATION_REQUIRED,+javax.servlet.ServletException,-java.lang.Exception
+ PROPAGATION_REQUIRED,+jakarta.servlet.ServletException,-java.lang.Exception
diff --git a/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java b/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java
index 8d97ad311c7..a466164bcc7 100644
--- a/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java
+++ b/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2018 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -47,7 +47,7 @@ import org.springframework.util.ClassUtils;
* target method needs to implement the same signature, it will have to return
* a temporary Future handle that just passes the return value through
* (like Spring's {@link org.springframework.scheduling.annotation.AsyncResult}
- * or EJB 3.1's {@code javax.ejb.AsyncResult}).
+ * or EJB's {@code jakarta.ejb.AsyncResult}).
*
*
When the return type is {@code java.util.concurrent.Future}, any exception thrown
* during the execution can be accessed and managed by the caller. With {@code void}
diff --git a/spring-aspects/spring-aspects.gradle b/spring-aspects/spring-aspects.gradle
index 85c84bfd467..ec29638bf5e 100644
--- a/spring-aspects/spring-aspects.gradle
+++ b/spring-aspects/spring-aspects.gradle
@@ -29,14 +29,14 @@ dependencies {
optional(project(":spring-orm")) // for JPA exception translation support
optional(project(":spring-tx")) // for JPA, @Transactional support
optional("javax.cache:cache-api") // for JCache aspect
- optional("javax.transaction:javax.transaction-api") // for @javax.transaction.Transactional support
+ optional("jakarta.transaction:jakarta.transaction-api") // for @javax.transaction.Transactional support
testImplementation(project(":spring-core")) // for CodeStyleAspect
testImplementation(project(":spring-test"))
testImplementation(testFixtures(project(":spring-context")))
testImplementation(testFixtures(project(":spring-context-support")))
testImplementation(testFixtures(project(":spring-core")))
testImplementation(testFixtures(project(":spring-tx")))
- testImplementation("javax.mail:javax.mail-api")
+ testImplementation("jakarta.mail:jakarta.mail-api")
testCompileOnly("org.aspectj:aspectjrt")
}
diff --git a/spring-aspects/src/main/java/org/springframework/transaction/aspectj/AspectJJtaTransactionManagementConfiguration.java b/spring-aspects/src/main/java/org/springframework/transaction/aspectj/AspectJJtaTransactionManagementConfiguration.java
index ec733d3cf2b..0ed7ffb69eb 100644
--- a/spring-aspects/src/main/java/org/springframework/transaction/aspectj/AspectJJtaTransactionManagementConfiguration.java
+++ b/spring-aspects/src/main/java/org/springframework/transaction/aspectj/AspectJJtaTransactionManagementConfiguration.java
@@ -27,7 +27,7 @@ import org.springframework.transaction.config.TransactionManagementConfigUtils;
/**
* {@code @Configuration} class that registers the Spring infrastructure beans necessary
* to enable AspectJ-based annotation-driven transaction management for the JTA 1.2
- * {@link javax.transaction.Transactional} annotation in addition to Spring's own
+ * {@link jakarta.transaction.Transactional} annotation in addition to Spring's own
* {@link org.springframework.transaction.annotation.Transactional} annotation.
*
* @author Juergen Hoeller
diff --git a/spring-aspects/src/main/java/org/springframework/transaction/aspectj/JtaAnnotationTransactionAspect.aj b/spring-aspects/src/main/java/org/springframework/transaction/aspectj/JtaAnnotationTransactionAspect.aj
index 1644ce50651..8b374ea0d86 100644
--- a/spring-aspects/src/main/java/org/springframework/transaction/aspectj/JtaAnnotationTransactionAspect.aj
+++ b/spring-aspects/src/main/java/org/springframework/transaction/aspectj/JtaAnnotationTransactionAspect.aj
@@ -16,7 +16,7 @@
package org.springframework.transaction.aspectj;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
import org.aspectj.lang.annotation.RequiredTypes;
@@ -24,7 +24,7 @@ import org.springframework.transaction.annotation.AnnotationTransactionAttribute
/**
* Concrete AspectJ transaction aspect using the JTA 1.2
- * {@link javax.transaction.Transactional} annotation.
+ * {@link jakarta.transaction.Transactional} annotation.
*
*
When using this aspect, you must annotate the implementation class
* (and/or methods within that class), not the interface (if any) that
@@ -42,10 +42,10 @@ import org.springframework.transaction.annotation.AnnotationTransactionAttribute
*
* @author Stephane Nicoll
* @since 4.2
- * @see javax.transaction.Transactional
+ * @see jakarta.transaction.Transactional
* @see AnnotationTransactionAspect
*/
-@RequiredTypes("javax.transaction.Transactional")
+@RequiredTypes("jakarta.transaction.Transactional")
public aspect JtaAnnotationTransactionAspect extends AbstractTransactionAspect {
public JtaAnnotationTransactionAspect() {
diff --git a/spring-aspects/src/test/java/org/springframework/transaction/aspectj/JtaTransactionAspectsTests.java b/spring-aspects/src/test/java/org/springframework/transaction/aspectj/JtaTransactionAspectsTests.java
index e0bd918a72e..b6ef121a796 100644
--- a/spring-aspects/src/test/java/org/springframework/transaction/aspectj/JtaTransactionAspectsTests.java
+++ b/spring-aspects/src/test/java/org/springframework/transaction/aspectj/JtaTransactionAspectsTests.java
@@ -18,8 +18,7 @@ package org.springframework.transaction.aspectj;
import java.io.IOException;
-import javax.transaction.Transactional;
-
+import jakarta.transaction.Transactional;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-beans/spring-beans.gradle b/spring-beans/spring-beans.gradle
index bf5fad779f0..9c4d0af79e1 100644
--- a/spring-beans/spring-beans.gradle
+++ b/spring-beans/spring-beans.gradle
@@ -5,13 +5,13 @@ apply plugin: "kotlin"
dependencies {
api(project(":spring-core"))
- optional("javax.inject:javax.inject")
+ optional("jakarta.inject:jakarta.inject-api")
optional("org.yaml:snakeyaml")
optional("org.codehaus.groovy:groovy-xml")
optional("org.jetbrains.kotlin:kotlin-reflect")
optional("org.jetbrains.kotlin:kotlin-stdlib")
testImplementation(testFixtures(project(":spring-core")))
- testImplementation("javax.annotation:javax.annotation-api")
+ testImplementation("jakarta.annotation:jakarta.annotation-api")
testFixturesApi("org.junit.jupiter:junit-jupiter-api")
testFixturesImplementation("org.assertj:assertj-core")
}
diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/Autowired.java b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/Autowired.java
index 242fddbad8e..fad36ac5bf0 100644
--- a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/Autowired.java
+++ b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/Autowired.java
@@ -25,7 +25,7 @@ import java.lang.annotation.Target;
/**
* Marks a constructor, field, setter method, or config method as to be autowired by
* Spring's dependency injection facilities. This is an alternative to the JSR-330
- * {@link javax.inject.Inject} annotation, adding required-vs-optional semantics.
+ * {@link jakarta.inject.Inject} annotation, adding required-vs-optional semantics.
*
*
Autowired Constructors
* Only one constructor of any given bean class may declare this annotation with the
diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java
index 2065f6b6e9b..fdbf9353912 100644
--- a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java
+++ b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java
@@ -75,7 +75,7 @@ import org.springframework.util.StringUtils;
* by default, Spring's {@link Autowired @Autowired} and {@link Value @Value}
* annotations.
*
- *
Also supports JSR-330's {@link javax.inject.Inject @Inject} annotation,
+ *
Also supports JSR-330's {@link jakarta.inject.Inject @Inject} annotation,
* if available, as a direct alternative to Spring's own {@code @Autowired}.
*
*
Autowired Constructors
@@ -154,7 +154,7 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA
/**
* Create a new {@code AutowiredAnnotationBeanPostProcessor} for Spring's
* standard {@link Autowired @Autowired} and {@link Value @Value} annotations.
- * Also supports JSR-330's {@link javax.inject.Inject @Inject} annotation,
+ *
Also supports JSR-330's {@link jakarta.inject.Inject @Inject} annotation,
* if available.
*/
@SuppressWarnings("unchecked")
@@ -163,8 +163,8 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA
this.autowiredAnnotationTypes.add(Value.class);
try {
this.autowiredAnnotationTypes.add((Class extends Annotation>)
- ClassUtils.forName("javax.inject.Inject", AutowiredAnnotationBeanPostProcessor.class.getClassLoader()));
- logger.trace("JSR-330 'javax.inject.Inject' annotation found and supported for autowiring");
+ ClassUtils.forName("jakarta.inject.Inject", AutowiredAnnotationBeanPostProcessor.class.getClassLoader()));
+ logger.trace("JSR-330 'jakarta.inject.Inject' annotation found and supported for autowiring");
}
catch (ClassNotFoundException ex) {
// JSR-330 API not available - simply skip.
@@ -177,7 +177,7 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA
* setter methods, and arbitrary config methods.
*
The default autowired annotation types are the Spring-provided
* {@link Autowired @Autowired} and {@link Value @Value} annotations as well
- * as JSR-330's {@link javax.inject.Inject @Inject} annotation, if available.
+ * as JSR-330's {@link jakarta.inject.Inject @Inject} annotation, if available.
*
This setter property exists so that developers can provide their own
* (non-Spring-specific) annotation type to indicate that a member is supposed
* to be autowired.
@@ -193,7 +193,7 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA
* setter methods, and arbitrary config methods.
*
The default autowired annotation types are the Spring-provided
* {@link Autowired @Autowired} and {@link Value @Value} annotations as well
- * as JSR-330's {@link javax.inject.Inject @Inject} annotation, if available.
+ * as JSR-330's {@link jakarta.inject.Inject @Inject} annotation, if available.
*
This setter property exists so that developers can provide their own
* (non-Spring-specific) annotation types to indicate that a member is supposed
* to be autowired.
@@ -537,9 +537,7 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA
* @param ann the Autowired annotation
* @return whether the annotation indicates that a dependency is required
*/
- @SuppressWarnings({"deprecation", "cast"})
protected boolean determineRequiredStatus(MergedAnnotation> ann) {
- // The following (AnnotationAttributes) cast is required on JDK 9+.
return determineRequiredStatus((AnnotationAttributes)
ann.asMap(mergedAnnotation -> new AnnotationAttributes(mergedAnnotation.getType())));
}
diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/InitDestroyAnnotationBeanPostProcessor.java b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/InitDestroyAnnotationBeanPostProcessor.java
index f76a03b8dc9..6316848a5a7 100644
--- a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/InitDestroyAnnotationBeanPostProcessor.java
+++ b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/InitDestroyAnnotationBeanPostProcessor.java
@@ -66,9 +66,9 @@ import org.springframework.util.ReflectionUtils;
* init method and destroy method, respectively.
*
*
Spring's {@link org.springframework.context.annotation.CommonAnnotationBeanPostProcessor}
- * supports the JSR-250 {@link javax.annotation.PostConstruct} and {@link javax.annotation.PreDestroy}
+ * supports the JSR-250 {@link jakarta.annotation.PostConstruct} and {@link jakarta.annotation.PreDestroy}
* annotations out of the box, as init annotation and destroy annotation, respectively.
- * Furthermore, it also supports the {@link javax.annotation.Resource} annotation
+ * Furthermore, it also supports the {@link jakarta.annotation.Resource} annotation
* for annotation-driven injection of named beans.
*
* @author Juergen Hoeller
@@ -117,7 +117,7 @@ public class InitDestroyAnnotationBeanPostProcessor
* methods to call after configuration of a bean.
*
Any custom annotation can be used, since there are no required
* annotation attributes. There is no default, although a typical choice
- * is the JSR-250 {@link javax.annotation.PostConstruct} annotation.
+ * is the JSR-250 {@link jakarta.annotation.PostConstruct} annotation.
*/
public void setInitAnnotationType(Class extends Annotation> initAnnotationType) {
this.initAnnotationType = initAnnotationType;
@@ -128,7 +128,7 @@ public class InitDestroyAnnotationBeanPostProcessor
* methods to call when the context is shutting down.
*
Any custom annotation can be used, since there are no required
* annotation attributes. There is no default, although a typical choice
- * is the JSR-250 {@link javax.annotation.PreDestroy} annotation.
+ * is the JSR-250 {@link jakarta.annotation.PreDestroy} annotation.
*/
public void setDestroyAnnotationType(Class extends Annotation> destroyAnnotationType) {
this.destroyAnnotationType = destroyAnnotationType;
diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/QualifierAnnotationAutowireCandidateResolver.java b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/QualifierAnnotationAutowireCandidateResolver.java
index e4e104b4c8e..e38c6733864 100644
--- a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/QualifierAnnotationAutowireCandidateResolver.java
+++ b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/QualifierAnnotationAutowireCandidateResolver.java
@@ -46,7 +46,7 @@ import org.springframework.util.ObjectUtils;
* against {@link Qualifier qualifier annotations} on the field or parameter to be autowired.
* Also supports suggested expression values through a {@link Value value} annotation.
*
- *
Also supports JSR-330's {@link javax.inject.Qualifier} annotation, if available.
+ *
Also supports JSR-330's {@link jakarta.inject.Qualifier} annotation, if available.
*
* @author Mark Fisher
* @author Juergen Hoeller
@@ -66,13 +66,13 @@ public class QualifierAnnotationAutowireCandidateResolver extends GenericTypeAwa
/**
* Create a new QualifierAnnotationAutowireCandidateResolver
* for Spring's standard {@link Qualifier} annotation.
- *
Also supports JSR-330's {@link javax.inject.Qualifier} annotation, if available.
+ *
Also supports JSR-330's {@link jakarta.inject.Qualifier} annotation, if available.
*/
@SuppressWarnings("unchecked")
public QualifierAnnotationAutowireCandidateResolver() {
this.qualifierTypes.add(Qualifier.class);
try {
- this.qualifierTypes.add((Class extends Annotation>) ClassUtils.forName("javax.inject.Qualifier",
+ this.qualifierTypes.add((Class extends Annotation>) ClassUtils.forName("jakarta.inject.Qualifier",
QualifierAnnotationAutowireCandidateResolver.class.getClassLoader()));
}
catch (ClassNotFoundException ex) {
diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/DependencyDescriptor.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/DependencyDescriptor.java
index d5fd082162b..c16db6ca73a 100644
--- a/spring-beans/src/main/java/org/springframework/beans/factory/config/DependencyDescriptor.java
+++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/DependencyDescriptor.java
@@ -182,7 +182,7 @@ public class DependencyDescriptor extends InjectionPoint implements Serializable
/**
* Check whether the underlying field is annotated with any variant of a
- * {@code Nullable} annotation, e.g. {@code javax.annotation.Nullable} or
+ * {@code Nullable} annotation, e.g. {@code jakarta.annotation.Nullable} or
* {@code edu.umd.cs.findbugs.annotations.Nullable}.
*/
private boolean hasNullableAnnotation() {
diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/ProviderCreatingFactoryBean.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/ProviderCreatingFactoryBean.java
index 11933292d41..96d7bf3a603 100644
--- a/spring-beans/src/main/java/org/springframework/beans/factory/config/ProviderCreatingFactoryBean.java
+++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/ProviderCreatingFactoryBean.java
@@ -18,7 +18,7 @@ package org.springframework.beans.factory.config;
import java.io.Serializable;
-import javax.inject.Provider;
+import jakarta.inject.Provider;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
@@ -27,18 +27,18 @@ import org.springframework.util.Assert;
/**
* A {@link org.springframework.beans.factory.FactoryBean} implementation that
- * returns a value which is a JSR-330 {@link javax.inject.Provider} that in turn
+ * returns a value which is a JSR-330 {@link jakarta.inject.Provider} that in turn
* returns a bean sourced from a {@link org.springframework.beans.factory.BeanFactory}.
*
*
This is basically a JSR-330 compliant variant of Spring's good old
* {@link ObjectFactoryCreatingFactoryBean}. It can be used for traditional
* external dependency injection configuration that targets a property or
- * constructor argument of type {@code javax.inject.Provider}, as an
+ * constructor argument of type {@code jakarta.inject.Provider}, as an
* alternative to JSR-330's {@code @Inject} annotation-driven approach.
*
* @author Juergen Hoeller
* @since 3.0.2
- * @see javax.inject.Provider
+ * @see jakarta.inject.Provider
* @see ObjectFactoryCreatingFactoryBean
*/
public class ProviderCreatingFactoryBean extends AbstractFactoryBean> {
diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/Scope.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/Scope.java
index d2054ae059a..9606eb87264 100644
--- a/spring-beans/src/main/java/org/springframework/beans/factory/config/Scope.java
+++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/Scope.java
@@ -138,7 +138,7 @@ public interface Scope {
* The exact meaning of the conversation ID depends on the underlying
* storage mechanism. In the case of session-scoped objects, the
* conversation ID would typically be equal to (or derived from) the
- * {@link javax.servlet.http.HttpSession#getId() session ID}; in the
+ * {@link jakarta.servlet.http.HttpSession#getId() session ID}; in the
* case of a custom conversation that sits within the overall session,
* the specific ID for the current conversation would be appropriate.
*
Note: This is an optional operation. It is perfectly valid to
diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java
index a4f29b0ce87..7c16748e141 100644
--- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java
+++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java
@@ -41,7 +41,7 @@ import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;
-import javax.inject.Provider;
+import jakarta.inject.Provider;
import org.springframework.beans.BeansException;
import org.springframework.beans.TypeConverter;
@@ -125,7 +125,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
static {
try {
javaxInjectProviderClass =
- ClassUtils.forName("javax.inject.Provider", DefaultListableBeanFactory.class.getClassLoader());
+ ClassUtils.forName("jakarta.inject.Provider", DefaultListableBeanFactory.class.getClassLoader());
}
catch (ClassNotFoundException ex) {
// JSR-330 API not available - Provider interface simply not supported then.
@@ -1651,7 +1651,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
/**
* Determine the candidate with the highest priority in the given set of beans.
- *
Based on {@code @javax.annotation.Priority}. As defined by the related
+ *
Based on {@code @jakarta.annotation.Priority}. As defined by the related
* {@link org.springframework.core.Ordered} interface, the lowest value has
* the highest priority.
* @param candidates a Map of candidate names and candidate instances
@@ -1711,7 +1711,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
/**
* Return the priority assigned for the given bean instance by
- * the {@code javax.annotation.Priority} annotation.
+ * the {@code jakarta.annotation.Priority} annotation.
*
The default implementation delegates to the specified
* {@link #setDependencyComparator dependency comparator}, checking its
* {@link OrderComparator#getPriority method} if it is an extension of
@@ -2086,8 +2086,8 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
/**
- * Separate inner class for avoiding a hard dependency on the {@code javax.inject} API.
- * Actual {@code javax.inject.Provider} implementation is nested here in order to make it
+ * Separate inner class for avoiding a hard dependency on the {@code jakarta.inject} API.
+ * Actual {@code jakarta.inject.Provider} implementation is nested here in order to make it
* invisible for Graal's introspection of DefaultListableBeanFactory's nested classes.
*/
private class Jsr330Factory implements Serializable {
diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java
index 2cb8d8a9cd1..fce8a043b1b 100644
--- a/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java
+++ b/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java
@@ -36,8 +36,7 @@ import java.util.concurrent.Callable;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
-import javax.annotation.Priority;
-
+import jakarta.annotation.Priority;
import org.junit.jupiter.api.Test;
import org.springframework.beans.BeansException;
diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/annotation/InjectAnnotationBeanPostProcessorTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/annotation/InjectAnnotationBeanPostProcessorTests.java
index aa4c1cb20bf..d4b97bdb19c 100644
--- a/spring-beans/src/test/java/org/springframework/beans/factory/annotation/InjectAnnotationBeanPostProcessorTests.java
+++ b/spring-beans/src/test/java/org/springframework/beans/factory/annotation/InjectAnnotationBeanPostProcessorTests.java
@@ -23,10 +23,9 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Provider;
-
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import jakarta.inject.Provider;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -51,7 +50,7 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
/**
* Unit tests for {@link org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor}
- * processing the JSR-330 {@link javax.inject.Inject} annotation.
+ * processing the JSR-330 {@link jakarta.inject.Inject} annotation.
*
* @author Juergen Hoeller
* @since 3.0
diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/config/ObjectFactoryCreatingFactoryBeanTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/config/ObjectFactoryCreatingFactoryBeanTests.java
index 7357ba9069d..d55d48bb64a 100644
--- a/spring-beans/src/test/java/org/springframework/beans/factory/config/ObjectFactoryCreatingFactoryBeanTests.java
+++ b/spring-beans/src/test/java/org/springframework/beans/factory/config/ObjectFactoryCreatingFactoryBeanTests.java
@@ -18,8 +18,7 @@ package org.springframework.beans.factory.config;
import java.util.Date;
-import javax.inject.Provider;
-
+import jakarta.inject.Provider;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-context-indexer/spring-context-indexer.gradle b/spring-context-indexer/spring-context-indexer.gradle
index 2c1df2e91dc..40d69a22670 100644
--- a/spring-context-indexer/spring-context-indexer.gradle
+++ b/spring-context-indexer/spring-context-indexer.gradle
@@ -2,8 +2,8 @@ description = "Spring Context Indexer"
dependencies {
testImplementation(project(":spring-context"))
- testImplementation("javax.inject:javax.inject")
- testImplementation("javax.annotation:javax.annotation-api")
- testImplementation("javax.transaction:javax.transaction-api")
- testImplementation("org.eclipse.persistence:javax.persistence")
+ testImplementation("jakarta.inject:jakarta.inject-api")
+ testImplementation("jakarta.annotation:jakarta.annotation-api")
+ testImplementation("jakarta.persistence:jakarta.persistence-api")
+ testImplementation("jakarta.transaction:jakarta.transaction-api")
}
diff --git a/spring-context-indexer/src/main/java/org/springframework/context/index/processor/StandardStereotypesProvider.java b/spring-context-indexer/src/main/java/org/springframework/context/index/processor/StandardStereotypesProvider.java
index 3a7eb01dbbc..082c2584962 100644
--- a/spring-context-indexer/src/main/java/org/springframework/context/index/processor/StandardStereotypesProvider.java
+++ b/spring-context-indexer/src/main/java/org/springframework/context/index/processor/StandardStereotypesProvider.java
@@ -49,7 +49,7 @@ class StandardStereotypesProvider implements StereotypesProvider {
}
for (AnnotationMirror annotation : this.typeHelper.getAllAnnotationMirrors(element)) {
String type = this.typeHelper.getType(annotation);
- if (type.startsWith("javax.")) {
+ if (type.startsWith("jakarta.")) {
stereotypes.add(type);
}
}
diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/processor/CandidateComponentsIndexerTests.java b/spring-context-indexer/src/test/java/org/springframework/context/index/processor/CandidateComponentsIndexerTests.java
index aa1a21d7367..be3d30dc420 100644
--- a/spring-context-indexer/src/test/java/org/springframework/context/index/processor/CandidateComponentsIndexerTests.java
+++ b/spring-context-indexer/src/test/java/org/springframework/context/index/processor/CandidateComponentsIndexerTests.java
@@ -21,14 +21,13 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Path;
-import javax.annotation.ManagedBean;
-import javax.inject.Named;
-import javax.persistence.Converter;
-import javax.persistence.Embeddable;
-import javax.persistence.Entity;
-import javax.persistence.MappedSuperclass;
-import javax.transaction.Transactional;
-
+import jakarta.annotation.ManagedBean;
+import jakarta.inject.Named;
+import jakarta.persistence.Converter;
+import jakarta.persistence.Embeddable;
+import jakarta.persistence.Entity;
+import jakarta.persistence.MappedSuperclass;
+import jakarta.transaction.Transactional;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleManagedBean.java b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleManagedBean.java
index d3bf3dd8b78..fb34361664d 100644
--- a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleManagedBean.java
+++ b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleManagedBean.java
@@ -16,7 +16,7 @@
package org.springframework.context.index.sample.cdi;
-import javax.annotation.ManagedBean;
+import jakarta.annotation.ManagedBean;
/**
* Test candidate for a CDI {@link ManagedBean}.
diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleNamed.java b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleNamed.java
index 20ca0342e68..d975af6b1f3 100644
--- a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleNamed.java
+++ b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleNamed.java
@@ -16,7 +16,7 @@
package org.springframework.context.index.sample.cdi;
-import javax.inject.Named;
+import jakarta.inject.Named;
/**
* Test candidate for a CDI {@link Named} bean.
diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleTransactional.java b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleTransactional.java
index f104d5604e8..273aabcb14f 100644
--- a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleTransactional.java
+++ b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/cdi/SampleTransactional.java
@@ -16,7 +16,7 @@
package org.springframework.context.index.sample.cdi;
-import javax.transaction.Transactional;
+import jakarta.transaction.Transactional;
/**
* Test candidate for {@link Transactional}. This verifies that the annotation processor
diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleConverter.java b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleConverter.java
index 129f090f577..474dd5c1a29 100644
--- a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleConverter.java
+++ b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleConverter.java
@@ -16,7 +16,7 @@
package org.springframework.context.index.sample.jpa;
-import javax.persistence.Converter;
+import jakarta.persistence.Converter;
/**
* Test candidate for {@link Converter}.
diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEmbeddable.java b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEmbeddable.java
index 79269507395..15f3356ce70 100644
--- a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEmbeddable.java
+++ b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEmbeddable.java
@@ -16,7 +16,7 @@
package org.springframework.context.index.sample.jpa;
-import javax.persistence.Embeddable;
+import jakarta.persistence.Embeddable;
/**
* Test candidate for {@link Embeddable}.
diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEntity.java b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEntity.java
index 101c3891d90..ae6e87559d2 100644
--- a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEntity.java
+++ b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleEntity.java
@@ -16,7 +16,7 @@
package org.springframework.context.index.sample.jpa;
-import javax.persistence.Entity;
+import jakarta.persistence.Entity;
/**
* Test candidate for {@link Entity}.
diff --git a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleMappedSuperClass.java b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleMappedSuperClass.java
index 73737f4e98b..fbca3e43613 100644
--- a/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleMappedSuperClass.java
+++ b/spring-context-indexer/src/test/java/org/springframework/context/index/sample/jpa/SampleMappedSuperClass.java
@@ -16,7 +16,7 @@
package org.springframework.context.index.sample.jpa;
-import javax.persistence.MappedSuperclass;
+import jakarta.persistence.MappedSuperclass;
/**
* Test candidate for {@link MappedSuperclass}.
diff --git a/spring-context-support/spring-context-support.gradle b/spring-context-support/spring-context-support.gradle
index 843d1920ebe..160f8028985 100644
--- a/spring-context-support/spring-context-support.gradle
+++ b/spring-context-support/spring-context-support.gradle
@@ -6,13 +6,11 @@ dependencies {
api(project(":spring-core"))
optional(project(":spring-jdbc")) // for Quartz support
optional(project(":spring-tx")) // for Quartz support
- optional("javax.activation:javax.activation-api")
- optional("javax.mail:javax.mail-api")
+ optional("jakarta.activation:jakarta.activation-api")
+ optional("jakarta.mail:jakarta.mail-api")
optional("javax.cache:cache-api")
optional("com.github.ben-manes.caffeine:caffeine")
- optional("net.sf.ehcache:ehcache")
optional("org.quartz-scheduler:quartz")
- optional("org.codehaus.fabric3.api:commonj")
optional("org.freemarker:freemarker")
testImplementation(project(":spring-context"))
testImplementation(testFixtures(project(":spring-beans")))
@@ -20,12 +18,11 @@ dependencies {
testImplementation(testFixtures(project(":spring-core")))
testImplementation(testFixtures(project(":spring-tx")))
testImplementation("org.hsqldb:hsqldb")
- testImplementation("org.hibernate:hibernate-validator")
- testImplementation("javax.annotation:javax.annotation-api")
+ testImplementation("jakarta.annotation:jakarta.annotation-api")
testRuntimeOnly("org.ehcache:jcache")
testRuntimeOnly("org.ehcache:ehcache")
- testRuntimeOnly("org.glassfish:javax.el")
- testRuntimeOnly("com.sun.mail:javax.mail")
+ testRuntimeOnly("org.glassfish:jakarta.el")
+ testRuntimeOnly("com.sun.mail:jakarta.mail")
testFixturesApi("org.junit.jupiter:junit-jupiter-api")
testFixturesImplementation("org.assertj:assertj-core")
testFixturesImplementation("org.mockito:mockito-core")
diff --git a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCache.java b/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCache.java
deleted file mode 100644
index 4309fa73a2c..00000000000
--- a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCache.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.cache.ehcache;
-
-import java.util.concurrent.Callable;
-
-import net.sf.ehcache.Ehcache;
-import net.sf.ehcache.Element;
-import net.sf.ehcache.Status;
-
-import org.springframework.cache.Cache;
-import org.springframework.cache.support.SimpleValueWrapper;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-
-/**
- * {@link Cache} implementation on top of an {@link Ehcache} instance.
- *
- * @author Costin Leau
- * @author Juergen Hoeller
- * @author Stephane Nicoll
- * @since 3.1
- * @see EhCacheCacheManager
- */
-public class EhCacheCache implements Cache {
-
- private final Ehcache cache;
-
-
- /**
- * Create an {@link EhCacheCache} instance.
- * @param ehcache the backing Ehcache instance
- */
- public EhCacheCache(Ehcache ehcache) {
- Assert.notNull(ehcache, "Ehcache must not be null");
- Status status = ehcache.getStatus();
- if (!Status.STATUS_ALIVE.equals(status)) {
- throw new IllegalArgumentException(
- "An 'alive' Ehcache is required - current cache is " + status.toString());
- }
- this.cache = ehcache;
- }
-
-
- @Override
- public final String getName() {
- return this.cache.getName();
- }
-
- @Override
- public final Ehcache getNativeCache() {
- return this.cache;
- }
-
- @Override
- @Nullable
- public ValueWrapper get(Object key) {
- Element element = lookup(key);
- return toValueWrapper(element);
- }
-
- @SuppressWarnings("unchecked")
- @Override
- @Nullable
- public T get(Object key, @Nullable Class type) {
- Element element = this.cache.get(key);
- Object value = (element != null ? element.getObjectValue() : null);
- if (value != null && type != null && !type.isInstance(value)) {
- throw new IllegalStateException(
- "Cached value is not of required type [" + type.getName() + "]: " + value);
- }
- return (T) value;
- }
-
- @SuppressWarnings("unchecked")
- @Override
- @Nullable
- public T get(Object key, Callable valueLoader) {
- Element element = lookup(key);
- if (element != null) {
- return (T) element.getObjectValue();
- }
- else {
- this.cache.acquireWriteLockOnKey(key);
- try {
- element = lookup(key); // one more attempt with the write lock
- if (element != null) {
- return (T) element.getObjectValue();
- }
- else {
- return loadValue(key, valueLoader);
- }
- }
- finally {
- this.cache.releaseWriteLockOnKey(key);
- }
- }
- }
-
- private T loadValue(Object key, Callable valueLoader) {
- T value;
- try {
- value = valueLoader.call();
- }
- catch (Throwable ex) {
- throw new ValueRetrievalException(key, valueLoader, ex);
- }
- put(key, value);
- return value;
- }
-
- @Override
- public void put(Object key, @Nullable Object value) {
- this.cache.put(new Element(key, value));
- }
-
- @Override
- @Nullable
- public ValueWrapper putIfAbsent(Object key, @Nullable Object value) {
- Element existingElement = this.cache.putIfAbsent(new Element(key, value));
- return toValueWrapper(existingElement);
- }
-
- @Override
- public void evict(Object key) {
- this.cache.remove(key);
- }
-
- @Override
- public boolean evictIfPresent(Object key) {
- return this.cache.remove(key);
- }
-
- @Override
- public void clear() {
- this.cache.removeAll();
- }
-
- @Override
- public boolean invalidate() {
- boolean notEmpty = (this.cache.getSize() > 0);
- this.cache.removeAll();
- return notEmpty;
- }
-
-
- @Nullable
- private Element lookup(Object key) {
- return this.cache.get(key);
- }
-
- @Nullable
- private ValueWrapper toValueWrapper(@Nullable Element element) {
- return (element != null ? new SimpleValueWrapper(element.getObjectValue()) : null);
- }
-
-}
diff --git a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCacheManager.java b/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCacheManager.java
deleted file mode 100644
index f3e58a55b28..00000000000
--- a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCacheManager.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.cache.ehcache;
-
-import java.util.Collection;
-import java.util.LinkedHashSet;
-
-import net.sf.ehcache.Ehcache;
-import net.sf.ehcache.Status;
-
-import org.springframework.cache.Cache;
-import org.springframework.cache.transaction.AbstractTransactionSupportingCacheManager;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-
-/**
- * CacheManager backed by an EhCache {@link net.sf.ehcache.CacheManager}.
- *
- * @author Costin Leau
- * @author Juergen Hoeller
- * @author Stephane Nicoll
- * @since 3.1
- * @see EhCacheCache
- */
-public class EhCacheCacheManager extends AbstractTransactionSupportingCacheManager {
-
- @Nullable
- private net.sf.ehcache.CacheManager cacheManager;
-
-
- /**
- * Create a new EhCacheCacheManager, setting the target EhCache CacheManager
- * through the {@link #setCacheManager} bean property.
- */
- public EhCacheCacheManager() {
- }
-
- /**
- * Create a new EhCacheCacheManager for the given backing EhCache CacheManager.
- * @param cacheManager the backing EhCache {@link net.sf.ehcache.CacheManager}
- */
- public EhCacheCacheManager(net.sf.ehcache.CacheManager cacheManager) {
- this.cacheManager = cacheManager;
- }
-
-
- /**
- * Set the backing EhCache {@link net.sf.ehcache.CacheManager}.
- */
- public void setCacheManager(@Nullable net.sf.ehcache.CacheManager cacheManager) {
- this.cacheManager = cacheManager;
- }
-
- /**
- * Return the backing EhCache {@link net.sf.ehcache.CacheManager}.
- */
- @Nullable
- public net.sf.ehcache.CacheManager getCacheManager() {
- return this.cacheManager;
- }
-
- @Override
- public void afterPropertiesSet() {
- if (getCacheManager() == null) {
- setCacheManager(EhCacheManagerUtils.buildCacheManager());
- }
- super.afterPropertiesSet();
- }
-
-
- @Override
- protected Collection loadCaches() {
- net.sf.ehcache.CacheManager cacheManager = getCacheManager();
- Assert.state(cacheManager != null, "No CacheManager set");
-
- Status status = cacheManager.getStatus();
- if (!Status.STATUS_ALIVE.equals(status)) {
- throw new IllegalStateException(
- "An 'alive' EhCache CacheManager is required - current cache is " + status.toString());
- }
-
- String[] names = getCacheManager().getCacheNames();
- Collection caches = new LinkedHashSet<>(names.length);
- for (String name : names) {
- caches.add(new EhCacheCache(getCacheManager().getEhcache(name)));
- }
- return caches;
- }
-
- @Override
- protected Cache getMissingCache(String name) {
- net.sf.ehcache.CacheManager cacheManager = getCacheManager();
- Assert.state(cacheManager != null, "No CacheManager set");
-
- // Check the EhCache cache again (in case the cache was added at runtime)
- Ehcache ehcache = cacheManager.getEhcache(name);
- if (ehcache != null) {
- return new EhCacheCache(ehcache);
- }
- return null;
- }
-
-}
diff --git a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheFactoryBean.java b/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheFactoryBean.java
deleted file mode 100644
index 3d4f839a3b9..00000000000
--- a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheFactoryBean.java
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.cache.ehcache;
-
-import java.util.Set;
-
-import net.sf.ehcache.Cache;
-import net.sf.ehcache.CacheException;
-import net.sf.ehcache.CacheManager;
-import net.sf.ehcache.Ehcache;
-import net.sf.ehcache.bootstrap.BootstrapCacheLoader;
-import net.sf.ehcache.config.CacheConfiguration;
-import net.sf.ehcache.constructs.blocking.BlockingCache;
-import net.sf.ehcache.constructs.blocking.CacheEntryFactory;
-import net.sf.ehcache.constructs.blocking.SelfPopulatingCache;
-import net.sf.ehcache.constructs.blocking.UpdatingCacheEntryFactory;
-import net.sf.ehcache.constructs.blocking.UpdatingSelfPopulatingCache;
-import net.sf.ehcache.event.CacheEventListener;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.springframework.beans.factory.BeanNameAware;
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.lang.Nullable;
-
-/**
- * {@link FactoryBean} that creates a named EhCache {@link net.sf.ehcache.Cache} instance
- * (or a decorator that implements the {@link net.sf.ehcache.Ehcache} interface),
- * representing a cache region within an EhCache {@link net.sf.ehcache.CacheManager}.
- *
- * If the specified named cache is not configured in the cache configuration descriptor,
- * this FactoryBean will construct an instance of a Cache with the provided name and the
- * specified cache properties and add it to the CacheManager for later retrieval. If some
- * or all properties are not set at configuration time, this FactoryBean will use defaults.
- *
- *
Note: If the named Cache instance is found, the properties will be ignored and the
- * Cache instance will be retrieved from the CacheManager.
- *
- *
Note: As of Spring 5.0, Spring's EhCache support requires EhCache 2.10 or higher.
- *
- * @author Juergen Hoeller
- * @author Dmitriy Kopylenko
- * @since 1.1.1
- * @see #setCacheManager
- * @see EhCacheManagerFactoryBean
- * @see net.sf.ehcache.Cache
- */
-public class EhCacheFactoryBean extends CacheConfiguration implements FactoryBean, BeanNameAware, InitializingBean {
-
- protected final Log logger = LogFactory.getLog(getClass());
-
- @Nullable
- private CacheManager cacheManager;
-
- private boolean blocking = false;
-
- @Nullable
- private CacheEntryFactory cacheEntryFactory;
-
- @Nullable
- private BootstrapCacheLoader bootstrapCacheLoader;
-
- @Nullable
- private Set cacheEventListeners;
-
- private boolean disabled = false;
-
- @Nullable
- private String beanName;
-
- @Nullable
- private Ehcache cache;
-
-
- public EhCacheFactoryBean() {
- setMaxEntriesLocalHeap(10000);
- setMaxEntriesLocalDisk(10000000);
- setTimeToLiveSeconds(120);
- setTimeToIdleSeconds(120);
- }
-
-
- /**
- * Set a CacheManager from which to retrieve a named Cache instance.
- * By default, {@code CacheManager.getInstance()} will be called.
- * Note that in particular for persistent caches, it is advisable to
- * properly handle the shutdown of the CacheManager: Set up a separate
- * EhCacheManagerFactoryBean and pass a reference to this bean property.
- *
A separate EhCacheManagerFactoryBean is also necessary for loading
- * EhCache configuration from a non-default config location.
- * @see EhCacheManagerFactoryBean
- * @see net.sf.ehcache.CacheManager#getInstance
- */
- public void setCacheManager(CacheManager cacheManager) {
- this.cacheManager = cacheManager;
- }
-
- /**
- * Set a name for which to retrieve or create a cache instance.
- * Default is the bean name of this EhCacheFactoryBean.
- */
- public void setCacheName(String cacheName) {
- setName(cacheName);
- }
-
- /**
- * Set the time to live.
- * @see #setTimeToLiveSeconds(long)
- */
- public void setTimeToLive(int timeToLive) {
- setTimeToLiveSeconds(timeToLive);
- }
-
- /**
- * Set the time to idle.
- * @see #setTimeToIdleSeconds(long)
- */
- public void setTimeToIdle(int timeToIdle) {
- setTimeToIdleSeconds(timeToIdle);
- }
-
- /**
- * Set the disk spool buffer size (in MB).
- * @see #setDiskSpoolBufferSizeMB(int)
- */
- public void setDiskSpoolBufferSize(int diskSpoolBufferSize) {
- setDiskSpoolBufferSizeMB(diskSpoolBufferSize);
- }
-
- /**
- * Set whether to use a blocking cache that lets read attempts block
- * until the requested element is created.
- *
If you intend to build a self-populating blocking cache,
- * consider specifying a {@link #setCacheEntryFactory CacheEntryFactory}.
- * @see net.sf.ehcache.constructs.blocking.BlockingCache
- * @see #setCacheEntryFactory
- */
- public void setBlocking(boolean blocking) {
- this.blocking = blocking;
- }
-
- /**
- * Set an EhCache {@link net.sf.ehcache.constructs.blocking.CacheEntryFactory}
- * to use for a self-populating cache. If such a factory is specified,
- * the cache will be decorated with EhCache's
- * {@link net.sf.ehcache.constructs.blocking.SelfPopulatingCache}.
- *
The specified factory can be of type
- * {@link net.sf.ehcache.constructs.blocking.UpdatingCacheEntryFactory},
- * which will lead to the use of an
- * {@link net.sf.ehcache.constructs.blocking.UpdatingSelfPopulatingCache}.
- *
Note: Any such self-populating cache is automatically a blocking cache.
- * @see net.sf.ehcache.constructs.blocking.SelfPopulatingCache
- * @see net.sf.ehcache.constructs.blocking.UpdatingSelfPopulatingCache
- * @see net.sf.ehcache.constructs.blocking.UpdatingCacheEntryFactory
- */
- public void setCacheEntryFactory(CacheEntryFactory cacheEntryFactory) {
- this.cacheEntryFactory = cacheEntryFactory;
- }
-
- /**
- * Set an EhCache {@link net.sf.ehcache.bootstrap.BootstrapCacheLoader}
- * for this cache, if any.
- */
- public void setBootstrapCacheLoader(BootstrapCacheLoader bootstrapCacheLoader) {
- this.bootstrapCacheLoader = bootstrapCacheLoader;
- }
-
- /**
- * Specify EhCache {@link net.sf.ehcache.event.CacheEventListener cache event listeners}
- * to registered with this cache.
- */
- public void setCacheEventListeners(Set cacheEventListeners) {
- this.cacheEventListeners = cacheEventListeners;
- }
-
- /**
- * Set whether this cache should be marked as disabled.
- * @see net.sf.ehcache.Cache#setDisabled
- */
- public void setDisabled(boolean disabled) {
- this.disabled = disabled;
- }
-
- @Override
- public void setBeanName(String name) {
- this.beanName = name;
- }
-
-
- @Override
- public void afterPropertiesSet() throws CacheException {
- // If no cache name given, use bean name as cache name.
- String cacheName = getName();
- if (cacheName == null) {
- cacheName = this.beanName;
- if (cacheName != null) {
- setName(cacheName);
- }
- }
-
- // If no CacheManager given, fetch the default.
- if (this.cacheManager == null) {
- if (logger.isDebugEnabled()) {
- logger.debug("Using default EhCache CacheManager for cache region '" + cacheName + "'");
- }
- this.cacheManager = CacheManager.getInstance();
- }
-
- synchronized (this.cacheManager) {
- // Fetch cache region: If none with the given name exists, create one on the fly.
- Ehcache rawCache;
- boolean cacheExists = this.cacheManager.cacheExists(cacheName);
-
- if (cacheExists) {
- if (logger.isDebugEnabled()) {
- logger.debug("Using existing EhCache cache region '" + cacheName + "'");
- }
- rawCache = this.cacheManager.getEhcache(cacheName);
- }
- else {
- if (logger.isDebugEnabled()) {
- logger.debug("Creating new EhCache cache region '" + cacheName + "'");
- }
- rawCache = createCache();
- rawCache.setBootstrapCacheLoader(this.bootstrapCacheLoader);
- }
-
- if (this.cacheEventListeners != null) {
- for (CacheEventListener listener : this.cacheEventListeners) {
- rawCache.getCacheEventNotificationService().registerListener(listener);
- }
- }
-
- // Needs to happen after listener registration but before setStatisticsEnabled
- if (!cacheExists) {
- this.cacheManager.addCache(rawCache);
- }
-
- if (this.disabled) {
- rawCache.setDisabled(true);
- }
-
- Ehcache decoratedCache = decorateCache(rawCache);
- if (decoratedCache != rawCache) {
- this.cacheManager.replaceCacheWithDecoratedCache(rawCache, decoratedCache);
- }
- this.cache = decoratedCache;
- }
- }
-
- /**
- * Create a raw Cache object based on the configuration of this FactoryBean.
- */
- protected Cache createCache() {
- return new Cache(this);
- }
-
- /**
- * Decorate the given Cache, if necessary.
- * @param cache the raw Cache object, based on the configuration of this FactoryBean
- * @return the (potentially decorated) cache object to be registered with the CacheManager
- */
- protected Ehcache decorateCache(Ehcache cache) {
- if (this.cacheEntryFactory != null) {
- if (this.cacheEntryFactory instanceof UpdatingCacheEntryFactory) {
- return new UpdatingSelfPopulatingCache(cache, (UpdatingCacheEntryFactory) this.cacheEntryFactory);
- }
- else {
- return new SelfPopulatingCache(cache, this.cacheEntryFactory);
- }
- }
- if (this.blocking) {
- return new BlockingCache(cache);
- }
- return cache;
- }
-
-
- @Override
- @Nullable
- public Ehcache getObject() {
- return this.cache;
- }
-
- /**
- * Predict the particular {@code Ehcache} implementation that will be returned from
- * {@link #getObject()} based on logic in {@link #createCache()} and
- * {@link #decorateCache(Ehcache)} as orchestrated by {@link #afterPropertiesSet()}.
- */
- @Override
- public Class extends Ehcache> getObjectType() {
- if (this.cache != null) {
- return this.cache.getClass();
- }
- if (this.cacheEntryFactory != null) {
- if (this.cacheEntryFactory instanceof UpdatingCacheEntryFactory) {
- return UpdatingSelfPopulatingCache.class;
- }
- else {
- return SelfPopulatingCache.class;
- }
- }
- if (this.blocking) {
- return BlockingCache.class;
- }
- return Cache.class;
- }
-
- @Override
- public boolean isSingleton() {
- return true;
- }
-
-}
diff --git a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheManagerFactoryBean.java b/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheManagerFactoryBean.java
deleted file mode 100644
index 8a7137819d3..00000000000
--- a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheManagerFactoryBean.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright 2002-2021 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.cache.ehcache;
-
-import net.sf.ehcache.CacheException;
-import net.sf.ehcache.CacheManager;
-import net.sf.ehcache.config.Configuration;
-import net.sf.ehcache.config.ConfigurationFactory;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.core.io.Resource;
-import org.springframework.lang.Nullable;
-
-/**
- * {@link FactoryBean} that exposes an EhCache {@link net.sf.ehcache.CacheManager}
- * instance (independent or shared), configured from a specified config location.
- *
- * If no config location is specified, a CacheManager will be configured from
- * "ehcache.xml" in the root of the class path (that is, default EhCache initialization
- * - as defined in the EhCache docs - will apply).
- *
- *
Setting up a separate EhCacheManagerFactoryBean is also advisable when using
- * EhCacheFactoryBean, as it provides a (by default) independent CacheManager instance
- * and cares for proper shutdown of the CacheManager. EhCacheManagerFactoryBean is
- * also necessary for loading EhCache configuration from a non-default config location.
- *
- *
Note: As of Spring 5.0, Spring's EhCache support requires EhCache 2.10 or higher.
- *
- * @author Juergen Hoeller
- * @author Dmitriy Kopylenko
- * @since 1.1.1
- * @see #setConfigLocation
- * @see #setShared
- * @see EhCacheFactoryBean
- * @see net.sf.ehcache.CacheManager
- */
-public class EhCacheManagerFactoryBean implements FactoryBean, InitializingBean, DisposableBean {
-
- protected final Log logger = LogFactory.getLog(getClass());
-
- @Nullable
- private Resource configLocation;
-
- @Nullable
- private String cacheManagerName;
-
- private boolean acceptExisting = false;
-
- private boolean shared = false;
-
- @Nullable
- private CacheManager cacheManager;
-
- private boolean locallyManaged = true;
-
-
- /**
- * Set the location of the EhCache config file. A typical value is "/WEB-INF/ehcache.xml".
- * Default is "ehcache.xml" in the root of the class path, or if not found,
- * "ehcache-failsafe.xml" in the EhCache jar (default EhCache initialization).
- * @see net.sf.ehcache.CacheManager#create(java.io.InputStream)
- * @see net.sf.ehcache.CacheManager#CacheManager(java.io.InputStream)
- */
- public void setConfigLocation(Resource configLocation) {
- this.configLocation = configLocation;
- }
-
- /**
- * Set the name of the EhCache CacheManager (if a specific name is desired).
- * @see net.sf.ehcache.config.Configuration#setName(String)
- */
- public void setCacheManagerName(String cacheManagerName) {
- this.cacheManagerName = cacheManagerName;
- }
-
- /**
- * Set whether an existing EhCache CacheManager of the same name will be accepted
- * for this EhCacheManagerFactoryBean setup. Default is "false".
- *
Typically used in combination with {@link #setCacheManagerName "cacheManagerName"}
- * but will simply work with the default CacheManager name if none specified.
- * All references to the same CacheManager name (or the same default) in the
- * same ClassLoader space will share the specified CacheManager then.
- * @see #setCacheManagerName
- * #see #setShared
- * @see net.sf.ehcache.CacheManager#getCacheManager(String)
- * @see net.sf.ehcache.CacheManager#CacheManager()
- */
- public void setAcceptExisting(boolean acceptExisting) {
- this.acceptExisting = acceptExisting;
- }
-
- /**
- * Set whether the EhCache CacheManager should be shared (as a singleton at the
- * ClassLoader level) or independent (typically local within the application).
- * Default is "false", creating an independent local instance.
- *
NOTE: This feature allows for sharing this EhCacheManagerFactoryBean's
- * CacheManager with any code calling CacheManager.create() in the same
- * ClassLoader space, with no need to agree on a specific CacheManager name.
- * However, it only supports a single EhCacheManagerFactoryBean involved which will
- * control the lifecycle of the underlying CacheManager (in particular, its shutdown).
- *
This flag overrides {@link #setAcceptExisting "acceptExisting"} if both are set,
- * since it indicates the 'stronger' mode of sharing.
- * @see #setCacheManagerName
- * @see #setAcceptExisting
- * @see net.sf.ehcache.CacheManager#create()
- * @see net.sf.ehcache.CacheManager#CacheManager()
- */
- public void setShared(boolean shared) {
- this.shared = shared;
- }
-
-
- @Override
- public void afterPropertiesSet() throws CacheException {
- if (logger.isDebugEnabled()) {
- logger.debug("Initializing EhCache CacheManager" +
- (this.cacheManagerName != null ? " '" + this.cacheManagerName + "'" : ""));
- }
-
- Configuration configuration = (this.configLocation != null ?
- EhCacheManagerUtils.parseConfiguration(this.configLocation) : ConfigurationFactory.parseConfiguration());
- if (this.cacheManagerName != null) {
- configuration.setName(this.cacheManagerName);
- }
-
- if (this.shared) {
- // Old-school EhCache singleton sharing...
- // No way to find out whether we actually created a new CacheManager
- // or just received an existing singleton reference.
- this.cacheManager = CacheManager.create(configuration);
- }
- else if (this.acceptExisting) {
- // EhCache 2.5+: Reusing an existing CacheManager of the same name.
- // Basically the same code as in CacheManager.getInstance(String),
- // just storing whether we're dealing with an existing instance.
- synchronized (CacheManager.class) {
- this.cacheManager = CacheManager.getCacheManager(this.cacheManagerName);
- if (this.cacheManager == null) {
- this.cacheManager = new CacheManager(configuration);
- }
- else {
- this.locallyManaged = false;
- }
- }
- }
- else {
- // Throwing an exception if a CacheManager of the same name exists already...
- this.cacheManager = new CacheManager(configuration);
- }
- }
-
-
- @Override
- @Nullable
- public CacheManager getObject() {
- return this.cacheManager;
- }
-
- @Override
- public Class extends CacheManager> getObjectType() {
- return (this.cacheManager != null ? this.cacheManager.getClass() : CacheManager.class);
- }
-
- @Override
- public boolean isSingleton() {
- return true;
- }
-
-
- @Override
- public void destroy() {
- if (this.cacheManager != null && this.locallyManaged) {
- if (logger.isDebugEnabled()) {
- logger.debug("Shutting down EhCache CacheManager" +
- (this.cacheManagerName != null ? " '" + this.cacheManagerName + "'" : ""));
- }
- this.cacheManager.shutdown();
- }
- }
-
-}
diff --git a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheManagerUtils.java b/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheManagerUtils.java
deleted file mode 100644
index 7d6654a86ac..00000000000
--- a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheManagerUtils.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright 2002-2014 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.cache.ehcache;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import net.sf.ehcache.CacheException;
-import net.sf.ehcache.CacheManager;
-import net.sf.ehcache.config.Configuration;
-import net.sf.ehcache.config.ConfigurationFactory;
-
-import org.springframework.core.io.Resource;
-
-/**
- * Convenient builder methods for EhCache 2.5+ {@link CacheManager} setup,
- * providing easy programmatic bootstrapping from a Spring-provided resource.
- * This is primarily intended for use within {@code @Bean} methods in a
- * Spring configuration class.
- *
- *
These methods are a simple alternative to custom {@link CacheManager} setup
- * code. For any advanced purposes, consider using {@link #parseConfiguration},
- * customizing the configuration object, and then calling the
- * {@link CacheManager#CacheManager(Configuration)} constructor.
- *
- * @author Juergen Hoeller
- * @since 4.1
- */
-public abstract class EhCacheManagerUtils {
-
- /**
- * Build an EhCache {@link CacheManager} from the default configuration.
- *
The CacheManager will be configured from "ehcache.xml" in the root of the class path
- * (that is, default EhCache initialization - as defined in the EhCache docs - will apply).
- * If no configuration file can be found, a fail-safe fallback configuration will be used.
- * @return the new EhCache CacheManager
- * @throws CacheException in case of configuration parsing failure
- */
- public static CacheManager buildCacheManager() throws CacheException {
- return new CacheManager(ConfigurationFactory.parseConfiguration());
- }
-
- /**
- * Build an EhCache {@link CacheManager} from the default configuration.
- *
The CacheManager will be configured from "ehcache.xml" in the root of the class path
- * (that is, default EhCache initialization - as defined in the EhCache docs - will apply).
- * If no configuration file can be found, a fail-safe fallback configuration will be used.
- * @param name the desired name of the cache manager
- * @return the new EhCache CacheManager
- * @throws CacheException in case of configuration parsing failure
- */
- public static CacheManager buildCacheManager(String name) throws CacheException {
- Configuration configuration = ConfigurationFactory.parseConfiguration();
- configuration.setName(name);
- return new CacheManager(configuration);
- }
-
- /**
- * Build an EhCache {@link CacheManager} from the given configuration resource.
- * @param configLocation the location of the configuration file (as a Spring resource)
- * @return the new EhCache CacheManager
- * @throws CacheException in case of configuration parsing failure
- */
- public static CacheManager buildCacheManager(Resource configLocation) throws CacheException {
- return new CacheManager(parseConfiguration(configLocation));
- }
-
- /**
- * Build an EhCache {@link CacheManager} from the given configuration resource.
- * @param name the desired name of the cache manager
- * @param configLocation the location of the configuration file (as a Spring resource)
- * @return the new EhCache CacheManager
- * @throws CacheException in case of configuration parsing failure
- */
- public static CacheManager buildCacheManager(String name, Resource configLocation) throws CacheException {
- Configuration configuration = parseConfiguration(configLocation);
- configuration.setName(name);
- return new CacheManager(configuration);
- }
-
- /**
- * Parse EhCache configuration from the given resource, for further use with
- * custom {@link CacheManager} creation.
- * @param configLocation the location of the configuration file (as a Spring resource)
- * @return the EhCache Configuration handle
- * @throws CacheException in case of configuration parsing failure
- * @see CacheManager#CacheManager(Configuration)
- * @see CacheManager#create(Configuration)
- */
- public static Configuration parseConfiguration(Resource configLocation) throws CacheException {
- InputStream is = null;
- try {
- is = configLocation.getInputStream();
- return ConfigurationFactory.parseConfiguration(is);
- }
- catch (IOException ex) {
- throw new CacheException("Failed to parse EhCache configuration resource", ex);
- }
- finally {
- if (is != null) {
- try {
- is.close();
- }
- catch (IOException ex) {
- // ignore
- }
- }
- }
- }
-
-}
diff --git a/spring-context-support/src/main/java/org/springframework/cache/ehcache/package-info.java b/spring-context-support/src/main/java/org/springframework/cache/ehcache/package-info.java
deleted file mode 100644
index d786a802512..00000000000
--- a/spring-context-support/src/main/java/org/springframework/cache/ehcache/package-info.java
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Support classes for the open source cache
- * EhCache 2.x ,
- * allowing to set up an EhCache CacheManager and Caches
- * as beans in a Spring context.
- *
- *
Note: EhCache 3.x lives in a different package namespace
- * and is not covered by the traditional support classes here.
- * Instead, consider using it through JCache (JSR-107), with
- * Spring's support in {@code org.springframework.cache.jcache}.
- */
-@NonNullApi
-@NonNullFields
-package org.springframework.cache.ehcache;
-
-import org.springframework.lang.NonNullApi;
-import org.springframework.lang.NonNullFields;
diff --git a/spring-context-support/src/main/java/org/springframework/mail/MailSendException.java b/spring-context-support/src/main/java/org/springframework/mail/MailSendException.java
index 693082c840c..af7f0417f29 100644
--- a/spring-context-support/src/main/java/org/springframework/mail/MailSendException.java
+++ b/spring-context-support/src/main/java/org/springframework/mail/MailSendException.java
@@ -104,7 +104,7 @@ public class MailSendException extends MailException {
* be available after serialization as well.
* @return the Map of failed messages as keys and thrown exceptions as values
* @see SimpleMailMessage
- * @see javax.mail.internet.MimeMessage
+ * @see jakarta.mail.internet.MimeMessage
*/
public final Map getFailedMessages() {
return this.failedMessages;
diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/ConfigurableMimeFileTypeMap.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/ConfigurableMimeFileTypeMap.java
index ff6921b3718..7fe0a9aca89 100644
--- a/spring-context-support/src/main/java/org/springframework/mail/javamail/ConfigurableMimeFileTypeMap.java
+++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/ConfigurableMimeFileTypeMap.java
@@ -20,8 +20,8 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
-import javax.activation.FileTypeMap;
-import javax.activation.MimetypesFileTypeMap;
+import jakarta.activation.FileTypeMap;
+import jakarta.activation.MimetypesFileTypeMap;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.ClassPathResource;
@@ -58,7 +58,7 @@ import org.springframework.lang.Nullable;
* @since 1.2
* @see #setMappingLocation
* @see #setMappings
- * @see javax.activation.MimetypesFileTypeMap
+ * @see jakarta.activation.MimetypesFileTypeMap
*/
public class ConfigurableMimeFileTypeMap extends FileTypeMap implements InitializingBean {
@@ -140,8 +140,8 @@ public class ConfigurableMimeFileTypeMap extends FileTypeMap implements Initiali
* @param mappings an array of MIME type mapping lines (can be {@code null})
* @return the compiled FileTypeMap
* @throws IOException if resource access failed
- * @see javax.activation.MimetypesFileTypeMap#MimetypesFileTypeMap(java.io.InputStream)
- * @see javax.activation.MimetypesFileTypeMap#addMimeTypes(String)
+ * @see jakarta.activation.MimetypesFileTypeMap#MimetypesFileTypeMap(java.io.InputStream)
+ * @see jakarta.activation.MimetypesFileTypeMap#addMimeTypes(String)
*/
protected FileTypeMap createFileTypeMap(@Nullable Resource mappingLocation, @Nullable String[] mappings) throws IOException {
MimetypesFileTypeMap fileTypeMap = null;
diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/InternetAddressEditor.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/InternetAddressEditor.java
index 7738328c563..c4981581ebd 100644
--- a/spring-context-support/src/main/java/org/springframework/mail/javamail/InternetAddressEditor.java
+++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/InternetAddressEditor.java
@@ -18,8 +18,8 @@ package org.springframework.mail.javamail;
import java.beans.PropertyEditorSupport;
-import javax.mail.internet.AddressException;
-import javax.mail.internet.InternetAddress;
+import jakarta.mail.internet.AddressException;
+import jakarta.mail.internet.InternetAddress;
import org.springframework.util.StringUtils;
@@ -32,7 +32,7 @@ import org.springframework.util.StringUtils;
*
* @author Juergen Hoeller
* @since 1.2.3
- * @see javax.mail.internet.InternetAddress
+ * @see jakarta.mail.internet.InternetAddress
*/
public class InternetAddressEditor extends PropertyEditorSupport {
diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSender.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSender.java
index f810be606dd..61f4ecb01d7 100644
--- a/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSender.java
+++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSender.java
@@ -18,7 +18,7 @@ package org.springframework.mail.javamail;
import java.io.InputStream;
-import javax.mail.internet.MimeMessage;
+import jakarta.mail.internet.MimeMessage;
import org.springframework.mail.MailException;
import org.springframework.mail.MailSender;
@@ -40,7 +40,7 @@ import org.springframework.mail.MailSender;
* mechanism, possibly using a {@link MimeMessageHelper} for populating the message.
* See {@link MimeMessageHelper MimeMessageHelper's javadoc} for an example.
*
- * The entire JavaMail {@link javax.mail.Session} management is abstracted
+ *
The entire JavaMail {@link jakarta.mail.Session} management is abstracted
* by the JavaMailSender. Client code should not deal with a Session in any way,
* rather leave the entire JavaMail configuration and resource handling to the
* JavaMailSender implementation. This also increases testability.
@@ -54,8 +54,8 @@ import org.springframework.mail.MailSender;
*
* @author Juergen Hoeller
* @since 07.10.2003
- * @see javax.mail.internet.MimeMessage
- * @see javax.mail.Session
+ * @see jakarta.mail.internet.MimeMessage
+ * @see jakarta.mail.Session
* @see JavaMailSenderImpl
* @see MimeMessagePreparator
* @see MimeMessageHelper
diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java
index 9286d0ef665..e13f61dcf43 100644
--- a/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java
+++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java
@@ -24,14 +24,14 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
-import javax.activation.FileTypeMap;
-import javax.mail.Address;
-import javax.mail.AuthenticationFailedException;
-import javax.mail.MessagingException;
-import javax.mail.NoSuchProviderException;
-import javax.mail.Session;
-import javax.mail.Transport;
-import javax.mail.internet.MimeMessage;
+import jakarta.activation.FileTypeMap;
+import jakarta.mail.Address;
+import jakarta.mail.AuthenticationFailedException;
+import jakarta.mail.MessagingException;
+import jakarta.mail.NoSuchProviderException;
+import jakarta.mail.Session;
+import jakarta.mail.Transport;
+import jakarta.mail.internet.MimeMessage;
import org.springframework.lang.Nullable;
import org.springframework.mail.MailAuthenticationException;
@@ -49,7 +49,7 @@ import org.springframework.util.Assert;
* plain {@link org.springframework.mail.MailSender} implementation.
*
*
Allows for defining all settings locally as bean properties.
- * Alternatively, a pre-configured JavaMail {@link javax.mail.Session} can be
+ * Alternatively, a pre-configured JavaMail {@link jakarta.mail.Session} can be
* specified, possibly pulled from an application server's JNDI environment.
*
*
Non-default properties in this object will always override the settings
@@ -59,8 +59,8 @@ import org.springframework.util.Assert;
* @author Dmitriy Kopylenko
* @author Juergen Hoeller
* @since 10.09.2003
- * @see javax.mail.internet.MimeMessage
- * @see javax.mail.Session
+ * @see jakarta.mail.internet.MimeMessage
+ * @see jakarta.mail.Session
* @see #setSession
* @see #setJavaMailProperties
* @see #setHost
@@ -523,7 +523,7 @@ public class JavaMailSenderImpl implements JavaMailSender {
* Obtain a Transport object from the given JavaMail Session,
* using the configured protocol.
*
Can be overridden in subclasses, e.g. to return a mock Transport object.
- * @see javax.mail.Session#getTransport(String)
+ * @see jakarta.mail.Session#getTransport(String)
* @see #getSession()
* @see #getProtocol()
*/
diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMailMessage.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMailMessage.java
index e62690a6d76..9161ea69d7a 100644
--- a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMailMessage.java
+++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMailMessage.java
@@ -18,8 +18,8 @@ package org.springframework.mail.javamail;
import java.util.Date;
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
+import jakarta.mail.MessagingException;
+import jakarta.mail.internet.MimeMessage;
import org.springframework.mail.MailMessage;
import org.springframework.mail.MailParseException;
@@ -35,7 +35,7 @@ import org.springframework.mail.MailParseException;
* @author Juergen Hoeller
* @since 1.1.5
* @see MimeMessageHelper
- * @see javax.mail.internet.MimeMessage
+ * @see jakarta.mail.internet.MimeMessage
*/
public class MimeMailMessage implements MailMessage {
diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java
index f795390fa24..0bf5c1bba6c 100644
--- a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java
+++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java
@@ -23,20 +23,20 @@ import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.Date;
-import javax.activation.DataHandler;
-import javax.activation.DataSource;
-import javax.activation.FileDataSource;
-import javax.activation.FileTypeMap;
-import javax.mail.BodyPart;
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.internet.AddressException;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMultipart;
-import javax.mail.internet.MimePart;
-import javax.mail.internet.MimeUtility;
+import jakarta.activation.DataHandler;
+import jakarta.activation.DataSource;
+import jakarta.activation.FileDataSource;
+import jakarta.activation.FileTypeMap;
+import jakarta.mail.BodyPart;
+import jakarta.mail.Message;
+import jakarta.mail.MessagingException;
+import jakarta.mail.internet.AddressException;
+import jakarta.mail.internet.InternetAddress;
+import jakarta.mail.internet.MimeBodyPart;
+import jakarta.mail.internet.MimeMessage;
+import jakarta.mail.internet.MimeMultipart;
+import jakarta.mail.internet.MimePart;
+import jakarta.mail.internet.MimeUtility;
import org.springframework.core.io.InputStreamSource;
import org.springframework.core.io.Resource;
@@ -44,7 +44,7 @@ import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
- * Helper class for populating a {@link javax.mail.internet.MimeMessage}.
+ * Helper class for populating a {@link jakarta.mail.internet.MimeMessage}.
*
*
Mirrors the simple setters of {@link org.springframework.mail.SimpleMailMessage},
* directly applying the values to the underlying MimeMessage. Allows for defining
@@ -186,8 +186,8 @@ public class MimeMessageHelper {
* the passed-in MimeMessage object, if carried there. Else,
* JavaMail's default encoding will be used.
* @param mimeMessage the mime message to work on
- * @see #MimeMessageHelper(javax.mail.internet.MimeMessage, boolean)
- * @see #getDefaultEncoding(javax.mail.internet.MimeMessage)
+ * @see #MimeMessageHelper(jakarta.mail.internet.MimeMessage, boolean)
+ * @see #getDefaultEncoding(jakarta.mail.internet.MimeMessage)
* @see JavaMailSenderImpl#setDefaultEncoding
*/
public MimeMessageHelper(MimeMessage mimeMessage) {
@@ -200,7 +200,7 @@ public class MimeMessageHelper {
* i.e. no alternative texts and no inline elements or attachments).
* @param mimeMessage the mime message to work on
* @param encoding the character encoding to use for the message
- * @see #MimeMessageHelper(javax.mail.internet.MimeMessage, boolean)
+ * @see #MimeMessageHelper(jakarta.mail.internet.MimeMessage, boolean)
*/
public MimeMessageHelper(MimeMessage mimeMessage, @Nullable String encoding) {
this.mimeMessage = mimeMessage;
@@ -223,8 +223,8 @@ public class MimeMessageHelper {
* supports alternative texts, inline elements and attachments
* (corresponds to MULTIPART_MODE_MIXED_RELATED)
* @throws MessagingException if multipart creation failed
- * @see #MimeMessageHelper(javax.mail.internet.MimeMessage, int)
- * @see #getDefaultEncoding(javax.mail.internet.MimeMessage)
+ * @see #MimeMessageHelper(jakarta.mail.internet.MimeMessage, int)
+ * @see #getDefaultEncoding(jakarta.mail.internet.MimeMessage)
* @see JavaMailSenderImpl#setDefaultEncoding
*/
public MimeMessageHelper(MimeMessage mimeMessage, boolean multipart) throws MessagingException {
@@ -244,7 +244,7 @@ public class MimeMessageHelper {
* (corresponds to MULTIPART_MODE_MIXED_RELATED)
* @param encoding the character encoding to use for the message
* @throws MessagingException if multipart creation failed
- * @see #MimeMessageHelper(javax.mail.internet.MimeMessage, int, String)
+ * @see #MimeMessageHelper(jakarta.mail.internet.MimeMessage, int, String)
*/
public MimeMessageHelper(MimeMessage mimeMessage, boolean multipart, @Nullable String encoding)
throws MessagingException {
@@ -267,7 +267,7 @@ public class MimeMessageHelper {
* @see #MULTIPART_MODE_MIXED
* @see #MULTIPART_MODE_RELATED
* @see #MULTIPART_MODE_MIXED_RELATED
- * @see #getDefaultEncoding(javax.mail.internet.MimeMessage)
+ * @see #getDefaultEncoding(jakarta.mail.internet.MimeMessage)
* @see JavaMailSenderImpl#setDefaultEncoding
*/
public MimeMessageHelper(MimeMessage mimeMessage, int multipartMode) throws MessagingException {
@@ -388,7 +388,7 @@ public class MimeMessageHelper {
* @throws IllegalStateException if this helper is not in multipart mode
* @see #isMultipart
* @see #getMimeMessage
- * @see javax.mail.internet.MimeMultipart#addBodyPart
+ * @see jakarta.mail.internet.MimeMultipart#addBodyPart
*/
public final MimeMultipart getRootMimeMultipart() throws IllegalStateException {
if (this.rootMimeMultipart == null) {
@@ -407,7 +407,7 @@ public class MimeMessageHelper {
* @throws IllegalStateException if this helper is not in multipart mode
* @see #isMultipart
* @see #getRootMimeMultipart
- * @see javax.mail.internet.MimeMultipart#addBodyPart
+ * @see jakarta.mail.internet.MimeMultipart#addBodyPart
*/
public final MimeMultipart getMimeMultipart() throws IllegalStateException {
if (this.mimeMultipart == null) {
@@ -469,9 +469,9 @@ public class MimeMessageHelper {
* {@code FileTypeMap} instance else.
* @see #addInline
* @see #addAttachment
- * @see #getDefaultFileTypeMap(javax.mail.internet.MimeMessage)
+ * @see #getDefaultFileTypeMap(jakarta.mail.internet.MimeMessage)
* @see JavaMailSenderImpl#setDefaultFileTypeMap
- * @see javax.activation.FileTypeMap#getDefaultFileTypeMap
+ * @see jakarta.activation.FileTypeMap#getDefaultFileTypeMap
* @see ConfigurableMimeFileTypeMap
*/
public void setFileTypeMap(@Nullable FileTypeMap fileTypeMap) {
@@ -538,7 +538,7 @@ public class MimeMessageHelper {
* @param address the address to validate
* @throws AddressException if validation failed
* @see #isValidateAddresses()
- * @see javax.mail.internet.InternetAddress#validate()
+ * @see jakarta.mail.internet.InternetAddress#validate()
*/
protected void validateAddress(InternetAddress address) throws AddressException {
if (isValidateAddresses()) {
@@ -889,7 +889,7 @@ public class MimeMessageHelper {
/**
* Add an inline element to the MimeMessage, taking the content from a
- * {@code javax.activation.DataSource}.
+ * {@code jakarta.activation.DataSource}.
*
Note that the InputStream returned by the DataSource implementation
* needs to be a fresh one on each call , as JavaMail will invoke
* {@code getInputStream()} multiple times.
@@ -898,7 +898,7 @@ public class MimeMessageHelper {
* @param contentId the content ID to use. Will end up as "Content-ID" header
* in the body part, surrounded by angle brackets: e.g. "myId" -> "<myId>".
* Can be referenced in HTML source via src="cid:myId" expressions.
- * @param dataSource the {@code javax.activation.DataSource} to take
+ * @param dataSource the {@code jakarta.activation.DataSource} to take
* the content from, determining the InputStream and the content type
* @throws MessagingException in case of errors
* @see #addInline(String, java.io.File)
@@ -929,7 +929,7 @@ public class MimeMessageHelper {
* @throws MessagingException in case of errors
* @see #setText
* @see #addInline(String, org.springframework.core.io.Resource)
- * @see #addInline(String, javax.activation.DataSource)
+ * @see #addInline(String, jakarta.activation.DataSource)
*/
public void addInline(String contentId, File file) throws MessagingException {
Assert.notNull(file, "File must not be null");
@@ -956,7 +956,7 @@ public class MimeMessageHelper {
* @throws MessagingException in case of errors
* @see #setText
* @see #addInline(String, java.io.File)
- * @see #addInline(String, javax.activation.DataSource)
+ * @see #addInline(String, jakarta.activation.DataSource)
*/
public void addInline(String contentId, Resource resource) throws MessagingException {
Assert.notNull(resource, "Resource must not be null");
@@ -984,7 +984,7 @@ public class MimeMessageHelper {
* @see #setText
* @see #getFileTypeMap
* @see #addInline(String, org.springframework.core.io.Resource)
- * @see #addInline(String, javax.activation.DataSource)
+ * @see #addInline(String, jakarta.activation.DataSource)
*/
public void addInline(String contentId, InputStreamSource inputStreamSource, String contentType)
throws MessagingException {
@@ -1001,13 +1001,13 @@ public class MimeMessageHelper {
/**
* Add an attachment to the MimeMessage, taking the content from a
- * {@code javax.activation.DataSource}.
+ * {@code jakarta.activation.DataSource}.
*
Note that the InputStream returned by the DataSource implementation
* needs to be a fresh one on each call , as JavaMail will invoke
* {@code getInputStream()} multiple times.
* @param attachmentFilename the name of the attachment as it will
* appear in the mail (the content type will be determined by this)
- * @param dataSource the {@code javax.activation.DataSource} to take
+ * @param dataSource the {@code jakarta.activation.DataSource} to take
* the content from, determining the InputStream and the content type
* @throws MessagingException in case of errors
* @see #addAttachment(String, org.springframework.core.io.InputStreamSource)
@@ -1040,7 +1040,7 @@ public class MimeMessageHelper {
* @param file the File resource to take the content from
* @throws MessagingException in case of errors
* @see #addAttachment(String, org.springframework.core.io.InputStreamSource)
- * @see #addAttachment(String, javax.activation.DataSource)
+ * @see #addAttachment(String, jakarta.activation.DataSource)
*/
public void addAttachment(String attachmentFilename, File file) throws MessagingException {
Assert.notNull(file, "File must not be null");
@@ -1064,7 +1064,7 @@ public class MimeMessageHelper {
* (all of Spring's Resource implementations can be passed in here)
* @throws MessagingException in case of errors
* @see #addAttachment(String, java.io.File)
- * @see #addAttachment(String, javax.activation.DataSource)
+ * @see #addAttachment(String, jakarta.activation.DataSource)
* @see org.springframework.core.io.Resource
*/
public void addAttachment(String attachmentFilename, InputStreamSource inputStreamSource)
@@ -1087,7 +1087,7 @@ public class MimeMessageHelper {
* @param contentType the content type to use for the element
* @throws MessagingException in case of errors
* @see #addAttachment(String, java.io.File)
- * @see #addAttachment(String, javax.activation.DataSource)
+ * @see #addAttachment(String, jakarta.activation.DataSource)
* @see org.springframework.core.io.Resource
*/
public void addAttachment(
@@ -1121,7 +1121,7 @@ public class MimeMessageHelper {
}
@Override
public OutputStream getOutputStream() {
- throw new UnsupportedOperationException("Read-only javax.activation.DataSource");
+ throw new UnsupportedOperationException("Read-only jakarta.activation.DataSource");
}
@Override
public String getContentType() {
diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessagePreparator.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessagePreparator.java
index 5973d17104b..04e6cc34cd2 100644
--- a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessagePreparator.java
+++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessagePreparator.java
@@ -16,7 +16,7 @@
package org.springframework.mail.javamail;
-import javax.mail.internet.MimeMessage;
+import jakarta.mail.internet.MimeMessage;
/**
* Callback interface for the preparation of JavaMail MIME messages.
@@ -42,7 +42,7 @@ public interface MimeMessagePreparator {
/**
* Prepare the given new MimeMessage instance.
* @param mimeMessage the message to prepare
- * @throws javax.mail.MessagingException passing any exceptions thrown by MimeMessage
+ * @throws jakarta.mail.MessagingException passing any exceptions thrown by MimeMessage
* methods through for automatic conversion to the MailException hierarchy
* @throws java.io.IOException passing any exceptions thrown by MimeMessage methods
* through for automatic conversion to the MailException hierarchy
diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/SmartMimeMessage.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/SmartMimeMessage.java
index 2fa44c910af..e41d4a22655 100644
--- a/spring-context-support/src/main/java/org/springframework/mail/javamail/SmartMimeMessage.java
+++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/SmartMimeMessage.java
@@ -16,9 +16,9 @@
package org.springframework.mail.javamail;
-import javax.activation.FileTypeMap;
-import javax.mail.Session;
-import javax.mail.internet.MimeMessage;
+import jakarta.activation.FileTypeMap;
+import jakarta.mail.Session;
+import jakarta.mail.internet.MimeMessage;
import org.springframework.lang.Nullable;
@@ -34,8 +34,8 @@ import org.springframework.lang.Nullable;
* @author Juergen Hoeller
* @since 1.2
* @see JavaMailSenderImpl#createMimeMessage()
- * @see MimeMessageHelper#getDefaultEncoding(javax.mail.internet.MimeMessage)
- * @see MimeMessageHelper#getDefaultFileTypeMap(javax.mail.internet.MimeMessage)
+ * @see MimeMessageHelper#getDefaultEncoding(jakarta.mail.internet.MimeMessage)
+ * @see MimeMessageHelper#getDefaultFileTypeMap(jakarta.mail.internet.MimeMessage)
*/
class SmartMimeMessage extends MimeMessage {
diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/DelegatingTimerListener.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/DelegatingTimerListener.java
deleted file mode 100644
index d6d493e1cac..00000000000
--- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/DelegatingTimerListener.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2002-2012 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.scheduling.commonj;
-
-import commonj.timers.Timer;
-import commonj.timers.TimerListener;
-
-import org.springframework.util.Assert;
-
-/**
- * Simple TimerListener adapter that delegates to a given Runnable.
- *
- * @author Juergen Hoeller
- * @since 2.0
- * @see commonj.timers.TimerListener
- * @see java.lang.Runnable
- * @deprecated as of 5.1, in favor of EE 7's
- * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler}
- */
-@Deprecated
-public class DelegatingTimerListener implements TimerListener {
-
- private final Runnable runnable;
-
-
- /**
- * Create a new DelegatingTimerListener.
- * @param runnable the Runnable implementation to delegate to
- */
- public DelegatingTimerListener(Runnable runnable) {
- Assert.notNull(runnable, "Runnable is required");
- this.runnable = runnable;
- }
-
-
- /**
- * Delegates execution to the underlying Runnable.
- */
- @Override
- public void timerExpired(Timer timer) {
- this.runnable.run();
- }
-
-}
diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/DelegatingWork.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/DelegatingWork.java
deleted file mode 100644
index 9f7eb9110ae..00000000000
--- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/DelegatingWork.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2002-2012 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.scheduling.commonj;
-
-import commonj.work.Work;
-
-import org.springframework.scheduling.SchedulingAwareRunnable;
-import org.springframework.util.Assert;
-
-/**
- * Simple Work adapter that delegates to a given Runnable.
- *
- * @author Juergen Hoeller
- * @since 2.0
- * @deprecated as of 5.1, in favor of EE 7's
- * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskExecutor}
- */
-@Deprecated
-public class DelegatingWork implements Work {
-
- private final Runnable delegate;
-
-
- /**
- * Create a new DelegatingWork.
- * @param delegate the Runnable implementation to delegate to
- * (may be a SchedulingAwareRunnable for extended support)
- * @see org.springframework.scheduling.SchedulingAwareRunnable
- * @see #isDaemon()
- */
- public DelegatingWork(Runnable delegate) {
- Assert.notNull(delegate, "Delegate must not be null");
- this.delegate = delegate;
- }
-
- /**
- * Return the wrapped Runnable implementation.
- */
- public final Runnable getDelegate() {
- return this.delegate;
- }
-
-
- /**
- * Delegates execution to the underlying Runnable.
- */
- @Override
- public void run() {
- this.delegate.run();
- }
-
- /**
- * This implementation delegates to
- * {@link org.springframework.scheduling.SchedulingAwareRunnable#isLongLived()},
- * if available.
- */
- @Override
- public boolean isDaemon() {
- return (this.delegate instanceof SchedulingAwareRunnable &&
- ((SchedulingAwareRunnable) this.delegate).isLongLived());
- }
-
- /**
- * This implementation is empty, since we expect the Runnable
- * to terminate based on some specific shutdown signal.
- */
- @Override
- public void release() {
- }
-
-}
diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/ScheduledTimerListener.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/ScheduledTimerListener.java
deleted file mode 100644
index 52ca0afe126..00000000000
--- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/ScheduledTimerListener.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.scheduling.commonj;
-
-import commonj.timers.TimerListener;
-
-import org.springframework.lang.Nullable;
-
-/**
- * JavaBean that describes a scheduled TimerListener, consisting of
- * the TimerListener itself (or a Runnable to create a TimerListener for)
- * and a delay plus period. Period needs to be specified;
- * there is no point in a default for it.
- *
- *
The CommonJ TimerManager does not offer more sophisticated scheduling
- * options such as cron expressions. Consider using Quartz for such
- * advanced needs.
- *
- *
Note that the TimerManager uses a TimerListener instance that is
- * shared between repeated executions, in contrast to Quartz which
- * instantiates a new Job for each execution.
- *
- * @author Juergen Hoeller
- * @since 2.0
- * @deprecated as of 5.1, in favor of EE 7's
- * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler}
- */
-@Deprecated
-public class ScheduledTimerListener {
-
- @Nullable
- private TimerListener timerListener;
-
- private long delay = 0;
-
- private long period = -1;
-
- private boolean fixedRate = false;
-
-
- /**
- * Create a new ScheduledTimerListener,
- * to be populated via bean properties.
- * @see #setTimerListener
- * @see #setDelay
- * @see #setPeriod
- * @see #setFixedRate
- */
- public ScheduledTimerListener() {
- }
-
- /**
- * Create a new ScheduledTimerListener, with default
- * one-time execution without delay.
- * @param timerListener the TimerListener to schedule
- */
- public ScheduledTimerListener(TimerListener timerListener) {
- this.timerListener = timerListener;
- }
-
- /**
- * Create a new ScheduledTimerListener, with default
- * one-time execution with the given delay.
- * @param timerListener the TimerListener to schedule
- * @param delay the delay before starting the task for the first time (ms)
- */
- public ScheduledTimerListener(TimerListener timerListener, long delay) {
- this.timerListener = timerListener;
- this.delay = delay;
- }
-
- /**
- * Create a new ScheduledTimerListener.
- * @param timerListener the TimerListener to schedule
- * @param delay the delay before starting the task for the first time (ms)
- * @param period the period between repeated task executions (ms)
- * @param fixedRate whether to schedule as fixed-rate execution
- */
- public ScheduledTimerListener(TimerListener timerListener, long delay, long period, boolean fixedRate) {
- this.timerListener = timerListener;
- this.delay = delay;
- this.period = period;
- this.fixedRate = fixedRate;
- }
-
- /**
- * Create a new ScheduledTimerListener, with default
- * one-time execution without delay.
- * @param timerTask the Runnable to schedule as TimerListener
- */
- public ScheduledTimerListener(Runnable timerTask) {
- setRunnable(timerTask);
- }
-
- /**
- * Create a new ScheduledTimerListener, with default
- * one-time execution with the given delay.
- * @param timerTask the Runnable to schedule as TimerListener
- * @param delay the delay before starting the task for the first time (ms)
- */
- public ScheduledTimerListener(Runnable timerTask, long delay) {
- setRunnable(timerTask);
- this.delay = delay;
- }
-
- /**
- * Create a new ScheduledTimerListener.
- * @param timerTask the Runnable to schedule as TimerListener
- * @param delay the delay before starting the task for the first time (ms)
- * @param period the period between repeated task executions (ms)
- * @param fixedRate whether to schedule as fixed-rate execution
- */
- public ScheduledTimerListener(Runnable timerTask, long delay, long period, boolean fixedRate) {
- setRunnable(timerTask);
- this.delay = delay;
- this.period = period;
- this.fixedRate = fixedRate;
- }
-
-
- /**
- * Set the Runnable to schedule as TimerListener.
- * @see DelegatingTimerListener
- */
- public void setRunnable(Runnable timerTask) {
- this.timerListener = new DelegatingTimerListener(timerTask);
- }
-
- /**
- * Set the TimerListener to schedule.
- */
- public void setTimerListener(@Nullable TimerListener timerListener) {
- this.timerListener = timerListener;
- }
-
- /**
- * Return the TimerListener to schedule.
- */
- @Nullable
- public TimerListener getTimerListener() {
- return this.timerListener;
- }
-
- /**
- * Set the delay before starting the task for the first time,
- * in milliseconds. Default is 0, immediately starting the
- * task after successful scheduling.
- *
If the "firstTime" property is specified, this property will be ignored.
- * Specify one or the other, not both.
- */
- public void setDelay(long delay) {
- this.delay = delay;
- }
-
- /**
- * Return the delay before starting the job for the first time.
- */
- public long getDelay() {
- return this.delay;
- }
-
- /**
- * Set the period between repeated task executions, in milliseconds.
- *
Default is -1, leading to one-time execution. In case of zero or a
- * positive value, the task will be executed repeatedly, with the given
- * interval in-between executions.
- *
Note that the semantics of the period value vary between fixed-rate
- * and fixed-delay execution.
- *
Note: A period of 0 (for example as fixed delay) is
- * supported, because the CommonJ specification defines this as a legal value.
- * Hence a value of 0 will result in immediate re-execution after a job has
- * finished (not in one-time execution like with {@code java.util.Timer}).
- * @see #setFixedRate
- * @see #isOneTimeTask()
- * @see commonj.timers.TimerManager#schedule(commonj.timers.TimerListener, long, long)
- */
- public void setPeriod(long period) {
- this.period = period;
- }
-
- /**
- * Return the period between repeated task executions.
- */
- public long getPeriod() {
- return this.period;
- }
-
- /**
- * Is this task only ever going to execute once?
- * @return {@code true} if this task is only ever going to execute once
- * @see #getPeriod()
- */
- public boolean isOneTimeTask() {
- return (this.period < 0);
- }
-
- /**
- * Set whether to schedule as fixed-rate execution, rather than
- * fixed-delay execution. Default is "false", i.e. fixed delay.
- *
See TimerManager javadoc for details on those execution modes.
- * @see commonj.timers.TimerManager#schedule(commonj.timers.TimerListener, long, long)
- * @see commonj.timers.TimerManager#scheduleAtFixedRate(commonj.timers.TimerListener, long, long)
- */
- public void setFixedRate(boolean fixedRate) {
- this.fixedRate = fixedRate;
- }
-
- /**
- * Return whether to schedule as fixed-rate execution.
- */
- public boolean isFixedRate() {
- return this.fixedRate;
- }
-
-}
diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerAccessor.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerAccessor.java
deleted file mode 100644
index b5c0e15a068..00000000000
--- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerAccessor.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.scheduling.commonj;
-
-import javax.naming.NamingException;
-
-import commonj.timers.TimerManager;
-
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.context.Lifecycle;
-import org.springframework.jndi.JndiLocatorSupport;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-
-/**
- * Base class for classes that are accessing a CommonJ {@link commonj.timers.TimerManager}
- * Defines common configuration settings and common lifecycle handling.
- *
- * @author Juergen Hoeller
- * @since 3.0
- * @see commonj.timers.TimerManager
- * @deprecated as of 5.1, in favor of EE 7's
- * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler}
- */
-@Deprecated
-public abstract class TimerManagerAccessor extends JndiLocatorSupport
- implements InitializingBean, DisposableBean, Lifecycle {
-
- @Nullable
- private TimerManager timerManager;
-
- @Nullable
- private String timerManagerName;
-
- private boolean shared = false;
-
-
- /**
- * Specify the CommonJ TimerManager to delegate to.
- *
Note that the given TimerManager's lifecycle will be managed
- * by this FactoryBean.
- *
Alternatively (and typically), you can specify the JNDI name
- * of the target TimerManager.
- * @see #setTimerManagerName
- */
- public void setTimerManager(TimerManager timerManager) {
- this.timerManager = timerManager;
- }
-
- /**
- * Set the JNDI name of the CommonJ TimerManager.
- *
This can either be a fully qualified JNDI name, or the JNDI name relative
- * to the current environment naming context if "resourceRef" is set to "true".
- * @see #setTimerManager
- * @see #setResourceRef
- */
- public void setTimerManagerName(String timerManagerName) {
- this.timerManagerName = timerManagerName;
- }
-
- /**
- * Specify whether the TimerManager obtained by this FactoryBean
- * is a shared instance ("true") or an independent instance ("false").
- * The lifecycle of the former is supposed to be managed by the application
- * server, while the lifecycle of the latter is up to the application.
- *
Default is "false", i.e. managing an independent TimerManager instance.
- * This is what the CommonJ specification suggests that application servers
- * are supposed to offer via JNDI lookups, typically declared as a
- * {@code resource-ref} of type {@code commonj.timers.TimerManager}
- * in {@code web.xml}, with {@code res-sharing-scope} set to 'Unshareable'.
- *
Switch this flag to "true" if you are obtaining a shared TimerManager,
- * typically through specifying the JNDI location of a TimerManager that
- * has been explicitly declared as 'Shareable'. Note that WebLogic's
- * cluster-aware Job Scheduler is a shared TimerManager too.
- *
The sole difference between this FactoryBean being in shared or
- * non-shared mode is that it will only attempt to suspend / resume / stop
- * the underlying TimerManager in case of an independent (non-shared) instance.
- * This only affects the {@link org.springframework.context.Lifecycle} support
- * as well as application context shutdown.
- * @see #stop()
- * @see #start()
- * @see #destroy()
- * @see commonj.timers.TimerManager
- */
- public void setShared(boolean shared) {
- this.shared = shared;
- }
-
-
- @Override
- public void afterPropertiesSet() throws NamingException {
- if (this.timerManager == null) {
- if (this.timerManagerName == null) {
- throw new IllegalArgumentException("Either 'timerManager' or 'timerManagerName' must be specified");
- }
- this.timerManager = lookup(this.timerManagerName, TimerManager.class);
- }
- }
-
- /**
- * Return the configured TimerManager, if any.
- * @return the TimerManager, or {@code null} if not available
- */
- @Nullable
- protected final TimerManager getTimerManager() {
- return this.timerManager;
- }
-
- /**
- * Obtain the TimerManager for actual use.
- * @return the TimerManager (never {@code null})
- * @throws IllegalStateException in case of no TimerManager set
- * @since 5.0
- */
- protected TimerManager obtainTimerManager() {
- Assert.notNull(this.timerManager, "No TimerManager set");
- return this.timerManager;
- }
-
-
- //---------------------------------------------------------------------
- // Implementation of Lifecycle interface
- //---------------------------------------------------------------------
-
- /**
- * Resumes the underlying TimerManager (if not shared).
- * @see commonj.timers.TimerManager#resume()
- */
- @Override
- public void start() {
- if (!this.shared) {
- obtainTimerManager().resume();
- }
- }
-
- /**
- * Suspends the underlying TimerManager (if not shared).
- * @see commonj.timers.TimerManager#suspend()
- */
- @Override
- public void stop() {
- if (!this.shared) {
- obtainTimerManager().suspend();
- }
- }
-
- /**
- * Considers the underlying TimerManager as running if it is
- * neither suspending nor stopping.
- * @see commonj.timers.TimerManager#isSuspending()
- * @see commonj.timers.TimerManager#isStopping()
- */
- @Override
- public boolean isRunning() {
- TimerManager tm = obtainTimerManager();
- return (!tm.isSuspending() && !tm.isStopping());
- }
-
-
- //---------------------------------------------------------------------
- // Implementation of DisposableBean interface
- //---------------------------------------------------------------------
-
- /**
- * Stops the underlying TimerManager (if not shared).
- * @see commonj.timers.TimerManager#stop()
- */
- @Override
- public void destroy() {
- // Stop the entire TimerManager, if necessary.
- if (this.timerManager != null && !this.shared) {
- // May return early, but at least we already cancelled all known Timers.
- this.timerManager.stop();
- }
- }
-
-}
diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerFactoryBean.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerFactoryBean.java
deleted file mode 100644
index 1d6db6c820f..00000000000
--- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerFactoryBean.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.scheduling.commonj;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.naming.NamingException;
-
-import commonj.timers.Timer;
-import commonj.timers.TimerManager;
-
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.context.Lifecycle;
-import org.springframework.lang.Nullable;
-
-/**
- * {@link org.springframework.beans.factory.FactoryBean} that retrieves a
- * CommonJ {@link commonj.timers.TimerManager} and exposes it for bean references.
- *
- *
This is the central convenience class for setting up a
- * CommonJ TimerManager in a Spring context.
- *
- *
Allows for registration of ScheduledTimerListeners. This is the main
- * purpose of this class; the TimerManager itself could also be fetched
- * from JNDI via {@link org.springframework.jndi.JndiObjectFactoryBean}.
- * In scenarios that just require static registration of tasks at startup,
- * there is no need to access the TimerManager itself in application code.
- *
- *
Note that the TimerManager uses a TimerListener instance that is
- * shared between repeated executions, in contrast to Quartz which
- * instantiates a new Job for each execution.
- *
- * @author Juergen Hoeller
- * @since 2.0
- * @see ScheduledTimerListener
- * @see commonj.timers.TimerManager
- * @see commonj.timers.TimerListener
- * @deprecated as of 5.1, in favor of EE 7's
- * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler}
- */
-@Deprecated
-public class TimerManagerFactoryBean extends TimerManagerAccessor
- implements FactoryBean, InitializingBean, DisposableBean, Lifecycle {
-
- @Nullable
- private ScheduledTimerListener[] scheduledTimerListeners;
-
- @Nullable
- private List timers;
-
-
- /**
- * Register a list of ScheduledTimerListener objects with the TimerManager
- * that this FactoryBean creates. Depending on each ScheduledTimerListener's settings,
- * it will be registered via one of TimerManager's schedule methods.
- * @see commonj.timers.TimerManager#schedule(commonj.timers.TimerListener, long)
- * @see commonj.timers.TimerManager#schedule(commonj.timers.TimerListener, long, long)
- * @see commonj.timers.TimerManager#scheduleAtFixedRate(commonj.timers.TimerListener, long, long)
- */
- public void setScheduledTimerListeners(ScheduledTimerListener[] scheduledTimerListeners) {
- this.scheduledTimerListeners = scheduledTimerListeners;
- }
-
-
- //---------------------------------------------------------------------
- // Implementation of InitializingBean interface
- //---------------------------------------------------------------------
-
- @Override
- public void afterPropertiesSet() throws NamingException {
- super.afterPropertiesSet();
-
- if (this.scheduledTimerListeners != null) {
- this.timers = new ArrayList<>(this.scheduledTimerListeners.length);
- TimerManager timerManager = obtainTimerManager();
- for (ScheduledTimerListener scheduledTask : this.scheduledTimerListeners) {
- Timer timer;
- if (scheduledTask.isOneTimeTask()) {
- timer = timerManager.schedule(scheduledTask.getTimerListener(), scheduledTask.getDelay());
- }
- else {
- if (scheduledTask.isFixedRate()) {
- timer = timerManager.scheduleAtFixedRate(
- scheduledTask.getTimerListener(), scheduledTask.getDelay(), scheduledTask.getPeriod());
- }
- else {
- timer = timerManager.schedule(
- scheduledTask.getTimerListener(), scheduledTask.getDelay(), scheduledTask.getPeriod());
- }
- }
- this.timers.add(timer);
- }
- }
- }
-
-
- //---------------------------------------------------------------------
- // Implementation of FactoryBean interface
- //---------------------------------------------------------------------
-
- @Override
- @Nullable
- public TimerManager getObject() {
- return getTimerManager();
- }
-
- @Override
- public Class extends TimerManager> getObjectType() {
- TimerManager timerManager = getTimerManager();
- return (timerManager != null ? timerManager.getClass() : TimerManager.class);
- }
-
- @Override
- public boolean isSingleton() {
- return true;
- }
-
-
- //---------------------------------------------------------------------
- // Implementation of DisposableBean interface
- //---------------------------------------------------------------------
-
- /**
- * Cancels all statically registered Timers on shutdown,
- * and stops the underlying TimerManager (if not shared).
- * @see commonj.timers.Timer#cancel()
- * @see commonj.timers.TimerManager#stop()
- */
- @Override
- public void destroy() {
- // Cancel all registered timers.
- if (this.timers != null) {
- for (Timer timer : this.timers) {
- try {
- timer.cancel();
- }
- catch (Throwable ex) {
- logger.debug("Could not cancel CommonJ Timer", ex);
- }
- }
- this.timers.clear();
- }
-
- // Stop the TimerManager itself.
- super.destroy();
- }
-
-}
diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerTaskScheduler.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerTaskScheduler.java
deleted file mode 100644
index 97ea5b86a81..00000000000
--- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/TimerManagerTaskScheduler.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.scheduling.commonj;
-
-import java.util.Date;
-import java.util.concurrent.Delayed;
-import java.util.concurrent.FutureTask;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-
-import commonj.timers.Timer;
-import commonj.timers.TimerListener;
-
-import org.springframework.lang.Nullable;
-import org.springframework.scheduling.TaskScheduler;
-import org.springframework.scheduling.Trigger;
-import org.springframework.scheduling.support.SimpleTriggerContext;
-import org.springframework.scheduling.support.TaskUtils;
-import org.springframework.util.Assert;
-import org.springframework.util.ErrorHandler;
-
-/**
- * Implementation of Spring's {@link TaskScheduler} interface, wrapping
- * a CommonJ {@link commonj.timers.TimerManager}.
- *
- * @author Juergen Hoeller
- * @author Mark Fisher
- * @since 3.0
- * @deprecated as of 5.1, in favor of EE 7's
- * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler}
- */
-@Deprecated
-public class TimerManagerTaskScheduler extends TimerManagerAccessor implements TaskScheduler {
-
- @Nullable
- private volatile ErrorHandler errorHandler;
-
-
- /**
- * Provide an {@link ErrorHandler} strategy.
- */
- public void setErrorHandler(ErrorHandler errorHandler) {
- this.errorHandler = errorHandler;
- }
-
-
- @Override
- @Nullable
- public ScheduledFuture> schedule(Runnable task, Trigger trigger) {
- return new ReschedulingTimerListener(errorHandlingTask(task, true), trigger).schedule();
- }
-
- @Override
- public ScheduledFuture> schedule(Runnable task, Date startTime) {
- TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, false));
- Timer timer = obtainTimerManager().schedule(futureTask, startTime);
- futureTask.setTimer(timer);
- return futureTask;
- }
-
- @Override
- public ScheduledFuture> scheduleAtFixedRate(Runnable task, Date startTime, long period) {
- TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true));
- Timer timer = obtainTimerManager().scheduleAtFixedRate(futureTask, startTime, period);
- futureTask.setTimer(timer);
- return futureTask;
- }
-
- @Override
- public ScheduledFuture> scheduleAtFixedRate(Runnable task, long period) {
- TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true));
- Timer timer = obtainTimerManager().scheduleAtFixedRate(futureTask, 0, period);
- futureTask.setTimer(timer);
- return futureTask;
- }
-
- @Override
- public ScheduledFuture> scheduleWithFixedDelay(Runnable task, Date startTime, long delay) {
- TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true));
- Timer timer = obtainTimerManager().schedule(futureTask, startTime, delay);
- futureTask.setTimer(timer);
- return futureTask;
- }
-
- @Override
- public ScheduledFuture> scheduleWithFixedDelay(Runnable task, long delay) {
- TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true));
- Timer timer = obtainTimerManager().schedule(futureTask, 0, delay);
- futureTask.setTimer(timer);
- return futureTask;
- }
-
- private Runnable errorHandlingTask(Runnable delegate, boolean isRepeatingTask) {
- return TaskUtils.decorateTaskWithErrorHandler(delegate, this.errorHandler, isRepeatingTask);
- }
-
-
- /**
- * ScheduledFuture adapter that wraps a CommonJ Timer.
- */
- private static class TimerScheduledFuture extends FutureTask implements TimerListener, ScheduledFuture {
-
- @Nullable
- protected transient Timer timer;
-
- protected transient boolean cancelled = false;
-
- public TimerScheduledFuture(Runnable runnable) {
- super(runnable, null);
- }
-
- public void setTimer(Timer timer) {
- this.timer = timer;
- }
-
- @Override
- public void timerExpired(Timer timer) {
- runAndReset();
- }
-
- @Override
- public boolean cancel(boolean mayInterruptIfRunning) {
- boolean result = super.cancel(mayInterruptIfRunning);
- if (this.timer != null) {
- this.timer.cancel();
- }
- this.cancelled = true;
- return result;
- }
-
- @Override
- public long getDelay(TimeUnit unit) {
- Assert.state(this.timer != null, "No Timer available");
- return unit.convert(this.timer.getScheduledExecutionTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
- }
-
- @Override
- public int compareTo(Delayed other) {
- if (this == other) {
- return 0;
- }
- long diff = getDelay(TimeUnit.MILLISECONDS) - other.getDelay(TimeUnit.MILLISECONDS);
- return (diff == 0 ? 0 : ((diff < 0) ? -1 : 1));
- }
- }
-
-
- /**
- * ScheduledFuture adapter for trigger-based rescheduling.
- */
- private class ReschedulingTimerListener extends TimerScheduledFuture {
-
- private final Trigger trigger;
-
- private final SimpleTriggerContext triggerContext = new SimpleTriggerContext();
-
- private volatile Date scheduledExecutionTime = new Date();
-
- public ReschedulingTimerListener(Runnable runnable, Trigger trigger) {
- super(runnable);
- this.trigger = trigger;
- }
-
- @Nullable
- public ScheduledFuture> schedule() {
- Date nextExecutionTime = this.trigger.nextExecutionTime(this.triggerContext);
- if (nextExecutionTime == null) {
- return null;
- }
- this.scheduledExecutionTime = nextExecutionTime;
- setTimer(obtainTimerManager().schedule(this, this.scheduledExecutionTime));
- return this;
- }
-
- @Override
- public void timerExpired(Timer timer) {
- Date actualExecutionTime = new Date();
- super.timerExpired(timer);
- Date completionTime = new Date();
- this.triggerContext.update(this.scheduledExecutionTime, actualExecutionTime, completionTime);
- if (!this.cancelled) {
- schedule();
- }
- }
- }
-
-}
diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/WorkManagerTaskExecutor.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/WorkManagerTaskExecutor.java
deleted file mode 100644
index a9adcc823d5..00000000000
--- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/WorkManagerTaskExecutor.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.scheduling.commonj;
-
-import java.util.Collection;
-import java.util.concurrent.Callable;
-import java.util.concurrent.Future;
-import java.util.concurrent.FutureTask;
-
-import javax.naming.NamingException;
-
-import commonj.work.Work;
-import commonj.work.WorkException;
-import commonj.work.WorkItem;
-import commonj.work.WorkListener;
-import commonj.work.WorkManager;
-import commonj.work.WorkRejectedException;
-
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.core.task.AsyncListenableTaskExecutor;
-import org.springframework.core.task.TaskDecorator;
-import org.springframework.core.task.TaskRejectedException;
-import org.springframework.jndi.JndiLocatorSupport;
-import org.springframework.lang.Nullable;
-import org.springframework.scheduling.SchedulingException;
-import org.springframework.scheduling.SchedulingTaskExecutor;
-import org.springframework.util.Assert;
-import org.springframework.util.concurrent.ListenableFuture;
-import org.springframework.util.concurrent.ListenableFutureTask;
-
-/**
- * TaskExecutor implementation that delegates to a CommonJ WorkManager,
- * implementing the {@link commonj.work.WorkManager} interface,
- * which either needs to be specified as reference or through the JNDI name.
- *
- * This is the central convenience class for setting up a
- * CommonJ WorkManager in a Spring context.
- *
- *
Also implements the CommonJ WorkManager interface itself, delegating all
- * calls to the target WorkManager. Hence, a caller can choose whether it wants
- * to talk to this executor through the Spring TaskExecutor interface or the
- * CommonJ WorkManager interface.
- *
- *
The CommonJ WorkManager will usually be retrieved from the application
- * server's JNDI environment, as defined in the server's management console.
- *
- *
Note: On EE 7/8 compliant versions of WebLogic and WebSphere, a
- * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskExecutor}
- * should be preferred, following JSR-236 support in Java EE 7/8.
- *
- * @author Juergen Hoeller
- * @since 2.0
- * @deprecated as of 5.1, in favor of the EE 7/8 based
- * {@link org.springframework.scheduling.concurrent.DefaultManagedTaskExecutor}
- */
-@Deprecated
-public class WorkManagerTaskExecutor extends JndiLocatorSupport
- implements AsyncListenableTaskExecutor, SchedulingTaskExecutor, WorkManager, InitializingBean {
-
- @Nullable
- private WorkManager workManager;
-
- @Nullable
- private String workManagerName;
-
- @Nullable
- private WorkListener workListener;
-
- @Nullable
- private TaskDecorator taskDecorator;
-
-
- /**
- * Specify the CommonJ WorkManager to delegate to.
- *
Alternatively, you can also specify the JNDI name of the target WorkManager.
- * @see #setWorkManagerName
- */
- public void setWorkManager(WorkManager workManager) {
- this.workManager = workManager;
- }
-
- /**
- * Set the JNDI name of the CommonJ WorkManager.
- *
This can either be a fully qualified JNDI name, or the JNDI name relative
- * to the current environment naming context if "resourceRef" is set to "true".
- * @see #setWorkManager
- * @see #setResourceRef
- */
- public void setWorkManagerName(String workManagerName) {
- this.workManagerName = workManagerName;
- }
-
- /**
- * Specify a CommonJ WorkListener to apply, if any.
- *
This shared WorkListener instance will be passed on to the
- * WorkManager by all {@link #execute} calls on this TaskExecutor.
- */
- public void setWorkListener(WorkListener workListener) {
- this.workListener = workListener;
- }
-
- /**
- * Specify a custom {@link TaskDecorator} to be applied to any {@link Runnable}
- * about to be executed.
- *
Note that such a decorator is not necessarily being applied to the
- * user-supplied {@code Runnable}/{@code Callable} but rather to the actual
- * execution callback (which may be a wrapper around the user-supplied task).
- *
The primary use case is to set some execution context around the task's
- * invocation, or to provide some monitoring/statistics for task execution.
- *
NOTE: Exception handling in {@code TaskDecorator} implementations
- * is limited to plain {@code Runnable} execution via {@code execute} calls.
- * In case of {@code #submit} calls, the exposed {@code Runnable} will be a
- * {@code FutureTask} which does not propagate any exceptions; you might
- * have to cast it and call {@code Future#get} to evaluate exceptions.
- * @since 4.3
- */
- public void setTaskDecorator(TaskDecorator taskDecorator) {
- this.taskDecorator = taskDecorator;
- }
-
- @Override
- public void afterPropertiesSet() throws NamingException {
- if (this.workManager == null) {
- if (this.workManagerName == null) {
- throw new IllegalArgumentException("Either 'workManager' or 'workManagerName' must be specified");
- }
- this.workManager = lookup(this.workManagerName, WorkManager.class);
- }
- }
-
- private WorkManager obtainWorkManager() {
- Assert.state(this.workManager != null, "No WorkManager specified");
- return this.workManager;
- }
-
-
- //-------------------------------------------------------------------------
- // Implementation of the Spring SchedulingTaskExecutor interface
- //-------------------------------------------------------------------------
-
- @Override
- public void execute(Runnable task) {
- Work work = new DelegatingWork(this.taskDecorator != null ? this.taskDecorator.decorate(task) : task);
- try {
- if (this.workListener != null) {
- obtainWorkManager().schedule(work, this.workListener);
- }
- else {
- obtainWorkManager().schedule(work);
- }
- }
- catch (WorkRejectedException ex) {
- throw new TaskRejectedException("CommonJ WorkManager did not accept task: " + task, ex);
- }
- catch (WorkException ex) {
- throw new SchedulingException("Could not schedule task on CommonJ WorkManager", ex);
- }
- }
-
- @Override
- public void execute(Runnable task, long startTimeout) {
- execute(task);
- }
-
- @Override
- public Future> submit(Runnable task) {
- FutureTask future = new FutureTask<>(task, null);
- execute(future);
- return future;
- }
-
- @Override
- public Future submit(Callable task) {
- FutureTask future = new FutureTask<>(task);
- execute(future);
- return future;
- }
-
- @Override
- public ListenableFuture> submitListenable(Runnable task) {
- ListenableFutureTask future = new ListenableFutureTask<>(task, null);
- execute(future);
- return future;
- }
-
- @Override
- public ListenableFuture submitListenable(Callable task) {
- ListenableFutureTask future = new ListenableFutureTask<>(task);
- execute(future);
- return future;
- }
-
-
- //-------------------------------------------------------------------------
- // Implementation of the CommonJ WorkManager interface
- //-------------------------------------------------------------------------
-
- @Override
- public WorkItem schedule(Work work) throws WorkException, IllegalArgumentException {
- return obtainWorkManager().schedule(work);
- }
-
- @Override
- public WorkItem schedule(Work work, WorkListener workListener) throws WorkException {
- return obtainWorkManager().schedule(work, workListener);
- }
-
- @Override
- @SuppressWarnings("rawtypes")
- public boolean waitForAll(Collection workItems, long timeout) throws InterruptedException {
- return obtainWorkManager().waitForAll(workItems, timeout);
- }
-
- @Override
- @SuppressWarnings("rawtypes")
- public Collection waitForAny(Collection workItems, long timeout) throws InterruptedException {
- return obtainWorkManager().waitForAny(workItems, timeout);
- }
-
-}
diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/package-info.java b/spring-context-support/src/main/java/org/springframework/scheduling/commonj/package-info.java
deleted file mode 100644
index ca0fbead681..00000000000
--- a/spring-context-support/src/main/java/org/springframework/scheduling/commonj/package-info.java
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Convenience classes for scheduling based on the CommonJ WorkManager/TimerManager
- * facility, as supported by IBM WebSphere 6.0+ and BEA WebLogic 9.0+.
- */
-@NonNullApi
-@NonNullFields
-package org.springframework.scheduling.commonj;
-
-import org.springframework.lang.NonNullApi;
-import org.springframework.lang.NonNullFields;
diff --git a/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheCacheManagerTests.java b/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheCacheManagerTests.java
deleted file mode 100644
index fd33777c4bb..00000000000
--- a/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheCacheManagerTests.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2002-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.cache.ehcache;
-
-import net.sf.ehcache.CacheManager;
-import net.sf.ehcache.config.CacheConfiguration;
-import net.sf.ehcache.config.Configuration;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-
-import org.springframework.cache.transaction.AbstractTransactionSupportingCacheManagerTests;
-
-/**
- * @author Stephane Nicoll
- */
-public class EhCacheCacheManagerTests extends AbstractTransactionSupportingCacheManagerTests {
-
- private CacheManager nativeCacheManager;
-
- private EhCacheCacheManager cacheManager;
-
- private EhCacheCacheManager transactionalCacheManager;
-
-
- @BeforeEach
- public void setup() {
- nativeCacheManager = new CacheManager(new Configuration().name("EhCacheCacheManagerTests")
- .defaultCache(new CacheConfiguration("default", 100)));
- addNativeCache(CACHE_NAME);
-
- cacheManager = new EhCacheCacheManager(nativeCacheManager);
- cacheManager.setTransactionAware(false);
- cacheManager.afterPropertiesSet();
-
- transactionalCacheManager = new EhCacheCacheManager(nativeCacheManager);
- transactionalCacheManager.setTransactionAware(true);
- transactionalCacheManager.afterPropertiesSet();
- }
-
- @AfterEach
- public void shutdown() {
- nativeCacheManager.shutdown();
- }
-
-
- @Override
- protected EhCacheCacheManager getCacheManager(boolean transactionAware) {
- if (transactionAware) {
- return transactionalCacheManager;
- }
- else {
- return cacheManager;
- }
- }
-
- @Override
- protected Class extends org.springframework.cache.Cache> getCacheType() {
- return EhCacheCache.class;
- }
-
- @Override
- protected void addNativeCache(String cacheName) {
- nativeCacheManager.addCache(cacheName);
- }
-
- @Override
- protected void removeNativeCache(String cacheName) {
- nativeCacheManager.removeCache(cacheName);
- }
-
-}
diff --git a/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheCacheTests.java b/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheCacheTests.java
deleted file mode 100644
index b9bb1cc8542..00000000000
--- a/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheCacheTests.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2002-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.cache.ehcache;
-
-import net.sf.ehcache.CacheManager;
-import net.sf.ehcache.Ehcache;
-import net.sf.ehcache.Element;
-import net.sf.ehcache.config.CacheConfiguration;
-import net.sf.ehcache.config.Configuration;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import org.springframework.context.testfixture.cache.AbstractCacheTests;
-import org.springframework.core.testfixture.EnabledForTestGroups;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.springframework.core.testfixture.TestGroup.LONG_RUNNING;
-
-/**
- * @author Costin Leau
- * @author Stephane Nicoll
- * @author Juergen Hoeller
- */
-public class EhCacheCacheTests extends AbstractCacheTests {
-
- private CacheManager cacheManager;
-
- private Ehcache nativeCache;
-
- private EhCacheCache cache;
-
-
- @BeforeEach
- public void setup() {
- cacheManager = new CacheManager(new Configuration().name("EhCacheCacheTests")
- .defaultCache(new CacheConfiguration("default", 100)));
- nativeCache = new net.sf.ehcache.Cache(new CacheConfiguration(CACHE_NAME, 100));
- cacheManager.addCache(nativeCache);
-
- cache = new EhCacheCache(nativeCache);
- }
-
- @AfterEach
- public void shutdown() {
- cacheManager.shutdown();
- }
-
-
- @Override
- protected EhCacheCache getCache() {
- return cache;
- }
-
- @Override
- protected Ehcache getNativeCache() {
- return nativeCache;
- }
-
-
- @Test
- @EnabledForTestGroups(LONG_RUNNING)
- public void testExpiredElements() throws Exception {
- String key = "brancusi";
- String value = "constantin";
- Element brancusi = new Element(key, value);
- // ttl = 10s
- brancusi.setTimeToLive(3);
- nativeCache.put(brancusi);
-
- assertThat(cache.get(key).get()).isEqualTo(value);
- // wait for the entry to expire
- Thread.sleep(5 * 1000);
- assertThat(cache.get(key)).isNull();
- }
-
-}
diff --git a/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheSupportTests.java b/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheSupportTests.java
deleted file mode 100644
index c663b0fba33..00000000000
--- a/spring-context-support/src/test/java/org/springframework/cache/ehcache/EhCacheSupportTests.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Copyright 2002-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.cache.ehcache;
-
-import net.sf.ehcache.Cache;
-import net.sf.ehcache.CacheException;
-import net.sf.ehcache.CacheManager;
-import net.sf.ehcache.Ehcache;
-import net.sf.ehcache.config.CacheConfiguration;
-import net.sf.ehcache.constructs.blocking.BlockingCache;
-import net.sf.ehcache.constructs.blocking.SelfPopulatingCache;
-import net.sf.ehcache.constructs.blocking.UpdatingCacheEntryFactory;
-import net.sf.ehcache.constructs.blocking.UpdatingSelfPopulatingCache;
-import org.junit.jupiter.api.Test;
-
-import org.springframework.core.io.ClassPathResource;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
-
-/**
- * @author Juergen Hoeller
- * @author Dmitriy Kopylenko
- * @since 27.09.2004
- */
-public class EhCacheSupportTests {
-
- @Test
- public void testBlankCacheManager() {
- EhCacheManagerFactoryBean cacheManagerFb = new EhCacheManagerFactoryBean();
- cacheManagerFb.setCacheManagerName("myCacheManager");
- assertThat(cacheManagerFb.getObjectType()).isEqualTo(CacheManager.class);
- assertThat(cacheManagerFb.isSingleton()).as("Singleton property").isTrue();
- cacheManagerFb.afterPropertiesSet();
- try {
- CacheManager cm = cacheManagerFb.getObject();
- assertThat(cm.getCacheNames().length == 0).as("Loaded CacheManager with no caches").isTrue();
- Cache myCache1 = cm.getCache("myCache1");
- assertThat(myCache1 == null).as("No myCache1 defined").isTrue();
- }
- finally {
- cacheManagerFb.destroy();
- }
- }
-
- @Test
- public void testCacheManagerConflict() {
- EhCacheManagerFactoryBean cacheManagerFb = new EhCacheManagerFactoryBean();
- try {
- cacheManagerFb.setCacheManagerName("myCacheManager");
- assertThat(cacheManagerFb.getObjectType()).isEqualTo(CacheManager.class);
- assertThat(cacheManagerFb.isSingleton()).as("Singleton property").isTrue();
- cacheManagerFb.afterPropertiesSet();
- CacheManager cm = cacheManagerFb.getObject();
- assertThat(cm.getCacheNames().length == 0).as("Loaded CacheManager with no caches").isTrue();
- Cache myCache1 = cm.getCache("myCache1");
- assertThat(myCache1 == null).as("No myCache1 defined").isTrue();
-
- EhCacheManagerFactoryBean cacheManagerFb2 = new EhCacheManagerFactoryBean();
- cacheManagerFb2.setCacheManagerName("myCacheManager");
- assertThatExceptionOfType(CacheException.class).as("because of naming conflict").isThrownBy(
- cacheManagerFb2::afterPropertiesSet);
- }
- finally {
- cacheManagerFb.destroy();
- }
- }
-
- @Test
- public void testAcceptExistingCacheManager() {
- EhCacheManagerFactoryBean cacheManagerFb = new EhCacheManagerFactoryBean();
- cacheManagerFb.setCacheManagerName("myCacheManager");
- assertThat(cacheManagerFb.getObjectType()).isEqualTo(CacheManager.class);
- assertThat(cacheManagerFb.isSingleton()).as("Singleton property").isTrue();
- cacheManagerFb.afterPropertiesSet();
- try {
- CacheManager cm = cacheManagerFb.getObject();
- assertThat(cm.getCacheNames().length == 0).as("Loaded CacheManager with no caches").isTrue();
- Cache myCache1 = cm.getCache("myCache1");
- assertThat(myCache1 == null).as("No myCache1 defined").isTrue();
-
- EhCacheManagerFactoryBean cacheManagerFb2 = new EhCacheManagerFactoryBean();
- cacheManagerFb2.setCacheManagerName("myCacheManager");
- cacheManagerFb2.setAcceptExisting(true);
- cacheManagerFb2.afterPropertiesSet();
- CacheManager cm2 = cacheManagerFb2.getObject();
- assertThat(cm2).isSameAs(cm);
- cacheManagerFb2.destroy();
- }
- finally {
- cacheManagerFb.destroy();
- }
- }
-
- public void testCacheManagerFromConfigFile() {
- EhCacheManagerFactoryBean cacheManagerFb = new EhCacheManagerFactoryBean();
- cacheManagerFb.setConfigLocation(new ClassPathResource("testEhcache.xml", getClass()));
- cacheManagerFb.setCacheManagerName("myCacheManager");
- cacheManagerFb.afterPropertiesSet();
- try {
- CacheManager cm = cacheManagerFb.getObject();
- assertThat(cm.getCacheNames().length == 1).as("Correct number of caches loaded").isTrue();
- Cache myCache1 = cm.getCache("myCache1");
- assertThat(myCache1.getCacheConfiguration().isEternal()).as("myCache1 is not eternal").isFalse();
- assertThat(myCache1.getCacheConfiguration().getMaxEntriesLocalHeap() == 300).as("myCache1.maxElements == 300").isTrue();
- }
- finally {
- cacheManagerFb.destroy();
- }
- }
-
- @Test
- public void testEhCacheFactoryBeanWithDefaultCacheManager() {
- doTestEhCacheFactoryBean(false);
- }
-
- @Test
- public void testEhCacheFactoryBeanWithExplicitCacheManager() {
- doTestEhCacheFactoryBean(true);
- }
-
- private void doTestEhCacheFactoryBean(boolean useCacheManagerFb) {
- Cache cache;
- EhCacheManagerFactoryBean cacheManagerFb = null;
- boolean cacheManagerFbInitialized = false;
- try {
- EhCacheFactoryBean cacheFb = new EhCacheFactoryBean();
- Class extends Ehcache> objectType = cacheFb.getObjectType();
- assertThat(Ehcache.class.isAssignableFrom(objectType)).isTrue();
- assertThat(cacheFb.isSingleton()).as("Singleton property").isTrue();
- if (useCacheManagerFb) {
- cacheManagerFb = new EhCacheManagerFactoryBean();
- cacheManagerFb.setConfigLocation(new ClassPathResource("testEhcache.xml", getClass()));
- cacheManagerFb.setCacheManagerName("cache");
- cacheManagerFb.afterPropertiesSet();
- cacheManagerFbInitialized = true;
- cacheFb.setCacheManager(cacheManagerFb.getObject());
- }
-
- cacheFb.setCacheName("myCache1");
- cacheFb.afterPropertiesSet();
- cache = (Cache) cacheFb.getObject();
- Class extends Ehcache> objectType2 = cacheFb.getObjectType();
- assertThat(objectType2).isSameAs(objectType);
- CacheConfiguration config = cache.getCacheConfiguration();
- assertThat(cache.getName()).isEqualTo("myCache1");
- if (useCacheManagerFb){
- assertThat(config.getMaxEntriesLocalHeap()).as("myCache1.maxElements").isEqualTo(300);
- }
- else {
- assertThat(config.getMaxEntriesLocalHeap()).as("myCache1.maxElements").isEqualTo(10000);
- }
-
- // Cache region is not defined. Should create one with default properties.
- cacheFb = new EhCacheFactoryBean();
- if (useCacheManagerFb) {
- cacheFb.setCacheManager(cacheManagerFb.getObject());
- }
- cacheFb.setCacheName("undefinedCache");
- cacheFb.afterPropertiesSet();
- cache = (Cache) cacheFb.getObject();
- config = cache.getCacheConfiguration();
- assertThat(cache.getName()).isEqualTo("undefinedCache");
- assertThat(config.getMaxEntriesLocalHeap() == 10000).as("default maxElements is correct").isTrue();
- assertThat(config.isEternal()).as("default eternal is correct").isFalse();
- assertThat(config.getTimeToLiveSeconds() == 120).as("default timeToLive is correct").isTrue();
- assertThat(config.getTimeToIdleSeconds() == 120).as("default timeToIdle is correct").isTrue();
- assertThat(config.getDiskExpiryThreadIntervalSeconds() == 120).as("default diskExpiryThreadIntervalSeconds is correct").isTrue();
-
- // overriding the default properties
- cacheFb = new EhCacheFactoryBean();
- if (useCacheManagerFb) {
- cacheFb.setCacheManager(cacheManagerFb.getObject());
- }
- cacheFb.setBeanName("undefinedCache2");
- cacheFb.setMaxEntriesLocalHeap(5);
- cacheFb.setTimeToLive(8);
- cacheFb.setTimeToIdle(7);
- cacheFb.setDiskExpiryThreadIntervalSeconds(10);
- cacheFb.afterPropertiesSet();
- cache = (Cache) cacheFb.getObject();
- config = cache.getCacheConfiguration();
-
- assertThat(cache.getName()).isEqualTo("undefinedCache2");
- assertThat(config.getMaxEntriesLocalHeap() == 5).as("overridden maxElements is correct").isTrue();
- assertThat(config.getTimeToLiveSeconds() == 8).as("default timeToLive is correct").isTrue();
- assertThat(config.getTimeToIdleSeconds() == 7).as("default timeToIdle is correct").isTrue();
- assertThat(config.getDiskExpiryThreadIntervalSeconds() == 10).as("overridden diskExpiryThreadIntervalSeconds is correct").isTrue();
- }
- finally {
- if (cacheManagerFbInitialized) {
- cacheManagerFb.destroy();
- }
- else {
- CacheManager.getInstance().shutdown();
- }
- }
- }
-
- @Test
- public void testEhCacheFactoryBeanWithBlockingCache() {
- EhCacheManagerFactoryBean cacheManagerFb = new EhCacheManagerFactoryBean();
- cacheManagerFb.afterPropertiesSet();
- try {
- CacheManager cm = cacheManagerFb.getObject();
- EhCacheFactoryBean cacheFb = new EhCacheFactoryBean();
- cacheFb.setCacheManager(cm);
- cacheFb.setCacheName("myCache1");
- cacheFb.setBlocking(true);
- assertThat(BlockingCache.class).isEqualTo(cacheFb.getObjectType());
- cacheFb.afterPropertiesSet();
- Ehcache myCache1 = cm.getEhcache("myCache1");
- boolean condition = myCache1 instanceof BlockingCache;
- assertThat(condition).isTrue();
- }
- finally {
- cacheManagerFb.destroy();
- }
- }
-
- @Test
- public void testEhCacheFactoryBeanWithSelfPopulatingCache() {
- EhCacheManagerFactoryBean cacheManagerFb = new EhCacheManagerFactoryBean();
- cacheManagerFb.afterPropertiesSet();
- try {
- CacheManager cm = cacheManagerFb.getObject();
- EhCacheFactoryBean cacheFb = new EhCacheFactoryBean();
- cacheFb.setCacheManager(cm);
- cacheFb.setCacheName("myCache1");
- cacheFb.setCacheEntryFactory(key -> key);
- assertThat(SelfPopulatingCache.class).isEqualTo(cacheFb.getObjectType());
- cacheFb.afterPropertiesSet();
- Ehcache myCache1 = cm.getEhcache("myCache1");
- boolean condition = myCache1 instanceof SelfPopulatingCache;
- assertThat(condition).isTrue();
- assertThat(myCache1.get("myKey1").getObjectValue()).isEqualTo("myKey1");
- }
- finally {
- cacheManagerFb.destroy();
- }
- }
-
- @Test
- public void testEhCacheFactoryBeanWithUpdatingSelfPopulatingCache() {
- EhCacheManagerFactoryBean cacheManagerFb = new EhCacheManagerFactoryBean();
- cacheManagerFb.afterPropertiesSet();
- try {
- CacheManager cm = cacheManagerFb.getObject();
- EhCacheFactoryBean cacheFb = new EhCacheFactoryBean();
- cacheFb.setCacheManager(cm);
- cacheFb.setCacheName("myCache1");
- cacheFb.setCacheEntryFactory(new UpdatingCacheEntryFactory() {
- @Override
- public Object createEntry(Object key) {
- return key;
- }
- @Override
- public void updateEntryValue(Object key, Object value) {
- }
- });
- assertThat(UpdatingSelfPopulatingCache.class).isEqualTo(cacheFb.getObjectType());
- cacheFb.afterPropertiesSet();
- Ehcache myCache1 = cm.getEhcache("myCache1");
- boolean condition = myCache1 instanceof UpdatingSelfPopulatingCache;
- assertThat(condition).isTrue();
- assertThat(myCache1.get("myKey1").getObjectValue()).isEqualTo("myKey1");
- }
- finally {
- cacheManagerFb.destroy();
- }
- }
-
-}
diff --git a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCache3AnnotationTests.java b/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCache3AnnotationTests.java
deleted file mode 100644
index 105e4e62099..00000000000
--- a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCache3AnnotationTests.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.cache.jcache;
-
-import javax.cache.Caching;
-import javax.cache.spi.CachingProvider;
-
-/**
- * Just here to be run against EHCache 3, whereas the original JCacheEhCacheAnnotationTests
- * runs against EhCache 2.x with the EhCache-JCache add-on.
- *
- * @author Juergen Hoeller
- */
-public class JCacheEhCache3AnnotationTests extends JCacheEhCacheAnnotationTests {
-
- @Override
- protected CachingProvider getCachingProvider() {
- return Caching.getCachingProvider("org.ehcache.jsr107.EhcacheCachingProvider");
- }
-
-}
diff --git a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCache3ApiTests.java b/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCache3ApiTests.java
deleted file mode 100644
index 32a2585c9f8..00000000000
--- a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCache3ApiTests.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.cache.jcache;
-
-import javax.cache.Caching;
-import javax.cache.spi.CachingProvider;
-
-/**
- * Just here to be run against EHCache 3, whereas the original JCacheEhCacheAnnotationTests
- * runs against EhCache 2.x with the EhCache-JCache add-on.
- *
- * @author Stephane Nicoll
- */
-public class JCacheEhCache3ApiTests extends JCacheEhCacheApiTests {
-
- @Override
- protected CachingProvider getCachingProvider() {
- return Caching.getCachingProvider("org.ehcache.jsr107.EhcacheCachingProvider");
- }
-
-}
diff --git a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheAnnotationTests.java b/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheAnnotationTests.java
index 188cc293c97..88a6ba2cf48 100644
--- a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheAnnotationTests.java
+++ b/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheAnnotationTests.java
@@ -64,7 +64,7 @@ public class JCacheEhCacheAnnotationTests extends AbstractCacheAnnotationTests {
}
protected CachingProvider getCachingProvider() {
- return Caching.getCachingProvider("org.ehcache.jcache.JCacheCachingProvider");
+ return Caching.getCachingProvider("org.ehcache.jsr107.EhcacheCachingProvider");
}
@AfterEach
diff --git a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheApiTests.java b/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheApiTests.java
index b826e2a3fb3..3f56f2e06c5 100644
--- a/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheApiTests.java
+++ b/spring-context-support/src/test/java/org/springframework/cache/jcache/JCacheEhCacheApiTests.java
@@ -54,7 +54,7 @@ public class JCacheEhCacheApiTests extends AbstractValueAdaptingCacheTests) proxyFactory.getProxy());
- }
-
- @Test
- @SuppressWarnings("unchecked")
- public void testMethodValidationPostProcessor() {
- StaticApplicationContext ac = new StaticApplicationContext();
- ac.registerSingleton("mvpp", MethodValidationPostProcessor.class);
- MutablePropertyValues pvs = new MutablePropertyValues();
- pvs.add("beforeExistingAdvisors", false);
- ac.registerSingleton("aapp", AsyncAnnotationBeanPostProcessor.class, pvs);
- ac.registerSingleton("bean", MyValidBean.class);
- ac.refresh();
- doTestProxyValidation(ac.getBean("bean", MyValidInterface.class));
- ac.close();
- }
-
- private void doTestProxyValidation(MyValidInterface proxy) {
- assertThat(proxy.myValidMethod("value", 5)).isNotNull();
- assertThatExceptionOfType(ValidationException.class).isThrownBy(() ->
- proxy.myValidMethod("value", 15));
- assertThatExceptionOfType(ValidationException.class).isThrownBy(() ->
- proxy.myValidMethod(null, 5));
- assertThatExceptionOfType(ValidationException.class).isThrownBy(() ->
- proxy.myValidMethod("value", 0));
- proxy.myValidAsyncMethod("value", 5);
- assertThatExceptionOfType(ValidationException.class).isThrownBy(() ->
- proxy.myValidAsyncMethod("value", 15));
- assertThatExceptionOfType(ValidationException.class).isThrownBy(() ->
- proxy.myValidAsyncMethod(null, 5));
- assertThat(proxy.myGenericMethod("myValue")).isEqualTo("myValue");
- assertThatExceptionOfType(ValidationException.class).isThrownBy(() ->
- proxy.myGenericMethod(null));
- }
-
- @Test
- public void testLazyValidatorForMethodValidation() {
- @SuppressWarnings("resource")
- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(
- LazyMethodValidationConfig.class, CustomValidatorBean.class,
- MyValidBean.class, MyValidFactoryBean.class);
- ctx.getBeansOfType(MyValidInterface.class).values().forEach(bean -> bean.myValidMethod("value", 5));
- }
-
- @Test
- public void testLazyValidatorForMethodValidationWithProxyTargetClass() {
- @SuppressWarnings("resource")
- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(
- LazyMethodValidationConfigWithProxyTargetClass.class, CustomValidatorBean.class,
- MyValidBean.class, MyValidFactoryBean.class);
- ctx.getBeansOfType(MyValidInterface.class).values().forEach(bean -> bean.myValidMethod("value", 5));
- }
-
-
- @MyStereotype
- public static class MyValidBean implements MyValidInterface {
-
- @Override
- public Object myValidMethod(String arg1, int arg2) {
- return (arg2 == 0 ? null : "value");
- }
-
- @Override
- public void myValidAsyncMethod(String arg1, int arg2) {
- }
-
- @Override
- public String myGenericMethod(String value) {
- return value;
- }
- }
-
-
- @MyStereotype
- public static class MyValidFactoryBean implements FactoryBean, MyValidInterface {
-
- @Override
- public String getObject() {
- return null;
- }
-
- @Override
- public Class> getObjectType() {
- return String.class;
- }
-
- @Override
- public Object myValidMethod(String arg1, int arg2) {
- return (arg2 == 0 ? null : "value");
- }
-
- @Override
- public void myValidAsyncMethod(String arg1, int arg2) {
- }
-
- @Override
- public String myGenericMethod(String value) {
- return value;
- }
- }
-
-
- public interface MyValidInterface {
-
- @NotNull Object myValidMethod(@NotNull(groups = MyGroup.class) String arg1, @Max(10) int arg2);
-
- @MyValid
- @Async void myValidAsyncMethod(@NotNull(groups = OtherGroup.class) String arg1, @Max(10) int arg2);
-
- T myGenericMethod(@NotNull T value);
- }
-
-
- public interface MyGroup {
- }
-
-
- public interface OtherGroup {
- }
-
-
- @Validated({MyGroup.class, Default.class})
- @Retention(RetentionPolicy.RUNTIME)
- public @interface MyStereotype {
- }
-
-
- @Validated({OtherGroup.class, Default.class})
- @Retention(RetentionPolicy.RUNTIME)
- public @interface MyValid {
- }
-
-
- @Configuration
- public static class LazyMethodValidationConfig {
-
- @Bean
- public static MethodValidationPostProcessor methodValidationPostProcessor(@Lazy Validator validator) {
- MethodValidationPostProcessor postProcessor = new MethodValidationPostProcessor();
- postProcessor.setValidator(validator);
- return postProcessor;
- }
- }
-
-
- @Configuration
- public static class LazyMethodValidationConfigWithProxyTargetClass {
-
- @Bean
- public static MethodValidationPostProcessor methodValidationPostProcessor(@Lazy Validator validator) {
- MethodValidationPostProcessor postProcessor = new MethodValidationPostProcessor();
- postProcessor.setValidator(validator);
- postProcessor.setProxyTargetClass(true);
- return postProcessor;
- }
- }
-
-}
diff --git a/spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/SpringValidatorAdapterTests.java b/spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/SpringValidatorAdapterTests.java
deleted file mode 100644
index 813111adb05..00000000000
--- a/spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/SpringValidatorAdapterTests.java
+++ /dev/null
@@ -1,563 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.validation.beanvalidation2;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Repeatable;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-
-import javax.validation.Constraint;
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorContext;
-import javax.validation.ConstraintViolation;
-import javax.validation.Payload;
-import javax.validation.Valid;
-import javax.validation.Validation;
-import javax.validation.Validator;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import javax.validation.constraints.Size;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-import org.springframework.context.support.StaticMessageSource;
-import org.springframework.core.testfixture.io.SerializationTestUtils;
-import org.springframework.util.ObjectUtils;
-import org.springframework.validation.BeanPropertyBindingResult;
-import org.springframework.validation.FieldError;
-import org.springframework.validation.beanvalidation.SpringValidatorAdapter;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-/**
- * @author Kazuki Shimizu
- * @author Juergen Hoeller
- */
-public class SpringValidatorAdapterTests {
-
- private final Validator nativeValidator = Validation.buildDefaultValidatorFactory().getValidator();
-
- private final SpringValidatorAdapter validatorAdapter = new SpringValidatorAdapter(nativeValidator);
-
- private final StaticMessageSource messageSource = new StaticMessageSource();
-
-
- @BeforeEach
- public void setupSpringValidatorAdapter() {
- messageSource.addMessage("Size", Locale.ENGLISH, "Size of {0} must be between {2} and {1}");
- messageSource.addMessage("Same", Locale.ENGLISH, "{2} must be same value as {1}");
- messageSource.addMessage("password", Locale.ENGLISH, "Password");
- messageSource.addMessage("confirmPassword", Locale.ENGLISH, "Password(Confirm)");
- }
-
-
- @Test
- public void testUnwrap() {
- Validator nativeValidator = validatorAdapter.unwrap(Validator.class);
- assertThat(nativeValidator).isSameAs(this.nativeValidator);
- }
-
- @Test // SPR-13406
- public void testNoStringArgumentValue() throws Exception {
- TestBean testBean = new TestBean();
- testBean.setPassword("pass");
- testBean.setConfirmPassword("pass");
-
- BeanPropertyBindingResult errors = new BeanPropertyBindingResult(testBean, "testBean");
- validatorAdapter.validate(testBean, errors);
-
- assertThat(errors.getFieldErrorCount("password")).isEqualTo(1);
- assertThat(errors.getFieldValue("password")).isEqualTo("pass");
- FieldError error = errors.getFieldError("password");
- assertThat(error).isNotNull();
- assertThat(messageSource.getMessage(error, Locale.ENGLISH)).isEqualTo("Size of Password must be between 8 and 128");
- assertThat(error.contains(ConstraintViolation.class)).isTrue();
- assertThat(error.unwrap(ConstraintViolation.class).getPropertyPath().toString()).isEqualTo("password");
- assertThat(SerializationTestUtils.serializeAndDeserialize(error.toString())).isEqualTo(error.toString());
- }
-
- @Test // SPR-13406
- public void testApplyMessageSourceResolvableToStringArgumentValueWithResolvedLogicalFieldName() throws Exception {
- TestBean testBean = new TestBean();
- testBean.setPassword("password");
- testBean.setConfirmPassword("PASSWORD");
-
- BeanPropertyBindingResult errors = new BeanPropertyBindingResult(testBean, "testBean");
- validatorAdapter.validate(testBean, errors);
-
- assertThat(errors.getFieldErrorCount("password")).isEqualTo(1);
- assertThat(errors.getFieldValue("password")).isEqualTo("password");
- FieldError error = errors.getFieldError("password");
- assertThat(error).isNotNull();
- assertThat(messageSource.getMessage(error, Locale.ENGLISH)).isEqualTo("Password must be same value as Password(Confirm)");
- assertThat(error.contains(ConstraintViolation.class)).isTrue();
- assertThat(error.unwrap(ConstraintViolation.class).getPropertyPath().toString()).isEqualTo("password");
- assertThat(SerializationTestUtils.serializeAndDeserialize(error.toString())).isEqualTo(error.toString());
- }
-
- @Test // SPR-13406
- public void testApplyMessageSourceResolvableToStringArgumentValueWithUnresolvedLogicalFieldName() {
- TestBean testBean = new TestBean();
- testBean.setEmail("test@example.com");
- testBean.setConfirmEmail("TEST@EXAMPLE.IO");
-
- BeanPropertyBindingResult errors = new BeanPropertyBindingResult(testBean, "testBean");
- validatorAdapter.validate(testBean, errors);
-
- assertThat(errors.getFieldErrorCount("email")).isEqualTo(1);
- assertThat(errors.getFieldValue("email")).isEqualTo("test@example.com");
- assertThat(errors.getFieldErrorCount("confirmEmail")).isEqualTo(1);
- FieldError error1 = errors.getFieldError("email");
- FieldError error2 = errors.getFieldError("confirmEmail");
- assertThat(error1).isNotNull();
- assertThat(error2).isNotNull();
- assertThat(messageSource.getMessage(error1, Locale.ENGLISH)).isEqualTo("email must be same value as confirmEmail");
- assertThat(messageSource.getMessage(error2, Locale.ENGLISH)).isEqualTo("Email required");
- assertThat(error1.contains(ConstraintViolation.class)).isTrue();
- assertThat(error1.unwrap(ConstraintViolation.class).getPropertyPath().toString()).isEqualTo("email");
- assertThat(error2.contains(ConstraintViolation.class)).isTrue();
- assertThat(error2.unwrap(ConstraintViolation.class).getPropertyPath().toString()).isEqualTo("confirmEmail");
- }
-
- @Test // SPR-15123
- public void testApplyMessageSourceResolvableToStringArgumentValueWithAlwaysUseMessageFormat() {
- messageSource.setAlwaysUseMessageFormat(true);
-
- TestBean testBean = new TestBean();
- testBean.setEmail("test@example.com");
- testBean.setConfirmEmail("TEST@EXAMPLE.IO");
-
- BeanPropertyBindingResult errors = new BeanPropertyBindingResult(testBean, "testBean");
- validatorAdapter.validate(testBean, errors);
-
- assertThat(errors.getFieldErrorCount("email")).isEqualTo(1);
- assertThat(errors.getFieldValue("email")).isEqualTo("test@example.com");
- assertThat(errors.getFieldErrorCount("confirmEmail")).isEqualTo(1);
- FieldError error1 = errors.getFieldError("email");
- FieldError error2 = errors.getFieldError("confirmEmail");
- assertThat(error1).isNotNull();
- assertThat(error2).isNotNull();
- assertThat(messageSource.getMessage(error1, Locale.ENGLISH)).isEqualTo("email must be same value as confirmEmail");
- assertThat(messageSource.getMessage(error2, Locale.ENGLISH)).isEqualTo("Email required");
- assertThat(error1.contains(ConstraintViolation.class)).isTrue();
- assertThat(error1.unwrap(ConstraintViolation.class).getPropertyPath().toString()).isEqualTo("email");
- assertThat(error2.contains(ConstraintViolation.class)).isTrue();
- assertThat(error2.unwrap(ConstraintViolation.class).getPropertyPath().toString()).isEqualTo("confirmEmail");
- }
-
- @Test
- public void testPatternMessage() {
- TestBean testBean = new TestBean();
- testBean.setEmail("X");
- testBean.setConfirmEmail("X");
-
- BeanPropertyBindingResult errors = new BeanPropertyBindingResult(testBean, "testBean");
- validatorAdapter.validate(testBean, errors);
-
- assertThat(errors.getFieldErrorCount("email")).isEqualTo(1);
- assertThat(errors.getFieldValue("email")).isEqualTo("X");
- FieldError error = errors.getFieldError("email");
- assertThat(error).isNotNull();
- assertThat(messageSource.getMessage(error, Locale.ENGLISH)).contains("[\\w.'-]{1,}@[\\w.'-]{1,}");
- assertThat(error.contains(ConstraintViolation.class)).isTrue();
- assertThat(error.unwrap(ConstraintViolation.class).getPropertyPath().toString()).isEqualTo("email");
- }
-
- @Test // SPR-16177
- public void testWithList() {
- Parent parent = new Parent();
- parent.setName("Parent whit list");
- parent.getChildList().addAll(createChildren(parent));
-
- BeanPropertyBindingResult errors = new BeanPropertyBindingResult(parent, "parent");
- validatorAdapter.validate(parent, errors);
-
- assertThat(errors.getErrorCount() > 0).isTrue();
- }
-
- @Test // SPR-16177
- public void testWithSet() {
- Parent parent = new Parent();
- parent.setName("Parent with set");
- parent.getChildSet().addAll(createChildren(parent));
-
- BeanPropertyBindingResult errors = new BeanPropertyBindingResult(parent, "parent");
- validatorAdapter.validate(parent, errors);
-
- assertThat(errors.getErrorCount() > 0).isTrue();
- }
-
- private List createChildren(Parent parent) {
- Child child1 = new Child();
- child1.setName("Child1");
- child1.setAge(null);
- child1.setParent(parent);
-
- Child child2 = new Child();
- child2.setName(null);
- child2.setAge(17);
- child2.setParent(parent);
-
- return Arrays.asList(child1, child2);
- }
-
- @Test // SPR-15839
- public void testListElementConstraint() {
- BeanWithListElementConstraint bean = new BeanWithListElementConstraint();
- bean.setProperty(Arrays.asList("no", "element", "can", "be", null));
-
- BeanPropertyBindingResult errors = new BeanPropertyBindingResult(bean, "bean");
- validatorAdapter.validate(bean, errors);
-
- assertThat(errors.getFieldErrorCount("property[4]")).isEqualTo(1);
- assertThat(errors.getFieldValue("property[4]")).isNull();
- }
-
- @Test // SPR-15839
- public void testMapValueConstraint() {
- Map property = new HashMap<>();
- property.put("no value can be", null);
-
- BeanWithMapEntryConstraint bean = new BeanWithMapEntryConstraint();
- bean.setProperty(property);
-
- BeanPropertyBindingResult errors = new BeanPropertyBindingResult(bean, "bean");
- validatorAdapter.validate(bean, errors);
-
- assertThat(errors.getFieldErrorCount("property[no value can be]")).isEqualTo(1);
- assertThat(errors.getFieldValue("property[no value can be]")).isNull();
- }
-
- @Test // SPR-15839
- public void testMapEntryConstraint() {
- Map property = new HashMap<>();
- property.put(null, null);
-
- BeanWithMapEntryConstraint bean = new BeanWithMapEntryConstraint();
- bean.setProperty(property);
-
- BeanPropertyBindingResult errors = new BeanPropertyBindingResult(bean, "bean");
- validatorAdapter.validate(bean, errors);
-
- assertThat(errors.hasFieldErrors("property[]")).isTrue();
- assertThat(errors.getFieldValue("property[]")).isNull();
- }
-
-
- @Same(field = "password", comparingField = "confirmPassword")
- @Same(field = "email", comparingField = "confirmEmail")
- static class TestBean {
-
- @Size(min = 8, max = 128)
- private String password;
-
- private String confirmPassword;
-
- @Pattern(regexp = "[\\w.'-]{1,}@[\\w.'-]{1,}")
- private String email;
-
- @Pattern(regexp = "[\\p{L} -]*", message = "Email required")
- private String confirmEmail;
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public String getConfirmPassword() {
- return confirmPassword;
- }
-
- public void setConfirmPassword(String confirmPassword) {
- this.confirmPassword = confirmPassword;
- }
-
- public String getEmail() {
- return email;
- }
-
- public void setEmail(String email) {
- this.email = email;
- }
-
- public String getConfirmEmail() {
- return confirmEmail;
- }
-
- public void setConfirmEmail(String confirmEmail) {
- this.confirmEmail = confirmEmail;
- }
- }
-
-
- @Documented
- @Constraint(validatedBy = {SameValidator.class})
- @Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
- @Retention(RetentionPolicy.RUNTIME)
- @Repeatable(SameGroup.class)
- @interface Same {
-
- String message() default "{org.springframework.validation.beanvalidation.Same.message}";
-
- Class>[] groups() default {};
-
- Class extends Payload>[] payload() default {};
-
- String field();
-
- String comparingField();
-
- @Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @interface List {
- Same[] value();
- }
- }
-
-
- @Documented
- @Inherited
- @Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
- @Retention(RetentionPolicy.RUNTIME)
- @interface SameGroup {
-
- Same[] value();
- }
-
-
- public static class SameValidator implements ConstraintValidator {
-
- private String field;
-
- private String comparingField;
-
- private String message;
-
- @Override
- public void initialize(Same constraintAnnotation) {
- field = constraintAnnotation.field();
- comparingField = constraintAnnotation.comparingField();
- message = constraintAnnotation.message();
- }
-
- @Override
- public boolean isValid(Object value, ConstraintValidatorContext context) {
- BeanWrapper beanWrapper = new BeanWrapperImpl(value);
- Object fieldValue = beanWrapper.getPropertyValue(field);
- Object comparingFieldValue = beanWrapper.getPropertyValue(comparingField);
- boolean matched = ObjectUtils.nullSafeEquals(fieldValue, comparingFieldValue);
- if (matched) {
- return true;
- }
- else {
- context.disableDefaultConstraintViolation();
- context.buildConstraintViolationWithTemplate(message)
- .addPropertyNode(field)
- .addConstraintViolation();
- return false;
- }
- }
- }
-
-
- public static class Parent {
-
- private Integer id;
-
- @NotNull
- private String name;
-
- @Valid
- private Set childSet = new LinkedHashSet<>();
-
- @Valid
- private List childList = new ArrayList<>();
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public Set getChildSet() {
- return childSet;
- }
-
- public void setChildSet(Set childSet) {
- this.childSet = childSet;
- }
-
- public List getChildList() {
- return childList;
- }
-
- public void setChildList(List childList) {
- this.childList = childList;
- }
- }
-
-
- @AnythingValid
- public static class Child {
-
- private Integer id;
-
- @NotNull
- private String name;
-
- @NotNull
- private Integer age;
-
- @NotNull
- private Parent parent;
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public Integer getAge() {
- return age;
- }
-
- public void setAge(Integer age) {
- this.age = age;
- }
-
- public Parent getParent() {
- return parent;
- }
-
- public void setParent(Parent parent) {
- this.parent = parent;
- }
- }
-
-
- @Constraint(validatedBy = AnythingValidator.class)
- @Retention(RetentionPolicy.RUNTIME)
- public @interface AnythingValid {
-
- String message() default "{AnythingValid.message}";
-
- Class>[] groups() default {};
-
- Class extends Payload>[] payload() default {};
- }
-
-
- public static class AnythingValidator implements ConstraintValidator {
-
- private static final String ID = "id";
-
- @Override
- public void initialize(AnythingValid constraintAnnotation) {
- }
-
- @Override
- public boolean isValid(Object value, ConstraintValidatorContext context) {
- List fieldsErrors = new ArrayList<>();
- Arrays.asList(value.getClass().getDeclaredFields()).forEach(field -> {
- field.setAccessible(true);
- try {
- if (!field.getName().equals(ID) && field.get(value) == null) {
- fieldsErrors.add(field);
- context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate())
- .addPropertyNode(field.getName())
- .addConstraintViolation();
- }
- }
- catch (IllegalAccessException ex) {
- throw new IllegalStateException(ex);
- }
- });
- return fieldsErrors.isEmpty();
- }
- }
-
-
- public class BeanWithListElementConstraint {
-
- @Valid
- private List<@NotNull String> property;
-
- public List getProperty() {
- return property;
- }
-
- public void setProperty(List property) {
- this.property = property;
- }
- }
-
-
- public class BeanWithMapEntryConstraint {
-
- @Valid
- private Map<@NotNull String, @NotNull String> property;
-
- public Map getProperty() {
- return property;
- }
-
- public void setProperty(Map property) {
- this.property = property;
- }
- }
-
-}
diff --git a/spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/ValidatorFactoryTests.java b/spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/ValidatorFactoryTests.java
deleted file mode 100644
index a383ae5f8bf..00000000000
--- a/spring-context-support/src/test/java/org/springframework/validation/beanvalidation2/ValidatorFactoryTests.java
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.validation.beanvalidation2;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
-
-import javax.validation.Constraint;
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorContext;
-import javax.validation.ConstraintViolation;
-import javax.validation.Payload;
-import javax.validation.Valid;
-import javax.validation.Validator;
-import javax.validation.ValidatorFactory;
-import javax.validation.constraints.NotNull;
-
-import org.hibernate.validator.HibernateValidator;
-import org.hibernate.validator.HibernateValidatorFactory;
-import org.junit.jupiter.api.Test;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.annotation.AnnotationConfigApplicationContext;
-import org.springframework.core.convert.support.DefaultConversionService;
-import org.springframework.core.env.Environment;
-import org.springframework.validation.BeanPropertyBindingResult;
-import org.springframework.validation.Errors;
-import org.springframework.validation.FieldError;
-import org.springframework.validation.ObjectError;
-import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-/**
- * @author Juergen Hoeller
- */
-@SuppressWarnings("resource")
-public class ValidatorFactoryTests {
-
- @Test
- @SuppressWarnings("cast")
- public void testSimpleValidation() {
- LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
- validator.afterPropertiesSet();
-
- ValidPerson person = new ValidPerson();
- Set> result = validator.validate(person);
- assertThat(result.size()).isEqualTo(2);
- for (ConstraintViolation cv : result) {
- String path = cv.getPropertyPath().toString();
- assertThat(path).matches(actual -> "name".equals(actual) || "address.street".equals(actual));
- assertThat(cv.getConstraintDescriptor().getAnnotation()).isInstanceOf(NotNull.class);
- }
-
- Validator nativeValidator = validator.unwrap(Validator.class);
- assertThat(nativeValidator.getClass().getName().startsWith("org.hibernate")).isTrue();
- assertThat(validator.unwrap(ValidatorFactory.class) instanceof HibernateValidatorFactory).isTrue();
- assertThat(validator.unwrap(HibernateValidatorFactory.class) instanceof HibernateValidatorFactory).isTrue();
-
- validator.destroy();
- }
-
- @Test
- @SuppressWarnings("cast")
- public void testSimpleValidationWithCustomProvider() {
- LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
- validator.setProviderClass(HibernateValidator.class);
- validator.afterPropertiesSet();
-
- ValidPerson person = new ValidPerson();
- Set> result = validator.validate(person);
- assertThat(result.size()).isEqualTo(2);
- for (ConstraintViolation cv : result) {
- String path = cv.getPropertyPath().toString();
- assertThat(path).matches(actual -> "name".equals(actual) || "address.street".equals(actual));
- assertThat(cv.getConstraintDescriptor().getAnnotation()).isInstanceOf(NotNull.class);
- }
-
- Validator nativeValidator = validator.unwrap(Validator.class);
- assertThat(nativeValidator.getClass().getName().startsWith("org.hibernate")).isTrue();
- assertThat(validator.unwrap(ValidatorFactory.class) instanceof HibernateValidatorFactory).isTrue();
- assertThat(validator.unwrap(HibernateValidatorFactory.class) instanceof HibernateValidatorFactory).isTrue();
-
- validator.destroy();
- }
-
- @Test
- public void testSimpleValidationWithClassLevel() {
- LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
- validator.afterPropertiesSet();
-
- ValidPerson person = new ValidPerson();
- person.setName("Juergen");
- person.getAddress().setStreet("Juergen's Street");
- Set> result = validator.validate(person);
- assertThat(result.size()).isEqualTo(1);
- Iterator> iterator = result.iterator();
- ConstraintViolation> cv = iterator.next();
- assertThat(cv.getPropertyPath().toString()).isEqualTo("");
- assertThat(cv.getConstraintDescriptor().getAnnotation() instanceof NameAddressValid).isTrue();
- }
-
- @Test
- public void testSpringValidationFieldType() {
- LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
- validator.afterPropertiesSet();
-
- ValidPerson person = new ValidPerson();
- person.setName("Phil");
- person.getAddress().setStreet("Phil's Street");
- BeanPropertyBindingResult errors = new BeanPropertyBindingResult(person, "person");
- validator.validate(person, errors);
- assertThat(errors.getErrorCount()).isEqualTo(1);
- assertThat(errors.getFieldError("address").getRejectedValue()).isInstanceOf(ValidAddress.class);
- }
-
- @Test
- public void testSpringValidation() {
- LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
- validator.afterPropertiesSet();
-
- ValidPerson person = new ValidPerson();
- BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person");
- validator.validate(person, result);
- assertThat(result.getErrorCount()).isEqualTo(2);
- FieldError fieldError = result.getFieldError("name");
- assertThat(fieldError.getField()).isEqualTo("name");
- List errorCodes = Arrays.asList(fieldError.getCodes());
- assertThat(errorCodes.size()).isEqualTo(4);
- assertThat(errorCodes.contains("NotNull.person.name")).isTrue();
- assertThat(errorCodes.contains("NotNull.name")).isTrue();
- assertThat(errorCodes.contains("NotNull.java.lang.String")).isTrue();
- assertThat(errorCodes.contains("NotNull")).isTrue();
- fieldError = result.getFieldError("address.street");
- assertThat(fieldError.getField()).isEqualTo("address.street");
- errorCodes = Arrays.asList(fieldError.getCodes());
- assertThat(errorCodes.size()).isEqualTo(5);
- assertThat(errorCodes.contains("NotNull.person.address.street")).isTrue();
- assertThat(errorCodes.contains("NotNull.address.street")).isTrue();
- assertThat(errorCodes.contains("NotNull.street")).isTrue();
- assertThat(errorCodes.contains("NotNull.java.lang.String")).isTrue();
- assertThat(errorCodes.contains("NotNull")).isTrue();
- }
-
- @Test
- public void testSpringValidationWithClassLevel() {
- LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
- validator.afterPropertiesSet();
-
- ValidPerson person = new ValidPerson();
- person.setName("Juergen");
- person.getAddress().setStreet("Juergen's Street");
- BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person");
- validator.validate(person, result);
- assertThat(result.getErrorCount()).isEqualTo(1);
- ObjectError globalError = result.getGlobalError();
- List errorCodes = Arrays.asList(globalError.getCodes());
- assertThat(errorCodes.size()).isEqualTo(2);
- assertThat(errorCodes.contains("NameAddressValid.person")).isTrue();
- assertThat(errorCodes.contains("NameAddressValid")).isTrue();
- }
-
- @Test
- public void testSpringValidationWithAutowiredValidator() {
- ConfigurableApplicationContext ctx = new AnnotationConfigApplicationContext(
- LocalValidatorFactoryBean.class);
- LocalValidatorFactoryBean validator = ctx.getBean(LocalValidatorFactoryBean.class);
-
- ValidPerson person = new ValidPerson();
- person.expectsAutowiredValidator = true;
- person.setName("Juergen");
- person.getAddress().setStreet("Juergen's Street");
- BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person");
- validator.validate(person, result);
- assertThat(result.getErrorCount()).isEqualTo(1);
- ObjectError globalError = result.getGlobalError();
- List errorCodes = Arrays.asList(globalError.getCodes());
- assertThat(errorCodes.size()).isEqualTo(2);
- assertThat(errorCodes.contains("NameAddressValid.person")).isTrue();
- assertThat(errorCodes.contains("NameAddressValid")).isTrue();
- ctx.close();
- }
-
- @Test
- public void testSpringValidationWithErrorInListElement() {
- LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
- validator.afterPropertiesSet();
-
- ValidPerson person = new ValidPerson();
- person.getAddressList().add(new ValidAddress());
- BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person");
- validator.validate(person, result);
- assertThat(result.getErrorCount()).isEqualTo(3);
- FieldError fieldError = result.getFieldError("name");
- assertThat(fieldError.getField()).isEqualTo("name");
- fieldError = result.getFieldError("address.street");
- assertThat(fieldError.getField()).isEqualTo("address.street");
- fieldError = result.getFieldError("addressList[0].street");
- assertThat(fieldError.getField()).isEqualTo("addressList[0].street");
- }
-
- @Test
- public void testSpringValidationWithErrorInSetElement() {
- LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
- validator.afterPropertiesSet();
-
- ValidPerson person = new ValidPerson();
- person.getAddressSet().add(new ValidAddress());
- BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person");
- validator.validate(person, result);
- assertThat(result.getErrorCount()).isEqualTo(3);
- FieldError fieldError = result.getFieldError("name");
- assertThat(fieldError.getField()).isEqualTo("name");
- fieldError = result.getFieldError("address.street");
- assertThat(fieldError.getField()).isEqualTo("address.street");
- fieldError = result.getFieldError("addressSet[].street");
- assertThat(fieldError.getField()).isEqualTo("addressSet[].street");
- }
-
- @Test
- public void testInnerBeanValidation() {
- LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
- validator.afterPropertiesSet();
-
- MainBean mainBean = new MainBean();
- Errors errors = new BeanPropertyBindingResult(mainBean, "mainBean");
- validator.validate(mainBean, errors);
- Object rejected = errors.getFieldValue("inner.value");
- assertThat(rejected).isNull();
- }
-
- @Test
- public void testValidationWithOptionalField() {
- LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
- validator.afterPropertiesSet();
-
- MainBeanWithOptional mainBean = new MainBeanWithOptional();
- Errors errors = new BeanPropertyBindingResult(mainBean, "mainBean");
- validator.validate(mainBean, errors);
- Object rejected = errors.getFieldValue("inner.value");
- assertThat(rejected).isNull();
- }
-
- @Test
- public void testListValidation() {
- LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
- validator.afterPropertiesSet();
-
- ListContainer listContainer = new ListContainer();
- listContainer.addString("A");
- listContainer.addString("X");
-
- BeanPropertyBindingResult errors = new BeanPropertyBindingResult(listContainer, "listContainer");
- errors.initConversion(new DefaultConversionService());
- validator.validate(listContainer, errors);
-
- FieldError fieldError = errors.getFieldError("list[1]");
- assertThat(fieldError).isNotNull();
- assertThat(fieldError.getRejectedValue()).isEqualTo("X");
- assertThat(errors.getFieldValue("list[1]")).isEqualTo("X");
- }
-
-
- @NameAddressValid
- public static class ValidPerson {
-
- @NotNull
- private String name;
-
- @Valid
- private ValidAddress address = new ValidAddress();
-
- @Valid
- private List addressList = new ArrayList<>();
-
- @Valid
- private Set addressSet = new LinkedHashSet<>();
-
- public boolean expectsAutowiredValidator = false;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public ValidAddress getAddress() {
- return address;
- }
-
- public void setAddress(ValidAddress address) {
- this.address = address;
- }
-
- public List getAddressList() {
- return addressList;
- }
-
- public void setAddressList(List addressList) {
- this.addressList = addressList;
- }
-
- public Set getAddressSet() {
- return addressSet;
- }
-
- public void setAddressSet(Set addressSet) {
- this.addressSet = addressSet;
- }
- }
-
-
- public static class ValidAddress {
-
- @NotNull
- private String street;
-
- public String getStreet() {
- return street;
- }
-
- public void setStreet(String street) {
- this.street = street;
- }
- }
-
-
- @Target(ElementType.TYPE)
- @Retention(RetentionPolicy.RUNTIME)
- @Constraint(validatedBy = NameAddressValidator.class)
- public @interface NameAddressValid {
-
- String message() default "Street must not contain name";
-
- Class>[] groups() default {};
-
- Class>[] payload() default {};
- }
-
-
- public static class NameAddressValidator implements ConstraintValidator {
-
- @Autowired
- private Environment environment;
-
- @Override
- public void initialize(NameAddressValid constraintAnnotation) {
- }
-
- @Override
- public boolean isValid(ValidPerson value, ConstraintValidatorContext context) {
- if (value.expectsAutowiredValidator) {
- assertThat(this.environment).isNotNull();
- }
- boolean valid = (value.name == null || !value.address.street.contains(value.name));
- if (!valid && "Phil".equals(value.name)) {
- context.buildConstraintViolationWithTemplate(
- context.getDefaultConstraintMessageTemplate()).addPropertyNode("address").addConstraintViolation().disableDefaultConstraintViolation();
- }
- return valid;
- }
- }
-
-
- public static class MainBean {
-
- @InnerValid
- private InnerBean inner = new InnerBean();
-
- public InnerBean getInner() {
- return inner;
- }
- }
-
-
- public static class MainBeanWithOptional {
-
- @InnerValid
- private InnerBean inner = new InnerBean();
-
- public Optional getInner() {
- return Optional.ofNullable(inner);
- }
- }
-
-
- public static class InnerBean {
-
- private String value;
-
- public String getValue() {
- return value;
- }
- public void setValue(String value) {
- this.value = value;
- }
- }
-
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.FIELD)
- @Constraint(validatedBy=InnerValidator.class)
- public static @interface InnerValid {
-
- String message() default "NOT VALID";
-
- Class>[] groups() default { };
-
- Class extends Payload>[] payload() default {};
- }
-
-
- public static class InnerValidator implements ConstraintValidator {
-
- @Override
- public void initialize(InnerValid constraintAnnotation) {
- }
-
- @Override
- public boolean isValid(InnerBean bean, ConstraintValidatorContext context) {
- context.disableDefaultConstraintViolation();
- if (bean.getValue() == null) {
- context.buildConstraintViolationWithTemplate("NULL").addPropertyNode("value").addConstraintViolation();
- return false;
- }
- return true;
- }
- }
-
-
- public static class ListContainer {
-
- @NotXList
- private List list = new ArrayList<>();
-
- public void addString(String value) {
- list.add(value);
- }
-
- public List getList() {
- return list;
- }
- }
-
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.FIELD)
- @Constraint(validatedBy = NotXListValidator.class)
- public @interface NotXList {
-
- String message() default "Should not be X";
-
- Class>[] groups() default {};
-
- Class extends Payload>[] payload() default {};
- }
-
-
- public static class NotXListValidator implements ConstraintValidator> {
-
- @Override
- public void initialize(NotXList constraintAnnotation) {
- }
-
- @Override
- public boolean isValid(List list, ConstraintValidatorContext context) {
- context.disableDefaultConstraintViolation();
- boolean valid = true;
- for (int i = 0; i < list.size(); i++) {
- if ("X".equals(list.get(i))) {
- context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate()).addBeanNode().inIterable().atIndex(i).addConstraintViolation();
- valid = false;
- }
- }
- return valid;
- }
- }
-
-}
diff --git a/spring-context/spring-context.gradle b/spring-context/spring-context.gradle
index 221e0f12fe1..9e4cf72ca95 100644
--- a/spring-context/spring-context.gradle
+++ b/spring-context/spring-context.gradle
@@ -9,20 +9,18 @@ dependencies {
api(project(":spring-core"))
api(project(":spring-expression"))
optional(project(":spring-instrument"))
- optional("javax.annotation:javax.annotation-api")
- optional("javax.ejb:javax.ejb-api")
- optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api")
- optional("javax.inject:javax.inject")
- optional("javax.interceptor:javax.interceptor-api")
+ optional("jakarta.annotation:jakarta.annotation-api")
+ optional("jakarta.ejb:jakarta.ejb-api")
+ optional("jakarta.enterprise.concurrent:jakarta.enterprise.concurrent-api")
+ optional("jakarta.inject:jakarta.inject-api")
+ optional("jakarta.interceptor:jakarta.interceptor-api")
optional("javax.money:money-api")
- // Overriding 2.0.1.Final due to Bean Validation 1.1 compatibility in LocalValidatorFactoryBean
- optional("javax.validation:validation-api:1.1.0.Final")
- optional("javax.xml.ws:jaxws-api")
+ optional("jakarta.validation:jakarta.validation-api")
+ optional("jakarta.xml.ws:jakarta.xml.ws-api")
optional("org.aspectj:aspectjweaver")
optional("org.codehaus.groovy:groovy")
optional("org.apache-extras.beanshell:bsh")
- optional("joda-time:joda-time")
- optional("org.hibernate:hibernate-validator:5.4.3.Final")
+ optional("org.hibernate:hibernate-validator")
optional("org.jetbrains.kotlin:kotlin-reflect")
optional("org.jetbrains.kotlin:kotlin-stdlib")
optional("org.reactivestreams:reactive-streams")
@@ -34,10 +32,10 @@ dependencies {
testImplementation("org.codehaus.groovy:groovy-test")
testImplementation("org.codehaus.groovy:groovy-xml")
testImplementation("org.apache.commons:commons-pool2")
- testImplementation("javax.inject:javax.inject-tck")
+ testImplementation("jakarta.inject:jakarta.inject-tck")
testImplementation("org.awaitility:awaitility")
- testRuntimeOnly("javax.xml.bind:jaxb-api")
- testRuntimeOnly("org.glassfish:javax.el")
+ testRuntimeOnly("jakarta.xml.bind:jakarta.xml.bind-api")
+ testRuntimeOnly("org.glassfish:jakarta.el")
// Substitute for javax.management:jmxremote_optional:1.0.1_04 (not available on Maven Central)
testRuntimeOnly("org.glassfish.external:opendmk_jmxremote_optional_jar")
testRuntimeOnly("org.javamoney:moneta")
diff --git a/spring-context/src/jmh/java/org/springframework/context/annotation/AnnotationProcessorBenchmark.java b/spring-context/src/jmh/java/org/springframework/context/annotation/AnnotationProcessorBenchmark.java
index c00cf0ddfae..3e19ca7e978 100644
--- a/spring-context/src/jmh/java/org/springframework/context/annotation/AnnotationProcessorBenchmark.java
+++ b/spring-context/src/jmh/java/org/springframework/context/annotation/AnnotationProcessorBenchmark.java
@@ -16,8 +16,7 @@
package org.springframework.context.annotation;
-import javax.annotation.Resource;
-
+import jakarta.annotation.Resource;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Mode;
diff --git a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationBeanNameGenerator.java b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationBeanNameGenerator.java
index a589a92335a..c12647a3ca6 100644
--- a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationBeanNameGenerator.java
+++ b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationBeanNameGenerator.java
@@ -41,8 +41,8 @@ import org.springframework.util.StringUtils;
* {@link org.springframework.stereotype.Repository @Repository}) are
* themselves annotated with {@code @Component}.
*
- * Also supports Java EE 6's {@link javax.annotation.ManagedBean} and
- * JSR-330's {@link javax.inject.Named} annotations, if available. Note that
+ *
Also supports Jakarta EE's {@link jakarta.annotation.ManagedBean} and
+ * JSR-330's {@link jakarta.inject.Named} annotations, if available. Note that
* Spring component annotations always override such standard annotations.
*
*
If the annotation's value doesn't indicate a bean name, an appropriate
@@ -58,7 +58,7 @@ import org.springframework.util.StringUtils;
* @see org.springframework.stereotype.Repository#value()
* @see org.springframework.stereotype.Service#value()
* @see org.springframework.stereotype.Controller#value()
- * @see javax.inject.Named#value()
+ * @see jakarta.inject.Named#value()
* @see FullyQualifiedAnnotationBeanNameGenerator
*/
public class AnnotationBeanNameGenerator implements BeanNameGenerator {
@@ -136,8 +136,8 @@ public class AnnotationBeanNameGenerator implements BeanNameGenerator {
boolean isStereotype = annotationType.equals(COMPONENT_ANNOTATION_CLASSNAME) ||
metaAnnotationTypes.contains(COMPONENT_ANNOTATION_CLASSNAME) ||
- annotationType.equals("javax.annotation.ManagedBean") ||
- annotationType.equals("javax.inject.Named");
+ annotationType.equals("jakarta.annotation.ManagedBean") ||
+ annotationType.equals("jakarta.inject.Named");
return (isStereotype && attributes != null && attributes.containsKey("value"));
}
diff --git a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java
index 86ea5feb733..b2d29bca559 100644
--- a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java
+++ b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java
@@ -32,7 +32,7 @@ import org.springframework.util.Assert;
* Standalone application context, accepting component classes as input —
* in particular {@link Configuration @Configuration}-annotated classes, but also plain
* {@link org.springframework.stereotype.Component @Component} types and JSR-330 compliant
- * classes using {@code javax.inject} annotations.
+ * classes using {@code jakarta.inject} annotations.
*
*
Allows for registering classes one by one using {@link #register(Class...)}
* as well as for classpath scanning using {@link #scan(String...)}.
diff --git a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigUtils.java b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigUtils.java
index 91b1719b708..9c253124eea 100644
--- a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigUtils.java
+++ b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigUtils.java
@@ -123,8 +123,8 @@ public abstract class AnnotationConfigUtils {
static {
ClassLoader classLoader = AnnotationConfigUtils.class.getClassLoader();
- jsr250Present = ClassUtils.isPresent("javax.annotation.Resource", classLoader);
- jpaPresent = ClassUtils.isPresent("javax.persistence.EntityManagerFactory", classLoader) &&
+ jsr250Present = ClassUtils.isPresent("jakarta.annotation.Resource", classLoader);
+ jpaPresent = ClassUtils.isPresent("jakarta.persistence.EntityManagerFactory", classLoader) &&
ClassUtils.isPresent(PERSISTENCE_ANNOTATION_PROCESSOR_CLASS_NAME, classLoader);
}
diff --git a/spring-context/src/main/java/org/springframework/context/annotation/Bean.java b/spring-context/src/main/java/org/springframework/context/annotation/Bean.java
index a723b02c350..2f254d5a711 100644
--- a/spring-context/src/main/java/org/springframework/context/annotation/Bean.java
+++ b/spring-context/src/main/java/org/springframework/context/annotation/Bean.java
@@ -99,7 +99,7 @@ import org.springframework.core.annotation.AliasFor;
*
NOTE: {@code @Order} values may influence priorities at injection points,
* but please be aware that they do not influence singleton startup order which is an
* orthogonal concern determined by dependency relationships and {@code @DependsOn}
- * declarations as mentioned above. Also, {@link javax.annotation.Priority} is not
+ * declarations as mentioned above. Also, {@link jakarta.annotation.Priority} is not
* available at this level since it cannot be declared on methods; its semantics can
* be modeled through {@code @Order} values in combination with {@code @Primary} on
* a single bean per type.
diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java
index 65cbb9bdb9f..bafdd032f00 100644
--- a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java
+++ b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathBeanDefinitionScanner.java
@@ -47,8 +47,8 @@ import org.springframework.util.PatternMatchUtils;
* {@link org.springframework.stereotype.Service @Service}, or
* {@link org.springframework.stereotype.Controller @Controller} stereotype.
*
- *
Also supports Java EE 6's {@link javax.annotation.ManagedBean} and
- * JSR-330's {@link javax.inject.Named} annotations, if available.
+ *
Also supports Jakarta EE's {@link jakarta.annotation.ManagedBean} and
+ * JSR-330's {@link jakarta.inject.Named} annotations, if available.
*
* @author Mark Fisher
* @author Juergen Hoeller
diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java
index 05ea7a5159a..5be6cb914b4 100644
--- a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java
+++ b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java
@@ -197,8 +197,8 @@ public class ClassPathScanningCandidateComponentProvider implements EnvironmentC
* {@link Component @Component} meta-annotation including the
* {@link Repository @Repository}, {@link Service @Service}, and
* {@link Controller @Controller} stereotype annotations.
- *
Also supports Java EE 6's {@link javax.annotation.ManagedBean} and
- * JSR-330's {@link javax.inject.Named} annotations, if available.
+ *
Also supports Jakarta EE's {@link jakarta.annotation.ManagedBean} and
+ * JSR-330's {@link jakarta.inject.Named} annotations, if available.
*
*/
@SuppressWarnings("unchecked")
@@ -207,16 +207,16 @@ public class ClassPathScanningCandidateComponentProvider implements EnvironmentC
ClassLoader cl = ClassPathScanningCandidateComponentProvider.class.getClassLoader();
try {
this.includeFilters.add(new AnnotationTypeFilter(
- ((Class extends Annotation>) ClassUtils.forName("javax.annotation.ManagedBean", cl)), false));
- logger.trace("JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning");
+ ((Class extends Annotation>) ClassUtils.forName("jakarta.annotation.ManagedBean", cl)), false));
+ logger.trace("JSR-250 'jakarta.annotation.ManagedBean' found and supported for component scanning");
}
catch (ClassNotFoundException ex) {
- // JSR-250 1.1 API (as included in Java EE 6) not available - simply skip.
+ // JSR-250 1.1 API (as included in Jakarta EE) not available - simply skip.
}
try {
this.includeFilters.add(new AnnotationTypeFilter(
- ((Class extends Annotation>) ClassUtils.forName("javax.inject.Named", cl)), false));
- logger.trace("JSR-330 'javax.inject.Named' annotation found and supported for component scanning");
+ ((Class extends Annotation>) ClassUtils.forName("jakarta.inject.Named", cl)), false));
+ logger.trace("JSR-330 'jakarta.inject.Named' annotation found and supported for component scanning");
}
catch (ClassNotFoundException ex) {
// JSR-330 API not available - simply skip.
diff --git a/spring-context/src/main/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.java b/spring-context/src/main/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.java
index d9acb722b08..75b7d08afec 100644
--- a/spring-context/src/main/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.java
+++ b/spring-context/src/main/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.java
@@ -37,14 +37,15 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.annotation.Resource;
-import javax.ejb.EJB;
import javax.xml.namespace.QName;
-import javax.xml.ws.Service;
-import javax.xml.ws.WebServiceClient;
-import javax.xml.ws.WebServiceRef;
+
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.PreDestroy;
+import jakarta.annotation.Resource;
+import jakarta.ejb.EJB;
+import jakarta.xml.ws.Service;
+import jakarta.xml.ws.WebServiceClient;
+import jakarta.xml.ws.WebServiceRef;
import org.springframework.aop.TargetSource;
import org.springframework.aop.framework.ProxyFactory;
@@ -77,36 +78,32 @@ import org.springframework.util.StringValueResolver;
/**
* {@link org.springframework.beans.factory.config.BeanPostProcessor} implementation
* that supports common Java annotations out of the box, in particular the JSR-250
- * annotations in the {@code javax.annotation} package. These common Java
- * annotations are supported in many Java EE 5 technologies (e.g. JSF 1.2),
+ * annotations in the {@code jakarta.annotation} package. These common Java
+ * annotations are supported in many Jakarta EE technologies (e.g. JSF 1.2),
* as well as in Java 6's JAX-WS.
*
- *
This post-processor includes support for the {@link javax.annotation.PostConstruct}
- * and {@link javax.annotation.PreDestroy} annotations - as init annotation
+ *
This post-processor includes support for the {@link jakarta.annotation.PostConstruct}
+ * and {@link jakarta.annotation.PreDestroy} annotations - as init annotation
* and destroy annotation, respectively - through inheriting from
* {@link InitDestroyAnnotationBeanPostProcessor} with pre-configured annotation types.
*
- *
The central element is the {@link javax.annotation.Resource} annotation
+ *
The central element is the {@link jakarta.annotation.Resource} annotation
* for annotation-driven injection of named beans, by default from the containing
* Spring BeanFactory, with only {@code mappedName} references resolved in JNDI.
* The {@link #setAlwaysUseJndiLookup "alwaysUseJndiLookup" flag} enforces JNDI lookups
- * equivalent to standard Java EE 5 resource injection for {@code name} references
+ * equivalent to standard Jakarta EE resource injection for {@code name} references
* and default names as well. The target beans can be simple POJOs, with no special
* requirements other than the type having to match.
*
*
The JAX-WS {@link javax.xml.ws.WebServiceRef} annotation is supported too,
- * analogous to {@link javax.annotation.Resource} but with the capability of creating
+ * analogous to {@link jakarta.annotation.Resource} but with the capability of creating
* specific JAX-WS service endpoints. This may either point to an explicitly defined
* resource by name or operate on a locally specified JAX-WS service class. Finally,
- * this post-processor also supports the EJB 3 {@link javax.ejb.EJB} annotation,
- * analogous to {@link javax.annotation.Resource} as well, with the capability to
+ * this post-processor also supports the EJB 3 {@link jakarta.ejb.EJB} annotation,
+ * analogous to {@link jakarta.annotation.Resource} as well, with the capability to
* specify both a local bean name and a global JNDI name for fallback retrieval.
* The target beans can be plain POJOs as well as EJB 3 Session Beans in this case.
*
- *
The common annotations supported by this post-processor are available in
- * Java 6 (JDK 1.6) as well as in Java EE 5/6 (which provides a standalone jar for
- * its common annotations as well, allowing for use in any Java 5 based application).
- *
*
For default usage, resolving resource names as Spring bean names,
* simply define the following in your application context:
*
@@ -114,7 +111,7 @@ import org.springframework.util.StringValueResolver;
* <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>
*
* For direct JNDI access, resolving resource names as JNDI resource references
- * within the Java EE application's "java:comp/env/" namespace, use the following:
+ * within the Jakarta EE application's "java:comp/env/" namespace, use the following:
*
*
* <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor">
@@ -156,7 +153,7 @@ public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBean
static {
webServiceRefClass = loadAnnotationType("javax.xml.ws.WebServiceRef");
- ejbClass = loadAnnotationType("javax.ejb.EJB");
+ ejbClass = loadAnnotationType("jakarta.ejb.EJB");
resourceAnnotationTypes.add(Resource.class);
if (webServiceRefClass != null) {
@@ -191,7 +188,7 @@ public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBean
/**
* Create a new CommonAnnotationBeanPostProcessor,
* with the init and destroy annotation types set to
- * {@link javax.annotation.PostConstruct} and {@link javax.annotation.PreDestroy},
+ * {@link jakarta.annotation.PostConstruct} and {@link jakarta.annotation.PreDestroy},
* respectively.
*/
public CommonAnnotationBeanPostProcessor() {
@@ -229,11 +226,11 @@ public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBean
}
/**
- * Set whether to always use JNDI lookups equivalent to standard Java EE 5 resource
+ * Set whether to always use JNDI lookups equivalent to standard Jakarta EE resource
* injection, even for {@code name} attributes and default names .
* Default is "false": Resource names are used for Spring bean lookups in the
* containing BeanFactory; only {@code mappedName} attributes point directly
- * into JNDI. Switch this flag to "true" for enforcing Java EE style JNDI lookups
+ * into JNDI. Switch this flag to "true" for enforcing Jakarta EE style JNDI lookups
* in any case, even for {@code name} attributes and default names.
* @see #setJndiFactory
* @see #setResourceFactory
@@ -249,7 +246,7 @@ public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBean
* This factory will also be used if "alwaysUseJndiLookup" is set to "true" in order
* to enforce JNDI lookups even for {@code name} attributes and default names.
*
The default is a {@link org.springframework.jndi.support.SimpleJndiBeanFactory}
- * for JNDI lookup behavior equivalent to standard Java EE 5 resource injection.
+ * for JNDI lookup behavior equivalent to standard Jakarta EE resource injection.
* @see #setResourceFactory
* @see #setAlwaysUseJndiLookup
*/
@@ -266,7 +263,7 @@ public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBean
* if any, looking up resource names as Spring bean names. Specify the resource
* factory explicitly for programmatic usage of this post-processor.
*
Specifying Spring's {@link org.springframework.jndi.support.SimpleJndiBeanFactory}
- * leads to JNDI lookup behavior equivalent to standard Java EE 5 resource injection,
+ * leads to JNDI lookup behavior equivalent to standard Jakarta EE resource injection,
* even for {@code name} attributes and default names. This is the same behavior
* that the "alwaysUseJndiLookup" flag enables.
* @see #setAlwaysUseJndiLookup
diff --git a/spring-context/src/main/java/org/springframework/context/annotation/Configuration.java b/spring-context/src/main/java/org/springframework/context/annotation/Configuration.java
index 725999d89c8..0826d1904a8 100644
--- a/spring-context/src/main/java/org/springframework/context/annotation/Configuration.java
+++ b/spring-context/src/main/java/org/springframework/context/annotation/Configuration.java
@@ -86,7 +86,7 @@ import org.springframework.stereotype.Component;
*
{@code @Configuration} is meta-annotated with {@link Component @Component}, therefore
* {@code @Configuration} classes are candidates for component scanning (typically using
* Spring XML's {@code } element) and therefore may also take
- * advantage of {@link Autowired @Autowired}/{@link javax.inject.Inject @Inject}
+ * advantage of {@link Autowired @Autowired}/{@link jakarta.inject.Inject @Inject}
* like any regular {@code @Component}. In particular, if a single constructor is present
* autowiring semantics will be applied transparently for that constructor:
*
diff --git a/spring-context/src/main/java/org/springframework/context/annotation/Jsr330ScopeMetadataResolver.java b/spring-context/src/main/java/org/springframework/context/annotation/Jsr330ScopeMetadataResolver.java
index d9e033a8338..7dc65574f4c 100644
--- a/spring-context/src/main/java/org/springframework/context/annotation/Jsr330ScopeMetadataResolver.java
+++ b/spring-context/src/main/java/org/springframework/context/annotation/Jsr330ScopeMetadataResolver.java
@@ -26,7 +26,7 @@ import org.springframework.lang.Nullable;
/**
* Simple {@link ScopeMetadataResolver} implementation that follows JSR-330 scoping rules:
- * defaulting to prototype scope unless {@link javax.inject.Singleton} is present.
+ * defaulting to prototype scope unless {@link jakarta.inject.Singleton} is present.
*
*
This scope resolver can be used with {@link ClassPathBeanDefinitionScanner} and
* {@link AnnotatedBeanDefinitionReader} for standard JSR-330 compliance. However,
@@ -46,7 +46,7 @@ public class Jsr330ScopeMetadataResolver implements ScopeMetadataResolver {
public Jsr330ScopeMetadataResolver() {
- registerScope("javax.inject.Singleton", BeanDefinition.SCOPE_SINGLETON);
+ registerScope("jakarta.inject.Singleton", BeanDefinition.SCOPE_SINGLETON);
}
@@ -93,7 +93,7 @@ public class Jsr330ScopeMetadataResolver implements ScopeMetadataResolver {
String found = null;
for (String annType : annTypes) {
Set metaAnns = annDef.getMetadata().getMetaAnnotationTypes(annType);
- if (metaAnns.contains("javax.inject.Scope")) {
+ if (metaAnns.contains("jakarta.inject.Scope")) {
if (found != null) {
throw new IllegalStateException("Found ambiguous scope annotations on bean class [" +
definition.getBeanClassName() + "]: " + found + ", " + annType);
diff --git a/spring-context/src/main/java/org/springframework/context/annotation/Lazy.java b/spring-context/src/main/java/org/springframework/context/annotation/Lazy.java
index 9d04a9df26e..e708f36b31f 100644
--- a/spring-context/src/main/java/org/springframework/context/annotation/Lazy.java
+++ b/spring-context/src/main/java/org/springframework/context/annotation/Lazy.java
@@ -44,9 +44,9 @@ import java.lang.annotation.Target;
*
* In addition to its role for component initialization, this annotation may also be placed
* on injection points marked with {@link org.springframework.beans.factory.annotation.Autowired}
- * or {@link javax.inject.Inject}: In that context, it leads to the creation of a
+ * or {@link jakarta.inject.Inject}: In that context, it leads to the creation of a
* lazy-resolution proxy for all affected dependencies, as an alternative to using
- * {@link org.springframework.beans.factory.ObjectFactory} or {@link javax.inject.Provider}.
+ * {@link org.springframework.beans.factory.ObjectFactory} or {@link jakarta.inject.Provider}.
*
* @author Chris Beams
* @author Juergen Hoeller
diff --git a/spring-context/src/main/java/org/springframework/context/annotation/MBeanExportConfiguration.java b/spring-context/src/main/java/org/springframework/context/annotation/MBeanExportConfiguration.java
index ea4f5b64a67..25715f82cad 100644
--- a/spring-context/src/main/java/org/springframework/context/annotation/MBeanExportConfiguration.java
+++ b/spring-context/src/main/java/org/springframework/context/annotation/MBeanExportConfiguration.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,7 +19,6 @@ package org.springframework.context.annotation;
import java.util.Map;
import javax.management.MBeanServer;
-import javax.naming.NamingException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
@@ -28,14 +27,10 @@ import org.springframework.context.EnvironmentAware;
import org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotationMetadata;
-import org.springframework.jmx.MBeanServerNotFoundException;
import org.springframework.jmx.export.annotation.AnnotationMBeanExporter;
import org.springframework.jmx.support.RegistrationPolicy;
-import org.springframework.jmx.support.WebSphereMBeanServerFactoryBean;
-import org.springframework.jndi.JndiLocatorDelegate;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
-import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;
/**
@@ -116,15 +111,6 @@ public class MBeanExportConfiguration implements ImportAware, EnvironmentAware,
Assert.state(this.beanFactory != null, "No BeanFactory set");
exporter.setServer(this.beanFactory.getBean(server, MBeanServer.class));
}
- else {
- SpecificPlatform specificPlatform = SpecificPlatform.get();
- if (specificPlatform != null) {
- MBeanServer mbeanServer = specificPlatform.getMBeanServer();
- if (mbeanServer != null) {
- exporter.setServer(mbeanServer);
- }
- }
- }
}
private void setupRegistrationPolicy(AnnotationMBeanExporter exporter, AnnotationAttributes enableMBeanExport) {
@@ -132,58 +118,4 @@ public class MBeanExportConfiguration implements ImportAware, EnvironmentAware,
exporter.setRegistrationPolicy(registrationPolicy);
}
-
- /**
- * Specific platforms that might need custom MBean handling.
- */
- public enum SpecificPlatform {
-
- /**
- * Weblogic.
- */
- WEBLOGIC("weblogic.management.Helper") {
- @Override
- public MBeanServer getMBeanServer() {
- try {
- return new JndiLocatorDelegate().lookup("java:comp/env/jmx/runtime", MBeanServer.class);
- }
- catch (NamingException ex) {
- throw new MBeanServerNotFoundException("Failed to retrieve WebLogic MBeanServer from JNDI", ex);
- }
- }
- },
-
- /**
- * Websphere.
- */
- WEBSPHERE("com.ibm.websphere.management.AdminServiceFactory") {
- @Override
- public MBeanServer getMBeanServer() {
- WebSphereMBeanServerFactoryBean fb = new WebSphereMBeanServerFactoryBean();
- fb.afterPropertiesSet();
- return fb.getObject();
- }
- };
-
- private final String identifyingClass;
-
- SpecificPlatform(String identifyingClass) {
- this.identifyingClass = identifyingClass;
- }
-
- @Nullable
- public abstract MBeanServer getMBeanServer();
-
- @Nullable
- public static SpecificPlatform get() {
- ClassLoader classLoader = MBeanExportConfiguration.class.getClassLoader();
- for (SpecificPlatform environment : values()) {
- if (ClassUtils.isPresent(environment.identifyingClass, classLoader)) {
- return environment;
- }
- }
- return null;
- }
- }
-
}
diff --git a/spring-context/src/main/java/org/springframework/context/config/MBeanExportBeanDefinitionParser.java b/spring-context/src/main/java/org/springframework/context/config/MBeanExportBeanDefinitionParser.java
index e1bba29d330..14caba9b4a2 100644
--- a/spring-context/src/main/java/org/springframework/context/config/MBeanExportBeanDefinitionParser.java
+++ b/spring-context/src/main/java/org/springframework/context/config/MBeanExportBeanDefinitionParser.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2017 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -76,12 +76,6 @@ class MBeanExportBeanDefinitionParser extends AbstractBeanDefinitionParser {
if (StringUtils.hasText(serverBeanName)) {
builder.addPropertyReference("server", serverBeanName);
}
- else {
- AbstractBeanDefinition specialServer = MBeanServerBeanDefinitionParser.findServerForSpecialEnvironment();
- if (specialServer != null) {
- builder.addPropertyValue("server", specialServer);
- }
- }
String registration = element.getAttribute(REGISTRATION_ATTRIBUTE);
RegistrationPolicy registrationPolicy = RegistrationPolicy.FAIL_ON_EXISTING;
diff --git a/spring-context/src/main/java/org/springframework/context/config/MBeanServerBeanDefinitionParser.java b/spring-context/src/main/java/org/springframework/context/config/MBeanServerBeanDefinitionParser.java
index 78062b65835..89114cf2362 100644
--- a/spring-context/src/main/java/org/springframework/context/config/MBeanServerBeanDefinitionParser.java
+++ b/spring-context/src/main/java/org/springframework/context/config/MBeanServerBeanDefinitionParser.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2018 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,10 +24,6 @@ import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.jmx.support.MBeanServerFactoryBean;
-import org.springframework.jmx.support.WebSphereMBeanServerFactoryBean;
-import org.springframework.jndi.JndiObjectFactoryBean;
-import org.springframework.lang.Nullable;
-import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;
/**
@@ -49,17 +45,6 @@ class MBeanServerBeanDefinitionParser extends AbstractBeanDefinitionParser {
private static final String AGENT_ID_ATTRIBUTE = "agent-id";
- private static final boolean weblogicPresent;
-
- private static final boolean webspherePresent;
-
- static {
- ClassLoader classLoader = MBeanServerBeanDefinitionParser.class.getClassLoader();
- weblogicPresent = ClassUtils.isPresent("weblogic.management.Helper", classLoader);
- webspherePresent = ClassUtils.isPresent("com.ibm.websphere.management.AdminServiceFactory", classLoader);
- }
-
-
@Override
protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext) {
String id = element.getAttribute(ID_ATTRIBUTE);
@@ -74,10 +59,7 @@ class MBeanServerBeanDefinitionParser extends AbstractBeanDefinitionParser {
bd.getPropertyValues().add("agentId", agentId);
return bd;
}
- AbstractBeanDefinition specialServer = findServerForSpecialEnvironment();
- if (specialServer != null) {
- return specialServer;
- }
+
RootBeanDefinition bd = new RootBeanDefinition(MBeanServerFactoryBean.class);
bd.getPropertyValues().add("locateExistingServerIfPossible", Boolean.TRUE);
@@ -87,19 +69,4 @@ class MBeanServerBeanDefinitionParser extends AbstractBeanDefinitionParser {
return bd;
}
- @Nullable
- static AbstractBeanDefinition findServerForSpecialEnvironment() {
- if (weblogicPresent) {
- RootBeanDefinition bd = new RootBeanDefinition(JndiObjectFactoryBean.class);
- bd.getPropertyValues().add("jndiName", "java:comp/env/jmx/runtime");
- return bd;
- }
- else if (webspherePresent) {
- return new RootBeanDefinition(WebSphereMBeanServerFactoryBean.class);
- }
- else {
- return null;
- }
- }
-
}
diff --git a/spring-context/src/main/java/org/springframework/context/weaving/DefaultContextLoadTimeWeaver.java b/spring-context/src/main/java/org/springframework/context/weaving/DefaultContextLoadTimeWeaver.java
index 5820735ce04..11072d21a09 100644
--- a/spring-context/src/main/java/org/springframework/context/weaving/DefaultContextLoadTimeWeaver.java
+++ b/spring-context/src/main/java/org/springframework/context/weaving/DefaultContextLoadTimeWeaver.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -30,8 +30,6 @@ import org.springframework.instrument.classloading.ReflectiveLoadTimeWeaver;
import org.springframework.instrument.classloading.glassfish.GlassFishLoadTimeWeaver;
import org.springframework.instrument.classloading.jboss.JBossLoadTimeWeaver;
import org.springframework.instrument.classloading.tomcat.TomcatLoadTimeWeaver;
-import org.springframework.instrument.classloading.weblogic.WebLogicLoadTimeWeaver;
-import org.springframework.instrument.classloading.websphere.WebSphereLoadTimeWeaver;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
@@ -45,10 +43,9 @@ import org.springframework.util.Assert;
* on a {@code @Configuration} class.
*
*
This class implements a runtime environment check for obtaining the
- * appropriate weaver implementation. As of Spring Framework 5.0, it detects
- * Oracle WebLogic 10+, GlassFish 4+, Tomcat 8+, WildFly 8+, IBM WebSphere 8.5+,
- * {@link InstrumentationSavingAgent Spring's VM agent}, and any {@link ClassLoader}
- * supported by Spring's {@link ReflectiveLoadTimeWeaver} (such as Liberty's).
+ * appropriate weaver implementation, including
+ * {@link InstrumentationSavingAgent Spring's VM agent} and any {@link ClassLoader}
+ * supported by Spring's {@link ReflectiveLoadTimeWeaver}.
*
* @author Juergen Hoeller
* @author Ramnivas Laddad
@@ -120,12 +117,6 @@ public class DefaultContextLoadTimeWeaver implements LoadTimeWeaver, BeanClassLo
else if (name.startsWith("org.jboss.modules")) {
return new JBossLoadTimeWeaver(classLoader);
}
- else if (name.startsWith("com.ibm.ws.classloader")) {
- return new WebSphereLoadTimeWeaver(classLoader);
- }
- else if (name.startsWith("weblogic")) {
- return new WebLogicLoadTimeWeaver(classLoader);
- }
}
catch (Exception ex) {
if (logger.isInfoEnabled()) {
diff --git a/spring-context/src/main/java/org/springframework/ejb/access/AbstractRemoteSlsbInvokerInterceptor.java b/spring-context/src/main/java/org/springframework/ejb/access/AbstractRemoteSlsbInvokerInterceptor.java
deleted file mode 100644
index 1a294ffc9ae..00000000000
--- a/spring-context/src/main/java/org/springframework/ejb/access/AbstractRemoteSlsbInvokerInterceptor.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.ejb.access;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.rmi.RemoteException;
-
-import javax.ejb.EJBHome;
-import javax.ejb.EJBObject;
-import javax.naming.NamingException;
-
-import org.aopalliance.intercept.MethodInvocation;
-
-import org.springframework.lang.Nullable;
-import org.springframework.remoting.RemoteConnectFailureException;
-import org.springframework.remoting.RemoteLookupFailureException;
-
-/**
- * Base class for interceptors proxying remote Stateless Session Beans.
- * Designed for EJB 2.x, but works for EJB 3 Session Beans as well.
- *
- *
Such an interceptor must be the last interceptor in the advice chain.
- * In this case, there is no target object.
- *
- * @author Rod Johnson
- * @author Juergen Hoeller
- */
-public abstract class AbstractRemoteSlsbInvokerInterceptor extends AbstractSlsbInvokerInterceptor {
-
- private boolean refreshHomeOnConnectFailure = false;
-
- private volatile boolean homeAsComponent;
-
-
-
- /**
- * Set whether to refresh the EJB home on connect failure.
- * Default is "false".
- *
Can be turned on to allow for hot restart of the EJB server.
- * If a cached EJB home throws an RMI exception that indicates a
- * remote connect failure, a fresh home will be fetched and the
- * invocation will be retried.
- * @see java.rmi.ConnectException
- * @see java.rmi.ConnectIOException
- * @see java.rmi.NoSuchObjectException
- */
- public void setRefreshHomeOnConnectFailure(boolean refreshHomeOnConnectFailure) {
- this.refreshHomeOnConnectFailure = refreshHomeOnConnectFailure;
- }
-
- @Override
- protected boolean isHomeRefreshable() {
- return this.refreshHomeOnConnectFailure;
- }
-
-
- /**
- * Check for EJB3-style home object that serves as EJB component directly.
- */
- @Override
- protected Method getCreateMethod(Object home) throws EjbAccessException {
- if (this.homeAsComponent) {
- return null;
- }
- if (!(home instanceof EJBHome)) {
- // An EJB3 Session Bean...
- this.homeAsComponent = true;
- return null;
- }
- return super.getCreateMethod(home);
- }
-
-
- /**
- * Fetches an EJB home object and delegates to {@code doInvoke}.
- *
If configured to refresh on connect failure, it will call
- * {@link #refreshAndRetry} on corresponding RMI exceptions.
- * @see #getHome
- * @see #doInvoke
- * @see #refreshAndRetry
- */
- @Override
- @Nullable
- public Object invokeInContext(MethodInvocation invocation) throws Throwable {
- try {
- return doInvoke(invocation);
- }
- catch (RemoteConnectFailureException ex) {
- return handleRemoteConnectFailure(invocation, ex);
- }
- catch (RemoteException ex) {
- if (isConnectFailure(ex)) {
- return handleRemoteConnectFailure(invocation, ex);
- }
- else {
- throw ex;
- }
- }
- }
-
- /**
- * Determine whether the given RMI exception indicates a connect failure.
- *
The default implementation delegates to RmiClientInterceptorUtils.
- * @param ex the RMI exception to check
- * @return whether the exception should be treated as connect failure
- * @see org.springframework.remoting.rmi.RmiClientInterceptorUtils#isConnectFailure
- */
- @SuppressWarnings("deprecation")
- protected boolean isConnectFailure(RemoteException ex) {
- return org.springframework.remoting.rmi.RmiClientInterceptorUtils.isConnectFailure(ex);
- }
-
- @Nullable
- private Object handleRemoteConnectFailure(MethodInvocation invocation, Exception ex) throws Throwable {
- if (this.refreshHomeOnConnectFailure) {
- if (logger.isDebugEnabled()) {
- logger.debug("Could not connect to remote EJB [" + getJndiName() + "] - retrying", ex);
- }
- else if (logger.isWarnEnabled()) {
- logger.warn("Could not connect to remote EJB [" + getJndiName() + "] - retrying");
- }
- return refreshAndRetry(invocation);
- }
- else {
- throw ex;
- }
- }
-
- /**
- * Refresh the EJB home object and retry the given invocation.
- * Called by invoke on connect failure.
- * @param invocation the AOP method invocation
- * @return the invocation result, if any
- * @throws Throwable in case of invocation failure
- * @see #invoke
- */
- @Nullable
- protected Object refreshAndRetry(MethodInvocation invocation) throws Throwable {
- try {
- refreshHome();
- }
- catch (NamingException ex) {
- throw new RemoteLookupFailureException("Failed to locate remote EJB [" + getJndiName() + "]", ex);
- }
- return doInvoke(invocation);
- }
-
-
- /**
- * Perform the given invocation on the current EJB home.
- * Template method to be implemented by subclasses.
- * @param invocation the AOP method invocation
- * @return the invocation result, if any
- * @throws Throwable in case of invocation failure
- * @see #getHome
- * @see #newSessionBeanInstance
- */
- @Nullable
- protected abstract Object doInvoke(MethodInvocation invocation) throws Throwable;
-
-
- /**
- * Return a new instance of the stateless session bean.
- * To be invoked by concrete remote SLSB invoker subclasses.
- *
Can be overridden to change the algorithm.
- * @throws NamingException if thrown by JNDI
- * @throws InvocationTargetException if thrown by the create method
- * @see #create
- */
- protected Object newSessionBeanInstance() throws NamingException, InvocationTargetException {
- if (logger.isDebugEnabled()) {
- logger.debug("Trying to create reference to remote EJB");
- }
- Object ejbInstance = create();
- if (logger.isDebugEnabled()) {
- logger.debug("Obtained reference to remote EJB: " + ejbInstance);
- }
- return ejbInstance;
- }
-
- /**
- * Remove the given EJB instance.
- * To be invoked by concrete remote SLSB invoker subclasses.
- * @param ejb the EJB instance to remove
- * @see javax.ejb.EJBObject#remove
- */
- protected void removeSessionBeanInstance(@Nullable EJBObject ejb) {
- if (ejb != null && !this.homeAsComponent) {
- try {
- ejb.remove();
- }
- catch (Throwable ex) {
- logger.warn("Could not invoke 'remove' on remote EJB proxy", ex);
- }
- }
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/ejb/access/AbstractSlsbInvokerInterceptor.java b/spring-context/src/main/java/org/springframework/ejb/access/AbstractSlsbInvokerInterceptor.java
deleted file mode 100644
index 06657499d6e..00000000000
--- a/spring-context/src/main/java/org/springframework/ejb/access/AbstractSlsbInvokerInterceptor.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.ejb.access;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import javax.naming.Context;
-import javax.naming.NamingException;
-
-import org.aopalliance.intercept.MethodInterceptor;
-import org.aopalliance.intercept.MethodInvocation;
-
-import org.springframework.jndi.JndiObjectLocator;
-import org.springframework.lang.Nullable;
-
-/**
- * Base class for AOP interceptors invoking local or remote Stateless Session Beans.
- * Designed for EJB 2.x, but works for EJB 3 Session Beans as well.
- *
- *
Such an interceptor must be the last interceptor in the advice chain.
- * In this case, there is no direct target object: The call is handled in a
- * special way, getting executed on an EJB instance retrieved via an EJB home.
- *
- * @author Rod Johnson
- * @author Juergen Hoeller
- */
-public abstract class AbstractSlsbInvokerInterceptor extends JndiObjectLocator
- implements MethodInterceptor {
-
- private boolean lookupHomeOnStartup = true;
-
- private boolean cacheHome = true;
-
- private boolean exposeAccessContext = false;
-
- /**
- * The EJB's home object, potentially cached.
- * The type must be Object as it could be either EJBHome or EJBLocalHome.
- */
- @Nullable
- private Object cachedHome;
-
- /**
- * The no-arg create() method required on EJB homes, potentially cached.
- */
- @Nullable
- private Method createMethod;
-
- private final Object homeMonitor = new Object();
-
-
- /**
- * Set whether to look up the EJB home object on startup.
- * Default is "true".
- *
Can be turned off to allow for late start of the EJB server.
- * In this case, the EJB home object will be fetched on first access.
- * @see #setCacheHome
- */
- public void setLookupHomeOnStartup(boolean lookupHomeOnStartup) {
- this.lookupHomeOnStartup = lookupHomeOnStartup;
- }
-
- /**
- * Set whether to cache the EJB home object once it has been located.
- * Default is "true".
- *
Can be turned off to allow for hot restart of the EJB server.
- * In this case, the EJB home object will be fetched for each invocation.
- * @see #setLookupHomeOnStartup
- */
- public void setCacheHome(boolean cacheHome) {
- this.cacheHome = cacheHome;
- }
-
- /**
- * Set whether to expose the JNDI environment context for all access to the target
- * EJB, i.e. for all method invocations on the exposed object reference.
- *
Default is "false", i.e. to only expose the JNDI context for object lookup.
- * Switch this flag to "true" in order to expose the JNDI environment (including
- * the authorization context) for each EJB invocation, as needed by WebLogic
- * for EJBs with authorization requirements.
- */
- public void setExposeAccessContext(boolean exposeAccessContext) {
- this.exposeAccessContext = exposeAccessContext;
- }
-
-
- /**
- * Fetches EJB home on startup, if necessary.
- * @see #setLookupHomeOnStartup
- * @see #refreshHome
- */
- @Override
- public void afterPropertiesSet() throws NamingException {
- super.afterPropertiesSet();
- if (this.lookupHomeOnStartup) {
- // look up EJB home and create method
- refreshHome();
- }
- }
-
- /**
- * Refresh the cached home object, if applicable.
- * Also caches the create method on the home object.
- * @throws NamingException if thrown by the JNDI lookup
- * @see #lookup
- * @see #getCreateMethod
- */
- protected void refreshHome() throws NamingException {
- synchronized (this.homeMonitor) {
- Object home = lookup();
- if (this.cacheHome) {
- this.cachedHome = home;
- this.createMethod = getCreateMethod(home);
- }
- }
- }
-
- /**
- * Determine the create method of the given EJB home object.
- * @param home the EJB home object
- * @return the create method
- * @throws EjbAccessException if the method couldn't be retrieved
- */
- @Nullable
- protected Method getCreateMethod(Object home) throws EjbAccessException {
- try {
- // Cache the EJB create() method that must be declared on the home interface.
- return home.getClass().getMethod("create");
- }
- catch (NoSuchMethodException ex) {
- throw new EjbAccessException("EJB home [" + home + "] has no no-arg create() method");
- }
- }
-
- /**
- * Return the EJB home object to use. Called for each invocation.
- *
Default implementation returns the home created on initialization,
- * if any; else, it invokes lookup to get a new proxy for each invocation.
- *
Can be overridden in subclasses, for example to cache a home object
- * for a given amount of time before recreating it, or to test the home
- * object whether it is still alive.
- * @return the EJB home object to use for an invocation
- * @throws NamingException if proxy creation failed
- * @see #lookup
- * @see #getCreateMethod
- */
- protected Object getHome() throws NamingException {
- if (!this.cacheHome || (this.lookupHomeOnStartup && !isHomeRefreshable())) {
- return (this.cachedHome != null ? this.cachedHome : lookup());
- }
- else {
- synchronized (this.homeMonitor) {
- if (this.cachedHome == null) {
- this.cachedHome = lookup();
- this.createMethod = getCreateMethod(this.cachedHome);
- }
- return this.cachedHome;
- }
- }
- }
-
- /**
- * Return whether the cached EJB home object is potentially
- * subject to on-demand refreshing. Default is "false".
- */
- protected boolean isHomeRefreshable() {
- return false;
- }
-
-
- /**
- * Prepares the thread context if necessary, and delegates to
- * {@link #invokeInContext}.
- */
- @Override
- @Nullable
- public Object invoke(MethodInvocation invocation) throws Throwable {
- Context ctx = (this.exposeAccessContext ? getJndiTemplate().getContext() : null);
- try {
- return invokeInContext(invocation);
- }
- finally {
- getJndiTemplate().releaseContext(ctx);
- }
- }
-
- /**
- * Perform the given invocation on the current EJB home,
- * within the thread context being prepared accordingly.
- * Template method to be implemented by subclasses.
- * @param invocation the AOP method invocation
- * @return the invocation result, if any
- * @throws Throwable in case of invocation failure
- */
- @Nullable
- protected abstract Object invokeInContext(MethodInvocation invocation) throws Throwable;
-
-
- /**
- * Invokes the {@code create()} method on the cached EJB home object.
- * @return a new EJBObject or EJBLocalObject
- * @throws NamingException if thrown by JNDI
- * @throws InvocationTargetException if thrown by the create method
- */
- protected Object create() throws NamingException, InvocationTargetException {
- try {
- Object home = getHome();
- Method createMethodToUse = this.createMethod;
- if (createMethodToUse == null) {
- createMethodToUse = getCreateMethod(home);
- }
- if (createMethodToUse == null) {
- return home;
- }
- // Invoke create() method on EJB home object.
- return createMethodToUse.invoke(home, (Object[]) null);
- }
- catch (IllegalAccessException ex) {
- throw new EjbAccessException("Could not access EJB home create() method", ex);
- }
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/ejb/access/EjbAccessException.java b/spring-context/src/main/java/org/springframework/ejb/access/EjbAccessException.java
deleted file mode 100644
index 50f18064c71..00000000000
--- a/spring-context/src/main/java/org/springframework/ejb/access/EjbAccessException.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2002-2012 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.ejb.access;
-
-import org.springframework.core.NestedRuntimeException;
-
-/**
- * Exception that gets thrown when an EJB stub cannot be accessed properly.
- *
- * @author Juergen Hoeller
- * @since 2.0
- */
-@SuppressWarnings("serial")
-public class EjbAccessException extends NestedRuntimeException {
-
- /**
- * Constructor for EjbAccessException.
- * @param msg the detail message
- */
- public EjbAccessException(String msg) {
- super(msg);
- }
-
- /**
- * Constructor for EjbAccessException.
- * @param msg the detail message
- * @param cause the root cause
- */
- public EjbAccessException(String msg, Throwable cause) {
- super(msg, cause);
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/ejb/access/LocalSlsbInvokerInterceptor.java b/spring-context/src/main/java/org/springframework/ejb/access/LocalSlsbInvokerInterceptor.java
deleted file mode 100644
index 027b7ef8736..00000000000
--- a/spring-context/src/main/java/org/springframework/ejb/access/LocalSlsbInvokerInterceptor.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.ejb.access;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBLocalHome;
-import javax.ejb.EJBLocalObject;
-import javax.naming.NamingException;
-
-import org.aopalliance.intercept.MethodInvocation;
-
-import org.springframework.lang.Nullable;
-
-/**
- * Invoker for a local Stateless Session Bean.
- * Designed for EJB 2.x, but works for EJB 3 Session Beans as well.
- *
- *
Caches the home object, since a local EJB home can never go stale.
- * See {@link org.springframework.jndi.JndiObjectLocator} for info on
- * how to specify the JNDI location of the target EJB.
- *
- *
In a bean container, this class is normally best used as a singleton. However,
- * if that bean container pre-instantiates singletons (as do the XML ApplicationContext
- * variants) you may have a problem if the bean container is loaded before the EJB
- * container loads the target EJB. That is because by default the JNDI lookup will be
- * performed in the init method of this class and cached, but the EJB will not have been
- * bound at the target location yet. The best solution is to set the lookupHomeOnStartup
- * property to false, in which case the home will be fetched on first access to the EJB.
- * (This flag is only true by default for backwards compatibility reasons).
- *
- * @author Rod Johnson
- * @author Juergen Hoeller
- * @see AbstractSlsbInvokerInterceptor#setLookupHomeOnStartup
- * @see AbstractSlsbInvokerInterceptor#setCacheHome
- */
-public class LocalSlsbInvokerInterceptor extends AbstractSlsbInvokerInterceptor {
-
- private volatile boolean homeAsComponent;
-
-
- /**
- * This implementation "creates" a new EJB instance for each invocation.
- * Can be overridden for custom invocation strategies.
- *
Alternatively, override {@link #getSessionBeanInstance} and
- * {@link #releaseSessionBeanInstance} to change EJB instance creation,
- * for example to hold a single shared EJB instance.
- */
- @Override
- @Nullable
- public Object invokeInContext(MethodInvocation invocation) throws Throwable {
- Object ejb = null;
- try {
- ejb = getSessionBeanInstance();
- Method method = invocation.getMethod();
- if (method.getDeclaringClass().isInstance(ejb)) {
- // directly implemented
- return method.invoke(ejb, invocation.getArguments());
- }
- else {
- // not directly implemented
- Method ejbMethod = ejb.getClass().getMethod(method.getName(), method.getParameterTypes());
- return ejbMethod.invoke(ejb, invocation.getArguments());
- }
- }
- catch (InvocationTargetException ex) {
- Throwable targetEx = ex.getTargetException();
- if (logger.isDebugEnabled()) {
- logger.debug("Method of local EJB [" + getJndiName() + "] threw exception", targetEx);
- }
- if (targetEx instanceof CreateException) {
- throw new EjbAccessException("Could not create local EJB [" + getJndiName() + "]", targetEx);
- }
- else {
- throw targetEx;
- }
- }
- catch (NamingException ex) {
- throw new EjbAccessException("Failed to locate local EJB [" + getJndiName() + "]", ex);
- }
- catch (IllegalAccessException ex) {
- throw new EjbAccessException("Could not access method [" + invocation.getMethod().getName() +
- "] of local EJB [" + getJndiName() + "]", ex);
- }
- finally {
- if (ejb instanceof EJBLocalObject) {
- releaseSessionBeanInstance((EJBLocalObject) ejb);
- }
- }
- }
-
- /**
- * Check for EJB3-style home object that serves as EJB component directly.
- */
- @Override
- protected Method getCreateMethod(Object home) throws EjbAccessException {
- if (this.homeAsComponent) {
- return null;
- }
- if (!(home instanceof EJBLocalHome)) {
- // An EJB3 Session Bean...
- this.homeAsComponent = true;
- return null;
- }
- return super.getCreateMethod(home);
- }
-
- /**
- * Return an EJB instance to delegate the call to.
- * Default implementation delegates to newSessionBeanInstance.
- * @throws NamingException if thrown by JNDI
- * @throws InvocationTargetException if thrown by the create method
- * @see #newSessionBeanInstance
- */
- protected Object getSessionBeanInstance() throws NamingException, InvocationTargetException {
- return newSessionBeanInstance();
- }
-
- /**
- * Release the given EJB instance.
- * Default implementation delegates to removeSessionBeanInstance.
- * @param ejb the EJB instance to release
- * @see #removeSessionBeanInstance
- */
- protected void releaseSessionBeanInstance(EJBLocalObject ejb) {
- removeSessionBeanInstance(ejb);
- }
-
- /**
- * Return a new instance of the stateless session bean.
- * Can be overridden to change the algorithm.
- * @throws NamingException if thrown by JNDI
- * @throws InvocationTargetException if thrown by the create method
- * @see #create
- */
- protected Object newSessionBeanInstance() throws NamingException, InvocationTargetException {
- if (logger.isDebugEnabled()) {
- logger.debug("Trying to create reference to local EJB");
- }
- Object ejbInstance = create();
- if (logger.isDebugEnabled()) {
- logger.debug("Obtained reference to local EJB: " + ejbInstance);
- }
- return ejbInstance;
- }
-
- /**
- * Remove the given EJB instance.
- * @param ejb the EJB instance to remove
- * @see javax.ejb.EJBLocalObject#remove()
- */
- protected void removeSessionBeanInstance(@Nullable EJBLocalObject ejb) {
- if (ejb != null && !this.homeAsComponent) {
- try {
- ejb.remove();
- }
- catch (Throwable ex) {
- logger.warn("Could not invoke 'remove' on local EJB proxy", ex);
- }
- }
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBean.java b/spring-context/src/main/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBean.java
deleted file mode 100644
index 1b780af7258..00000000000
--- a/spring-context/src/main/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBean.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.ejb.access;
-
-import javax.naming.NamingException;
-
-import org.springframework.aop.framework.ProxyFactory;
-import org.springframework.beans.factory.BeanClassLoaderAware;
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.lang.Nullable;
-import org.springframework.util.ClassUtils;
-
-/**
- * Convenient {@link FactoryBean} for local Stateless Session Bean (SLSB) proxies.
- * Designed for EJB 2.x, but works for EJB 3 Session Beans as well.
- *
- *
See {@link org.springframework.jndi.JndiObjectLocator} for info on
- * how to specify the JNDI location of the target EJB.
- *
- *
If you want control over interceptor chaining, use an AOP ProxyFactoryBean
- * with LocalSlsbInvokerInterceptor rather than rely on this class.
- *
- *
In a bean container, this class is normally best used as a singleton. However,
- * if that bean container pre-instantiates singletons (as do the XML ApplicationContext
- * variants) you may have a problem if the bean container is loaded before the EJB
- * container loads the target EJB. That is because by default the JNDI lookup will be
- * performed in the init method of this class and cached, but the EJB will not have been
- * bound at the target location yet. The best solution is to set the "lookupHomeOnStartup"
- * property to "false", in which case the home will be fetched on first access to the EJB.
- * (This flag is only true by default for backwards compatibility reasons).
- *
- * @author Rod Johnson
- * @author Colin Sampaleanu
- * @since 09.05.2003
- * @see AbstractSlsbInvokerInterceptor#setLookupHomeOnStartup
- * @see AbstractSlsbInvokerInterceptor#setCacheHome
- */
-public class LocalStatelessSessionProxyFactoryBean extends LocalSlsbInvokerInterceptor
- implements FactoryBean, BeanClassLoaderAware {
-
- /** The business interface of the EJB we're proxying. */
- @Nullable
- private Class> businessInterface;
-
- @Nullable
- private ClassLoader beanClassLoader = ClassUtils.getDefaultClassLoader();
-
- /** EJBLocalObject. */
- @Nullable
- private Object proxy;
-
-
- /**
- * Set the business interface of the EJB we're proxying.
- * This will normally be a super-interface of the EJB local component interface.
- * Using a business methods interface is a best practice when implementing EJBs.
- * @param businessInterface set the business interface of the EJB
- */
- public void setBusinessInterface(@Nullable Class> businessInterface) {
- this.businessInterface = businessInterface;
- }
-
- /**
- * Return the business interface of the EJB we're proxying.
- */
- @Nullable
- public Class> getBusinessInterface() {
- return this.businessInterface;
- }
-
- @Override
- public void setBeanClassLoader(ClassLoader classLoader) {
- this.beanClassLoader = classLoader;
- }
-
- @Override
- public void afterPropertiesSet() throws NamingException {
- super.afterPropertiesSet();
- if (this.businessInterface == null) {
- throw new IllegalArgumentException("businessInterface is required");
- }
- this.proxy = new ProxyFactory(this.businessInterface, this).getProxy(this.beanClassLoader);
- }
-
-
- @Override
- @Nullable
- public Object getObject() {
- return this.proxy;
- }
-
- @Override
- public Class> getObjectType() {
- return this.businessInterface;
- }
-
- @Override
- public boolean isSingleton() {
- return true;
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteSlsbInvokerInterceptor.java b/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteSlsbInvokerInterceptor.java
deleted file mode 100644
index 292ddb64093..00000000000
--- a/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteSlsbInvokerInterceptor.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.ejb.access;
-
-import java.lang.reflect.InvocationTargetException;
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBObject;
-import javax.naming.NamingException;
-
-import org.aopalliance.intercept.MethodInvocation;
-
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.lang.Nullable;
-import org.springframework.remoting.RemoteLookupFailureException;
-
-/**
- * Basic invoker for a remote Stateless Session Bean.
- * Designed for EJB 2.x, but works for EJB 3 Session Beans as well.
- *
- * "Creates" a new EJB instance for each invocation, or caches the session
- * bean instance for all invocations (see {@link #setCacheSessionBean}).
- * See {@link org.springframework.jndi.JndiObjectLocator} for info on
- * how to specify the JNDI location of the target EJB.
- *
- *
In a bean container, this class is normally best used as a singleton. However,
- * if that bean container pre-instantiates singletons (as do the XML ApplicationContext
- * variants) you may have a problem if the bean container is loaded before the EJB
- * container loads the target EJB. That is because by default the JNDI lookup will be
- * performed in the init method of this class and cached, but the EJB will not have been
- * bound at the target location yet. The best solution is to set the "lookupHomeOnStartup"
- * property to "false", in which case the home will be fetched on first access to the EJB.
- * (This flag is only true by default for backwards compatibility reasons).
- *
- *
This invoker is typically used with an RMI business interface, which serves
- * as super-interface of the EJB component interface. Alternatively, this invoker
- * can also proxy a remote SLSB with a matching non-RMI business interface, i.e. an
- * interface that mirrors the EJB business methods but does not declare RemoteExceptions.
- * In the latter case, RemoteExceptions thrown by the EJB stub will automatically get
- * converted to Spring's unchecked RemoteAccessException.
- *
- * @author Rod Johnson
- * @author Juergen Hoeller
- * @since 09.05.2003
- * @see org.springframework.remoting.RemoteAccessException
- * @see AbstractSlsbInvokerInterceptor#setLookupHomeOnStartup
- * @see AbstractSlsbInvokerInterceptor#setCacheHome
- * @see AbstractRemoteSlsbInvokerInterceptor#setRefreshHomeOnConnectFailure
- */
-public class SimpleRemoteSlsbInvokerInterceptor extends AbstractRemoteSlsbInvokerInterceptor
- implements DisposableBean {
-
- private boolean cacheSessionBean = false;
-
- @Nullable
- private Object beanInstance;
-
- private final Object beanInstanceMonitor = new Object();
-
-
- /**
- * Set whether to cache the actual session bean object.
- *
Off by default for standard EJB compliance. Turn this flag
- * on to optimize session bean access for servers that are
- * known to allow for caching the actual session bean object.
- * @see #setCacheHome
- */
- public void setCacheSessionBean(boolean cacheSessionBean) {
- this.cacheSessionBean = cacheSessionBean;
- }
-
-
- /**
- * This implementation "creates" a new EJB instance for each invocation.
- * Can be overridden for custom invocation strategies.
- *
Alternatively, override {@link #getSessionBeanInstance} and
- * {@link #releaseSessionBeanInstance} to change EJB instance creation,
- * for example to hold a single shared EJB component instance.
- */
- @Override
- @Nullable
- @SuppressWarnings("deprecation")
- protected Object doInvoke(MethodInvocation invocation) throws Throwable {
- Object ejb = null;
- try {
- ejb = getSessionBeanInstance();
- return org.springframework.remoting.rmi.RmiClientInterceptorUtils.invokeRemoteMethod(invocation, ejb);
- }
- catch (NamingException ex) {
- throw new RemoteLookupFailureException("Failed to locate remote EJB [" + getJndiName() + "]", ex);
- }
- catch (InvocationTargetException ex) {
- Throwable targetEx = ex.getTargetException();
- if (targetEx instanceof RemoteException) {
- RemoteException rex = (RemoteException) targetEx;
- throw org.springframework.remoting.rmi.RmiClientInterceptorUtils.convertRmiAccessException(
- invocation.getMethod(), rex, isConnectFailure(rex), getJndiName());
- }
- else if (targetEx instanceof CreateException) {
- throw org.springframework.remoting.rmi.RmiClientInterceptorUtils.convertRmiAccessException(
- invocation.getMethod(), targetEx, "Could not create remote EJB [" + getJndiName() + "]");
- }
- throw targetEx;
- }
- finally {
- if (ejb instanceof EJBObject) {
- releaseSessionBeanInstance((EJBObject) ejb);
- }
- }
- }
-
- /**
- * Return an EJB component instance to delegate the call to.
- *
The default implementation delegates to {@link #newSessionBeanInstance}.
- * @return the EJB component instance
- * @throws NamingException if thrown by JNDI
- * @throws InvocationTargetException if thrown by the create method
- * @see #newSessionBeanInstance
- */
- protected Object getSessionBeanInstance() throws NamingException, InvocationTargetException {
- if (this.cacheSessionBean) {
- synchronized (this.beanInstanceMonitor) {
- if (this.beanInstance == null) {
- this.beanInstance = newSessionBeanInstance();
- }
- return this.beanInstance;
- }
- }
- else {
- return newSessionBeanInstance();
- }
- }
-
- /**
- * Release the given EJB instance.
- *
The default implementation delegates to {@link #removeSessionBeanInstance}.
- * @param ejb the EJB component instance to release
- * @see #removeSessionBeanInstance
- */
- protected void releaseSessionBeanInstance(EJBObject ejb) {
- if (!this.cacheSessionBean) {
- removeSessionBeanInstance(ejb);
- }
- }
-
- /**
- * Reset the cached session bean instance, if necessary.
- */
- @Override
- protected void refreshHome() throws NamingException {
- super.refreshHome();
- if (this.cacheSessionBean) {
- synchronized (this.beanInstanceMonitor) {
- this.beanInstance = null;
- }
- }
- }
-
- /**
- * Remove the cached session bean instance, if necessary.
- */
- @Override
- public void destroy() {
- if (this.cacheSessionBean) {
- synchronized (this.beanInstanceMonitor) {
- if (this.beanInstance instanceof EJBObject) {
- removeSessionBeanInstance((EJBObject) this.beanInstance);
- }
- }
- }
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBean.java b/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBean.java
deleted file mode 100644
index 2cf93ad81fa..00000000000
--- a/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBean.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.ejb.access;
-
-import javax.naming.NamingException;
-
-import org.springframework.aop.framework.ProxyFactory;
-import org.springframework.beans.factory.BeanClassLoaderAware;
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.lang.Nullable;
-import org.springframework.util.ClassUtils;
-
-/**
- * Convenient {@link FactoryBean} for remote SLSB proxies.
- * Designed for EJB 2.x, but works for EJB 3 Session Beans as well.
- *
- *
See {@link org.springframework.jndi.JndiObjectLocator} for info on
- * how to specify the JNDI location of the target EJB.
- *
- *
If you want control over interceptor chaining, use an AOP ProxyFactoryBean
- * with SimpleRemoteSlsbInvokerInterceptor rather than rely on this class.
- *
- *
In a bean container, this class is normally best used as a singleton. However,
- * if that bean container pre-instantiates singletons (as do the XML ApplicationContext
- * variants) you may have a problem if the bean container is loaded before the EJB
- * container loads the target EJB. That is because by default the JNDI lookup will be
- * performed in the init method of this class and cached, but the EJB will not have been
- * bound at the target location yet. The best solution is to set the lookupHomeOnStartup
- * property to false, in which case the home will be fetched on first access to the EJB.
- * (This flag is only true by default for backwards compatibility reasons).
- *
- *
This proxy factory is typically used with an RMI business interface, which serves
- * as super-interface of the EJB component interface. Alternatively, this factory
- * can also proxy a remote SLSB with a matching non-RMI business interface, i.e. an
- * interface that mirrors the EJB business methods but does not declare RemoteExceptions.
- * In the latter case, RemoteExceptions thrown by the EJB stub will automatically get
- * converted to Spring's unchecked RemoteAccessException.
- *
- * @author Rod Johnson
- * @author Colin Sampaleanu
- * @author Juergen Hoeller
- * @since 09.05.2003
- * @see org.springframework.remoting.RemoteAccessException
- * @see AbstractSlsbInvokerInterceptor#setLookupHomeOnStartup
- * @see AbstractSlsbInvokerInterceptor#setCacheHome
- * @see AbstractRemoteSlsbInvokerInterceptor#setRefreshHomeOnConnectFailure
- */
-public class SimpleRemoteStatelessSessionProxyFactoryBean extends SimpleRemoteSlsbInvokerInterceptor
- implements FactoryBean, BeanClassLoaderAware {
-
- /** The business interface of the EJB we're proxying. */
- @Nullable
- private Class> businessInterface;
-
- @Nullable
- private ClassLoader beanClassLoader = ClassUtils.getDefaultClassLoader();
-
- /** EJBObject. */
- @Nullable
- private Object proxy;
-
-
- /**
- * Set the business interface of the EJB we're proxying.
- * This will normally be a super-interface of the EJB remote component interface.
- * Using a business methods interface is a best practice when implementing EJBs.
- * You can also specify a matching non-RMI business interface, i.e. an interface
- * that mirrors the EJB business methods but does not declare RemoteExceptions.
- * In this case, RemoteExceptions thrown by the EJB stub will automatically get
- * converted to Spring's generic RemoteAccessException.
- * @param businessInterface the business interface of the EJB
- */
- public void setBusinessInterface(@Nullable Class> businessInterface) {
- this.businessInterface = businessInterface;
- }
-
- /**
- * Return the business interface of the EJB we're proxying.
- */
- @Nullable
- public Class> getBusinessInterface() {
- return this.businessInterface;
- }
-
- @Override
- public void setBeanClassLoader(ClassLoader classLoader) {
- this.beanClassLoader = classLoader;
- }
-
- @Override
- public void afterPropertiesSet() throws NamingException {
- super.afterPropertiesSet();
- if (this.businessInterface == null) {
- throw new IllegalArgumentException("businessInterface is required");
- }
- this.proxy = new ProxyFactory(this.businessInterface, this).getProxy(this.beanClassLoader);
- }
-
-
- @Override
- @Nullable
- public Object getObject() {
- return this.proxy;
- }
-
- @Override
- public Class> getObjectType() {
- return this.businessInterface;
- }
-
- @Override
- public boolean isSingleton() {
- return true;
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/ejb/access/package-info.java b/spring-context/src/main/java/org/springframework/ejb/access/package-info.java
deleted file mode 100644
index 54011fa2ecc..00000000000
--- a/spring-context/src/main/java/org/springframework/ejb/access/package-info.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * This package contains classes that allow easy access to EJBs.
- * The basis are AOP interceptors run before and after the EJB invocation.
- * In particular, the classes in this package allow transparent access
- * to stateless session beans (SLSBs) with local interfaces, avoiding
- * the need for application code using them to use EJB-specific APIs
- * and JNDI lookups, and work with business interfaces that could be
- * implemented without using EJB. This provides a valuable decoupling
- * of client (such as web components) and business objects (which may
- * or may not be EJBs). This gives us the choice of introducing EJB
- * into an application (or removing EJB from an application) without
- * affecting code using business objects.
- *
- *
The motivation for the classes in this package is discussed in Chapter 11 of
- * Expert One-On-One J2EE Design and Development
- * by Rod Johnson (Wrox, 2002).
- *
- *
However, the implementation and naming of classes in this package has changed.
- * It now uses FactoryBeans and AOP, rather than the custom bean definitions described in
- * Expert One-on-One J2EE .
- */
-@NonNullApi
-@NonNullFields
-package org.springframework.ejb.access;
-
-import org.springframework.lang.NonNullApi;
-import org.springframework.lang.NonNullFields;
diff --git a/spring-context/src/main/java/org/springframework/ejb/config/LocalStatelessSessionBeanDefinitionParser.java b/spring-context/src/main/java/org/springframework/ejb/config/LocalStatelessSessionBeanDefinitionParser.java
index 5027c4aa287..035fad6581f 100644
--- a/spring-context/src/main/java/org/springframework/ejb/config/LocalStatelessSessionBeanDefinitionParser.java
+++ b/spring-context/src/main/java/org/springframework/ejb/config/LocalStatelessSessionBeanDefinitionParser.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,12 +18,12 @@ package org.springframework.ejb.config;
import org.w3c.dom.Element;
-import org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean;
+import org.springframework.jndi.JndiObjectFactoryBean;
/**
* {@link org.springframework.beans.factory.xml.BeanDefinitionParser}
* implementation for parsing '{@code local-slsb}' tags and
- * creating {@link LocalStatelessSessionProxyFactoryBean} definitions.
+ * creating plain {@link JndiObjectFactoryBean} definitions.
*
* @author Rob Harrop
* @author Juergen Hoeller
@@ -32,8 +32,8 @@ import org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean;
class LocalStatelessSessionBeanDefinitionParser extends AbstractJndiLocatingBeanDefinitionParser {
@Override
- protected String getBeanClassName(Element element) {
- return "org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean";
+ protected Class> getBeanClass(Element element) {
+ return JndiObjectFactoryBean.class;
}
}
diff --git a/spring-context/src/main/java/org/springframework/ejb/config/RemoteStatelessSessionBeanDefinitionParser.java b/spring-context/src/main/java/org/springframework/ejb/config/RemoteStatelessSessionBeanDefinitionParser.java
index 15883bdb14c..a88c5f64618 100644
--- a/spring-context/src/main/java/org/springframework/ejb/config/RemoteStatelessSessionBeanDefinitionParser.java
+++ b/spring-context/src/main/java/org/springframework/ejb/config/RemoteStatelessSessionBeanDefinitionParser.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,12 +18,12 @@ package org.springframework.ejb.config;
import org.w3c.dom.Element;
-import org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean;
+import org.springframework.jndi.JndiObjectFactoryBean;
/**
* {@link org.springframework.beans.factory.xml.BeanDefinitionParser}
* implementation for parsing '{@code remote-slsb}' tags and
- * creating {@link SimpleRemoteStatelessSessionProxyFactoryBean} definitions.
+ * creating plain {@link JndiObjectFactoryBean} definitions.
*
* @author Rob Harrop
* @author Juergen Hoeller
@@ -32,8 +32,8 @@ import org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBe
class RemoteStatelessSessionBeanDefinitionParser extends AbstractJndiLocatingBeanDefinitionParser {
@Override
- protected String getBeanClassName(Element element) {
- return "org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean";
+ protected Class> getBeanClass(Element element) {
+ return JndiObjectFactoryBean.class;
}
}
diff --git a/spring-context/src/main/java/org/springframework/ejb/config/package-info.java b/spring-context/src/main/java/org/springframework/ejb/config/package-info.java
index a5442d93e90..501900852b5 100644
--- a/spring-context/src/main/java/org/springframework/ejb/config/package-info.java
+++ b/spring-context/src/main/java/org/springframework/ejb/config/package-info.java
@@ -1,5 +1,5 @@
/**
- * Support package for EJB/Java EE-related configuration,
+ * Support package for EJB/Jakarta EE-related configuration,
* with XML schema being the primary configuration format.
*/
@NonNullApi
diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicClassLoaderAdapter.java b/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicClassLoaderAdapter.java
deleted file mode 100644
index 1e4e0cd05bb..00000000000
--- a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicClassLoaderAdapter.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.instrument.classloading.weblogic;
-
-import java.lang.instrument.ClassFileTransformer;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-
-import org.springframework.util.Assert;
-
-/**
- * Reflective wrapper around a WebLogic 10 class loader. Used to
- * encapsulate the classloader-specific methods (discovered and
- * called through reflection) from the load-time weaver.
- *
- * @author Costin Leau
- * @author Juergen Hoeller
- * @since 2.5
- */
-class WebLogicClassLoaderAdapter {
-
- private static final String GENERIC_CLASS_LOADER_NAME = "weblogic.utils.classloaders.GenericClassLoader";
-
- private static final String CLASS_PRE_PROCESSOR_NAME = "weblogic.utils.classloaders.ClassPreProcessor";
-
-
- private final ClassLoader classLoader;
-
- private final Class> wlPreProcessorClass;
-
- private final Method addPreProcessorMethod;
-
- private final Method getClassFinderMethod;
-
- private final Method getParentMethod;
-
- private final Constructor> wlGenericClassLoaderConstructor;
-
-
- public WebLogicClassLoaderAdapter(ClassLoader classLoader) {
- Class> wlGenericClassLoaderClass;
- try {
- wlGenericClassLoaderClass = classLoader.loadClass(GENERIC_CLASS_LOADER_NAME);
- this.wlPreProcessorClass = classLoader.loadClass(CLASS_PRE_PROCESSOR_NAME);
- this.addPreProcessorMethod = classLoader.getClass().getMethod(
- "addInstanceClassPreProcessor", this.wlPreProcessorClass);
- this.getClassFinderMethod = classLoader.getClass().getMethod("getClassFinder");
- this.getParentMethod = classLoader.getClass().getMethod("getParent");
- this.wlGenericClassLoaderConstructor = wlGenericClassLoaderClass.getConstructor(
- this.getClassFinderMethod.getReturnType(), ClassLoader.class);
- }
- catch (Throwable ex) {
- throw new IllegalStateException(
- "Could not initialize WebLogic LoadTimeWeaver because WebLogic 10 API classes are not available", ex);
- }
-
- if (!wlGenericClassLoaderClass.isInstance(classLoader)) {
- throw new IllegalArgumentException(
- "ClassLoader must be an instance of [" + wlGenericClassLoaderClass.getName() + "]: " + classLoader);
- }
- this.classLoader = classLoader;
- }
-
-
- public void addTransformer(ClassFileTransformer transformer) {
- Assert.notNull(transformer, "ClassFileTransformer must not be null");
- try {
- InvocationHandler adapter = new WebLogicClassPreProcessorAdapter(transformer, this.classLoader);
- Object adapterInstance = Proxy.newProxyInstance(this.wlPreProcessorClass.getClassLoader(),
- new Class>[] {this.wlPreProcessorClass}, adapter);
- this.addPreProcessorMethod.invoke(this.classLoader, adapterInstance);
- }
- catch (InvocationTargetException ex) {
- throw new IllegalStateException("WebLogic addInstanceClassPreProcessor method threw exception", ex.getCause());
- }
- catch (Throwable ex) {
- throw new IllegalStateException("Could not invoke WebLogic addInstanceClassPreProcessor method", ex);
- }
- }
-
- public ClassLoader getClassLoader() {
- return this.classLoader;
- }
-
- public ClassLoader getThrowawayClassLoader() {
- try {
- Object classFinder = this.getClassFinderMethod.invoke(this.classLoader);
- Object parent = this.getParentMethod.invoke(this.classLoader);
- // arguments for 'clone'-like method
- return (ClassLoader) this.wlGenericClassLoaderConstructor.newInstance(classFinder, parent);
- }
- catch (InvocationTargetException ex) {
- throw new IllegalStateException("WebLogic GenericClassLoader constructor failed", ex.getCause());
- }
- catch (Throwable ex) {
- throw new IllegalStateException("Could not construct WebLogic GenericClassLoader", ex);
- }
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicClassPreProcessorAdapter.java b/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicClassPreProcessorAdapter.java
deleted file mode 100644
index 36c8834412e..00000000000
--- a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicClassPreProcessorAdapter.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.instrument.classloading.weblogic;
-
-import java.lang.instrument.ClassFileTransformer;
-import java.lang.instrument.IllegalClassFormatException;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.Hashtable;
-
-import org.springframework.lang.Nullable;
-
-/**
- * Adapter that implements WebLogic ClassPreProcessor interface, delegating to a
- * standard JDK {@link ClassFileTransformer} underneath.
- *
- *
To avoid compile time checks again the vendor API, a dynamic proxy is
- * being used.
- *
- * @author Costin Leau
- * @author Juergen Hoeller
- * @since 2.5
- */
-class WebLogicClassPreProcessorAdapter implements InvocationHandler {
-
- private final ClassFileTransformer transformer;
-
- private final ClassLoader loader;
-
-
- /**
- * Construct a new {@link WebLogicClassPreProcessorAdapter}.
- */
- public WebLogicClassPreProcessorAdapter(ClassFileTransformer transformer, ClassLoader loader) {
- this.transformer = transformer;
- this.loader = loader;
- }
-
-
- @Override
- @Nullable
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- String name = method.getName();
- if ("equals".equals(name)) {
- return (proxy == args[0]);
- }
- else if ("hashCode".equals(name)) {
- return hashCode();
- }
- else if ("toString".equals(name)) {
- return toString();
- }
- else if ("initialize".equals(name)) {
- initialize((Hashtable, ?>) args[0]);
- return null;
- }
- else if ("preProcess".equals(name)) {
- return preProcess((String) args[0], (byte[]) args[1]);
- }
- else {
- throw new IllegalArgumentException("Unknown method: " + method);
- }
- }
-
- public void initialize(Hashtable, ?> params) {
- }
-
- public byte[] preProcess(String className, byte[] classBytes) {
- try {
- byte[] result = this.transformer.transform(this.loader, className, null, null, classBytes);
- return (result != null ? result : classBytes);
- }
- catch (IllegalClassFormatException ex) {
- throw new IllegalStateException("Cannot transform due to illegal class format", ex);
- }
- }
-
- @Override
- public String toString() {
- return getClass().getName() + " for transformer: " + this.transformer;
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicLoadTimeWeaver.java b/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicLoadTimeWeaver.java
deleted file mode 100644
index 9ca2b222b48..00000000000
--- a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/WebLogicLoadTimeWeaver.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2002-2016 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.instrument.classloading.weblogic;
-
-import java.lang.instrument.ClassFileTransformer;
-
-import org.springframework.core.OverridingClassLoader;
-import org.springframework.instrument.classloading.LoadTimeWeaver;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-import org.springframework.util.ClassUtils;
-
-/**
- * {@link LoadTimeWeaver} implementation for WebLogic's instrumentable
- * ClassLoader.
- *
- *
NOTE: Requires BEA WebLogic version 10 or higher.
- *
- * @author Costin Leau
- * @author Juergen Hoeller
- * @since 2.5
- */
-public class WebLogicLoadTimeWeaver implements LoadTimeWeaver {
-
- private final WebLogicClassLoaderAdapter classLoader;
-
-
- /**
- * Creates a new instance of the {@link WebLogicLoadTimeWeaver} class using
- * the default {@link ClassLoader class loader}.
- * @see org.springframework.util.ClassUtils#getDefaultClassLoader()
- */
- public WebLogicLoadTimeWeaver() {
- this(ClassUtils.getDefaultClassLoader());
- }
-
- /**
- * Creates a new instance of the {@link WebLogicLoadTimeWeaver} class using
- * the supplied {@link ClassLoader}.
- * @param classLoader the {@code ClassLoader} to delegate to for weaving
- */
- public WebLogicLoadTimeWeaver(@Nullable ClassLoader classLoader) {
- Assert.notNull(classLoader, "ClassLoader must not be null");
- this.classLoader = new WebLogicClassLoaderAdapter(classLoader);
- }
-
-
- @Override
- public void addTransformer(ClassFileTransformer transformer) {
- this.classLoader.addTransformer(transformer);
- }
-
- @Override
- public ClassLoader getInstrumentableClassLoader() {
- return this.classLoader.getClassLoader();
- }
-
- @Override
- public ClassLoader getThrowawayClassLoader() {
- return new OverridingClassLoader(this.classLoader.getClassLoader(),
- this.classLoader.getThrowawayClassLoader());
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/package-info.java b/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/package-info.java
deleted file mode 100644
index 9335b693419..00000000000
--- a/spring-context/src/main/java/org/springframework/instrument/classloading/weblogic/package-info.java
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * Support for class instrumentation on BEA WebLogic 10+.
- */
-@NonNullApi
-@NonNullFields
-package org.springframework.instrument.classloading.weblogic;
-
-import org.springframework.lang.NonNullApi;
-import org.springframework.lang.NonNullFields;
diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassLoaderAdapter.java b/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassLoaderAdapter.java
deleted file mode 100644
index bb68f0748e6..00000000000
--- a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassLoaderAdapter.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.instrument.classloading.websphere;
-
-import java.lang.instrument.ClassFileTransformer;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.List;
-
-import org.springframework.util.Assert;
-
-/**
- * Reflective wrapper around a WebSphere 7+ class loader. Used to
- * encapsulate the classloader-specific methods (discovered and
- * called through reflection) from the load-time weaver.
- *
- * @author Costin Leau
- * @author Juergen Hoeller
- * @since 3.1
- */
-class WebSphereClassLoaderAdapter {
-
- private static final String COMPOUND_CLASS_LOADER_NAME = "com.ibm.ws.classloader.CompoundClassLoader";
-
- private static final String CLASS_PRE_PROCESSOR_NAME = "com.ibm.websphere.classloader.ClassLoaderInstancePreDefinePlugin";
-
- private static final String PLUGINS_FIELD = "preDefinePlugins";
-
-
- private ClassLoader classLoader;
-
- private Class> wsPreProcessorClass;
-
- private Method addPreDefinePlugin;
-
- private Constructor extends ClassLoader> cloneConstructor;
-
- private Field transformerList;
-
-
- public WebSphereClassLoaderAdapter(ClassLoader classLoader) {
- Class> wsCompoundClassLoaderClass;
- try {
- wsCompoundClassLoaderClass = classLoader.loadClass(COMPOUND_CLASS_LOADER_NAME);
- this.cloneConstructor = classLoader.getClass().getDeclaredConstructor(wsCompoundClassLoaderClass);
- this.cloneConstructor.setAccessible(true);
-
- this.wsPreProcessorClass = classLoader.loadClass(CLASS_PRE_PROCESSOR_NAME);
- this.addPreDefinePlugin = classLoader.getClass().getMethod("addPreDefinePlugin", this.wsPreProcessorClass);
- this.transformerList = wsCompoundClassLoaderClass.getDeclaredField(PLUGINS_FIELD);
- this.transformerList.setAccessible(true);
- }
- catch (Throwable ex) {
- throw new IllegalStateException(
- "Could not initialize WebSphere LoadTimeWeaver because WebSphere API classes are not available", ex);
- }
-
- if (!wsCompoundClassLoaderClass.isInstance(classLoader)) {
- throw new IllegalArgumentException(
- "ClassLoader must be an instance of [" + COMPOUND_CLASS_LOADER_NAME + "]: " + classLoader);
- }
- this.classLoader = classLoader;
- }
-
-
- public ClassLoader getClassLoader() {
- return this.classLoader;
- }
-
- public void addTransformer(ClassFileTransformer transformer) {
- Assert.notNull(transformer, "ClassFileTransformer must not be null");
- try {
- InvocationHandler adapter = new WebSphereClassPreDefinePlugin(transformer);
- Object adapterInstance = Proxy.newProxyInstance(this.wsPreProcessorClass.getClassLoader(),
- new Class>[] {this.wsPreProcessorClass}, adapter);
- this.addPreDefinePlugin.invoke(this.classLoader, adapterInstance);
- }
- catch (InvocationTargetException ex) {
- throw new IllegalStateException("WebSphere addPreDefinePlugin method threw exception", ex.getCause());
- }
- catch (Throwable ex) {
- throw new IllegalStateException("Could not invoke WebSphere addPreDefinePlugin method", ex);
- }
- }
-
- public ClassLoader getThrowawayClassLoader() {
- try {
- ClassLoader loader = this.cloneConstructor.newInstance(getClassLoader());
- // Clear out the transformers (copied as well)
- List> list = (List>) this.transformerList.get(loader);
- list.clear();
- return loader;
- }
- catch (InvocationTargetException ex) {
- throw new IllegalStateException("WebSphere CompoundClassLoader constructor failed", ex.getCause());
- }
- catch (Throwable ex) {
- throw new IllegalStateException("Could not construct WebSphere CompoundClassLoader", ex);
- }
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassPreDefinePlugin.java b/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassPreDefinePlugin.java
deleted file mode 100644
index c2d96a6ab9a..00000000000
--- a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereClassPreDefinePlugin.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.instrument.classloading.websphere;
-
-import java.lang.instrument.ClassFileTransformer;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.security.CodeSource;
-
-import org.springframework.util.FileCopyUtils;
-
-/**
- * Adapter that implements WebSphere 7.0 ClassPreProcessPlugin interface,
- * delegating to a standard JDK {@link ClassFileTransformer} underneath.
- *
- *
To avoid compile time checks again the vendor API, a dynamic proxy is
- * being used.
- *
- * @author Costin Leau
- * @since 3.1
- */
-class WebSphereClassPreDefinePlugin implements InvocationHandler {
-
- private final ClassFileTransformer transformer;
-
-
- /**
- * Create a new {@link WebSphereClassPreDefinePlugin}.
- * @param transformer the {@link ClassFileTransformer} to be adapted
- * (must not be {@code null})
- */
- public WebSphereClassPreDefinePlugin(ClassFileTransformer transformer) {
- this.transformer = transformer;
- ClassLoader classLoader = transformer.getClass().getClassLoader();
-
- // First force the full class loading of the weaver by invoking transformation on a dummy class
- try {
- String dummyClass = Dummy.class.getName().replace('.', '/');
- byte[] bytes = FileCopyUtils.copyToByteArray(classLoader.getResourceAsStream(dummyClass + ".class"));
- transformer.transform(classLoader, dummyClass, null, null, bytes);
- }
- catch (Throwable ex) {
- throw new IllegalArgumentException("Cannot load transformer", ex);
- }
- }
-
-
- @Override
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- switch (method.getName()) {
- case "equals":
- return (proxy == args[0]);
- case "hashCode":
- return hashCode();
- case "toString":
- return toString();
- case "transformClass":
- return transform((String) args[0], (byte[]) args[1], (CodeSource) args[2], (ClassLoader) args[3]);
- default:
- throw new IllegalArgumentException("Unknown method: " + method);
- }
- }
-
- protected byte[] transform(String className, byte[] classfileBuffer, CodeSource codeSource, ClassLoader classLoader)
- throws Exception {
-
- // NB: WebSphere passes className as "." without class while the transformer expects a VM "/" format
- byte[] result = this.transformer.transform(classLoader, className.replace('.', '/'), null, null, classfileBuffer);
- return (result != null ? result : classfileBuffer);
- }
-
- @Override
- public String toString() {
- return getClass().getName() + " for transformer: " + this.transformer;
- }
-
-
- private static class Dummy {
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereLoadTimeWeaver.java b/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereLoadTimeWeaver.java
deleted file mode 100644
index 0160aefe160..00000000000
--- a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/WebSphereLoadTimeWeaver.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.instrument.classloading.websphere;
-
-import java.lang.instrument.ClassFileTransformer;
-
-import org.springframework.core.OverridingClassLoader;
-import org.springframework.instrument.classloading.LoadTimeWeaver;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-import org.springframework.util.ClassUtils;
-
-/**
- * {@link LoadTimeWeaver} implementation for WebSphere's instrumentable ClassLoader.
- * Compatible with WebSphere 7 as well as 8 and 9.
- *
- * @author Costin Leau
- * @since 3.1
- */
-public class WebSphereLoadTimeWeaver implements LoadTimeWeaver {
-
- private final WebSphereClassLoaderAdapter classLoader;
-
-
- /**
- * Create a new instance of the {@link WebSphereLoadTimeWeaver} class using
- * the default {@link ClassLoader class loader}.
- * @see org.springframework.util.ClassUtils#getDefaultClassLoader()
- */
- public WebSphereLoadTimeWeaver() {
- this(ClassUtils.getDefaultClassLoader());
- }
-
- /**
- * Create a new instance of the {@link WebSphereLoadTimeWeaver} class using
- * the supplied {@link ClassLoader}.
- * @param classLoader the {@code ClassLoader} to delegate to for weaving
- */
- public WebSphereLoadTimeWeaver(@Nullable ClassLoader classLoader) {
- Assert.notNull(classLoader, "ClassLoader must not be null");
- this.classLoader = new WebSphereClassLoaderAdapter(classLoader);
- }
-
-
- @Override
- public void addTransformer(ClassFileTransformer transformer) {
- this.classLoader.addTransformer(transformer);
- }
-
- @Override
- public ClassLoader getInstrumentableClassLoader() {
- return this.classLoader.getClassLoader();
- }
-
- @Override
- public ClassLoader getThrowawayClassLoader() {
- return new OverridingClassLoader(this.classLoader.getClassLoader(),
- this.classLoader.getThrowawayClassLoader());
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/package-info.java b/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/package-info.java
deleted file mode 100644
index 7bf0ff58b9b..00000000000
--- a/spring-context/src/main/java/org/springframework/instrument/classloading/websphere/package-info.java
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * Support for class instrumentation on IBM WebSphere Application Server 7+.
- */
-@NonNullApi
-@NonNullFields
-package org.springframework.instrument.classloading.websphere;
-
-import org.springframework.lang.NonNullApi;
-import org.springframework.lang.NonNullFields;
diff --git a/spring-context/src/main/java/org/springframework/jmx/support/WebSphereMBeanServerFactoryBean.java b/spring-context/src/main/java/org/springframework/jmx/support/WebSphereMBeanServerFactoryBean.java
deleted file mode 100644
index fc0d4b8c535..00000000000
--- a/spring-context/src/main/java/org/springframework/jmx/support/WebSphereMBeanServerFactoryBean.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2002-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jmx.support;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import javax.management.MBeanServer;
-
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.jmx.MBeanServerNotFoundException;
-import org.springframework.lang.Nullable;
-
-/**
- * {@link FactoryBean} that obtains a WebSphere {@link javax.management.MBeanServer}
- * reference through WebSphere's proprietary {@code AdminServiceFactory} API,
- * available on WebSphere 5.1 and higher.
- *
- *
Exposes the {@code MBeanServer} for bean references.
- *
- *
This {@code FactoryBean} is a direct alternative to {@link MBeanServerFactoryBean},
- * which uses standard JMX 1.2 API to access the platform's {@link MBeanServer}.
- *
- *
See the javadocs for WebSphere's
- * {@code AdminServiceFactory}
- * and
- * {@code MBeanFactory} .
- *
- * @author Juergen Hoeller
- * @author Rob Harrop
- * @since 2.0.3
- * @see javax.management.MBeanServer
- * @see MBeanServerFactoryBean
- */
-public class WebSphereMBeanServerFactoryBean implements FactoryBean, InitializingBean {
-
- private static final String ADMIN_SERVICE_FACTORY_CLASS = "com.ibm.websphere.management.AdminServiceFactory";
-
- private static final String GET_MBEAN_FACTORY_METHOD = "getMBeanFactory";
-
- private static final String GET_MBEAN_SERVER_METHOD = "getMBeanServer";
-
-
- @Nullable
- private MBeanServer mbeanServer;
-
-
- @Override
- public void afterPropertiesSet() throws MBeanServerNotFoundException {
- try {
- /*
- * this.mbeanServer = AdminServiceFactory.getMBeanFactory().getMBeanServer();
- */
- Class> adminServiceClass = getClass().getClassLoader().loadClass(ADMIN_SERVICE_FACTORY_CLASS);
- Method getMBeanFactoryMethod = adminServiceClass.getMethod(GET_MBEAN_FACTORY_METHOD);
- Object mbeanFactory = getMBeanFactoryMethod.invoke(null);
- Method getMBeanServerMethod = mbeanFactory.getClass().getMethod(GET_MBEAN_SERVER_METHOD);
- this.mbeanServer = (MBeanServer) getMBeanServerMethod.invoke(mbeanFactory);
- }
- catch (ClassNotFoundException ex) {
- throw new MBeanServerNotFoundException("Could not find WebSphere's AdminServiceFactory class", ex);
- }
- catch (InvocationTargetException ex) {
- throw new MBeanServerNotFoundException(
- "WebSphere's AdminServiceFactory.getMBeanFactory/getMBeanServer method failed", ex.getTargetException());
- }
- catch (Exception ex) {
- throw new MBeanServerNotFoundException(
- "Could not access WebSphere's AdminServiceFactory.getMBeanFactory/getMBeanServer method", ex);
- }
- }
-
-
- @Override
- @Nullable
- public MBeanServer getObject() {
- return this.mbeanServer;
- }
-
- @Override
- public Class extends MBeanServer> getObjectType() {
- return (this.mbeanServer != null ? this.mbeanServer.getClass() : MBeanServer.class);
- }
-
- @Override
- public boolean isSingleton() {
- return true;
- }
-
-}
diff --git a/spring-context/src/main/java/org/springframework/jndi/JndiLocatorDelegate.java b/spring-context/src/main/java/org/springframework/jndi/JndiLocatorDelegate.java
index 7b0c0f2f2f9..640bdc81f28 100644
--- a/spring-context/src/main/java/org/springframework/jndi/JndiLocatorDelegate.java
+++ b/spring-context/src/main/java/org/springframework/jndi/JndiLocatorDelegate.java
@@ -77,7 +77,7 @@ public class JndiLocatorDelegate extends JndiLocatorSupport {
}
/**
- * Check whether a default JNDI environment, as in a Java EE environment,
+ * Check whether a default JNDI environment, as in a Jakarta EE environment,
* is available on this JVM.
* @return {@code true} if a default InitialContext can be used,
* {@code false} if not
diff --git a/spring-context/src/main/java/org/springframework/jndi/JndiLocatorSupport.java b/spring-context/src/main/java/org/springframework/jndi/JndiLocatorSupport.java
index be910152a37..5b901f6c415 100644
--- a/spring-context/src/main/java/org/springframework/jndi/JndiLocatorSupport.java
+++ b/spring-context/src/main/java/org/springframework/jndi/JndiLocatorSupport.java
@@ -27,7 +27,7 @@ import org.springframework.util.Assert;
* bean properties.
*
* JNDI names may or may not include the "java:comp/env/" prefix expected
- * by Java EE applications when accessing a locally mapped (ENC - Environmental
+ * by Jakarta EE applications when accessing a locally mapped (ENC - Environmental
* Naming Context) resource. If it doesn't, the "java:comp/env/" prefix will
* be prepended if the "resourceRef" property is true (the default is
* false ) and no other scheme (e.g. "java:") is given.
@@ -40,7 +40,7 @@ import org.springframework.util.Assert;
*/
public abstract class JndiLocatorSupport extends JndiAccessor {
- /** JNDI prefix used in a Java EE container. */
+ /** JNDI prefix used in a Jakarta EE container. */
public static final String CONTAINER_PREFIX = "java:comp/env/";
@@ -48,7 +48,7 @@ public abstract class JndiLocatorSupport extends JndiAccessor {
/**
- * Set whether the lookup occurs in a Java EE container, i.e. if the prefix
+ * Set whether the lookup occurs in a Jakarta EE container, i.e. if the prefix
* "java:comp/env/" needs to be added if the JNDI name doesn't already
* contain it. Default is "false".
*
Note: Will only get applied if no other scheme (e.g. "java:") is given.
@@ -58,7 +58,7 @@ public abstract class JndiLocatorSupport extends JndiAccessor {
}
/**
- * Return whether the lookup occurs in a Java EE container.
+ * Return whether the lookup occurs in a Jakarta EE container.
*/
public boolean isResourceRef() {
return this.resourceRef;
diff --git a/spring-context/src/main/java/org/springframework/jndi/JndiObjectLocator.java b/spring-context/src/main/java/org/springframework/jndi/JndiObjectLocator.java
index 7de88c4432c..ff2a0ffb5a0 100644
--- a/spring-context/src/main/java/org/springframework/jndi/JndiObjectLocator.java
+++ b/spring-context/src/main/java/org/springframework/jndi/JndiObjectLocator.java
@@ -28,7 +28,7 @@ import org.springframework.util.StringUtils;
* providing configurable lookup of a specific JNDI resource.
*
*
Exposes a {@link #setJndiName "jndiName"} property. This may or may not
- * include the "java:comp/env/" prefix expected by Java EE applications when
+ * include the "java:comp/env/" prefix expected by Jakarta EE applications when
* accessing a locally mapped (Environmental Naming Context) resource. If it
* doesn't, the "java:comp/env/" prefix will be prepended if the "resourceRef"
* property is true (the default is false ) and no other scheme
diff --git a/spring-context/src/main/java/org/springframework/jndi/JndiObjectTargetSource.java b/spring-context/src/main/java/org/springframework/jndi/JndiObjectTargetSource.java
index 83da60219da..21b1e0cdae6 100644
--- a/spring-context/src/main/java/org/springframework/jndi/JndiObjectTargetSource.java
+++ b/spring-context/src/main/java/org/springframework/jndi/JndiObjectTargetSource.java
@@ -39,7 +39,7 @@ import org.springframework.lang.Nullable;
* </bean>
*
* <bean id="queueConnectionFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
- * <property name="proxyInterfaces" value="javax.jms.QueueConnectionFactory"/>
+ * <property name="proxyInterfaces" value="jakarta.jms.QueueConnectionFactory"/>
* <property name="targetSource" ref="queueConnectionFactoryTarget"/>
* </bean>
*
diff --git a/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java b/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java
index 06bb11db5b5..25249087720 100644
--- a/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java
+++ b/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java
@@ -44,7 +44,7 @@ import org.springframework.lang.Nullable;
* the {@link org.springframework.beans.factory.ListableBeanFactory} interface.
*
* This factory resolves given bean names as JNDI names within the
- * Java EE application's "java:comp/env/" namespace. It caches the resolved
+ * Jakarta EE application's "java:comp/env/" namespace. It caches the resolved
* types for all obtained objects, and optionally also caches shareable
* objects (if they are explicitly marked as
* {@link #addShareableResource shareable resource}.
diff --git a/spring-context/src/main/java/org/springframework/scheduling/TaskScheduler.java b/spring-context/src/main/java/org/springframework/scheduling/TaskScheduler.java
index 326923d10d4..ad81312237e 100644
--- a/spring-context/src/main/java/org/springframework/scheduling/TaskScheduler.java
+++ b/spring-context/src/main/java/org/springframework/scheduling/TaskScheduler.java
@@ -39,7 +39,7 @@ import org.springframework.lang.Nullable;
* and adding extended trigger capabilities.
*
*
This interface is roughly equivalent to a JSR-236
- * {@code ManagedScheduledExecutorService} as supported in Java EE 7
+ * {@code ManagedScheduledExecutorService} as supported in Jakarta EE
* environments but aligned with Spring's {@code TaskExecutor} model.
*
* @author Juergen Hoeller
diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/Async.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/Async.java
index 496afa98119..40e572f0e8c 100644
--- a/spring-context/src/main/java/org/springframework/scheduling/annotation/Async.java
+++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/Async.java
@@ -41,7 +41,7 @@ import java.lang.annotation.Target;
* {@code Future} that can be used to track the result of the asynchronous method
* execution. However, since the target method needs to implement the same signature,
* it will have to return a temporary {@code Future} handle that just passes a value
- * through: e.g. Spring's {@link AsyncResult}, EJB 3.1's {@link javax.ejb.AsyncResult},
+ * through: e.g. Spring's {@link AsyncResult}, EJB 3.1's {@link jakarta.ejb.AsyncResult},
* or {@link java.util.concurrent.CompletableFuture#completedFuture(Object)}.
*
* @author Juergen Hoeller
diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationAdvisor.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationAdvisor.java
index c5636f2daa0..9b97ccfa6ec 100644
--- a/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationAdvisor.java
+++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationAdvisor.java
@@ -42,7 +42,7 @@ import org.springframework.util.function.SingletonSupplier;
* annotation. This annotation can be used at the method and type level in
* implementation classes as well as in service interfaces.
*
- *
This advisor detects the EJB 3.1 {@code javax.ejb.Asynchronous}
+ *
This advisor detects the EJB 3.1 {@code jakarta.ejb.Asynchronous}
* annotation as well, treating it exactly like Spring's own {@code Async}.
* Furthermore, a custom async annotation type may get specified through the
* {@link #setAsyncAnnotationType "asyncAnnotationType"} property.
@@ -99,7 +99,7 @@ public class AsyncAnnotationAdvisor extends AbstractPointcutAdvisor implements B
asyncAnnotationTypes.add(Async.class);
try {
asyncAnnotationTypes.add((Class extends Annotation>)
- ClassUtils.forName("javax.ejb.Asynchronous", AsyncAnnotationAdvisor.class.getClassLoader()));
+ ClassUtils.forName("jakarta.ejb.Asynchronous", AsyncAnnotationAdvisor.class.getClassLoader()));
}
catch (ClassNotFoundException ex) {
// If EJB 3.1 API not present, simply ignore.
@@ -112,7 +112,7 @@ public class AsyncAnnotationAdvisor extends AbstractPointcutAdvisor implements B
/**
* Set the 'async' annotation type.
*
The default async annotation type is the {@link Async} annotation, as well
- * as the EJB 3.1 {@code javax.ejb.Asynchronous} annotation (if present).
+ * as the EJB 3.1 {@code jakarta.ejb.Asynchronous} annotation (if present).
*
This setter property exists so that developers can provide their own
* (non-Spring-specific) annotation type to indicate that a method is to
* be executed asynchronously.
diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationBeanPostProcessor.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationBeanPostProcessor.java
index 1e7d9bb4930..54d66d2f8be 100644
--- a/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationBeanPostProcessor.java
+++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncAnnotationBeanPostProcessor.java
@@ -42,7 +42,7 @@ import org.springframework.util.function.SingletonSupplier;
* be provided as well as the annotation type that indicates a method should be
* invoked asynchronously. If no annotation type is specified, this post-
* processor will detect both Spring's {@link Async @Async} annotation as well
- * as the EJB 3.1 {@code javax.ejb.Asynchronous} annotation.
+ * as the EJB 3.1 {@code jakarta.ejb.Asynchronous} annotation.
*
*
For methods having a {@code void} return type, any exception thrown
* during the asynchronous method invocation cannot be accessed by the
@@ -130,7 +130,7 @@ public class AsyncAnnotationBeanPostProcessor extends AbstractBeanFactoryAwareAd
/**
* Set the 'async' annotation type to be detected at either class or method
* level. By default, both the {@link Async} annotation and the EJB 3.1
- * {@code javax.ejb.Asynchronous} annotation will be detected.
+ * {@code jakarta.ejb.Asynchronous} annotation will be detected.
*
This setter property exists so that developers can provide their own
* (non-Spring-specific) annotation type to indicate that a method (or all
* methods of a given class) should be invoked asynchronously.
diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/EnableAsync.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/EnableAsync.java
index 71f3f03c6dc..5e394ae7c75 100644
--- a/spring-context/src/main/java/org/springframework/scheduling/annotation/EnableAsync.java
+++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/EnableAsync.java
@@ -43,7 +43,7 @@ import org.springframework.core.Ordered;
* }
*
* {@code MyAsyncBean} is a user-defined type with one or more methods annotated with
- * either Spring's {@code @Async} annotation, the EJB 3.1 {@code @javax.ejb.Asynchronous}
+ * either Spring's {@code @Async} annotation, the EJB 3.1 {@code @jakarta.ejb.Asynchronous}
* annotation, or any custom annotation specified via the {@link #annotation} attribute.
* The aspect is added transparently for any registered bean, for instance via this
* configuration:
@@ -166,7 +166,7 @@ public @interface EnableAsync {
* Indicate the 'async' annotation type to be detected at either class
* or method level.
*
By default, both Spring's @{@link Async} annotation and the EJB 3.1
- * {@code @javax.ejb.Asynchronous} annotation will be detected.
+ * {@code @jakarta.ejb.Asynchronous} annotation will be detected.
*
This attribute exists so that developers can provide their own
* custom annotation type to indicate that a method (or all methods of
* a given class) should be invoked asynchronously.
diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java
index 0b976d3f00a..1161c453303 100644
--- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java
+++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java
@@ -23,8 +23,8 @@ import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
-import javax.enterprise.concurrent.ManagedExecutors;
-import javax.enterprise.concurrent.ManagedTask;
+import jakarta.enterprise.concurrent.ManagedExecutors;
+import jakarta.enterprise.concurrent.ManagedTask;
import org.springframework.core.task.AsyncListenableTaskExecutor;
import org.springframework.core.task.TaskDecorator;
@@ -41,11 +41,11 @@ import org.springframework.util.concurrent.ListenableFuture;
* Also detects an extended {@code java.util.concurrent.ExecutorService}, adapting
* the {@link org.springframework.core.task.AsyncTaskExecutor} interface accordingly.
*
- *
Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedExecutorService}
- * in order to expose {@link javax.enterprise.concurrent.ManagedTask} adapters for it,
+ *
Autodetects a JSR-236 {@link jakarta.enterprise.concurrent.ManagedExecutorService}
+ * in order to expose {@link jakarta.enterprise.concurrent.ManagedTask} adapters for it,
* exposing a long-running hint based on {@link SchedulingAwareRunnable} and an identity
* name based on the given Runnable/Callable's {@code toString()}. For JSR-236 style
- * lookup in a Java EE 7 environment, consider using {@link DefaultManagedTaskExecutor}.
+ * lookup in a Jakarta EE environment, consider using {@link DefaultManagedTaskExecutor}.
*
*
Note that there is a pre-built {@link ThreadPoolTaskExecutor} that allows
* for defining a {@link java.util.concurrent.ThreadPoolExecutor} in bean style,
@@ -70,7 +70,7 @@ public class ConcurrentTaskExecutor implements AsyncListenableTaskExecutor, Sche
static {
try {
managedExecutorServiceClass = ClassUtils.forName(
- "javax.enterprise.concurrent.ManagedExecutorService",
+ "jakarta.enterprise.concurrent.ManagedExecutorService",
ConcurrentTaskScheduler.class.getClassLoader());
}
catch (ClassNotFoundException ex) {
@@ -95,8 +95,8 @@ public class ConcurrentTaskExecutor implements AsyncListenableTaskExecutor, Sche
/**
* Create a new ConcurrentTaskExecutor, using the given {@link java.util.concurrent.Executor}.
- *
Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedExecutorService}
- * in order to expose {@link javax.enterprise.concurrent.ManagedTask} adapters for it.
+ *
Autodetects a JSR-236 {@link jakarta.enterprise.concurrent.ManagedExecutorService}
+ * in order to expose {@link jakarta.enterprise.concurrent.ManagedTask} adapters for it.
* @param executor the {@link java.util.concurrent.Executor} to delegate to
*/
public ConcurrentTaskExecutor(@Nullable Executor executor) {
@@ -107,8 +107,8 @@ public class ConcurrentTaskExecutor implements AsyncListenableTaskExecutor, Sche
/**
* Specify the {@link java.util.concurrent.Executor} to delegate to.
- *
Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedExecutorService}
- * in order to expose {@link javax.enterprise.concurrent.ManagedTask} adapters for it.
+ *
Autodetects a JSR-236 {@link jakarta.enterprise.concurrent.ManagedExecutorService}
+ * in order to expose {@link jakarta.enterprise.concurrent.ManagedTask} adapters for it.
*/
public final void setConcurrentExecutor(@Nullable Executor executor) {
this.concurrentExecutor = (executor != null ? executor : Executors.newSingleThreadExecutor());
diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskScheduler.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskScheduler.java
index 887c3f59651..ca16b976e17 100644
--- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskScheduler.java
+++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskScheduler.java
@@ -25,8 +25,8 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
-import javax.enterprise.concurrent.LastExecution;
-import javax.enterprise.concurrent.ManagedScheduledExecutorService;
+import jakarta.enterprise.concurrent.LastExecution;
+import jakarta.enterprise.concurrent.ManagedScheduledExecutorService;
import org.springframework.core.task.TaskRejectedException;
import org.springframework.lang.Nullable;
@@ -44,11 +44,11 @@ import org.springframework.util.ErrorHandler;
* Extends {@link ConcurrentTaskExecutor} in order to implement the
* {@link org.springframework.scheduling.SchedulingTaskExecutor} interface as well.
*
- *
Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedScheduledExecutorService}
+ *
Autodetects a JSR-236 {@link jakarta.enterprise.concurrent.ManagedScheduledExecutorService}
* in order to use it for trigger-based scheduling if possible, instead of Spring's
* local trigger management which ends up delegating to regular delay-based scheduling
* against the {@code java.util.concurrent.ScheduledExecutorService} API. For JSR-236 style
- * lookup in a Java EE 7 environment, consider using {@link DefaultManagedTaskScheduler}.
+ * lookup in a Jakarta EE environment, consider using {@link DefaultManagedTaskScheduler}.
*
*
Note that there is a pre-built {@link ThreadPoolTaskScheduler} that allows for
* defining a {@link java.util.concurrent.ScheduledThreadPoolExecutor} in bean style,
@@ -73,7 +73,7 @@ public class ConcurrentTaskScheduler extends ConcurrentTaskExecutor implements T
static {
try {
managedScheduledExecutorServiceClass = ClassUtils.forName(
- "javax.enterprise.concurrent.ManagedScheduledExecutorService",
+ "jakarta.enterprise.concurrent.ManagedScheduledExecutorService",
ConcurrentTaskScheduler.class.getClassLoader());
}
catch (ClassNotFoundException ex) {
@@ -106,7 +106,7 @@ public class ConcurrentTaskScheduler extends ConcurrentTaskExecutor implements T
/**
* Create a new ConcurrentTaskScheduler, using the given
* {@link java.util.concurrent.ScheduledExecutorService} as shared delegate.
- *
Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedScheduledExecutorService}
+ *
Autodetects a JSR-236 {@link jakarta.enterprise.concurrent.ManagedScheduledExecutorService}
* in order to use it for trigger-based scheduling if possible,
* instead of Spring's local trigger management.
* @param scheduledExecutor the {@link java.util.concurrent.ScheduledExecutorService}
@@ -121,7 +121,7 @@ public class ConcurrentTaskScheduler extends ConcurrentTaskExecutor implements T
/**
* Create a new ConcurrentTaskScheduler, using the given {@link java.util.concurrent.Executor}
* and {@link java.util.concurrent.ScheduledExecutorService} as delegates.
- *
Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedScheduledExecutorService}
+ *
Autodetects a JSR-236 {@link jakarta.enterprise.concurrent.ManagedScheduledExecutorService}
* in order to use it for trigger-based scheduling if possible,
* instead of Spring's local trigger management.
* @param concurrentExecutor the {@link java.util.concurrent.Executor} to delegate to
@@ -150,7 +150,7 @@ public class ConcurrentTaskScheduler extends ConcurrentTaskExecutor implements T
/**
* Specify the {@link java.util.concurrent.ScheduledExecutorService} to delegate to.
- *
Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedScheduledExecutorService}
+ *
Autodetects a JSR-236 {@link jakarta.enterprise.concurrent.ManagedScheduledExecutorService}
* in order to use it for trigger-based scheduling if possible,
* instead of Spring's local trigger management.
*
Note: This will only apply to {@link TaskScheduler} invocations.
@@ -275,7 +275,7 @@ public class ConcurrentTaskScheduler extends ConcurrentTaskExecutor implements T
public ScheduledFuture> schedule(Runnable task, final Trigger trigger) {
ManagedScheduledExecutorService executor = (ManagedScheduledExecutorService) scheduledExecutor;
- return executor.schedule(task, new javax.enterprise.concurrent.Trigger() {
+ return executor.schedule(task, new jakarta.enterprise.concurrent.Trigger() {
@Override
@Nullable
public Date getNextRunTime(@Nullable LastExecution le, Date taskScheduledTime) {
diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedAwareThreadFactory.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedAwareThreadFactory.java
index ab187157836..d52b92ed759 100644
--- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedAwareThreadFactory.java
+++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedAwareThreadFactory.java
@@ -31,10 +31,10 @@ import org.springframework.lang.Nullable;
/**
* JNDI-based variant of {@link CustomizableThreadFactory}, performing a default lookup
- * for JSR-236's "java:comp/DefaultManagedThreadFactory" in a Java EE 7 environment,
+ * for JSR-236's "java:comp/DefaultManagedThreadFactory" in a Jakarta EE environment,
* falling back to the local {@link CustomizableThreadFactory} setup if not found.
*
- *
This is a convenient way to use managed threads when running in a Java EE 7
+ *
This is a convenient way to use managed threads when running in a Jakarta EE
* environment, simply using regular local threads otherwise - without conditional
* setup (i.e. without profiles).
*
@@ -77,7 +77,7 @@ public class DefaultManagedAwareThreadFactory extends CustomizableThreadFactory
}
/**
- * Set whether the lookup occurs in a Java EE container, i.e. if the prefix
+ * Set whether the lookup occurs in a Jakarta EE container, i.e. if the prefix
* "java:comp/env/" needs to be added if the JNDI name doesn't already
* contain it. PersistenceAnnotationBeanPostProcessor's default is "true".
* @see org.springframework.jndi.JndiLocatorSupport#setResourceRef
diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskExecutor.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskExecutor.java
index 62cb3dd9fb1..bf40a15f3dd 100644
--- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskExecutor.java
+++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskExecutor.java
@@ -28,16 +28,16 @@ import org.springframework.lang.Nullable;
/**
* JNDI-based variant of {@link ConcurrentTaskExecutor}, performing a default lookup for
- * JSR-236's "java:comp/DefaultManagedExecutorService" in a Java EE 7/8 environment.
+ * JSR-236's "java:comp/DefaultManagedExecutorService" in a Jakarta EE/8 environment.
*
*
Note: This class is not strictly JSR-236 based; it can work with any regular
* {@link java.util.concurrent.Executor} that can be found in JNDI.
- * The actual adapting to {@link javax.enterprise.concurrent.ManagedExecutorService}
+ * The actual adapting to {@link jakarta.enterprise.concurrent.ManagedExecutorService}
* happens in the base class {@link ConcurrentTaskExecutor} itself.
*
* @author Juergen Hoeller
* @since 4.0
- * @see javax.enterprise.concurrent.ManagedExecutorService
+ * @see jakarta.enterprise.concurrent.ManagedExecutorService
*/
public class DefaultManagedTaskExecutor extends ConcurrentTaskExecutor implements InitializingBean {
@@ -64,7 +64,7 @@ public class DefaultManagedTaskExecutor extends ConcurrentTaskExecutor implement
}
/**
- * Set whether the lookup occurs in a Java EE container, i.e. if the prefix
+ * Set whether the lookup occurs in a Jakarta EE container, i.e. if the prefix
* "java:comp/env/" needs to be added if the JNDI name doesn't already
* contain it. PersistenceAnnotationBeanPostProcessor's default is "true".
* @see org.springframework.jndi.JndiLocatorSupport#setResourceRef
diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskScheduler.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskScheduler.java
index 133527ed771..b1845b563c1 100644
--- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskScheduler.java
+++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/DefaultManagedTaskScheduler.java
@@ -28,16 +28,16 @@ import org.springframework.lang.Nullable;
/**
* JNDI-based variant of {@link ConcurrentTaskScheduler}, performing a default lookup for
- * JSR-236's "java:comp/DefaultManagedScheduledExecutorService" in a Java EE 7 environment.
+ * JSR-236's "java:comp/DefaultManagedScheduledExecutorService" in a Jakarta EE environment.
*
*
Note: This class is not strictly JSR-236 based; it can work with any regular
* {@link java.util.concurrent.ScheduledExecutorService} that can be found in JNDI.
- * The actual adapting to {@link javax.enterprise.concurrent.ManagedScheduledExecutorService}
+ * The actual adapting to {@link jakarta.enterprise.concurrent.ManagedScheduledExecutorService}
* happens in the base class {@link ConcurrentTaskScheduler} itself.
*
* @author Juergen Hoeller
* @since 4.0
- * @see javax.enterprise.concurrent.ManagedScheduledExecutorService
+ * @see jakarta.enterprise.concurrent.ManagedScheduledExecutorService
*/
public class DefaultManagedTaskScheduler extends ConcurrentTaskScheduler implements InitializingBean {
@@ -64,7 +64,7 @@ public class DefaultManagedTaskScheduler extends ConcurrentTaskScheduler impleme
}
/**
- * Set whether the lookup occurs in a Java EE container, i.e. if the prefix
+ * Set whether the lookup occurs in a Jakarta EE container, i.e. if the prefix
* "java:comp/env/" needs to be added if the JNDI name doesn't already
* contain it. PersistenceAnnotationBeanPostProcessor's default is "true".
* @see org.springframework.jndi.JndiLocatorSupport#setResourceRef
diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ExecutorConfigurationSupport.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ExecutorConfigurationSupport.java
index 559890ef509..dc9a249bdd9 100644
--- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ExecutorConfigurationSupport.java
+++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ExecutorConfigurationSupport.java
@@ -71,7 +71,7 @@ public abstract class ExecutorConfigurationSupport extends CustomizableThreadFac
/**
* Set the ThreadFactory to use for the ExecutorService's thread pool.
* Default is the underlying ExecutorService's default thread factory.
- *
In a Java EE 7 or other managed environment with JSR-236 support,
+ *
In a Jakarta EE or other managed environment with JSR-236 support,
* consider specifying a JNDI-located ManagedThreadFactory: by default,
* to be found at "java:comp/DefaultManagedThreadFactory".
* Use the "jee:jndi-lookup" namespace element in XML or the programmatic
@@ -79,7 +79,7 @@ public abstract class ExecutorConfigurationSupport extends CustomizableThreadFac
* Alternatively, consider using Spring's {@link DefaultManagedAwareThreadFactory}
* with its fallback to local threads in case of no managed thread factory found.
* @see java.util.concurrent.Executors#defaultThreadFactory()
- * @see javax.enterprise.concurrent.ManagedThreadFactory
+ * @see jakarta.enterprise.concurrent.ManagedThreadFactory
* @see DefaultManagedAwareThreadFactory
*/
public void setThreadFactory(@Nullable ThreadFactory threadFactory) {
diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/package-info.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/package-info.java
index a8ea96ee4ee..7caa0796d90 100644
--- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/package-info.java
+++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/package-info.java
@@ -1,6 +1,6 @@
/**
* Scheduling convenience classes for the {@code java.util.concurrent}
- * and {@code javax.enterprise.concurrent} packages, allowing to set up a
+ * and {@code jakarta.enterprise.concurrent} packages, allowing to set up a
* ThreadPoolExecutor or ScheduledThreadPoolExecutor as a bean in a Spring
* context. Provides support for the native {@code java.util.concurrent}
* interfaces as well as the Spring {@code TaskExecutor} mechanism.
diff --git a/spring-context/src/main/java/org/springframework/stereotype/Repository.java b/spring-context/src/main/java/org/springframework/stereotype/Repository.java
index 97cb1358080..68f668e80af 100644
--- a/spring-context/src/main/java/org/springframework/stereotype/Repository.java
+++ b/spring-context/src/main/java/org/springframework/stereotype/Repository.java
@@ -29,7 +29,7 @@ import org.springframework.core.annotation.AliasFor;
* Domain-Driven Design (Evans, 2003) as "a mechanism for encapsulating storage,
* retrieval, and search behavior which emulates a collection of objects".
*
- *
Teams implementing traditional Java EE patterns such as "Data Access Object"
+ *
Teams implementing traditional Jakarta EE patterns such as "Data Access Object"
* may also apply this stereotype to DAO classes, though care should be taken to
* understand the distinction between Data Access Object and DDD-style repositories
* before doing so. This annotation is a general-purpose stereotype and individual teams
diff --git a/spring-context/src/main/java/org/springframework/validation/ObjectError.java b/spring-context/src/main/java/org/springframework/validation/ObjectError.java
index 227cd083952..0a02d714a76 100644
--- a/spring-context/src/main/java/org/springframework/validation/ObjectError.java
+++ b/spring-context/src/main/java/org/springframework/validation/ObjectError.java
@@ -76,7 +76,7 @@ public class ObjectError extends DefaultMessageSourceResolvable {
/**
* Preserve the source behind this error: possibly an {@link Exception}
* (typically {@link org.springframework.beans.PropertyAccessException})
- * or a Bean Validation {@link javax.validation.ConstraintViolation}.
+ * or a Bean Validation {@link jakarta.validation.ConstraintViolation}.
*
Note that any such source object is being stored as transient:
* that is, it won't be part of a serialized error representation.
* @param source the source object
@@ -92,7 +92,7 @@ public class ObjectError extends DefaultMessageSourceResolvable {
/**
* Unwrap the source behind this error: possibly an {@link Exception}
* (typically {@link org.springframework.beans.PropertyAccessException})
- * or a Bean Validation {@link javax.validation.ConstraintViolation}.
+ * or a Bean Validation {@link jakarta.validation.ConstraintViolation}.
*
The cause of the outermost exception will be introspected as well,
* e.g. the underlying conversion exception or exception thrown from a setter
* (instead of having to unwrap the {@code PropertyAccessException} in turn).
@@ -117,7 +117,7 @@ public class ObjectError extends DefaultMessageSourceResolvable {
/**
* Check the source behind this error: possibly an {@link Exception}
* (typically {@link org.springframework.beans.PropertyAccessException})
- * or a Bean Validation {@link javax.validation.ConstraintViolation}.
+ * or a Bean Validation {@link jakarta.validation.ConstraintViolation}.
*
The cause of the outermost exception will be introspected as well,
* e.g. the underlying conversion exception or exception thrown from a setter
* (instead of having to unwrap the {@code PropertyAccessException} in turn).
diff --git a/spring-context/src/main/java/org/springframework/validation/SmartValidator.java b/spring-context/src/main/java/org/springframework/validation/SmartValidator.java
index 4cc17002964..36ad9f588d6 100644
--- a/spring-context/src/main/java/org/springframework/validation/SmartValidator.java
+++ b/spring-context/src/main/java/org/springframework/validation/SmartValidator.java
@@ -42,7 +42,7 @@ public interface SmartValidator extends Validator {
* @param target the object that is to be validated
* @param errors contextual state about the validation process
* @param validationHints one or more hint objects to be passed to the validation engine
- * @see javax.validation.Validator#validate(Object, Class[])
+ * @see jakarta.validation.Validator#validate(Object, Class[])
*/
void validate(Object target, Errors errors, Object... validationHints);
@@ -56,7 +56,7 @@ public interface SmartValidator extends Validator {
* @param errors contextual state about the validation process
* @param validationHints one or more hint objects to be passed to the validation engine
* @since 5.1
- * @see javax.validation.Validator#validateValue(Class, String, Object, Class[])
+ * @see jakarta.validation.Validator#validateValue(Class, String, Object, Class[])
*/
default void validateValue(
Class> targetType, String fieldName, @Nullable Object value, Errors errors, Object... validationHints) {
diff --git a/spring-context/src/main/java/org/springframework/validation/annotation/Validated.java b/spring-context/src/main/java/org/springframework/validation/annotation/Validated.java
index a5939a3b16d..02a651ac8fe 100644
--- a/spring-context/src/main/java/org/springframework/validation/annotation/Validated.java
+++ b/spring-context/src/main/java/org/springframework/validation/annotation/Validated.java
@@ -23,7 +23,7 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- * Variant of JSR-303's {@link javax.validation.Valid}, supporting the
+ * Variant of JSR-303's {@link jakarta.validation.Valid}, supporting the
* specification of validation groups. Designed for convenient use with
* Spring's JSR-303 support but not JSR-303 specific.
*
@@ -43,7 +43,7 @@ import java.lang.annotation.Target;
*
* @author Juergen Hoeller
* @since 3.1
- * @see javax.validation.Validator#validate(Object, Class[])
+ * @see jakarta.validation.Validator#validate(Object, Class[])
* @see org.springframework.validation.SmartValidator#validate(Object, org.springframework.validation.Errors, Object...)
* @see org.springframework.validation.beanvalidation.SpringValidatorAdapter
* @see org.springframework.validation.beanvalidation.MethodValidationPostProcessor
diff --git a/spring-context/src/main/java/org/springframework/validation/annotation/ValidationAnnotationUtils.java b/spring-context/src/main/java/org/springframework/validation/annotation/ValidationAnnotationUtils.java
index 196f6fc6c74..a5309bcb02c 100644
--- a/spring-context/src/main/java/org/springframework/validation/annotation/ValidationAnnotationUtils.java
+++ b/spring-context/src/main/java/org/springframework/validation/annotation/ValidationAnnotationUtils.java
@@ -34,7 +34,7 @@ public abstract class ValidationAnnotationUtils {
/**
* Determine any validation hints by the given annotation.
- *
This implementation checks for {@code @javax.validation.Valid},
+ *
This implementation checks for {@code @jakarta.validation.Valid},
* Spring's {@link org.springframework.validation.annotation.Validated},
* and custom annotations whose name starts with "Valid".
* @param ann the annotation (potentially a validation annotation)
@@ -45,7 +45,7 @@ public abstract class ValidationAnnotationUtils {
public static Object[] determineValidationHints(Annotation ann) {
Class extends Annotation> annotationType = ann.annotationType();
String annotationName = annotationType.getName();
- if ("javax.validation.Valid".equals(annotationName)) {
+ if ("jakarta.validation.Valid".equals(annotationName)) {
return EMPTY_OBJECT_ARRAY;
}
Validated validatedAnn = AnnotationUtils.getAnnotation(ann, Validated.class);
diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessor.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessor.java
index 11dccd32aa9..77c7966a0ed 100644
--- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessor.java
+++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessor.java
@@ -19,10 +19,10 @@ package org.springframework.validation.beanvalidation;
import java.util.Iterator;
import java.util.Set;
-import javax.validation.ConstraintViolation;
-import javax.validation.Validation;
-import javax.validation.Validator;
-import javax.validation.ValidatorFactory;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.Validation;
+import jakarta.validation.Validator;
+import jakarta.validation.ValidatorFactory;
import org.springframework.aop.framework.AopProxyUtils;
import org.springframework.beans.BeansException;
@@ -60,7 +60,7 @@ public class BeanValidationPostProcessor implements BeanPostProcessor, Initializ
* Set the JSR-303 ValidatorFactory to delegate to for validating beans,
* using its default Validator.
*
Default is the default ValidatorFactory's default Validator.
- * @see javax.validation.ValidatorFactory#getValidator()
+ * @see jakarta.validation.ValidatorFactory#getValidator()
*/
public void setValidatorFactory(ValidatorFactory validatorFactory) {
this.validator = validatorFactory.getValidator();
@@ -105,7 +105,7 @@ public class BeanValidationPostProcessor implements BeanPostProcessor, Initializ
/**
* Perform validation of the given bean.
* @param bean the bean instance to validate
- * @see javax.validation.Validator#validate
+ * @see jakarta.validation.Validator#validate
*/
protected void doValidate(Object bean) {
Assert.state(this.validator != null, "No Validator set");
diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/CustomValidatorBean.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/CustomValidatorBean.java
index b9c074fb24e..37800c7df5f 100644
--- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/CustomValidatorBean.java
+++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/CustomValidatorBean.java
@@ -16,12 +16,12 @@
package org.springframework.validation.beanvalidation;
-import javax.validation.MessageInterpolator;
-import javax.validation.TraversableResolver;
-import javax.validation.Validation;
-import javax.validation.Validator;
-import javax.validation.ValidatorContext;
-import javax.validation.ValidatorFactory;
+import jakarta.validation.MessageInterpolator;
+import jakarta.validation.TraversableResolver;
+import jakarta.validation.Validation;
+import jakarta.validation.Validator;
+import jakarta.validation.ValidatorContext;
+import jakarta.validation.ValidatorFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.lang.Nullable;
@@ -48,7 +48,7 @@ public class CustomValidatorBean extends SpringValidatorAdapter implements Valid
/**
* Set the ValidatorFactory to obtain the target Validator from.
- *
Default is {@link javax.validation.Validation#buildDefaultValidatorFactory()}.
+ *
Default is {@link jakarta.validation.Validation#buildDefaultValidatorFactory()}.
*/
public void setValidatorFactory(ValidatorFactory validatorFactory) {
this.validatorFactory = validatorFactory;
diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocalValidatorFactoryBean.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocalValidatorFactoryBean.java
index 73ec646bead..58bc3c2f60e 100644
--- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocalValidatorFactoryBean.java
+++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocalValidatorFactoryBean.java
@@ -27,20 +27,20 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
-import javax.validation.Configuration;
-import javax.validation.ConstraintValidatorFactory;
-import javax.validation.MessageInterpolator;
-import javax.validation.ParameterNameProvider;
-import javax.validation.TraversableResolver;
-import javax.validation.Validation;
-import javax.validation.ValidationException;
-import javax.validation.ValidationProviderResolver;
-import javax.validation.Validator;
-import javax.validation.ValidatorContext;
-import javax.validation.ValidatorFactory;
-import javax.validation.bootstrap.GenericBootstrap;
-import javax.validation.bootstrap.ProviderSpecificBootstrap;
-
+import jakarta.validation.ClockProvider;
+import jakarta.validation.Configuration;
+import jakarta.validation.ConstraintValidatorFactory;
+import jakarta.validation.MessageInterpolator;
+import jakarta.validation.ParameterNameProvider;
+import jakarta.validation.TraversableResolver;
+import jakarta.validation.Validation;
+import jakarta.validation.ValidationException;
+import jakarta.validation.ValidationProviderResolver;
+import jakarta.validation.Validator;
+import jakarta.validation.ValidatorContext;
+import jakarta.validation.ValidatorFactory;
+import jakarta.validation.bootstrap.GenericBootstrap;
+import jakarta.validation.bootstrap.ProviderSpecificBootstrap;
import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator;
import org.springframework.beans.factory.DisposableBean;
@@ -57,11 +57,11 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.ReflectionUtils;
/**
- * This is the central class for {@code javax.validation} (JSR-303) setup in a Spring
- * application context: It bootstraps a {@code javax.validation.ValidationFactory} and
+ * This is the central class for {@code jakarta.validation} (JSR-303) setup in a Spring
+ * application context: It bootstraps a {@code jakarta.validation.ValidationFactory} and
* exposes it through the Spring {@link org.springframework.validation.Validator} interface
- * as well as through the JSR-303 {@link javax.validation.Validator} interface and the
- * {@link javax.validation.ValidatorFactory} interface itself.
+ * as well as through the JSR-303 {@link jakarta.validation.Validator} interface and the
+ * {@link jakarta.validation.ValidatorFactory} interface itself.
*
*
When talking to an instance of this bean through the Spring or JSR-303 Validator interfaces,
* you'll be talking to the default Validator of the underlying ValidatorFactory. This is very
@@ -69,22 +69,15 @@ import org.springframework.util.ReflectionUtils;
* you will almost always use the default Validator anyway. This can also be injected directly
* into any target dependency of type {@link org.springframework.validation.Validator}!
*
- *
As of Spring 5.0, this class requires Bean Validation 1.1+, with special support
- * for Hibernate Validator 5.x (see {@link #setValidationMessageSource}).
- * This class is also runtime-compatible with Bean Validation 2.0 and Hibernate Validator 6.0,
- * with one special note: If you'd like to call BV 2.0's {@code getClockProvider()} method,
- * obtain the native {@code ValidatorFactory} through {@code #unwrap(ValidatorFactory.class)}
- * and call the {@code getClockProvider()} method on the returned native reference there.
- *
*
This class is also being used by Spring's MVC configuration namespace, in case of the
- * {@code javax.validation} API being present but no explicit Validator having been configured.
+ * {@code jakarta.validation} API being present but no explicit Validator having been configured.
*
* @author Juergen Hoeller
* @since 3.0
- * @see javax.validation.ValidatorFactory
- * @see javax.validation.Validator
- * @see javax.validation.Validation#buildDefaultValidatorFactory()
- * @see javax.validation.ValidatorFactory#getValidator()
+ * @see jakarta.validation.ValidatorFactory
+ * @see jakarta.validation.Validator
+ * @see jakarta.validation.Validation#buildDefaultValidatorFactory()
+ * @see jakarta.validation.ValidatorFactory#getValidator()
*/
public class LocalValidatorFactoryBean extends SpringValidatorAdapter
implements ValidatorFactory, ApplicationContextAware, InitializingBean, DisposableBean {
@@ -123,8 +116,8 @@ public class LocalValidatorFactoryBean extends SpringValidatorAdapter
/**
* Specify the desired provider class, if any.
*
If not specified, JSR-303's default search mechanism will be used.
- * @see javax.validation.Validation#byProvider(Class)
- * @see javax.validation.Validation#byDefaultProvider()
+ * @see jakarta.validation.Validation#byProvider(Class)
+ * @see jakarta.validation.Validation#byDefaultProvider()
*/
@SuppressWarnings("rawtypes")
public void setProviderClass(Class providerClass) {
@@ -208,7 +201,7 @@ public class LocalValidatorFactoryBean extends SpringValidatorAdapter
* Specify bean validation properties to be passed to the validation provider.
*
Can be populated with a String "value" (parsed via PropertiesEditor)
* or a "props" element in XML bean definitions.
- * @see javax.validation.Configuration#addProperty(String, String)
+ * @see jakarta.validation.Configuration#addProperty(String, String)
*/
public void setValidationProperties(Properties jpaProperties) {
CollectionUtils.mergePropertiesIntoMap(jpaProperties, this.validationPropertyMap);
@@ -217,7 +210,7 @@ public class LocalValidatorFactoryBean extends SpringValidatorAdapter
/**
* Specify bean validation properties to be passed to the validation provider as a Map.
*
Can be populated with a "map" or "props" element in XML bean definitions.
- * @see javax.validation.Configuration#addProperty(String, String)
+ * @see jakarta.validation.Configuration#addProperty(String, String)
*/
public void setValidationPropertyMap(@Nullable Map validationProperties) {
if (validationProperties != null) {
@@ -400,18 +393,11 @@ public class LocalValidatorFactoryBean extends SpringValidatorAdapter
return this.validatorFactory.getParameterNameProvider();
}
- // Bean Validation 2.0: currently not implemented here since it would imply
- // a hard dependency on the new javax.validation.ClockProvider interface.
- // To be resolved once Spring Framework requires Bean Validation 2.0+.
- // Obtain the native ValidatorFactory through unwrap(ValidatorFactory.class)
- // instead which will fully support a getClockProvider() call as well.
- /*
@Override
- public javax.validation.ClockProvider getClockProvider() {
+ public ClockProvider getClockProvider() {
Assert.notNull(this.validatorFactory, "No target ValidatorFactory set");
return this.validatorFactory.getClockProvider();
}
- */
@Override
@SuppressWarnings("unchecked")
diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocaleContextMessageInterpolator.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocaleContextMessageInterpolator.java
index 40854bc3b1d..0a97ba2c780 100644
--- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocaleContextMessageInterpolator.java
+++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/LocaleContextMessageInterpolator.java
@@ -18,7 +18,7 @@ package org.springframework.validation.beanvalidation;
import java.util.Locale;
-import javax.validation.MessageInterpolator;
+import jakarta.validation.MessageInterpolator;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.util.Assert;
diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationInterceptor.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationInterceptor.java
index 8baf92adbfc..6e68a740583 100644
--- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationInterceptor.java
+++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationInterceptor.java
@@ -19,13 +19,12 @@ package org.springframework.validation.beanvalidation;
import java.lang.reflect.Method;
import java.util.Set;
-import javax.validation.ConstraintViolation;
-import javax.validation.ConstraintViolationException;
-import javax.validation.Validation;
-import javax.validation.Validator;
-import javax.validation.ValidatorFactory;
-import javax.validation.executable.ExecutableValidator;
-
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.ConstraintViolationException;
+import jakarta.validation.Validation;
+import jakarta.validation.Validator;
+import jakarta.validation.ValidatorFactory;
+import jakarta.validation.executable.ExecutableValidator;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
@@ -57,7 +56,7 @@ import org.springframework.validation.annotation.Validated;
* @author Juergen Hoeller
* @since 3.1
* @see MethodValidationPostProcessor
- * @see javax.validation.executable.ExecutableValidator
+ * @see jakarta.validation.executable.ExecutableValidator
*/
public class MethodValidationInterceptor implements MethodInterceptor {
diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationPostProcessor.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationPostProcessor.java
index 45e5d13a5fb..e24c9a02288 100644
--- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationPostProcessor.java
+++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/MethodValidationPostProcessor.java
@@ -18,9 +18,8 @@ package org.springframework.validation.beanvalidation;
import java.lang.annotation.Annotation;
-import javax.validation.Validator;
-import javax.validation.ValidatorFactory;
-
+import jakarta.validation.Validator;
+import jakarta.validation.ValidatorFactory;
import org.aopalliance.aop.Advice;
import org.springframework.aop.Pointcut;
@@ -55,7 +54,7 @@ import org.springframework.validation.annotation.Validated;
* @author Juergen Hoeller
* @since 3.1
* @see MethodValidationInterceptor
- * @see javax.validation.executable.ExecutableValidator
+ * @see jakarta.validation.executable.ExecutableValidator
*/
@SuppressWarnings("serial")
public class MethodValidationPostProcessor extends AbstractBeanFactoryAwareAdvisingPostProcessor
@@ -101,7 +100,7 @@ public class MethodValidationPostProcessor extends AbstractBeanFactoryAwareAdvis
* Set the JSR-303 ValidatorFactory to delegate to for validating methods,
* using its default Validator.
* Default is the default ValidatorFactory's default Validator.
- * @see javax.validation.ValidatorFactory#getValidator()
+ * @see jakarta.validation.ValidatorFactory#getValidator()
*/
public void setValidatorFactory(ValidatorFactory validatorFactory) {
this.validator = validatorFactory.getValidator();
diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/OptionalValidatorFactoryBean.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/OptionalValidatorFactoryBean.java
index 6d306943b08..a2991e55633 100644
--- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/OptionalValidatorFactoryBean.java
+++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/OptionalValidatorFactoryBean.java
@@ -16,8 +16,7 @@
package org.springframework.validation.beanvalidation;
-import javax.validation.ValidationException;
-
+import jakarta.validation.ValidationException;
import org.apache.commons.logging.LogFactory;
/**
@@ -26,7 +25,7 @@ import org.apache.commons.logging.LogFactory;
* in case of no Bean Validation provider being available.
*
*
This is the actual class used by Spring's MVC configuration namespace,
- * in case of the {@code javax.validation} API being present but no explicit
+ * in case of the {@code jakarta.validation} API being present but no explicit
* Validator having been configured.
*
* @author Juergen Hoeller
diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringConstraintValidatorFactory.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringConstraintValidatorFactory.java
index 5b68f072835..f26a033a8ab 100644
--- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringConstraintValidatorFactory.java
+++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringConstraintValidatorFactory.java
@@ -16,8 +16,8 @@
package org.springframework.validation.beanvalidation;
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorFactory;
+import jakarta.validation.ConstraintValidator;
+import jakarta.validation.ConstraintValidatorFactory;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.util.Assert;
diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java
index cf41fed3b29..de02082dffe 100644
--- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java
+++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java
@@ -25,13 +25,13 @@ import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
-import javax.validation.ConstraintViolation;
-import javax.validation.ElementKind;
-import javax.validation.Path;
-import javax.validation.ValidationException;
-import javax.validation.executable.ExecutableValidator;
-import javax.validation.metadata.BeanDescriptor;
-import javax.validation.metadata.ConstraintDescriptor;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.ElementKind;
+import jakarta.validation.Path;
+import jakarta.validation.ValidationException;
+import jakarta.validation.executable.ExecutableValidator;
+import jakarta.validation.metadata.BeanDescriptor;
+import jakarta.validation.metadata.ConstraintDescriptor;
import org.springframework.beans.NotReadablePropertyException;
import org.springframework.context.MessageSourceResolvable;
@@ -63,7 +63,7 @@ import org.springframework.validation.SmartValidator;
* @see CustomValidatorBean
* @see LocalValidatorFactoryBean
*/
-public class SpringValidatorAdapter implements SmartValidator, javax.validation.Validator {
+public class SpringValidatorAdapter implements SmartValidator, jakarta.validation.Validator {
private static final Set internalAnnotationAttributes = new HashSet<>(4);
@@ -74,14 +74,14 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation.
}
@Nullable
- private javax.validation.Validator targetValidator;
+ private jakarta.validation.Validator targetValidator;
/**
* Create a new SpringValidatorAdapter for the given JSR-303 Validator.
* @param targetValidator the JSR-303 Validator to wrap
*/
- public SpringValidatorAdapter(javax.validation.Validator targetValidator) {
+ public SpringValidatorAdapter(jakarta.validation.Validator targetValidator) {
Assert.notNull(targetValidator, "Target Validator must not be null");
this.targetValidator = targetValidator;
}
@@ -89,7 +89,7 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation.
SpringValidatorAdapter() {
}
- void setTargetValidator(javax.validation.Validator targetValidator) {
+ void setTargetValidator(jakarta.validation.Validator targetValidator) {
this.targetValidator = targetValidator;
}
@@ -199,7 +199,7 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation.
* @param violation the current JSR-303 ConstraintViolation
* @return the Spring-reported field (for use with {@link Errors})
* @since 4.2
- * @see javax.validation.ConstraintViolation#getPropertyPath()
+ * @see jakarta.validation.ConstraintViolation#getPropertyPath()
* @see org.springframework.validation.FieldError#getField()
*/
protected String determineField(ConstraintViolation violation) {
@@ -239,7 +239,7 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation.
* @param descriptor the JSR-303 ConstraintDescriptor for the current violation
* @return a corresponding error code (for use with {@link Errors})
* @since 4.2
- * @see javax.validation.metadata.ConstraintDescriptor#getAnnotation()
+ * @see jakarta.validation.metadata.ConstraintDescriptor#getAnnotation()
* @see org.springframework.validation.MessageCodesResolver
*/
protected String determineErrorCode(ConstraintDescriptor> descriptor) {
@@ -305,7 +305,7 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation.
* which contains the current field's value
* @return the invalid value to expose as part of the field error
* @since 4.2
- * @see javax.validation.ConstraintViolation#getInvalidValue()
+ * @see jakarta.validation.ConstraintViolation#getInvalidValue()
* @see org.springframework.validation.FieldError#getRejectedValue()
*/
@Nullable
@@ -387,7 +387,7 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation.
}
catch (ValidationException ex) {
// Ignore if just being asked for plain JSR-303 Validator
- if (javax.validation.Validator.class == type) {
+ if (jakarta.validation.Validator.class == type) {
return (T) this.targetValidator;
}
throw ex;
diff --git a/spring-context/src/main/resources/org/springframework/ejb/config/spring-jee.xsd b/spring-context/src/main/resources/org/springframework/ejb/config/spring-jee.xsd
index ad681b198da..283e803db81 100644
--- a/spring-context/src/main/resources/org/springframework/ejb/config/spring-jee.xsd
+++ b/spring-context/src/main/resources/org/springframework/ejb/config/spring-jee.xsd
@@ -13,7 +13,7 @@
@@ -95,62 +95,23 @@
-
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -178,7 +139,7 @@
@@ -186,7 +147,7 @@
@@ -222,37 +183,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/spring-context/src/test/java/example/scannable/AutowiredQualifierFooService.java b/spring-context/src/test/java/example/scannable/AutowiredQualifierFooService.java
index fc59dcf58d5..72232fb8311 100644
--- a/spring-context/src/test/java/example/scannable/AutowiredQualifierFooService.java
+++ b/spring-context/src/test/java/example/scannable/AutowiredQualifierFooService.java
@@ -18,7 +18,7 @@ package example.scannable;
import java.util.concurrent.Future;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
diff --git a/spring-context/src/test/java/example/scannable/FooServiceImpl.java b/spring-context/src/test/java/example/scannable/FooServiceImpl.java
index de062761fac..2b5425f8ecf 100644
--- a/spring-context/src/test/java/example/scannable/FooServiceImpl.java
+++ b/spring-context/src/test/java/example/scannable/FooServiceImpl.java
@@ -20,7 +20,7 @@ import java.util.Comparator;
import java.util.List;
import java.util.concurrent.Future;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.ListableBeanFactory;
diff --git a/spring-context/src/test/java/org/springframework/beans/factory/annotation/BridgeMethodAutowiringTests.java b/spring-context/src/test/java/org/springframework/beans/factory/annotation/BridgeMethodAutowiringTests.java
index 0be289d07b4..d0d555ca5b1 100644
--- a/spring-context/src/test/java/org/springframework/beans/factory/annotation/BridgeMethodAutowiringTests.java
+++ b/spring-context/src/test/java/org/springframework/beans/factory/annotation/BridgeMethodAutowiringTests.java
@@ -16,9 +16,8 @@
package org.springframework.beans.factory.annotation;
-import javax.inject.Inject;
-import javax.inject.Named;
-
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
diff --git a/spring-context/src/test/java/org/springframework/beans/factory/support/InjectAnnotationAutowireContextTests.java b/spring-context/src/test/java/org/springframework/beans/factory/support/InjectAnnotationAutowireContextTests.java
index b36639ad7de..f2f3e2af9e1 100644
--- a/spring-context/src/test/java/org/springframework/beans/factory/support/InjectAnnotationAutowireContextTests.java
+++ b/spring-context/src/test/java/org/springframework/beans/factory/support/InjectAnnotationAutowireContextTests.java
@@ -21,10 +21,9 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Qualifier;
-
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import jakarta.inject.Qualifier;
import org.junit.jupiter.api.Test;
import org.springframework.aop.scope.ScopedProxyUtils;
@@ -40,7 +39,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
/**
- * Integration tests for handling JSR-303 {@link javax.inject.Qualifier} annotations.
+ * Integration tests for handling JSR-303 {@link jakarta.inject.Qualifier} annotations.
*
* @author Juergen Hoeller
* @since 3.0
diff --git a/spring-context/src/test/java/org/springframework/context/annotation/AutoProxyLazyInitTests.java b/spring-context/src/test/java/org/springframework/context/annotation/AutoProxyLazyInitTests.java
index c73ddf7ad59..0f73a07a1fa 100644
--- a/spring-context/src/test/java/org/springframework/context/annotation/AutoProxyLazyInitTests.java
+++ b/spring-context/src/test/java/org/springframework/context/annotation/AutoProxyLazyInitTests.java
@@ -16,8 +16,7 @@
package org.springframework.context.annotation;
-import javax.annotation.PreDestroy;
-
+import jakarta.annotation.PreDestroy;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-context/src/test/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessorTests.java b/spring-context/src/test/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessorTests.java
index 3d300b71dbe..14ae10d2b31 100644
--- a/spring-context/src/test/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessorTests.java
+++ b/spring-context/src/test/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessorTests.java
@@ -18,11 +18,10 @@ package org.springframework.context.annotation;
import java.util.Properties;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.annotation.Resource;
-import javax.ejb.EJB;
-
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.PreDestroy;
+import jakarta.annotation.Resource;
+import jakarta.ejb.EJB;
import org.junit.jupiter.api.Test;
import org.springframework.beans.BeansException;
diff --git a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostConstructAndAutowiringTests.java b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostConstructAndAutowiringTests.java
index 0aaf4c00a06..a63a94be187 100644
--- a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostConstructAndAutowiringTests.java
+++ b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostConstructAndAutowiringTests.java
@@ -16,8 +16,7 @@
package org.springframework.context.annotation;
-import javax.annotation.PostConstruct;
-
+import jakarta.annotation.PostConstruct;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java
index 3b1f1a7f0dd..d8e78ee153f 100644
--- a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java
+++ b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorTests.java
@@ -23,8 +23,7 @@ import java.lang.annotation.Target;
import java.util.List;
import java.util.Map;
-import javax.annotation.PostConstruct;
-
+import jakarta.annotation.PostConstruct;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-context/src/test/java/org/springframework/context/annotation/PrimitiveBeanLookupAndAutowiringTests.java b/spring-context/src/test/java/org/springframework/context/annotation/PrimitiveBeanLookupAndAutowiringTests.java
index 31a2d7c631d..342573f7397 100644
--- a/spring-context/src/test/java/org/springframework/context/annotation/PrimitiveBeanLookupAndAutowiringTests.java
+++ b/spring-context/src/test/java/org/springframework/context/annotation/PrimitiveBeanLookupAndAutowiringTests.java
@@ -16,8 +16,7 @@
package org.springframework.context.annotation;
-import javax.annotation.Resource;
-
+import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/spring-context/src/test/java/org/springframework/context/annotation/PropertySourceAnnotationTests.java b/spring-context/src/test/java/org/springframework/context/annotation/PropertySourceAnnotationTests.java
index faada752fdb..8b73c760ee1 100644
--- a/spring-context/src/test/java/org/springframework/context/annotation/PropertySourceAnnotationTests.java
+++ b/spring-context/src/test/java/org/springframework/context/annotation/PropertySourceAnnotationTests.java
@@ -26,8 +26,7 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.Properties;
-import javax.inject.Inject;
-
+import jakarta.inject.Inject;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.BeanDefinitionStoreException;
diff --git a/spring-context/src/test/java/org/springframework/context/annotation/Spr3775InitDestroyLifecycleTests.java b/spring-context/src/test/java/org/springframework/context/annotation/Spr3775InitDestroyLifecycleTests.java
index 0fb249595f4..82caf5254e9 100644
--- a/spring-context/src/test/java/org/springframework/context/annotation/Spr3775InitDestroyLifecycleTests.java
+++ b/spring-context/src/test/java/org/springframework/context/annotation/Spr3775InitDestroyLifecycleTests.java
@@ -20,9 +20,8 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.PreDestroy;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.jupiter.api.Test;
@@ -49,8 +48,8 @@ import static org.assertj.core.api.Assertions.assertThat;
* {@link InitializingBean} & {@link DisposableBean} interfaces
* Custom {@link RootBeanDefinition#getInitMethodName() init} &
* {@link RootBeanDefinition#getDestroyMethodName() destroy} methods
- * JSR 250's {@link javax.annotation.PostConstruct @PostConstruct} &
- * {@link javax.annotation.PreDestroy @PreDestroy} annotations
+ * JSR 250's {@link jakarta.annotation.PostConstruct @PostConstruct} &
+ * {@link jakarta.annotation.PreDestroy @PreDestroy} annotations
*
*
* @author Sam Brannen
diff --git a/spring-context/src/test/java/org/springframework/context/annotation/configuration/AutowiredConfigurationTests.java b/spring-context/src/test/java/org/springframework/context/annotation/configuration/AutowiredConfigurationTests.java
index fa905200256..2a8eca47d36 100644
--- a/spring-context/src/test/java/org/springframework/context/annotation/configuration/AutowiredConfigurationTests.java
+++ b/spring-context/src/test/java/org/springframework/context/annotation/configuration/AutowiredConfigurationTests.java
@@ -22,8 +22,7 @@ import java.lang.annotation.RetentionPolicy;
import java.util.List;
import java.util.Optional;
-import javax.inject.Provider;
-
+import jakarta.inject.Provider;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.BeanFactory;
diff --git a/spring-context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java b/spring-context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java
index 89da3b91622..ddc5db678c6 100644
--- a/spring-context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java
+++ b/spring-context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java
@@ -22,9 +22,8 @@ import java.util.List;
import java.util.Set;
import java.util.function.Supplier;
-import javax.annotation.Resource;
-import javax.inject.Provider;
-
+import jakarta.annotation.Resource;
+import jakarta.inject.Provider;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.BeanClassLoaderAware;
diff --git a/spring-context/src/test/java/org/springframework/context/annotation/configuration/Spr12526Tests.java b/spring-context/src/test/java/org/springframework/context/annotation/configuration/Spr12526Tests.java
index 8c069e16add..5c4f58d5063 100644
--- a/spring-context/src/test/java/org/springframework/context/annotation/configuration/Spr12526Tests.java
+++ b/spring-context/src/test/java/org/springframework/context/annotation/configuration/Spr12526Tests.java
@@ -16,8 +16,7 @@
package org.springframework.context.annotation.configuration;
-import javax.annotation.Resource;
-
+import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
diff --git a/spring-context/src/test/java/org/springframework/context/annotation6/Jsr330NamedForScanning.java b/spring-context/src/test/java/org/springframework/context/annotation6/Jsr330NamedForScanning.java
index d474a99d4a4..e84bad2a528 100644
--- a/spring-context/src/test/java/org/springframework/context/annotation6/Jsr330NamedForScanning.java
+++ b/spring-context/src/test/java/org/springframework/context/annotation6/Jsr330NamedForScanning.java
@@ -16,7 +16,7 @@
package org.springframework.context.annotation6;
-import javax.inject.Named;
+import jakarta.inject.Named;
@Named
public class Jsr330NamedForScanning {
diff --git a/spring-context/src/test/java/org/springframework/context/event/AnnotationDrivenEventListenerTests.java b/spring-context/src/test/java/org/springframework/context/event/AnnotationDrivenEventListenerTests.java
index c493f075b1a..8c51dd29420 100644
--- a/spring-context/src/test/java/org/springframework/context/event/AnnotationDrivenEventListenerTests.java
+++ b/spring-context/src/test/java/org/springframework/context/event/AnnotationDrivenEventListenerTests.java
@@ -30,9 +30,8 @@ import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-
+import jakarta.annotation.PostConstruct;
+import jakarta.inject.Inject;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
diff --git a/spring-context/src/test/java/org/springframework/ejb/access/LocalSlsbInvokerInterceptorTests.java b/spring-context/src/test/java/org/springframework/ejb/access/LocalSlsbInvokerInterceptorTests.java
deleted file mode 100644
index f3489771175..00000000000
--- a/spring-context/src/test/java/org/springframework/ejb/access/LocalSlsbInvokerInterceptorTests.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright 2002-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.ejb.access;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBLocalHome;
-import javax.ejb.EJBLocalObject;
-import javax.naming.Context;
-import javax.naming.NamingException;
-
-import org.junit.jupiter.api.Test;
-
-import org.springframework.aop.framework.ProxyFactory;
-import org.springframework.jndi.JndiTemplate;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
-import static org.mockito.BDDMockito.given;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-/**
- * @author Rod Johnson
- * @author Juergen Hoeller
- * @author Chris Beams
-*/
-public class LocalSlsbInvokerInterceptorTests {
-
- /**
- * Test that it performs the correct lookup.
- */
- @Test
- public void testPerformsLookup() throws Exception {
- LocalInterfaceWithBusinessMethods ejb = mock(LocalInterfaceWithBusinessMethods.class);
-
- String jndiName= "foobar";
- Context mockContext = mockContext(jndiName, ejb);
-
- configuredInterceptor(mockContext, jndiName);
-
- verify(mockContext).close();
- }
-
- @Test
- public void testLookupFailure() throws Exception {
- final NamingException nex = new NamingException();
- final String jndiName= "foobar";
- JndiTemplate jt = new JndiTemplate() {
- @Override
- public Object lookup(String name) throws NamingException {
- assertThat(jndiName.equals(name)).isTrue();
- throw nex;
- }
- };
-
- LocalSlsbInvokerInterceptor si = new LocalSlsbInvokerInterceptor();
- si.setJndiName("foobar");
- // default resourceRef=false should cause this to fail, as java:/comp/env will not
- // automatically be added
- si.setJndiTemplate(jt);
- assertThatExceptionOfType(NamingException.class)
- .isThrownBy(si::afterPropertiesSet)
- .isSameAs(nex);
- }
-
- @Test
- public void testInvokesMethodOnEjbInstance() throws Exception {
- Object retVal = new Object();
- LocalInterfaceWithBusinessMethods ejb = mock(LocalInterfaceWithBusinessMethods.class);
- given(ejb.targetMethod()).willReturn(retVal);
-
- String jndiName= "foobar";
- Context mockContext = mockContext(jndiName, ejb);
-
- LocalSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName);
-
- ProxyFactory pf = new ProxyFactory(new Class>[] { BusinessMethods.class });
- pf.addAdvice(si);
- BusinessMethods target = (BusinessMethods) pf.getProxy();
-
- assertThat(target.targetMethod() == retVal).isTrue();
-
- verify(mockContext).close();
- verify(ejb).remove();
- }
-
- @Test
- public void testInvokesMethodOnEjbInstanceWithSeparateBusinessMethods() throws Exception {
- Object retVal = new Object();
- LocalInterface ejb = mock(LocalInterface.class);
- given(ejb.targetMethod()).willReturn(retVal);
-
- String jndiName= "foobar";
- Context mockContext = mockContext(jndiName, ejb);
-
- LocalSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName);
-
- ProxyFactory pf = new ProxyFactory(new Class>[] { BusinessMethods.class });
- pf.addAdvice(si);
- BusinessMethods target = (BusinessMethods) pf.getProxy();
-
- assertThat(target.targetMethod() == retVal).isTrue();
-
- verify(mockContext).close();
- verify(ejb).remove();
- }
-
- private void testException(Exception expected) throws Exception {
- LocalInterfaceWithBusinessMethods ejb = mock(LocalInterfaceWithBusinessMethods.class);
- given(ejb.targetMethod()).willThrow(expected);
-
- String jndiName= "foobar";
- Context mockContext = mockContext(jndiName, ejb);
-
- LocalSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName);
-
- ProxyFactory pf = new ProxyFactory(new Class>[] { LocalInterfaceWithBusinessMethods.class });
- pf.addAdvice(si);
- LocalInterfaceWithBusinessMethods target = (LocalInterfaceWithBusinessMethods) pf.getProxy();
-
- assertThatExceptionOfType(Exception.class)
- .isThrownBy(target::targetMethod)
- .isSameAs(expected);
-
- verify(mockContext).close();
- }
-
- @Test
- public void testApplicationException() throws Exception {
- testException(new ApplicationException());
- }
-
- protected Context mockContext(final String jndiName, final Object ejbInstance)
- throws Exception {
- SlsbHome mockHome = mock(SlsbHome.class);
- given(mockHome.create()).willReturn((LocalInterface)ejbInstance);
- Context mockCtx = mock(Context.class);
- given(mockCtx.lookup("java:comp/env/" + jndiName)).willReturn(mockHome);
- return mockCtx;
- }
-
- protected LocalSlsbInvokerInterceptor configuredInterceptor(final Context mockCtx, final String jndiName)
- throws Exception {
-
- LocalSlsbInvokerInterceptor si = new LocalSlsbInvokerInterceptor();
- si.setJndiTemplate(new JndiTemplate() {
- @Override
- protected Context createInitialContext() throws NamingException {
- return mockCtx;
- }
- });
- si.setJndiName(jndiName);
- si.setResourceRef(true);
- si.afterPropertiesSet();
-
- return si;
- }
-
-
- /**
- * Needed so that we can mock the create() method.
- */
- private interface SlsbHome extends EJBLocalHome {
-
- LocalInterface create() throws CreateException;
- }
-
-
- private interface BusinessMethods {
-
- Object targetMethod() throws ApplicationException;
- }
-
-
- private interface LocalInterface extends EJBLocalObject {
-
- Object targetMethod() throws ApplicationException;
- }
-
-
- private interface LocalInterfaceWithBusinessMethods extends LocalInterface, BusinessMethods {
- }
-
-
- @SuppressWarnings("serial")
- private class ApplicationException extends Exception {
-
- public ApplicationException() {
- super("appException");
- }
- }
-
-}
diff --git a/spring-context/src/test/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBeanTests.java b/spring-context/src/test/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBeanTests.java
deleted file mode 100644
index 545e6c288af..00000000000
--- a/spring-context/src/test/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBeanTests.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright 2002-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.ejb.access;
-
-import java.lang.reflect.Proxy;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBLocalHome;
-import javax.ejb.EJBLocalObject;
-import javax.naming.NamingException;
-
-import org.junit.jupiter.api.Test;
-
-import org.springframework.jndi.JndiTemplate;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
-import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
-import static org.mockito.BDDMockito.given;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoInteractions;
-
-/**
- * @author Rod Johnson
- * @author Juergen Hoeller
- * @author Chris Beams
- * @since 21.05.2003
- */
-public class LocalStatelessSessionProxyFactoryBeanTests {
-
- @Test
- public void testInvokesMethod() throws Exception {
- final int value = 11;
- final String jndiName = "foo";
-
- MyEjb myEjb = mock(MyEjb.class);
- given(myEjb.getValue()).willReturn(value);
-
- final MyHome home = mock(MyHome.class);
- given(home.create()).willReturn(myEjb);
-
- JndiTemplate jt = new JndiTemplate() {
- @Override
- public Object lookup(String name) throws NamingException {
- // parameterize
- assertThat(name.equals("java:comp/env/" + jndiName)).isTrue();
- return home;
- }
- };
-
- LocalStatelessSessionProxyFactoryBean fb = new LocalStatelessSessionProxyFactoryBean();
- fb.setJndiName(jndiName);
- fb.setResourceRef(true);
- fb.setBusinessInterface(MyBusinessMethods.class);
- fb.setJndiTemplate(jt);
-
- // Need lifecycle methods
- fb.afterPropertiesSet();
-
- MyBusinessMethods mbm = (MyBusinessMethods) fb.getObject();
- assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue();
- assertThat(mbm.getValue() == value).isTrue();
- verify(myEjb).remove();
- }
-
- @Test
- public void testInvokesMethodOnEjb3StyleBean() throws Exception {
- final int value = 11;
- final String jndiName = "foo";
-
- final MyEjb myEjb = mock(MyEjb.class);
- given(myEjb.getValue()).willReturn(value);
-
- JndiTemplate jt = new JndiTemplate() {
- @Override
- public Object lookup(String name) throws NamingException {
- // parameterize
- assertThat(name.equals("java:comp/env/" + jndiName)).isTrue();
- return myEjb;
- }
- };
-
- LocalStatelessSessionProxyFactoryBean fb = new LocalStatelessSessionProxyFactoryBean();
- fb.setJndiName(jndiName);
- fb.setResourceRef(true);
- fb.setBusinessInterface(MyBusinessMethods.class);
- fb.setJndiTemplate(jt);
-
- // Need lifecycle methods
- fb.afterPropertiesSet();
-
- MyBusinessMethods mbm = (MyBusinessMethods) fb.getObject();
- assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue();
- assertThat(mbm.getValue() == value).isTrue();
- }
-
- @Test
- public void testCreateException() throws Exception {
- final String jndiName = "foo";
-
- final CreateException cex = new CreateException();
- final MyHome home = mock(MyHome.class);
- given(home.create()).willThrow(cex);
-
- JndiTemplate jt = new JndiTemplate() {
- @Override
- public Object lookup(String name) throws NamingException {
- // parameterize
- assertThat(name.equals(jndiName)).isTrue();
- return home;
- }
- };
-
- LocalStatelessSessionProxyFactoryBean fb = new LocalStatelessSessionProxyFactoryBean();
- fb.setJndiName(jndiName);
- fb.setResourceRef(false); // no java:comp/env prefix
- fb.setBusinessInterface(MyBusinessMethods.class);
- assertThat(MyBusinessMethods.class).isEqualTo(fb.getBusinessInterface());
- fb.setJndiTemplate(jt);
-
- // Need lifecycle methods
- fb.afterPropertiesSet();
-
- MyBusinessMethods mbm = (MyBusinessMethods) fb.getObject();
- assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue();
-
- assertThatExceptionOfType(EjbAccessException.class).isThrownBy(
- mbm::getValue)
- .withCause(cex);
- }
-
- @Test
- public void testNoBusinessInterfaceSpecified() throws Exception {
- // Will do JNDI lookup to get home but won't call create
- // Could actually try to figure out interface from create?
- final String jndiName = "foo";
-
- final MyHome home = mock(MyHome.class);
-
- JndiTemplate jt = new JndiTemplate() {
- @Override
- public Object lookup(String name) throws NamingException {
- // parameterize
- assertThat(name.equals("java:comp/env/" + jndiName)).isTrue();
- return home;
- }
- };
-
- LocalStatelessSessionProxyFactoryBean fb = new LocalStatelessSessionProxyFactoryBean();
- fb.setJndiName(jndiName);
- fb.setResourceRef(true);
- // Don't set business interface
- fb.setJndiTemplate(jt);
-
- // Check it's a singleton
- assertThat(fb.isSingleton()).isTrue();
-
- assertThatIllegalArgumentException().isThrownBy(
- fb::afterPropertiesSet)
- .withMessageContaining("businessInterface");
-
- // Expect no methods on home
- verifyNoInteractions(home);
- }
-
-
- public interface MyHome extends EJBLocalHome {
-
- MyBusinessMethods create() throws CreateException;
- }
-
-
- public interface MyBusinessMethods {
-
- int getValue();
- }
-
-
- public interface MyEjb extends EJBLocalObject, MyBusinessMethods {
- }
-
-}
diff --git a/spring-context/src/test/java/org/springframework/ejb/access/SimpleRemoteSlsbInvokerInterceptorTests.java b/spring-context/src/test/java/org/springframework/ejb/access/SimpleRemoteSlsbInvokerInterceptorTests.java
deleted file mode 100644
index 3397cb05ee0..00000000000
--- a/spring-context/src/test/java/org/springframework/ejb/access/SimpleRemoteSlsbInvokerInterceptorTests.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.ejb.access;
-
-import java.rmi.ConnectException;
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBHome;
-import javax.ejb.EJBObject;
-import javax.naming.Context;
-import javax.naming.NamingException;
-
-import org.junit.jupiter.api.Test;
-
-import org.springframework.aop.framework.ProxyFactory;
-import org.springframework.jndi.JndiTemplate;
-import org.springframework.remoting.RemoteAccessException;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
-import static org.mockito.BDDMockito.given;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-/**
- * @author Rod Johnson
- * @author Juergen Hoeller
- * @author Chris Beams
- */
-public class SimpleRemoteSlsbInvokerInterceptorTests {
-
- private Context mockContext(
- String jndiName, RemoteInterface ejbInstance)
- throws Exception {
- SlsbHome mockHome = mock(SlsbHome.class);
- given(mockHome.create()).willReturn(ejbInstance);
- Context mockCtx = mock(Context.class);
- given(mockCtx.lookup("java:comp/env/" + jndiName)).willReturn(mockHome);
- return mockCtx;
- }
-
- private SimpleRemoteSlsbInvokerInterceptor configuredInterceptor(
- final Context mockCtx, String jndiName) throws Exception {
-
- SimpleRemoteSlsbInvokerInterceptor si = createInterceptor();
- si.setJndiTemplate(new JndiTemplate() {
- @Override
- protected Context createInitialContext() {
- return mockCtx;
- }
- });
- si.setResourceRef(true);
- si.setJndiName(jndiName);
-
- return si;
- }
-
- protected SimpleRemoteSlsbInvokerInterceptor createInterceptor() {
- return new SimpleRemoteSlsbInvokerInterceptor();
- }
-
- protected Object configuredProxy(SimpleRemoteSlsbInvokerInterceptor si, Class> ifc) throws NamingException {
- si.afterPropertiesSet();
- ProxyFactory pf = new ProxyFactory(new Class>[] {ifc});
- pf.addAdvice(si);
- return pf.getProxy();
- }
-
-
- @Test
- public void testPerformsLookup() throws Exception {
- RemoteInterface ejb = mock(RemoteInterface.class);
-
- String jndiName= "foobar";
- Context mockContext = mockContext(jndiName, ejb);
-
- SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName);
- configuredProxy(si, RemoteInterface.class);
-
- verify(mockContext).close();
- }
-
- @Test
- public void testPerformsLookupWithAccessContext() throws Exception {
- RemoteInterface ejb = mock(RemoteInterface.class);
-
- String jndiName= "foobar";
- Context mockContext = mockContext(jndiName, ejb);
-
- SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName);
- si.setExposeAccessContext(true);
- RemoteInterface target = (RemoteInterface) configuredProxy(si, RemoteInterface.class);
- assertThat(target.targetMethod()).isNull();
-
- verify(mockContext, times(2)).close();
- verify(ejb).targetMethod();
-
- }
-
- @Test
- public void testLookupFailure() throws Exception {
- final NamingException nex = new NamingException();
- final String jndiName = "foobar";
- JndiTemplate jt = new JndiTemplate() {
- @Override
- public Object lookup(String name) throws NamingException {
- assertThat(jndiName.equals(name)).isTrue();
- throw nex;
- }
- };
-
- SimpleRemoteSlsbInvokerInterceptor si = new SimpleRemoteSlsbInvokerInterceptor();
- si.setJndiName("foobar");
- // default resourceRef=false should cause this to fail, as java:/comp/env will not
- // automatically be added
- si.setJndiTemplate(jt);
- assertThatExceptionOfType(NamingException.class)
- .isThrownBy(si::afterPropertiesSet)
- .isSameAs(nex);
- }
-
- @Test
- public void testInvokesMethodOnEjbInstance() throws Exception {
- doTestInvokesMethodOnEjbInstance(true, true);
- }
-
- @Test
- public void testInvokesMethodOnEjbInstanceWithLazyLookup() throws Exception {
- doTestInvokesMethodOnEjbInstance(false, true);
- }
-
- @Test
- public void testInvokesMethodOnEjbInstanceWithLazyLookupAndNoCache() throws Exception {
- doTestInvokesMethodOnEjbInstance(false, false);
- }
-
- @Test
- public void testInvokesMethodOnEjbInstanceWithNoCache() throws Exception {
- doTestInvokesMethodOnEjbInstance(true, false);
- }
-
- private void doTestInvokesMethodOnEjbInstance(boolean lookupHomeOnStartup, boolean cacheHome) throws Exception {
- Object retVal = new Object();
- final RemoteInterface ejb = mock(RemoteInterface.class);
- given(ejb.targetMethod()).willReturn(retVal);
-
- int lookupCount = 1;
- if (!cacheHome) {
- lookupCount++;
- if (lookupHomeOnStartup) {
- lookupCount++;
- }
- }
-
- final String jndiName= "foobar";
- Context mockContext = mockContext(jndiName, ejb);
-
- SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName);
- si.setLookupHomeOnStartup(lookupHomeOnStartup);
- si.setCacheHome(cacheHome);
-
- RemoteInterface target = (RemoteInterface) configuredProxy(si, RemoteInterface.class);
- assertThat(target.targetMethod() == retVal).isTrue();
- assertThat(target.targetMethod() == retVal).isTrue();
-
- verify(mockContext, times(lookupCount)).close();
- verify(ejb, times(2)).remove();
- }
-
- @Test
- public void testInvokesMethodOnEjbInstanceWithRemoteException() throws Exception {
- final RemoteInterface ejb = mock(RemoteInterface.class);
- given(ejb.targetMethod()).willThrow(new RemoteException());
- ejb.remove();
-
- final String jndiName= "foobar";
- Context mockContext = mockContext(jndiName, ejb);
-
- SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName);
-
- RemoteInterface target = (RemoteInterface) configuredProxy(si, RemoteInterface.class);
- assertThatExceptionOfType(RemoteException.class).isThrownBy(
- target::targetMethod);
-
- verify(mockContext).close();
- verify(ejb, times(2)).remove();
- }
-
- @Test
- public void testInvokesMethodOnEjbInstanceWithConnectExceptionWithRefresh() throws Exception {
- doTestInvokesMethodOnEjbInstanceWithConnectExceptionWithRefresh(true, true);
- }
-
- @Test
- public void testInvokesMethodOnEjbInstanceWithConnectExceptionWithRefreshAndLazyLookup() throws Exception {
- doTestInvokesMethodOnEjbInstanceWithConnectExceptionWithRefresh(false, true);
- }
-
- @Test
- public void testInvokesMethodOnEjbInstanceWithConnectExceptionWithRefreshAndLazyLookupAndNoCache() throws Exception {
- doTestInvokesMethodOnEjbInstanceWithConnectExceptionWithRefresh(false, false);
- }
-
- @Test
- public void testInvokesMethodOnEjbInstanceWithConnectExceptionWithRefreshAndNoCache() throws Exception {
- doTestInvokesMethodOnEjbInstanceWithConnectExceptionWithRefresh(true, false);
- }
-
- private void doTestInvokesMethodOnEjbInstanceWithConnectExceptionWithRefresh(
- boolean lookupHomeOnStartup, boolean cacheHome) throws Exception {
-
- final RemoteInterface ejb = mock(RemoteInterface.class);
- given(ejb.targetMethod()).willThrow(new ConnectException(""));
-
- int lookupCount = 2;
- if (!cacheHome) {
- lookupCount++;
- if (lookupHomeOnStartup) {
- lookupCount++;
- }
- }
-
- final String jndiName= "foobar";
- Context mockContext = mockContext(jndiName, ejb);
-
- SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName);
- si.setRefreshHomeOnConnectFailure(true);
- si.setLookupHomeOnStartup(lookupHomeOnStartup);
- si.setCacheHome(cacheHome);
-
- RemoteInterface target = (RemoteInterface) configuredProxy(si, RemoteInterface.class);
- assertThatExceptionOfType(ConnectException.class).isThrownBy(
- target::targetMethod);
-
- verify(mockContext, times(lookupCount)).close();
- verify(ejb, times(2)).remove();
- }
-
- @Test
- public void testInvokesMethodOnEjbInstanceWithBusinessInterface() throws Exception {
- Object retVal = new Object();
- final RemoteInterface ejb = mock(RemoteInterface.class);
- given(ejb.targetMethod()).willReturn(retVal);
-
- final String jndiName= "foobar";
- Context mockContext = mockContext(jndiName, ejb);
-
- SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName);
-
- BusinessInterface target = (BusinessInterface) configuredProxy(si, BusinessInterface.class);
- assertThat(target.targetMethod() == retVal).isTrue();
-
- verify(mockContext).close();
- verify(ejb).remove();
- }
-
- @Test
- public void testInvokesMethodOnEjbInstanceWithBusinessInterfaceWithRemoteException() throws Exception {
- final RemoteInterface ejb = mock(RemoteInterface.class);
- given(ejb.targetMethod()).willThrow(new RemoteException());
-
- final String jndiName= "foobar";
- Context mockContext = mockContext(jndiName, ejb);
-
- SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName);
-
- BusinessInterface target = (BusinessInterface) configuredProxy(si, BusinessInterface.class);
- assertThatExceptionOfType(RemoteAccessException.class).isThrownBy(
- target::targetMethod);
-
- verify(mockContext).close();
- verify(ejb).remove();
- }
-
- @Test
- public void testApplicationException() throws Exception {
- doTestException(new ApplicationException());
- }
-
- @Test
- public void testRemoteException() throws Exception {
- doTestException(new RemoteException());
- }
-
- private void doTestException(Exception expected) throws Exception {
- final RemoteInterface ejb = mock(RemoteInterface.class);
- given(ejb.targetMethod()).willThrow(expected);
-
- final String jndiName= "foobar";
- Context mockContext = mockContext(jndiName, ejb);
-
- SimpleRemoteSlsbInvokerInterceptor si = configuredInterceptor(mockContext, jndiName);
-
- RemoteInterface target = (RemoteInterface) configuredProxy(si, RemoteInterface.class);
- assertThatExceptionOfType(Exception.class)
- .isThrownBy(target::targetMethod)
- .isSameAs(expected);
- verify(mockContext).close();
- verify(ejb).remove();
- }
-
-
- /**
- * Needed so that we can mock create() method.
- */
- protected interface SlsbHome extends EJBHome {
-
- EJBObject create() throws RemoteException, CreateException;
- }
-
-
- protected interface RemoteInterface extends EJBObject {
-
- // Also business exception!?
- Object targetMethod() throws RemoteException, ApplicationException;
- }
-
-
- protected interface BusinessInterface {
-
- Object targetMethod() throws ApplicationException;
- }
-
-
- @SuppressWarnings("serial")
- protected class ApplicationException extends Exception {
-
- public ApplicationException() {
- super("appException");
- }
- }
-
-}
diff --git a/spring-context/src/test/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBeanTests.java b/spring-context/src/test/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBeanTests.java
deleted file mode 100644
index cc5dd44b693..00000000000
--- a/spring-context/src/test/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBeanTests.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright 2002-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.ejb.access;
-
-import java.lang.reflect.Proxy;
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBHome;
-import javax.ejb.EJBObject;
-import javax.naming.NamingException;
-
-import org.junit.jupiter.api.Test;
-
-import org.springframework.jndi.JndiTemplate;
-import org.springframework.remoting.RemoteAccessException;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
-import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
-import static org.mockito.BDDMockito.given;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoInteractions;
-
-/**
- * @author Rod Johnson
- * @author Juergen Hoeller
- * @since 21.05.2003
- */
-public class SimpleRemoteStatelessSessionProxyFactoryBeanTests extends SimpleRemoteSlsbInvokerInterceptorTests {
-
- @Override
- protected SimpleRemoteSlsbInvokerInterceptor createInterceptor() {
- return new SimpleRemoteStatelessSessionProxyFactoryBean();
- }
-
- @Override
- protected Object configuredProxy(SimpleRemoteSlsbInvokerInterceptor si, Class> ifc) throws NamingException {
- SimpleRemoteStatelessSessionProxyFactoryBean fb = (SimpleRemoteStatelessSessionProxyFactoryBean) si;
- fb.setBusinessInterface(ifc);
- fb.afterPropertiesSet();
- return fb.getObject();
- }
-
- @Test
- public void testInvokesMethod() throws Exception {
- final int value = 11;
- final String jndiName = "foo";
-
- MyEjb myEjb = mock(MyEjb.class);
- given(myEjb.getValue()).willReturn(value);
-
- final MyHome home = mock(MyHome.class);
- given(home.create()).willReturn(myEjb);
-
- JndiTemplate jt = new JndiTemplate() {
- @Override
- public Object lookup(String name) {
- // parameterize
- assertThat(name.equals("java:comp/env/" + jndiName)).isTrue();
- return home;
- }
- };
-
- SimpleRemoteStatelessSessionProxyFactoryBean fb = new SimpleRemoteStatelessSessionProxyFactoryBean();
- fb.setJndiName(jndiName);
- fb.setResourceRef(true);
- fb.setBusinessInterface(MyBusinessMethods.class);
- fb.setJndiTemplate(jt);
-
- // Need lifecycle methods
- fb.afterPropertiesSet();
-
- MyBusinessMethods mbm = (MyBusinessMethods) fb.getObject();
- assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue();
- assertThat(mbm.getValue()).as("Returns expected value").isEqualTo(value);
- verify(myEjb).remove();
- }
-
- @Test
- public void testInvokesMethodOnEjb3StyleBean() throws Exception {
- final int value = 11;
- final String jndiName = "foo";
-
- final MyEjb myEjb = mock(MyEjb.class);
- given(myEjb.getValue()).willReturn(value);
-
- JndiTemplate jt = new JndiTemplate() {
- @Override
- public Object lookup(String name) {
- // parameterize
- assertThat(name.equals("java:comp/env/" + jndiName)).isTrue();
- return myEjb;
- }
- };
-
- SimpleRemoteStatelessSessionProxyFactoryBean fb = new SimpleRemoteStatelessSessionProxyFactoryBean();
- fb.setJndiName(jndiName);
- fb.setResourceRef(true);
- fb.setBusinessInterface(MyBusinessMethods.class);
- fb.setJndiTemplate(jt);
-
- // Need lifecycle methods
- fb.afterPropertiesSet();
-
- MyBusinessMethods mbm = (MyBusinessMethods) fb.getObject();
- assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue();
- assertThat(mbm.getValue()).as("Returns expected value").isEqualTo(value);
- }
-
- @Override
- @Test
- public void testRemoteException() throws Exception {
- final RemoteException rex = new RemoteException();
- final String jndiName = "foo";
-
- MyEjb myEjb = mock(MyEjb.class);
- given(myEjb.getValue()).willThrow(rex);
- // TODO might want to control this behaviour...
- // Do we really want to call remove after a remote exception?
-
- final MyHome home = mock(MyHome.class);
- given(home.create()).willReturn(myEjb);
-
- JndiTemplate jt = new JndiTemplate() {
- @Override
- public Object lookup(String name) {
- // parameterize
- assertThat(name.equals("java:comp/env/" + jndiName)).isTrue();
- return home;
- }
- };
-
- SimpleRemoteStatelessSessionProxyFactoryBean fb = new SimpleRemoteStatelessSessionProxyFactoryBean();
- fb.setJndiName(jndiName);
- fb.setResourceRef(true);
- fb.setBusinessInterface(MyBusinessMethods.class);
- fb.setJndiTemplate(jt);
-
- // Need lifecycle methods
- fb.afterPropertiesSet();
-
- MyBusinessMethods mbm = (MyBusinessMethods) fb.getObject();
- assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue();
- assertThatExceptionOfType(RemoteException.class)
- .isThrownBy(mbm::getValue)
- .isSameAs(rex);
- verify(myEjb).remove();
- }
-
- @Test
- public void testCreateException() throws Exception {
- final String jndiName = "foo";
-
- final CreateException cex = new CreateException();
- final MyHome home = mock(MyHome.class);
- given(home.create()).willThrow(cex);
-
- JndiTemplate jt = new JndiTemplate() {
- @Override
- public Object lookup(String name) {
- // parameterize
- assertThat(name.equals(jndiName)).isTrue();
- return home;
- }
- };
-
- SimpleRemoteStatelessSessionProxyFactoryBean fb = new SimpleRemoteStatelessSessionProxyFactoryBean();
- fb.setJndiName(jndiName);
- // rely on default setting of resourceRef=false, no auto addition of java:/comp/env prefix
- fb.setBusinessInterface(MyBusinessMethods.class);
- assertThat(MyBusinessMethods.class).isEqualTo(fb.getBusinessInterface());
- fb.setJndiTemplate(jt);
-
- // Need lifecycle methods
- fb.afterPropertiesSet();
-
- MyBusinessMethods mbm = (MyBusinessMethods) fb.getObject();
- assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue();
- assertThatExceptionOfType(RemoteException.class).isThrownBy(mbm::getValue);
- }
-
- @Test
- public void testCreateExceptionWithLocalBusinessInterface() throws Exception {
- final String jndiName = "foo";
-
- final CreateException cex = new CreateException();
- final MyHome home = mock(MyHome.class);
- given(home.create()).willThrow(cex);
-
- JndiTemplate jt = new JndiTemplate() {
- @Override
- public Object lookup(String name) {
- // parameterize
- assertThat(name.equals(jndiName)).isTrue();
- return home;
- }
- };
-
- SimpleRemoteStatelessSessionProxyFactoryBean fb = new SimpleRemoteStatelessSessionProxyFactoryBean();
- fb.setJndiName(jndiName);
- // rely on default setting of resourceRef=false, no auto addition of java:/comp/env prefix
- fb.setBusinessInterface(MyLocalBusinessMethods.class);
- assertThat(MyLocalBusinessMethods.class).isEqualTo(fb.getBusinessInterface());
- fb.setJndiTemplate(jt);
-
- // Need lifecycle methods
- fb.afterPropertiesSet();
-
- MyLocalBusinessMethods mbm = (MyLocalBusinessMethods) fb.getObject();
- assertThat(Proxy.isProxyClass(mbm.getClass())).isTrue();
- assertThatExceptionOfType(RemoteAccessException.class).isThrownBy(
- mbm::getValue)
- .withCause(cex);
- }
-
- @Test
- public void testNoBusinessInterfaceSpecified() throws Exception {
- // Will do JNDI lookup to get home but won't call create
- // Could actually try to figure out interface from create?
- final String jndiName = "foo";
-
- final MyHome home = mock(MyHome.class);
-
- JndiTemplate jt = new JndiTemplate() {
- @Override
- public Object lookup(String name) throws NamingException {
- // parameterize
- assertThat(name.equals(jndiName)).isTrue();
- return home;
- }
- };
-
- SimpleRemoteStatelessSessionProxyFactoryBean fb = new SimpleRemoteStatelessSessionProxyFactoryBean();
- fb.setJndiName(jndiName);
- // rely on default setting of resourceRef=false, no auto addition of java:/comp/env prefix
- // Don't set business interface
- fb.setJndiTemplate(jt);
-
- // Check it's a singleton
- assertThat(fb.isSingleton()).isTrue();
-
- assertThatIllegalArgumentException().isThrownBy(
- fb::afterPropertiesSet)
- .withMessageContaining("businessInterface");
-
- // Expect no methods on home
- verifyNoInteractions(home);
- }
-
-
- protected interface MyHome extends EJBHome {
-
- MyBusinessMethods create() throws CreateException, RemoteException;
- }
-
-
- protected interface MyBusinessMethods {
-
- int getValue() throws RemoteException;
- }
-
-
- protected interface MyLocalBusinessMethods {
-
- int getValue();
- }
-
-
- protected interface MyEjb extends EJBObject, MyBusinessMethods {
- }
-
-}
diff --git a/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerEventTests.java b/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerEventTests.java
index dc0e81943f3..71692278a41 100644
--- a/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerEventTests.java
+++ b/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerEventTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -35,20 +35,21 @@ import static org.assertj.core.api.Assertions.assertThat;
*/
public class JeeNamespaceHandlerEventTests {
- private CollectingReaderEventListener eventListener = new CollectingReaderEventListener();
+ private final CollectingReaderEventListener eventListener = new CollectingReaderEventListener();
- private XmlBeanDefinitionReader reader;
+ private final DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
- private DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
+ private XmlBeanDefinitionReader reader;
@BeforeEach
- public void setUp() throws Exception {
+ public void setup() throws Exception {
this.reader = new XmlBeanDefinitionReader(this.beanFactory);
this.reader.setEventListener(this.eventListener);
this.reader.loadBeanDefinitions(new ClassPathResource("jeeNamespaceHandlerTests.xml", getClass()));
}
+
@Test
public void testJndiLookupComponentEventReceived() {
ComponentDefinition component = this.eventListener.getComponentDefinition("simple");
diff --git a/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerTests.java b/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerTests.java
index ec9662810e6..65292d30573 100644
--- a/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerTests.java
+++ b/spring-context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -26,8 +26,6 @@ import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.beans.testfixture.beans.ITestBean;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.core.io.ClassPathResource;
-import org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean;
-import org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean;
import org.springframework.jndi.JndiObjectFactoryBean;
import static org.assertj.core.api.Assertions.assertThat;
@@ -93,44 +91,15 @@ public class JeeNamespaceHandlerTests {
@Test
public void testSimpleLocalSlsb() {
BeanDefinition beanDefinition = this.beanFactory.getMergedBeanDefinition("simpleLocalEjb");
- assertThat(beanDefinition.getBeanClassName()).isEqualTo(LocalStatelessSessionProxyFactoryBean.class.getName());
- assertPropertyValue(beanDefinition, "businessInterface", ITestBean.class.getName());
+ assertThat(beanDefinition.getBeanClassName()).isEqualTo(JndiObjectFactoryBean.class.getName());
assertPropertyValue(beanDefinition, "jndiName", "ejb/MyLocalBean");
}
@Test
public void testSimpleRemoteSlsb() {
BeanDefinition beanDefinition = this.beanFactory.getMergedBeanDefinition("simpleRemoteEjb");
- assertThat(beanDefinition.getBeanClassName()).isEqualTo(SimpleRemoteStatelessSessionProxyFactoryBean.class.getName());
- assertPropertyValue(beanDefinition, "businessInterface", ITestBean.class.getName());
- assertPropertyValue(beanDefinition, "jndiName", "ejb/MyRemoteBean");
- }
-
- @Test
- public void testComplexLocalSlsb() {
- BeanDefinition beanDefinition = this.beanFactory.getMergedBeanDefinition("complexLocalEjb");
- assertThat(beanDefinition.getBeanClassName()).isEqualTo(LocalStatelessSessionProxyFactoryBean.class.getName());
- assertPropertyValue(beanDefinition, "businessInterface", ITestBean.class.getName());
- assertPropertyValue(beanDefinition, "jndiName", "ejb/MyLocalBean");
- assertPropertyValue(beanDefinition, "cacheHome", "true");
- assertPropertyValue(beanDefinition, "lookupHomeOnStartup", "true");
- assertPropertyValue(beanDefinition, "resourceRef", "true");
- assertPropertyValue(beanDefinition, "jndiEnvironment", "foo=bar");
- }
-
- @Test
- public void testComplexRemoteSlsb() {
- BeanDefinition beanDefinition = this.beanFactory.getMergedBeanDefinition("complexRemoteEjb");
- assertThat(beanDefinition.getBeanClassName()).isEqualTo(SimpleRemoteStatelessSessionProxyFactoryBean.class.getName());
- assertPropertyValue(beanDefinition, "businessInterface", ITestBean.class.getName());
+ assertThat(beanDefinition.getBeanClassName()).isEqualTo(JndiObjectFactoryBean.class.getName());
assertPropertyValue(beanDefinition, "jndiName", "ejb/MyRemoteBean");
- assertPropertyValue(beanDefinition, "cacheHome", "true");
- assertPropertyValue(beanDefinition, "lookupHomeOnStartup", "true");
- assertPropertyValue(beanDefinition, "resourceRef", "true");
- assertPropertyValue(beanDefinition, "jndiEnvironment", "foo=bar");
- assertPropertyValue(beanDefinition, "homeInterface", "org.springframework.beans.testfixture.beans.ITestBean");
- assertPropertyValue(beanDefinition, "refreshHomeOnConnectFailure", "true");
- assertPropertyValue(beanDefinition, "cacheSessionBean", "true");
}
@Test
diff --git a/spring-context/src/test/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessorTests.java b/spring-context/src/test/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessorTests.java
index 4ec8ce0c59d..cc6b89e9db8 100644
--- a/spring-context/src/test/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessorTests.java
+++ b/spring-context/src/test/java/org/springframework/validation/beanvalidation/BeanValidationPostProcessorTests.java
@@ -16,10 +16,9 @@
package org.springframework.validation.beanvalidation;
-import javax.annotation.PostConstruct;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-
+import jakarta.annotation.PostConstruct;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
import org.junit.jupiter.api.Test;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
@@ -99,7 +98,7 @@ public class BeanValidationPostProcessorTests {
bd.getPropertyValues().add("stringValue", "s");
ac.registerBeanDefinition("bean", bd);
assertThatExceptionOfType(BeanCreationException.class)
- .isThrownBy(() -> ac.refresh())
+ .isThrownBy(ac::refresh)
.havingRootCause()
.withMessageContainingAll("stringValue", "invalid");
ac.close();
diff --git a/spring-context/src/test/java/org/springframework/validation/beanvalidation/MethodValidationTests.java b/spring-context/src/test/java/org/springframework/validation/beanvalidation/MethodValidationTests.java
index bdfa8705d36..974f431462a 100644
--- a/spring-context/src/test/java/org/springframework/validation/beanvalidation/MethodValidationTests.java
+++ b/spring-context/src/test/java/org/springframework/validation/beanvalidation/MethodValidationTests.java
@@ -19,12 +19,11 @@ package org.springframework.validation.beanvalidation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import javax.validation.ValidationException;
-import javax.validation.Validator;
-import javax.validation.constraints.Max;
-import javax.validation.constraints.NotNull;
-import javax.validation.groups.Default;
-
+import jakarta.validation.ValidationException;
+import jakarta.validation.Validator;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.groups.Default;
import org.junit.jupiter.api.Test;
import org.springframework.aop.framework.ProxyFactory;
@@ -49,15 +48,17 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
public class MethodValidationTests {
@Test
+ @SuppressWarnings("unchecked")
public void testMethodValidationInterceptor() {
MyValidBean bean = new MyValidBean();
ProxyFactory proxyFactory = new ProxyFactory(bean);
proxyFactory.addAdvice(new MethodValidationInterceptor());
proxyFactory.addAdvisor(new AsyncAnnotationAdvisor());
- doTestProxyValidation((MyValidInterface>) proxyFactory.getProxy());
+ doTestProxyValidation((MyValidInterface) proxyFactory.getProxy());
}
@Test
+ @SuppressWarnings("unchecked")
public void testMethodValidationPostProcessor() {
StaticApplicationContext ac = new StaticApplicationContext();
ac.registerSingleton("mvpp", MethodValidationPostProcessor.class);
@@ -70,8 +71,7 @@ public class MethodValidationTests {
ac.close();
}
- @SuppressWarnings({ "rawtypes", "unchecked" })
- private void doTestProxyValidation(MyValidInterface proxy) {
+ private void doTestProxyValidation(MyValidInterface proxy) {
assertThat(proxy.myValidMethod("value", 5)).isNotNull();
assertThatExceptionOfType(ValidationException.class).isThrownBy(() ->
proxy.myValidMethod("value", 15));
@@ -90,8 +90,8 @@ public class MethodValidationTests {
}
@Test
- @SuppressWarnings("resource")
public void testLazyValidatorForMethodValidation() {
+ @SuppressWarnings("resource")
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(
LazyMethodValidationConfig.class, CustomValidatorBean.class,
MyValidBean.class, MyValidFactoryBean.class);
@@ -99,8 +99,8 @@ public class MethodValidationTests {
}
@Test
- @SuppressWarnings("resource")
public void testLazyValidatorForMethodValidationWithProxyTargetClass() {
+ @SuppressWarnings("resource")
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(
LazyMethodValidationConfigWithProxyTargetClass.class, CustomValidatorBean.class,
MyValidBean.class, MyValidFactoryBean.class);
diff --git a/spring-context/src/test/java/org/springframework/validation/beanvalidation/SpringValidatorAdapterTests.java b/spring-context/src/test/java/org/springframework/validation/beanvalidation/SpringValidatorAdapterTests.java
index fe5f62b5984..83138f4344f 100644
--- a/spring-context/src/test/java/org/springframework/validation/beanvalidation/SpringValidatorAdapterTests.java
+++ b/spring-context/src/test/java/org/springframework/validation/beanvalidation/SpringValidatorAdapterTests.java
@@ -26,23 +26,24 @@ import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
+import java.util.Map;
import java.util.Set;
-import javax.validation.Constraint;
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorContext;
-import javax.validation.ConstraintViolation;
-import javax.validation.Payload;
-import javax.validation.Valid;
-import javax.validation.Validation;
-import javax.validation.Validator;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import javax.validation.constraints.Size;
-
+import jakarta.validation.Constraint;
+import jakarta.validation.ConstraintValidator;
+import jakarta.validation.ConstraintValidatorContext;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.Payload;
+import jakarta.validation.Valid;
+import jakarta.validation.Validation;
+import jakarta.validation.Validator;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Pattern;
+import jakarta.validation.constraints.Size;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -228,6 +229,48 @@ public class SpringValidatorAdapterTests {
return Arrays.asList(child1, child2);
}
+ @Test // SPR-15839
+ public void testListElementConstraint() {
+ BeanWithListElementConstraint bean = new BeanWithListElementConstraint();
+ bean.setProperty(Arrays.asList("no", "element", "can", "be", null));
+
+ BeanPropertyBindingResult errors = new BeanPropertyBindingResult(bean, "bean");
+ validatorAdapter.validate(bean, errors);
+
+ assertThat(errors.getFieldErrorCount("property[4]")).isEqualTo(1);
+ assertThat(errors.getFieldValue("property[4]")).isNull();
+ }
+
+ @Test // SPR-15839
+ public void testMapValueConstraint() {
+ Map property = new HashMap<>();
+ property.put("no value can be", null);
+
+ BeanWithMapEntryConstraint bean = new BeanWithMapEntryConstraint();
+ bean.setProperty(property);
+
+ BeanPropertyBindingResult errors = new BeanPropertyBindingResult(bean, "bean");
+ validatorAdapter.validate(bean, errors);
+
+ assertThat(errors.getFieldErrorCount("property[no value can be]")).isEqualTo(1);
+ assertThat(errors.getFieldValue("property[no value can be]")).isNull();
+ }
+
+ @Test // SPR-15839
+ public void testMapEntryConstraint() {
+ Map property = new HashMap<>();
+ property.put(null, null);
+
+ BeanWithMapEntryConstraint bean = new BeanWithMapEntryConstraint();
+ bean.setProperty(property);
+
+ BeanPropertyBindingResult errors = new BeanPropertyBindingResult(bean, "bean");
+ validatorAdapter.validate(bean, errors);
+
+ assertThat(errors.hasFieldErrors("property[]")).isTrue();
+ assertThat(errors.getFieldValue("property[]")).isNull();
+ }
+
@Same(field = "password", comparingField = "confirmPassword")
@Same(field = "email", comparingField = "confirmEmail")
@@ -485,4 +528,34 @@ public class SpringValidatorAdapterTests {
}
}
+
+ public class BeanWithListElementConstraint {
+
+ @Valid
+ private List<@NotNull String> property;
+
+ public List getProperty() {
+ return property;
+ }
+
+ public void setProperty(List property) {
+ this.property = property;
+ }
+ }
+
+
+ public class BeanWithMapEntryConstraint {
+
+ @Valid
+ private Map<@NotNull String, @NotNull String> property;
+
+ public Map getProperty() {
+ return property;
+ }
+
+ public void setProperty(Map property) {
+ this.property = property;
+ }
+ }
+
}
diff --git a/spring-context/src/test/java/org/springframework/validation/beanvalidation/ValidatorFactoryTests.java b/spring-context/src/test/java/org/springframework/validation/beanvalidation/ValidatorFactoryTests.java
index a8ae01122e3..29c485dc772 100644
--- a/spring-context/src/test/java/org/springframework/validation/beanvalidation/ValidatorFactoryTests.java
+++ b/spring-context/src/test/java/org/springframework/validation/beanvalidation/ValidatorFactoryTests.java
@@ -28,16 +28,15 @@ import java.util.List;
import java.util.Optional;
import java.util.Set;
-import javax.validation.Constraint;
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorContext;
-import javax.validation.ConstraintViolation;
-import javax.validation.Payload;
-import javax.validation.Valid;
-import javax.validation.Validator;
-import javax.validation.ValidatorFactory;
-import javax.validation.constraints.NotNull;
-
+import jakarta.validation.Constraint;
+import jakarta.validation.ConstraintValidator;
+import jakarta.validation.ConstraintValidatorContext;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.Payload;
+import jakarta.validation.Valid;
+import jakarta.validation.Validator;
+import jakarta.validation.ValidatorFactory;
+import jakarta.validation.constraints.NotNull;
import org.hibernate.validator.HibernateValidator;
import org.hibernate.validator.HibernateValidatorFactory;
import org.junit.jupiter.api.Test;
diff --git a/spring-context/src/test/resources/org/springframework/ejb/config/jeeNamespaceHandlerTests.xml b/spring-context/src/test/resources/org/springframework/ejb/config/jeeNamespaceHandlerTests.xml
index 6d0dc55e40e..e8a47157a87 100644
--- a/spring-context/src/test/resources/org/springframework/ejb/config/jeeNamespaceHandlerTests.xml
+++ b/spring-context/src/test/resources/org/springframework/ejb/config/jeeNamespaceHandlerTests.xml
@@ -40,39 +40,14 @@
-
-
-
- foo=bar
-
+
-
-
-
- foo=bar
-
+
-
-
-
+
+
+
diff --git a/spring-context/src/testFixtures/java/org/springframework/context/testfixture/jndi/SimpleNamingContextBuilder.java b/spring-context/src/testFixtures/java/org/springframework/context/testfixture/jndi/SimpleNamingContextBuilder.java
index d686261d1a5..d0a014175fd 100644
--- a/spring-context/src/testFixtures/java/org/springframework/context/testfixture/jndi/SimpleNamingContextBuilder.java
+++ b/spring-context/src/testFixtures/java/org/springframework/context/testfixture/jndi/SimpleNamingContextBuilder.java
@@ -42,7 +42,7 @@ import org.springframework.util.ReflectionUtils;
* configure JNDI appropriately, so that {@code new InitialContext()}
* will expose the required objects. Also usable for standalone applications,
* e.g. for binding a JDBC DataSource to a well-known JNDI location, to be
- * able to use traditional Java EE data access code outside of a Java EE
+ * able to use traditional Jakarta EE data access code outside of a Jakarta EE
* container.
*
* There are various choices for DataSource implementations:
diff --git a/spring-core/spring-core.gradle b/spring-core/spring-core.gradle
index a6e5e309b07..de0f6a756e0 100644
--- a/spring-core/spring-core.gradle
+++ b/spring-core/spring-core.gradle
@@ -52,8 +52,8 @@ dependencies {
optional("io.netty:netty-buffer")
testImplementation("io.projectreactor:reactor-test")
testImplementation("com.google.code.findbugs:jsr305")
- testImplementation("javax.annotation:javax.annotation-api")
- testImplementation("javax.xml.bind:jaxb-api")
+ testImplementation("jakarta.annotation:jakarta.annotation-api")
+ testImplementation("jakarta.xml.bind:jakarta.xml.bind-api")
testImplementation("com.fasterxml.woodstox:woodstox-core")
testImplementation("org.xmlunit:xmlunit-assertj")
testImplementation("org.xmlunit:xmlunit-matchers")
diff --git a/spring-core/src/main/java/org/springframework/core/MethodParameter.java b/spring-core/src/main/java/org/springframework/core/MethodParameter.java
index 42a0dfca93f..3ec9549cb60 100644
--- a/spring-core/src/main/java/org/springframework/core/MethodParameter.java
+++ b/spring-core/src/main/java/org/springframework/core/MethodParameter.java
@@ -409,7 +409,7 @@ public class MethodParameter {
/**
* Check whether this method parameter is annotated with any variant of a
- * {@code Nullable} annotation, e.g. {@code javax.annotation.Nullable} or
+ * {@code Nullable} annotation, e.g. {@code jakarta.annotation.Nullable} or
* {@code edu.umd.cs.findbugs.annotations.Nullable}.
*/
private boolean hasNullableAnnotation() {
diff --git a/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAwareOrderComparator.java b/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAwareOrderComparator.java
index 1fe06d42d7f..a57a0179c3e 100644
--- a/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAwareOrderComparator.java
+++ b/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAwareOrderComparator.java
@@ -29,7 +29,7 @@ import org.springframework.lang.Nullable;
* {@code AnnotationAwareOrderComparator} is an extension of
* {@link OrderComparator} that supports Spring's
* {@link org.springframework.core.Ordered} interface as well as the
- * {@link Order @Order} and {@link javax.annotation.Priority @Priority}
+ * {@link Order @Order} and {@link jakarta.annotation.Priority @Priority}
* annotations, with an order value provided by an {@code Ordered}
* instance overriding a statically defined annotation value (if any).
*
@@ -42,7 +42,7 @@ import org.springframework.lang.Nullable;
* @since 2.0.1
* @see org.springframework.core.Ordered
* @see org.springframework.core.annotation.Order
- * @see javax.annotation.Priority
+ * @see jakarta.annotation.Priority
*/
public class AnnotationAwareOrderComparator extends OrderComparator {
@@ -54,7 +54,7 @@ public class AnnotationAwareOrderComparator extends OrderComparator {
/**
* This implementation checks for {@link Order @Order} or
- * {@link javax.annotation.Priority @Priority} on various kinds of
+ * {@link jakarta.annotation.Priority @Priority} on various kinds of
* elements, in addition to the {@link org.springframework.core.Ordered}
* check in the superclass.
*/
@@ -80,7 +80,7 @@ public class AnnotationAwareOrderComparator extends OrderComparator {
}
/**
- * This implementation retrieves an @{@link javax.annotation.Priority}
+ * This implementation retrieves an @{@link jakarta.annotation.Priority}
* value, allowing for additional semantics over the regular @{@link Order}
* annotation: typically, selecting one object over another in case of
* multiple matches but only one object to be returned.
diff --git a/spring-core/src/main/java/org/springframework/core/annotation/Order.java b/spring-core/src/main/java/org/springframework/core/annotation/Order.java
index a60a439bc61..84f8d067e7c 100644
--- a/spring-core/src/main/java/org/springframework/core/annotation/Order.java
+++ b/spring-core/src/main/java/org/springframework/core/annotation/Order.java
@@ -40,7 +40,7 @@ import org.springframework.core.Ordered;
* order which is an orthogonal concern determined by dependency relationships and
* {@code @DependsOn} declarations (influencing a runtime-determined dependency graph).
*
- *
Since Spring 4.1, the standard {@link javax.annotation.Priority} annotation
+ *
Since Spring 4.1, the standard {@link jakarta.annotation.Priority} annotation
* can be used as a drop-in replacement for this annotation in ordering scenarios.
* Note that {@code @Priority} may have additional semantics when a single element
* has to be picked (see {@link AnnotationAwareOrderComparator#getPriority}).
@@ -58,7 +58,7 @@ import org.springframework.core.Ordered;
* @see org.springframework.core.Ordered
* @see AnnotationAwareOrderComparator
* @see OrderUtils
- * @see javax.annotation.Priority
+ * @see jakarta.annotation.Priority
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
diff --git a/spring-core/src/main/java/org/springframework/core/annotation/OrderUtils.java b/spring-core/src/main/java/org/springframework/core/annotation/OrderUtils.java
index 25acbc84816..46d196e5d2d 100644
--- a/spring-core/src/main/java/org/springframework/core/annotation/OrderUtils.java
+++ b/spring-core/src/main/java/org/springframework/core/annotation/OrderUtils.java
@@ -25,20 +25,20 @@ import org.springframework.util.ConcurrentReferenceHashMap;
/**
* General utility for determining the order of an object based on its type declaration.
- * Handles Spring's {@link Order} annotation as well as {@link javax.annotation.Priority}.
+ * Handles Spring's {@link Order} annotation as well as {@link jakarta.annotation.Priority}.
*
* @author Stephane Nicoll
* @author Juergen Hoeller
* @since 4.1
* @see Order
- * @see javax.annotation.Priority
+ * @see jakarta.annotation.Priority
*/
public abstract class OrderUtils {
/** Cache marker for a non-annotated Class. */
private static final Object NOT_ANNOTATED = new Object();
- private static final String JAVAX_PRIORITY_ANNOTATION = "javax.annotation.Priority";
+ private static final String JAVAX_PRIORITY_ANNOTATION = "jakarta.annotation.Priority";
/** Cache for @Order value (or NOT_ANNOTATED marker) per Class. */
private static final Map orderCache = new ConcurrentReferenceHashMap<>(64);
@@ -47,7 +47,7 @@ public abstract class OrderUtils {
/**
* Return the order on the specified {@code type}, or the specified
* default value if none can be found.
- * Takes care of {@link Order @Order} and {@code @javax.annotation.Priority}.
+ *
Takes care of {@link Order @Order} and {@code @jakarta.annotation.Priority}.
* @param type the type to handle
* @return the priority value, or the specified default order if none can be found
* @since 5.0
@@ -61,7 +61,7 @@ public abstract class OrderUtils {
/**
* Return the order on the specified {@code type}, or the specified
* default value if none can be found.
- *
Takes care of {@link Order @Order} and {@code @javax.annotation.Priority}.
+ *
Takes care of {@link Order @Order} and {@code @jakarta.annotation.Priority}.
* @param type the type to handle
* @return the priority value, or the specified default order if none can be found
* @see #getPriority(Class)
@@ -74,7 +74,7 @@ public abstract class OrderUtils {
/**
* Return the order on the specified {@code type}.
- *
Takes care of {@link Order @Order} and {@code @javax.annotation.Priority}.
+ *
Takes care of {@link Order @Order} and {@code @jakarta.annotation.Priority}.
* @param type the type to handle
* @return the order value, or {@code null} if none can be found
* @see #getPriority(Class)
@@ -86,7 +86,7 @@ public abstract class OrderUtils {
/**
* Return the order declared on the specified {@code element}.
- *
Takes care of {@link Order @Order} and {@code @javax.annotation.Priority}.
+ *
Takes care of {@link Order @Order} and {@code @jakarta.annotation.Priority}.
* @param element the annotated element (e.g. type or method)
* @return the order value, or {@code null} if none can be found
* @since 5.3
@@ -99,7 +99,7 @@ public abstract class OrderUtils {
/**
* Return the order from the specified annotations collection.
*
Takes care of {@link Order @Order} and
- * {@code @javax.annotation.Priority}.
+ * {@code @jakarta.annotation.Priority}.
* @param element the source element
* @param annotations the annotation to consider
* @return the order value, or {@code null} if none can be found
@@ -132,7 +132,7 @@ public abstract class OrderUtils {
}
/**
- * Return the value of the {@code javax.annotation.Priority} annotation
+ * Return the value of the {@code jakarta.annotation.Priority} annotation
* declared on the specified type, or {@code null} if none.
* @param type the type to handle
* @return the priority value if the annotation is declared, or {@code null} if none
diff --git a/spring-core/src/main/java/org/springframework/core/io/ContextResource.java b/spring-core/src/main/java/org/springframework/core/io/ContextResource.java
index f5df62938b1..30f75e00c33 100644
--- a/spring-core/src/main/java/org/springframework/core/io/ContextResource.java
+++ b/spring-core/src/main/java/org/springframework/core/io/ContextResource.java
@@ -18,7 +18,7 @@ package org.springframework.core.io;
/**
* Extended interface for a resource that is loaded from an enclosing
- * 'context', e.g. from a {@link javax.servlet.ServletContext} but also
+ * 'context', e.g. from a {@link jakarta.servlet.ServletContext} but also
* from plain classpath paths or relative file system paths (specified
* without an explicit prefix, hence applying relative to the local
* {@link ResourceLoader}'s context).
diff --git a/spring-core/src/main/java/org/springframework/core/task/SimpleAsyncTaskExecutor.java b/spring-core/src/main/java/org/springframework/core/task/SimpleAsyncTaskExecutor.java
index 7d96032ad80..fe0104f5898 100644
--- a/spring-core/src/main/java/org/springframework/core/task/SimpleAsyncTaskExecutor.java
+++ b/spring-core/src/main/java/org/springframework/core/task/SimpleAsyncTaskExecutor.java
@@ -102,7 +102,7 @@ public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator
* Specify an external factory to use for creating new Threads,
* instead of relying on the local properties of this executor.
*
You may specify an inner ThreadFactory bean or also a ThreadFactory reference
- * obtained from JNDI (on a Java EE 6 server) or some other lookup mechanism.
+ * obtained from JNDI (on a Jakarta EE server) or some other lookup mechanism.
* @see #setThreadNamePrefix
* @see #setThreadPriority
*/
diff --git a/spring-core/src/main/java/org/springframework/core/task/support/ExecutorServiceAdapter.java b/spring-core/src/main/java/org/springframework/core/task/support/ExecutorServiceAdapter.java
index 3297ff16e11..0c22b7651b3 100644
--- a/spring-core/src/main/java/org/springframework/core/task/support/ExecutorServiceAdapter.java
+++ b/spring-core/src/main/java/org/springframework/core/task/support/ExecutorServiceAdapter.java
@@ -30,12 +30,12 @@ import org.springframework.util.Assert;
*
This is primarily for adapting to client components that communicate via the
* {@code java.util.concurrent.ExecutorService} API. It can also be used as
* common ground between a local Spring {@code TaskExecutor} backend and a
- * JNDI-located {@code ManagedExecutorService} in a Java EE 7 environment.
+ * JNDI-located {@code ManagedExecutorService} in a Jakarta EE environment.
*
*
NOTE: This ExecutorService adapter does not support the
* lifecycle methods in the {@code java.util.concurrent.ExecutorService} API
* ("shutdown()" etc), similar to a server-wide {@code ManagedExecutorService}
- * in a Java EE 7 environment. The lifecycle is always up to the backend pool,
+ * in a Jakarta EE environment. The lifecycle is always up to the backend pool,
* with this adapter acting as an access-only proxy for that target pool.
*
* @author Juergen Hoeller
diff --git a/spring-core/src/test/java/org/springframework/core/annotation/AnnotatedElementUtilsTests.java b/spring-core/src/test/java/org/springframework/core/annotation/AnnotatedElementUtilsTests.java
index 2957f31863c..99b10db9b7e 100644
--- a/spring-core/src/test/java/org/springframework/core/annotation/AnnotatedElementUtilsTests.java
+++ b/spring-core/src/test/java/org/springframework/core/annotation/AnnotatedElementUtilsTests.java
@@ -32,9 +32,9 @@ import java.util.Set;
import javax.annotation.Nonnull;
import javax.annotation.ParametersAreNonnullByDefault;
-import javax.annotation.Resource;
import javax.annotation.meta.When;
+import jakarta.annotation.Resource;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
diff --git a/spring-core/src/test/java/org/springframework/core/annotation/AnnotationAwareOrderComparatorTests.java b/spring-core/src/test/java/org/springframework/core/annotation/AnnotationAwareOrderComparatorTests.java
index afe0bcc7620..97ff1aabb51 100644
--- a/spring-core/src/test/java/org/springframework/core/annotation/AnnotationAwareOrderComparatorTests.java
+++ b/spring-core/src/test/java/org/springframework/core/annotation/AnnotationAwareOrderComparatorTests.java
@@ -19,8 +19,7 @@ package org.springframework.core.annotation;
import java.util.ArrayList;
import java.util.List;
-import javax.annotation.Priority;
-
+import jakarta.annotation.Priority;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/spring-core/src/test/java/org/springframework/core/annotation/MergedAnnotationsTests.java b/spring-core/src/test/java/org/springframework/core/annotation/MergedAnnotationsTests.java
index e9e3586bb6a..f0502a9687d 100644
--- a/spring-core/src/test/java/org/springframework/core/annotation/MergedAnnotationsTests.java
+++ b/spring-core/src/test/java/org/springframework/core/annotation/MergedAnnotationsTests.java
@@ -35,8 +35,7 @@ import java.util.NoSuchElementException;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.Resource;
-
+import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.core.Ordered;
@@ -3011,14 +3010,14 @@ class MergedAnnotationsTests {
}
/**
- * Mimics javax.persistence.Id
+ * Mimics jakarta.persistence.Id
*/
@Retention(RUNTIME)
@interface Id {
}
/**
- * Mimics javax.persistence.GeneratedValue
+ * Mimics jakarta.persistence.GeneratedValue
*/
@Retention(RUNTIME)
@interface GeneratedValue {
diff --git a/spring-core/src/test/java/org/springframework/core/annotation/OrderUtilsTests.java b/spring-core/src/test/java/org/springframework/core/annotation/OrderUtilsTests.java
index 08d980baf00..35c96f2ada6 100644
--- a/spring-core/src/test/java/org/springframework/core/annotation/OrderUtilsTests.java
+++ b/spring-core/src/test/java/org/springframework/core/annotation/OrderUtilsTests.java
@@ -16,8 +16,7 @@
package org.springframework.core.annotation;
-import javax.annotation.Priority;
-
+import jakarta.annotation.Priority;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/spring-core/src/test/java/org/springframework/util/Base64UtilsTests.java b/spring-core/src/test/java/org/springframework/util/Base64UtilsTests.java
index 593d81eb684..17f07b40731 100644
--- a/spring-core/src/test/java/org/springframework/util/Base64UtilsTests.java
+++ b/spring-core/src/test/java/org/springframework/util/Base64UtilsTests.java
@@ -18,8 +18,7 @@ package org.springframework.util;
import java.io.UnsupportedEncodingException;
-import javax.xml.bind.DatatypeConverter;
-
+import jakarta.xml.bind.DatatypeConverter;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/spring-jdbc/spring-jdbc.gradle b/spring-jdbc/spring-jdbc.gradle
index 41aa3f19872..389462f3bb4 100644
--- a/spring-jdbc/spring-jdbc.gradle
+++ b/spring-jdbc/spring-jdbc.gradle
@@ -7,7 +7,7 @@ dependencies {
api(project(":spring-core"))
api(project(":spring-tx"))
optional(project(":spring-context")) // for JndiDataSourceLookup
- optional("javax.transaction:javax.transaction-api")
+ optional("jakarta.transaction:jakarta.transaction-api")
optional("org.hsqldb:hsqldb")
optional("com.h2database:h2")
optional("org.apache.derby:derby")
diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java
index d2f619a4d17..2c84c34014f 100644
--- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java
+++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java
@@ -52,14 +52,14 @@ import org.springframework.util.Assert;
*
*
Application code is required to retrieve the JDBC Connection via
* {@link DataSourceUtils#getConnection(DataSource)} instead of a standard
- * Java EE-style {@link DataSource#getConnection()} call. Spring classes such as
+ * Jakarta EE-style {@link DataSource#getConnection()} call. Spring classes such as
* {@link org.springframework.jdbc.core.JdbcTemplate} use this strategy implicitly.
* If not used in combination with this transaction manager, the
* {@link DataSourceUtils} lookup strategy behaves exactly like the native
* DataSource lookup; it can thus be used in a portable fashion.
*
*
Alternatively, you can allow application code to work with the standard
- * Java EE-style lookup pattern {@link DataSource#getConnection()}, for example for
+ * Jakarta EE-style lookup pattern {@link DataSource#getConnection()}, for example for
* legacy code that is not aware of Spring at all. In that case, define a
* {@link TransactionAwareDataSourceProxy} for your target DataSource, and pass
* that proxy DataSource to your DAOs, which will automatically participate in
diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DriverManagerDataSource.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DriverManagerDataSource.java
index f803cd46770..875ac1e8871 100644
--- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DriverManagerDataSource.java
+++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DriverManagerDataSource.java
@@ -34,7 +34,7 @@ import org.springframework.util.ClassUtils;
* connection pool, implementing the same standard interface, but creating new
* Connections on every call.
*
- *
Useful for test or standalone environments outside of a Java EE container, either
+ *
Useful for test or standalone environments outside of a Jakarta EE container, either
* as a DataSource bean in a corresponding ApplicationContext or in conjunction with
* a simple JNDI environment. Pool-assuming {@code Connection.close()} calls will
* simply close the Connection, so any DataSource-aware persistence code should work.
@@ -44,7 +44,7 @@ import org.springframework.util.ClassUtils;
* loading issues with the JDBC DriverManager that be resolved through direct Driver
* usage (which is exactly what SimpleDriverDataSource does).
*
- *
In a Java EE container, it is recommended to use a JNDI DataSource provided by
+ *
In a Jakarta EE container, it is recommended to use a JNDI DataSource provided by
* the container. Such a DataSource can be exposed as a DataSource bean in a Spring
* ApplicationContext via {@link org.springframework.jndi.JndiObjectFactoryBean},
* for seamless switching to and from a local DataSource bean like this class.
diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/LazyConnectionDataSourceProxy.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/LazyConnectionDataSourceProxy.java
index e22d47de372..6ca3f9f1880 100644
--- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/LazyConnectionDataSourceProxy.java
+++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/LazyConnectionDataSourceProxy.java
@@ -57,7 +57,7 @@ import org.springframework.lang.Nullable;
* without paying a performance penalty if no actual data access happens.
*
*
This DataSource proxy gives you behavior analogous to JTA and a
- * transactional JNDI DataSource (as provided by the Java EE server), even
+ * transactional JNDI DataSource (as provided by the Jakarta EE server), even
* with a local transaction strategy like DataSourceTransactionManager or
* HibernateTransactionManager. It does not add value with Spring's
* JtaTransactionManager as transaction strategy.
diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/SimpleDriverDataSource.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/SimpleDriverDataSource.java
index 09e813d13af..55b75e02bf7 100644
--- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/SimpleDriverDataSource.java
+++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/SimpleDriverDataSource.java
@@ -35,7 +35,7 @@ import org.springframework.util.Assert;
* connection pool, implementing the same standard interface, but creating new
* Connections on every call.
*
- *
In a Java EE container, it is recommended to use a JNDI DataSource provided by
+ *
In a Jakarta EE container, it is recommended to use a JNDI DataSource provided by
* the container. Such a DataSource can be exposed as a DataSource bean in a Spring
* ApplicationContext via {@link org.springframework.jndi.JndiObjectFactoryBean},
* for seamless switching to and from a local DataSource bean like this class.
diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy.java
index aed3ddb54b4..9edaca7857a 100644
--- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy.java
+++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy.java
@@ -32,7 +32,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
/**
* Proxy for a target JDBC {@link javax.sql.DataSource}, adding awareness of
* Spring-managed transactions. Similar to a transactional JNDI DataSource
- * as provided by a Java EE server.
+ * as provided by a Jakarta EE server.
*
*
Data access code that should remain unaware of Spring's data access support
* can work with this proxy to seamlessly participate in Spring-managed transactions.
@@ -52,7 +52,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
* Connection. If not within a transaction, normal DataSource behavior applies.
*
*
This proxy allows data access code to work with the plain JDBC API and still
- * participate in Spring-managed transactions, similar to JDBC code in a Java EE/JTA
+ * participate in Spring-managed transactions, similar to JDBC code in a Jakarta EE/JTA
* environment. However, if possible, use Spring's DataSourceUtils, JdbcTemplate or
* JDBC operation objects to get transaction participation even without a proxy for
* the target DataSource, avoiding the need to define such a proxy in the first place.
diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/WebSphereDataSourceAdapter.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/WebSphereDataSourceAdapter.java
deleted file mode 100644
index 95e7a2daada..00000000000
--- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/WebSphereDataSourceAdapter.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jdbc.datasource;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.sql.Connection;
-import java.sql.SQLException;
-
-import javax.sql.DataSource;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-import org.springframework.util.ReflectionUtils;
-import org.springframework.util.StringUtils;
-
-/**
- * {@link DataSource} implementation that delegates all calls to a WebSphere
- * target {@link DataSource}, typically obtained from JNDI, applying a current
- * isolation level and/or current user credentials to every Connection obtained
- * from it.
- *
- *
Uses IBM-specific API to get a JDBC Connection with a specific isolation
- * level (and read-only flag) from a WebSphere DataSource
- * (IBM code example ).
- * Supports the transaction-specific isolation level exposed by
- * {@link org.springframework.transaction.support.TransactionSynchronizationManager#getCurrentTransactionIsolationLevel()}.
- * It's also possible to specify a default isolation level, to be applied when the
- * current Spring-managed transaction does not define a specific isolation level.
- *
- *
Usage example, defining the target DataSource as an inner-bean JNDI lookup
- * (of course, you can link to any WebSphere DataSource through a bean reference):
- *
- *
- * <bean id="myDataSource" class="org.springframework.jdbc.datasource.WebSphereDataSourceAdapter">
- * <property name="targetDataSource">
- * <bean class="org.springframework.jndi.JndiObjectFactoryBean">
- * <property name="jndiName" value="jdbc/myds"/>
- * </bean>
- * </property>
- * </bean>
- *
- * Thanks to Ricardo Olivieri for submitting the original implementation
- * of this approach!
- *
- * @author Juergen Hoeller
- * @author Lari Hotari
- * @author Ricardo N. Olivieri
- * @since 2.0.3
- * @see com.ibm.websphere.rsadapter.JDBCConnectionSpec
- * @see com.ibm.websphere.rsadapter.WSDataSource#getConnection(com.ibm.websphere.rsadapter.JDBCConnectionSpec)
- * @see org.springframework.transaction.support.TransactionSynchronizationManager#getCurrentTransactionIsolationLevel()
- * @see org.springframework.transaction.support.TransactionSynchronizationManager#isCurrentTransactionReadOnly()
- */
-public class WebSphereDataSourceAdapter extends IsolationLevelDataSourceAdapter {
-
- protected final Log logger = LogFactory.getLog(getClass());
-
- private Class> wsDataSourceClass;
-
- private Method newJdbcConnSpecMethod;
-
- private Method wsDataSourceGetConnectionMethod;
-
- private Method setTransactionIsolationMethod;
-
- private Method setReadOnlyMethod;
-
- private Method setUserNameMethod;
-
- private Method setPasswordMethod;
-
-
- /**
- * This constructor retrieves the WebSphere JDBC connection spec API,
- * so we can get obtain specific WebSphere Connections using reflection.
- */
- public WebSphereDataSourceAdapter() {
- try {
- this.wsDataSourceClass = getClass().getClassLoader().loadClass("com.ibm.websphere.rsadapter.WSDataSource");
- Class> jdbcConnSpecClass = getClass().getClassLoader().loadClass("com.ibm.websphere.rsadapter.JDBCConnectionSpec");
- Class> wsrraFactoryClass = getClass().getClassLoader().loadClass("com.ibm.websphere.rsadapter.WSRRAFactory");
- this.newJdbcConnSpecMethod = wsrraFactoryClass.getMethod("createJDBCConnectionSpec");
- this.wsDataSourceGetConnectionMethod =
- this.wsDataSourceClass.getMethod("getConnection", jdbcConnSpecClass);
- this.setTransactionIsolationMethod =
- jdbcConnSpecClass.getMethod("setTransactionIsolation", int.class);
- this.setReadOnlyMethod = jdbcConnSpecClass.getMethod("setReadOnly", Boolean.class);
- this.setUserNameMethod = jdbcConnSpecClass.getMethod("setUserName", String.class);
- this.setPasswordMethod = jdbcConnSpecClass.getMethod("setPassword", String.class);
- }
- catch (Exception ex) {
- throw new IllegalStateException(
- "Could not initialize WebSphereDataSourceAdapter because WebSphere API classes are not available: " + ex);
- }
- }
-
- /**
- * Checks that the specified 'targetDataSource' actually is
- * a WebSphere WSDataSource.
- */
- @Override
- public void afterPropertiesSet() {
- super.afterPropertiesSet();
-
- if (!this.wsDataSourceClass.isInstance(getTargetDataSource())) {
- throw new IllegalStateException(
- "Specified 'targetDataSource' is not a WebSphere WSDataSource: " + getTargetDataSource());
- }
- }
-
-
- /**
- * Builds a WebSphere JDBCConnectionSpec object for the current settings
- * and calls {@code WSDataSource.getConnection(JDBCConnectionSpec)}.
- * @see #createConnectionSpec
- * @see com.ibm.websphere.rsadapter.WSDataSource#getConnection(com.ibm.websphere.rsadapter.JDBCConnectionSpec)
- */
- @Override
- protected Connection doGetConnection(@Nullable String username, @Nullable String password) throws SQLException {
- // Create JDBCConnectionSpec using current isolation level value and read-only flag.
- Object connSpec = createConnectionSpec(
- getCurrentIsolationLevel(), getCurrentReadOnlyFlag(), username, password);
- if (logger.isDebugEnabled()) {
- logger.debug("Obtaining JDBC Connection from WebSphere DataSource [" +
- getTargetDataSource() + "], using ConnectionSpec [" + connSpec + "]");
- }
- // Create Connection through invoking WSDataSource.getConnection(JDBCConnectionSpec)
- Connection con = (Connection) invokeJdbcMethod(
- this.wsDataSourceGetConnectionMethod, obtainTargetDataSource(), connSpec);
- Assert.state(con != null, "No Connection");
- return con;
- }
-
- /**
- * Create a WebSphere {@code JDBCConnectionSpec} object for the given characteristics.
- * The default implementation uses reflection to apply the given settings.
- * Can be overridden in subclasses to customize the JDBCConnectionSpec object
- * (JDBCConnectionSpec javadoc ;
- * IBM developerWorks article ).
- * @param isolationLevel the isolation level to apply (or {@code null} if none)
- * @param readOnlyFlag the read-only flag to apply (or {@code null} if none)
- * @param username the username to apply ({@code null} or empty indicates the default)
- * @param password the password to apply (may be {@code null} or empty)
- * @throws SQLException if thrown by JDBCConnectionSpec API methods
- * @see com.ibm.websphere.rsadapter.JDBCConnectionSpec
- */
- protected Object createConnectionSpec(@Nullable Integer isolationLevel, @Nullable Boolean readOnlyFlag,
- @Nullable String username, @Nullable String password) throws SQLException {
-
- Object connSpec = invokeJdbcMethod(this.newJdbcConnSpecMethod, null);
- Assert.state(connSpec != null, "No JDBCConnectionSpec");
- if (isolationLevel != null) {
- invokeJdbcMethod(this.setTransactionIsolationMethod, connSpec, isolationLevel);
- }
- if (readOnlyFlag != null) {
- invokeJdbcMethod(this.setReadOnlyMethod, connSpec, readOnlyFlag);
- }
- // If the username is empty, we'll simply let the target DataSource
- // use its default credentials.
- if (StringUtils.hasLength(username)) {
- invokeJdbcMethod(this.setUserNameMethod, connSpec, username);
- invokeJdbcMethod(this.setPasswordMethod, connSpec, password);
- }
- return connSpec;
- }
-
-
- @Nullable
- private static Object invokeJdbcMethod(Method method, @Nullable Object target, @Nullable Object... args)
- throws SQLException {
- try {
- return method.invoke(target, args);
- }
- catch (IllegalAccessException ex) {
- ReflectionUtils.handleReflectionException(ex);
- }
- catch (InvocationTargetException ex) {
- if (ex.getTargetException() instanceof SQLException) {
- throw (SQLException) ex.getTargetException();
- }
- ReflectionUtils.handleInvocationTargetException(ex);
- }
- throw new IllegalStateException("Should never get here");
- }
-
-}
diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/DataSourceJtaTransactionTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/DataSourceJtaTransactionTests.java
index 13e87b621bc..dfd67268392 100644
--- a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/DataSourceJtaTransactionTests.java
+++ b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/DataSourceJtaTransactionTests.java
@@ -23,13 +23,13 @@ import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
-import javax.transaction.RollbackException;
-import javax.transaction.Status;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-import javax.transaction.UserTransaction;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.Status;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.UserTransaction;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-jms/spring-jms.gradle b/spring-jms/spring-jms.gradle
index 32485dff84b..6757f90eca2 100644
--- a/spring-jms/spring-jms.gradle
+++ b/spring-jms/spring-jms.gradle
@@ -5,15 +5,14 @@ dependencies {
api(project(":spring-core"))
api(project(":spring-messaging"))
api(project(":spring-tx"))
- compileOnly("javax.jms:javax.jms-api")
+ compileOnly("jakarta.jms:jakarta.jms-api")
optional(project(":spring-aop"))
optional(project(":spring-context"))
optional(project(":spring-oxm"))
- optional("javax.resource:javax.resource-api")
- optional("javax.transaction:javax.transaction-api")
+ optional("jakarta.resource:jakarta.resource-api")
+ optional("jakarta.transaction:jakarta.transaction-api")
optional("com.fasterxml.jackson.core:jackson-databind")
testImplementation(testFixtures(project(":spring-beans")))
testImplementation(testFixtures(project(":spring-tx")))
- testImplementation("org.apache.activemq:activemq-broker")
- testImplementation("javax.jms:javax.jms-api")
+ testImplementation("jakarta.jms:jakarta.jms-api")
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/IllegalStateException.java b/spring-jms/src/main/java/org/springframework/jms/IllegalStateException.java
index 1b6d7924f05..87c9192e060 100644
--- a/spring-jms/src/main/java/org/springframework/jms/IllegalStateException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/IllegalStateException.java
@@ -21,12 +21,12 @@ package org.springframework.jms;
*
* @author Mark Pollack
* @since 1.1
- * @see javax.jms.IllegalStateException
+ * @see jakarta.jms.IllegalStateException
*/
@SuppressWarnings("serial")
public class IllegalStateException extends JmsException {
- public IllegalStateException(javax.jms.IllegalStateException cause) {
+ public IllegalStateException(jakarta.jms.IllegalStateException cause) {
super(cause);
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/InvalidClientIDException.java b/spring-jms/src/main/java/org/springframework/jms/InvalidClientIDException.java
index 25f91597148..d4e84a4bb83 100644
--- a/spring-jms/src/main/java/org/springframework/jms/InvalidClientIDException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/InvalidClientIDException.java
@@ -21,12 +21,12 @@ package org.springframework.jms;
*
* @author Mark Pollack
* @since 1.1
- * @see javax.jms.InvalidClientIDException
+ * @see jakarta.jms.InvalidClientIDException
*/
@SuppressWarnings("serial")
public class InvalidClientIDException extends JmsException {
- public InvalidClientIDException(javax.jms.InvalidClientIDException cause) {
+ public InvalidClientIDException(jakarta.jms.InvalidClientIDException cause) {
super(cause);
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/InvalidDestinationException.java b/spring-jms/src/main/java/org/springframework/jms/InvalidDestinationException.java
index a40434a2316..b1ac9001ebb 100644
--- a/spring-jms/src/main/java/org/springframework/jms/InvalidDestinationException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/InvalidDestinationException.java
@@ -21,12 +21,12 @@ package org.springframework.jms;
*
* @author Mark Pollack
* @since 1.1
- * @see javax.jms.InvalidDestinationException
+ * @see jakarta.jms.InvalidDestinationException
*/
@SuppressWarnings("serial")
public class InvalidDestinationException extends JmsException {
- public InvalidDestinationException(javax.jms.InvalidDestinationException cause) {
+ public InvalidDestinationException(jakarta.jms.InvalidDestinationException cause) {
super(cause);
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/InvalidSelectorException.java b/spring-jms/src/main/java/org/springframework/jms/InvalidSelectorException.java
index da4c6df92c5..a065af5f873 100644
--- a/spring-jms/src/main/java/org/springframework/jms/InvalidSelectorException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/InvalidSelectorException.java
@@ -21,12 +21,12 @@ package org.springframework.jms;
*
* @author Mark Pollack
* @since 1.1
- * @see javax.jms.InvalidSelectorException
+ * @see jakarta.jms.InvalidSelectorException
*/
@SuppressWarnings("serial")
public class InvalidSelectorException extends JmsException {
- public InvalidSelectorException(javax.jms.InvalidSelectorException cause) {
+ public InvalidSelectorException(jakarta.jms.InvalidSelectorException cause) {
super(cause);
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/JmsException.java b/spring-jms/src/main/java/org/springframework/jms/JmsException.java
index 0c847adea3e..77a712e6ed6 100644
--- a/spring-jms/src/main/java/org/springframework/jms/JmsException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/JmsException.java
@@ -16,7 +16,7 @@
package org.springframework.jms;
-import javax.jms.JMSException;
+import jakarta.jms.JMSException;
import org.springframework.core.NestedRuntimeException;
import org.springframework.lang.Nullable;
@@ -44,7 +44,7 @@ public abstract class JmsException extends NestedRuntimeException {
* Constructor that takes a message and a root cause.
* @param msg the detail message
* @param cause the cause of the exception. This argument is generally
- * expected to be a proper subclass of {@link javax.jms.JMSException},
+ * expected to be a proper subclass of {@link jakarta.jms.JMSException},
* but can also be a JNDI NamingException or the like.
*/
public JmsException(String msg, @Nullable Throwable cause) {
@@ -53,9 +53,9 @@ public abstract class JmsException extends NestedRuntimeException {
/**
* Constructor that takes a plain root cause, intended for
- * subclasses mirroring corresponding {@code javax.jms} exceptions.
+ * subclasses mirroring corresponding {@code jakarta.jms} exceptions.
* @param cause the cause of the exception. This argument is generally
- * expected to be a proper subclass of {@link javax.jms.JMSException}.
+ * expected to be a proper subclass of {@link jakarta.jms.JMSException}.
*/
public JmsException(@Nullable Throwable cause) {
super(cause != null ? cause.getMessage() : null, cause);
@@ -80,7 +80,7 @@ public abstract class JmsException extends NestedRuntimeException {
/**
* Return the detail message, including the message from the linked exception
* if there is one.
- * @see javax.jms.JMSException#getLinkedException()
+ * @see jakarta.jms.JMSException#getLinkedException()
*/
@Override
@Nullable
diff --git a/spring-jms/src/main/java/org/springframework/jms/JmsSecurityException.java b/spring-jms/src/main/java/org/springframework/jms/JmsSecurityException.java
index a55352d9d56..1db9307340d 100644
--- a/spring-jms/src/main/java/org/springframework/jms/JmsSecurityException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/JmsSecurityException.java
@@ -21,12 +21,12 @@ package org.springframework.jms;
*
* @author Mark Pollack
* @since 1.1
- * @see javax.jms.JMSSecurityException
+ * @see jakarta.jms.JMSSecurityException
*/
@SuppressWarnings("serial")
public class JmsSecurityException extends JmsException {
- public JmsSecurityException(javax.jms.JMSSecurityException cause) {
+ public JmsSecurityException(jakarta.jms.JMSSecurityException cause) {
super(cause);
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/MessageEOFException.java b/spring-jms/src/main/java/org/springframework/jms/MessageEOFException.java
index 93cafa81b92..d6f53d1b1b7 100644
--- a/spring-jms/src/main/java/org/springframework/jms/MessageEOFException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/MessageEOFException.java
@@ -21,12 +21,12 @@ package org.springframework.jms;
*
* @author Mark Pollack
* @since 1.1
- * @see javax.jms.MessageEOFException
+ * @see jakarta.jms.MessageEOFException
*/
@SuppressWarnings("serial")
public class MessageEOFException extends JmsException {
- public MessageEOFException(javax.jms.MessageEOFException cause) {
+ public MessageEOFException(jakarta.jms.MessageEOFException cause) {
super(cause);
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/MessageFormatException.java b/spring-jms/src/main/java/org/springframework/jms/MessageFormatException.java
index 5fd26326c54..d70f1fcfb70 100644
--- a/spring-jms/src/main/java/org/springframework/jms/MessageFormatException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/MessageFormatException.java
@@ -21,12 +21,12 @@ package org.springframework.jms;
*
* @author Mark Pollack
* @since 1.1
- * @see javax.jms.MessageFormatException
+ * @see jakarta.jms.MessageFormatException
*/
@SuppressWarnings("serial")
public class MessageFormatException extends JmsException {
- public MessageFormatException(javax.jms.MessageFormatException cause) {
+ public MessageFormatException(jakarta.jms.MessageFormatException cause) {
super(cause);
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/MessageNotReadableException.java b/spring-jms/src/main/java/org/springframework/jms/MessageNotReadableException.java
index d17acc90bf1..04e3221754f 100644
--- a/spring-jms/src/main/java/org/springframework/jms/MessageNotReadableException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/MessageNotReadableException.java
@@ -21,12 +21,12 @@ package org.springframework.jms;
*
* @author Mark Pollack
* @since 1.1
- * @see javax.jms.MessageNotReadableException
+ * @see jakarta.jms.MessageNotReadableException
*/
@SuppressWarnings("serial")
public class MessageNotReadableException extends JmsException {
- public MessageNotReadableException(javax.jms.MessageNotReadableException cause) {
+ public MessageNotReadableException(jakarta.jms.MessageNotReadableException cause) {
super(cause);
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/MessageNotWriteableException.java b/spring-jms/src/main/java/org/springframework/jms/MessageNotWriteableException.java
index 52aa0223627..a4a4961577c 100644
--- a/spring-jms/src/main/java/org/springframework/jms/MessageNotWriteableException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/MessageNotWriteableException.java
@@ -21,12 +21,12 @@ package org.springframework.jms;
*
* @author Mark Pollack
* @since 1.1
- * @see javax.jms.MessageNotWriteableException
+ * @see jakarta.jms.MessageNotWriteableException
*/
@SuppressWarnings("serial")
public class MessageNotWriteableException extends JmsException {
- public MessageNotWriteableException(javax.jms.MessageNotWriteableException cause) {
+ public MessageNotWriteableException(jakarta.jms.MessageNotWriteableException cause) {
super(cause);
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/ResourceAllocationException.java b/spring-jms/src/main/java/org/springframework/jms/ResourceAllocationException.java
index 31ded982236..d3a1f674553 100644
--- a/spring-jms/src/main/java/org/springframework/jms/ResourceAllocationException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/ResourceAllocationException.java
@@ -21,12 +21,12 @@ package org.springframework.jms;
*
* @author Mark Pollack
* @since 1.1
- * @see javax.jms.ResourceAllocationException
+ * @see jakarta.jms.ResourceAllocationException
*/
@SuppressWarnings("serial")
public class ResourceAllocationException extends JmsException {
- public ResourceAllocationException(javax.jms.ResourceAllocationException cause) {
+ public ResourceAllocationException(jakarta.jms.ResourceAllocationException cause) {
super(cause);
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/TransactionInProgressException.java b/spring-jms/src/main/java/org/springframework/jms/TransactionInProgressException.java
index 37bab68acdf..2b271ae1397 100644
--- a/spring-jms/src/main/java/org/springframework/jms/TransactionInProgressException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/TransactionInProgressException.java
@@ -21,12 +21,12 @@ package org.springframework.jms;
*
* @author Mark Pollack
* @since 1.1
- * @see javax.jms.TransactionInProgressException
+ * @see jakarta.jms.TransactionInProgressException
*/
@SuppressWarnings("serial")
public class TransactionInProgressException extends JmsException {
- public TransactionInProgressException(javax.jms.TransactionInProgressException cause) {
+ public TransactionInProgressException(jakarta.jms.TransactionInProgressException cause) {
super(cause);
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/TransactionRolledBackException.java b/spring-jms/src/main/java/org/springframework/jms/TransactionRolledBackException.java
index 3d0cd7501b0..d29b98206c8 100644
--- a/spring-jms/src/main/java/org/springframework/jms/TransactionRolledBackException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/TransactionRolledBackException.java
@@ -21,12 +21,12 @@ package org.springframework.jms;
*
* @author Mark Pollack
* @since 1.1
- * @see javax.jms.TransactionRolledBackException
+ * @see jakarta.jms.TransactionRolledBackException
*/
@SuppressWarnings("serial")
public class TransactionRolledBackException extends JmsException {
- public TransactionRolledBackException(javax.jms.TransactionRolledBackException cause) {
+ public TransactionRolledBackException(jakarta.jms.TransactionRolledBackException cause) {
super(cause);
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/UncategorizedJmsException.java b/spring-jms/src/main/java/org/springframework/jms/UncategorizedJmsException.java
index ebf07cdf05d..f449cbacd8c 100644
--- a/spring-jms/src/main/java/org/springframework/jms/UncategorizedJmsException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/UncategorizedJmsException.java
@@ -37,7 +37,7 @@ public class UncategorizedJmsException extends JmsException {
* Constructor that takes a message and a root cause.
* @param msg the detail message
* @param cause the cause of the exception. This argument is generally
- * expected to be a proper subclass of {@link javax.jms.JMSException},
+ * expected to be a proper subclass of {@link jakarta.jms.JMSException},
* but can also be a JNDI NamingException or the like.
*/
public UncategorizedJmsException(String msg, Throwable cause) {
@@ -47,7 +47,7 @@ public class UncategorizedJmsException extends JmsException {
/**
* Constructor that takes a root cause only.
* @param cause the cause of the exception. This argument is generally
- * expected to be a proper subclass of {@link javax.jms.JMSException},
+ * expected to be a proper subclass of {@link jakarta.jms.JMSException},
* but can also be a JNDI NamingException or the like.
*/
public UncategorizedJmsException(Throwable cause) {
diff --git a/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java b/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java
index 79c4a3bca05..589e0e8e138 100644
--- a/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java
+++ b/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java
@@ -74,8 +74,8 @@ import org.springframework.context.annotation.Import;
* is set a {@code JmsListenerContainerFactory} bean with name {@code jmsListenerContainerFactory} is
* assumed to be present.
*
- *
the following configuration would ensure that every time a {@link javax.jms.Message}
- * is received on the {@link javax.jms.Destination} named "myQueue", {@code MyService.process()}
+ *
the following configuration would ensure that every time a {@link jakarta.jms.Message}
+ * is received on the {@link jakarta.jms.Destination} named "myQueue", {@code MyService.process()}
* is called with the content of the message:
*
*
diff --git a/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListener.java b/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListener.java
index 20847545785..7fee7e70935 100644
--- a/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListener.java
+++ b/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListener.java
@@ -47,8 +47,8 @@ import org.springframework.messaging.handler.annotation.MessageMapping;
* Annotated JMS listener methods are allowed to have flexible signatures similar
* to what {@link MessageMapping} provides:
*
- * {@link javax.jms.Session} to get access to the JMS session
- * {@link javax.jms.Message} or one of its subclasses to get access to the raw JMS message
+ * {@link jakarta.jms.Session} to get access to the JMS session
+ * {@link jakarta.jms.Message} or one of its subclasses to get access to the raw JMS message
* {@link org.springframework.messaging.Message} to use Spring's messaging abstraction counterpart
* {@link org.springframework.messaging.handler.annotation.Payload @Payload}-annotated method
* arguments, including support for validation
diff --git a/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerContainerFactory.java b/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerContainerFactory.java
index 39007467a0b..049aa4bcc06 100644
--- a/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerContainerFactory.java
+++ b/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerContainerFactory.java
@@ -16,9 +16,8 @@
package org.springframework.jms.config;
-import javax.jms.ConnectionFactory;
-import javax.jms.ExceptionListener;
-
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.ExceptionListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
diff --git a/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerEndpoint.java b/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerEndpoint.java
index 2e0fb1a9b4b..96df64e0e67 100644
--- a/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerEndpoint.java
+++ b/spring-jms/src/main/java/org/springframework/jms/config/AbstractJmsListenerEndpoint.java
@@ -16,7 +16,7 @@
package org.springframework.jms.config;
-import javax.jms.MessageListener;
+import jakarta.jms.MessageListener;
import org.springframework.jms.listener.AbstractMessageListenerContainer;
import org.springframework.jms.listener.MessageListenerContainer;
diff --git a/spring-jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java b/spring-jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java
index a8e66fd602c..787b0622ca7 100644
--- a/spring-jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java
+++ b/spring-jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java
@@ -16,8 +16,7 @@
package org.springframework.jms.config;
-import javax.jms.Session;
-
+import jakarta.jms.Session;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
diff --git a/spring-jms/src/main/java/org/springframework/jms/config/DefaultJcaListenerContainerFactory.java b/spring-jms/src/main/java/org/springframework/jms/config/DefaultJcaListenerContainerFactory.java
index a14af147cfa..0338478a086 100644
--- a/spring-jms/src/main/java/org/springframework/jms/config/DefaultJcaListenerContainerFactory.java
+++ b/spring-jms/src/main/java/org/springframework/jms/config/DefaultJcaListenerContainerFactory.java
@@ -16,7 +16,7 @@
package org.springframework.jms.config;
-import javax.resource.spi.ResourceAdapter;
+import jakarta.resource.spi.ResourceAdapter;
import org.springframework.jms.listener.endpoint.JmsActivationSpecConfig;
import org.springframework.jms.listener.endpoint.JmsActivationSpecFactory;
diff --git a/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerContainerParser.java b/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerContainerParser.java
index 0738ecfae1c..e88259bbdc7 100644
--- a/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerContainerParser.java
+++ b/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerContainerParser.java
@@ -16,8 +16,7 @@
package org.springframework.jms.config;
-import javax.jms.Session;
-
+import jakarta.jms.Session;
import org.w3c.dom.Element;
import org.springframework.beans.MutablePropertyValues;
diff --git a/spring-jms/src/main/java/org/springframework/jms/config/SimpleJmsListenerEndpoint.java b/spring-jms/src/main/java/org/springframework/jms/config/SimpleJmsListenerEndpoint.java
index 33be14be058..5dfc42ad288 100644
--- a/spring-jms/src/main/java/org/springframework/jms/config/SimpleJmsListenerEndpoint.java
+++ b/spring-jms/src/main/java/org/springframework/jms/config/SimpleJmsListenerEndpoint.java
@@ -16,7 +16,7 @@
package org.springframework.jms.config;
-import javax.jms.MessageListener;
+import jakarta.jms.MessageListener;
import org.springframework.jms.listener.MessageListenerContainer;
import org.springframework.lang.Nullable;
diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageConsumer.java b/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageConsumer.java
index 5f919cc6701..a077dac8d49 100644
--- a/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageConsumer.java
+++ b/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageConsumer.java
@@ -16,14 +16,14 @@
package org.springframework.jms.connection;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageListener;
-import javax.jms.Queue;
-import javax.jms.QueueReceiver;
-import javax.jms.Topic;
-import javax.jms.TopicSubscriber;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageConsumer;
+import jakarta.jms.MessageListener;
+import jakarta.jms.Queue;
+import jakarta.jms.QueueReceiver;
+import jakarta.jms.Topic;
+import jakarta.jms.TopicSubscriber;
import org.springframework.lang.Nullable;
diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageProducer.java b/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageProducer.java
index daae35af0aa..91f24ccd00a 100644
--- a/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageProducer.java
+++ b/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageProducer.java
@@ -16,15 +16,15 @@
package org.springframework.jms.connection;
-import javax.jms.CompletionListener;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageProducer;
-import javax.jms.Queue;
-import javax.jms.QueueSender;
-import javax.jms.Topic;
-import javax.jms.TopicPublisher;
+import jakarta.jms.CompletionListener;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageProducer;
+import jakarta.jms.Queue;
+import jakarta.jms.QueueSender;
+import jakarta.jms.Topic;
+import jakarta.jms.TopicPublisher;
import org.springframework.lang.Nullable;
diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java b/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java
index d9b8027f1aa..109762e0888 100644
--- a/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java
+++ b/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java
@@ -30,18 +30,18 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageProducer;
-import javax.jms.QueueSession;
-import javax.jms.Session;
-import javax.jms.TemporaryQueue;
-import javax.jms.TemporaryTopic;
-import javax.jms.Topic;
-import javax.jms.TopicSession;
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.MessageConsumer;
+import jakarta.jms.MessageProducer;
+import jakarta.jms.QueueSession;
+import jakarta.jms.Session;
+import jakarta.jms.TemporaryQueue;
+import jakarta.jms.TemporaryTopic;
+import jakarta.jms.Topic;
+import jakarta.jms.TopicSession;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
@@ -49,8 +49,8 @@ import org.springframework.util.ClassUtils;
import org.springframework.util.ObjectUtils;
/**
- * {@link SingleConnectionFactory} subclass that adds {@link javax.jms.Session}
- * caching as well {@link javax.jms.MessageProducer} caching. This ConnectionFactory
+ * {@link SingleConnectionFactory} subclass that adds {@link jakarta.jms.Session}
+ * caching as well {@link jakarta.jms.MessageProducer} caching. This ConnectionFactory
* also switches the {@link #setReconnectOnException "reconnectOnException" property}
* to "true" by default, allowing for automatic recovery of the underlying Connection.
*
diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/ChainedExceptionListener.java b/spring-jms/src/main/java/org/springframework/jms/connection/ChainedExceptionListener.java
index eb5d0beac02..6a7b58ba295 100644
--- a/spring-jms/src/main/java/org/springframework/jms/connection/ChainedExceptionListener.java
+++ b/spring-jms/src/main/java/org/springframework/jms/connection/ChainedExceptionListener.java
@@ -19,8 +19,8 @@ package org.springframework.jms.connection;
import java.util.ArrayList;
import java.util.List;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
+import jakarta.jms.ExceptionListener;
+import jakarta.jms.JMSException;
import org.springframework.util.Assert;
diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/ConnectionFactoryUtils.java b/spring-jms/src/main/java/org/springframework/jms/connection/ConnectionFactoryUtils.java
index 3de9bc71ffa..0f7b72fd2e2 100644
--- a/spring-jms/src/main/java/org/springframework/jms/connection/ConnectionFactoryUtils.java
+++ b/spring-jms/src/main/java/org/springframework/jms/connection/ConnectionFactoryUtils.java
@@ -16,17 +16,16 @@
package org.springframework.jms.connection;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.JMSException;
-import javax.jms.QueueConnection;
-import javax.jms.QueueConnectionFactory;
-import javax.jms.QueueSession;
-import javax.jms.Session;
-import javax.jms.TopicConnection;
-import javax.jms.TopicConnectionFactory;
-import javax.jms.TopicSession;
-
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.JMSException;
+import jakarta.jms.QueueConnection;
+import jakarta.jms.QueueConnectionFactory;
+import jakarta.jms.QueueSession;
+import jakarta.jms.Session;
+import jakarta.jms.TopicConnection;
+import jakarta.jms.TopicConnectionFactory;
+import jakarta.jms.TopicSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -36,7 +35,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
import org.springframework.util.Assert;
/**
- * Helper class for managing a JMS {@link javax.jms.ConnectionFactory}, in particular
+ * Helper class for managing a JMS {@link jakarta.jms.ConnectionFactory}, in particular
* for obtaining transactional JMS resources for a given ConnectionFactory.
*
* Mainly for internal use within the framework. Used by
@@ -264,7 +263,7 @@ public abstract class ConnectionFactoryUtils {
* JMS resources
* @return the transactional Session, or {@code null} if none found
* @throws JMSException in case of JMS failure
- * @see #doGetTransactionalSession(javax.jms.ConnectionFactory, ResourceFactory, boolean)
+ * @see #doGetTransactionalSession(jakarta.jms.ConnectionFactory, ResourceFactory, boolean)
*/
@Nullable
public static Session doGetTransactionalSession(
diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/DelegatingConnectionFactory.java b/spring-jms/src/main/java/org/springframework/jms/connection/DelegatingConnectionFactory.java
index 1cdedc3a61f..ea72ff38c6e 100644
--- a/spring-jms/src/main/java/org/springframework/jms/connection/DelegatingConnectionFactory.java
+++ b/spring-jms/src/main/java/org/springframework/jms/connection/DelegatingConnectionFactory.java
@@ -16,22 +16,22 @@
package org.springframework.jms.connection;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.JMSContext;
-import javax.jms.JMSException;
-import javax.jms.QueueConnection;
-import javax.jms.QueueConnectionFactory;
-import javax.jms.TopicConnection;
-import javax.jms.TopicConnectionFactory;
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.JMSContext;
+import jakarta.jms.JMSException;
+import jakarta.jms.QueueConnection;
+import jakarta.jms.QueueConnectionFactory;
+import jakarta.jms.TopicConnection;
+import jakarta.jms.TopicConnectionFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
- * {@link javax.jms.ConnectionFactory} implementation that delegates all calls
- * to a given target {@link javax.jms.ConnectionFactory}, adapting specific
+ * {@link jakarta.jms.ConnectionFactory} implementation that delegates all calls
+ * to a given target {@link jakarta.jms.ConnectionFactory}, adapting specific
* {@code create(Queue/Topic)Connection} calls to the target ConnectionFactory
* if necessary (e.g. when running JMS 1.0.2 API based code against a generic
* JMS 1.1 ConnectionFactory, such as ActiveMQ's PooledConnectionFactory).
@@ -126,7 +126,7 @@ public class DelegatingConnectionFactory
else {
Connection con = target.createConnection();
if (!(con instanceof QueueConnection)) {
- throw new javax.jms.IllegalStateException("'targetConnectionFactory' is not a QueueConnectionFactory");
+ throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is not a QueueConnectionFactory");
}
return (QueueConnection) con;
}
@@ -141,7 +141,7 @@ public class DelegatingConnectionFactory
else {
Connection con = target.createConnection(username, password);
if (!(con instanceof QueueConnection)) {
- throw new javax.jms.IllegalStateException("'targetConnectionFactory' is not a QueueConnectionFactory");
+ throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is not a QueueConnectionFactory");
}
return (QueueConnection) con;
}
@@ -156,7 +156,7 @@ public class DelegatingConnectionFactory
else {
Connection con = target.createConnection();
if (!(con instanceof TopicConnection)) {
- throw new javax.jms.IllegalStateException("'targetConnectionFactory' is not a TopicConnectionFactory");
+ throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is not a TopicConnectionFactory");
}
return (TopicConnection) con;
}
@@ -171,7 +171,7 @@ public class DelegatingConnectionFactory
else {
Connection con = target.createConnection(username, password);
if (!(con instanceof TopicConnection)) {
- throw new javax.jms.IllegalStateException("'targetConnectionFactory' is not a TopicConnectionFactory");
+ throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is not a TopicConnectionFactory");
}
return (TopicConnection) con;
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/JmsResourceHolder.java b/spring-jms/src/main/java/org/springframework/jms/connection/JmsResourceHolder.java
index a8e9c86dbe1..7b43c35152c 100644
--- a/spring-jms/src/main/java/org/springframework/jms/connection/JmsResourceHolder.java
+++ b/spring-jms/src/main/java/org/springframework/jms/connection/JmsResourceHolder.java
@@ -22,12 +22,11 @@ import java.util.Deque;
import java.util.HashMap;
import java.util.Map;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.JMSException;
-import javax.jms.Session;
-import javax.jms.TransactionInProgressException;
-
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.JMSException;
+import jakarta.jms.Session;
+import jakarta.jms.TransactionInProgressException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -243,7 +242,7 @@ public class JmsResourceHolder extends ResourceHolderSupport {
catch (TransactionInProgressException ex) {
// Ignore -> can only happen in case of a JTA transaction.
}
- catch (javax.jms.IllegalStateException ex) {
+ catch (jakarta.jms.IllegalStateException ex) {
if (this.connectionFactory != null) {
try {
Method getDataSourceMethod = this.connectionFactory.getClass().getMethod("getDataSource");
diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/JmsTransactionManager.java b/spring-jms/src/main/java/org/springframework/jms/connection/JmsTransactionManager.java
index 28de1e8df06..2bc43f20da2 100644
--- a/spring-jms/src/main/java/org/springframework/jms/connection/JmsTransactionManager.java
+++ b/spring-jms/src/main/java/org/springframework/jms/connection/JmsTransactionManager.java
@@ -16,11 +16,11 @@
package org.springframework.jms.connection;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.JMSException;
-import javax.jms.Session;
-import javax.jms.TransactionRolledBackException;
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.JMSException;
+import jakarta.jms.Session;
+import jakarta.jms.TransactionRolledBackException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.lang.Nullable;
@@ -38,7 +38,7 @@ import org.springframework.util.Assert;
/**
* {@link org.springframework.transaction.PlatformTransactionManager} implementation
- * for a single JMS {@link javax.jms.ConnectionFactory}. Binds a JMS
+ * for a single JMS {@link jakarta.jms.ConnectionFactory}. Binds a JMS
* Connection/Session pair from the specified ConnectionFactory to the thread,
* potentially allowing for one thread-bound Session per ConnectionFactory.
*
@@ -52,12 +52,12 @@ import org.springframework.util.Assert;
*
*
Application code is required to retrieve the transactional JMS Session via
* {@link ConnectionFactoryUtils#getTransactionalSession} instead of a standard
- * Java EE-style {@link ConnectionFactory#createConnection()} call with subsequent
+ * Jakarta EE-style {@link ConnectionFactory#createConnection()} call with subsequent
* Session creation. Spring's {@link org.springframework.jms.core.JmsTemplate}
* will autodetect a thread-bound Session and automatically participate in it.
*
*
Alternatively, you can allow application code to work with the standard
- * Java EE-style lookup pattern on a ConnectionFactory, for example for legacy code
+ * Jakarta EE-style lookup pattern on a ConnectionFactory, for example for legacy code
* that is not aware of Spring at all. In that case, define a
* {@link TransactionAwareConnectionFactoryProxy} for your target ConnectionFactory,
* which will automatically participate in Spring-managed transactions.
@@ -324,7 +324,7 @@ public class JmsTransactionManager extends AbstractPlatformTransactionManager
* Create a JMS Connection via this template's ConnectionFactory.
*
This implementation uses JMS 1.1 API.
* @return the new JMS Connection
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
*/
protected Connection createConnection() throws JMSException {
return obtainConnectionFactory().createConnection();
@@ -335,7 +335,7 @@ public class JmsTransactionManager extends AbstractPlatformTransactionManager
*
This implementation uses JMS 1.1 API.
* @param con the JMS Connection to create a Session for
* @return the new JMS Session
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
*/
protected Session createSession(Connection con) throws JMSException {
return con.createSession(true, Session.AUTO_ACKNOWLEDGE);
diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/SessionProxy.java b/spring-jms/src/main/java/org/springframework/jms/connection/SessionProxy.java
index f6443252b41..cd4ccbb5b80 100644
--- a/spring-jms/src/main/java/org/springframework/jms/connection/SessionProxy.java
+++ b/spring-jms/src/main/java/org/springframework/jms/connection/SessionProxy.java
@@ -16,17 +16,17 @@
package org.springframework.jms.connection;
-import javax.jms.Session;
+import jakarta.jms.Session;
/**
- * Subinterface of {@link javax.jms.Session} to be implemented by
+ * Subinterface of {@link jakarta.jms.Session} to be implemented by
* Session proxies. Allows access to the underlying target Session.
*
* @author Juergen Hoeller
* @since 2.0.4
* @see TransactionAwareConnectionFactoryProxy
* @see CachingConnectionFactory
- * @see ConnectionFactoryUtils#getTargetSession(javax.jms.Session)
+ * @see ConnectionFactoryUtils#getTargetSession(jakarta.jms.Session)
*/
public interface SessionProxy extends Session {
diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/SingleConnectionFactory.java b/spring-jms/src/main/java/org/springframework/jms/connection/SingleConnectionFactory.java
index 1a463c3b4fe..0c5e629022a 100644
--- a/spring-jms/src/main/java/org/springframework/jms/connection/SingleConnectionFactory.java
+++ b/spring-jms/src/main/java/org/springframework/jms/connection/SingleConnectionFactory.java
@@ -25,17 +25,16 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSContext;
-import javax.jms.JMSException;
-import javax.jms.QueueConnection;
-import javax.jms.QueueConnectionFactory;
-import javax.jms.Session;
-import javax.jms.TopicConnection;
-import javax.jms.TopicConnectionFactory;
-
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.ExceptionListener;
+import jakarta.jms.JMSContext;
+import jakarta.jms.JMSException;
+import jakarta.jms.QueueConnection;
+import jakarta.jms.QueueConnectionFactory;
+import jakarta.jms.Session;
+import jakarta.jms.TopicConnection;
+import jakarta.jms.TopicConnectionFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -49,7 +48,7 @@ import org.springframework.util.ObjectUtils;
/**
* A JMS ConnectionFactory adapter that returns the same Connection
* from all {@link #createConnection()} calls, and ignores calls to
- * {@link javax.jms.Connection#close()}. According to the JMS Connection
+ * {@link jakarta.jms.Connection#close()}. According to the JMS Connection
* model, this is perfectly thread-safe (in contrast to e.g. JDBC). The
* shared Connection can be automatically recovered in case of an Exception.
*
@@ -170,7 +169,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti
*
Note that client IDs need to be unique among all active Connections
* of the underlying JMS provider. Furthermore, a client ID can only be
* assigned if the original ConnectionFactory hasn't already assigned one.
- * @see javax.jms.Connection#setClientID
+ * @see jakarta.jms.Connection#setClientID
* @see #setTargetConnectionFactory
*/
public void setClientId(@Nullable String clientId) {
@@ -245,7 +244,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti
@Override
public Connection createConnection(String username, String password) throws JMSException {
- throw new javax.jms.IllegalStateException(
+ throw new jakarta.jms.IllegalStateException(
"SingleConnectionFactory does not support custom username and password");
}
@@ -257,7 +256,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti
con = createConnection();
}
if (!(con instanceof QueueConnection)) {
- throw new javax.jms.IllegalStateException(
+ throw new jakarta.jms.IllegalStateException(
"This SingleConnectionFactory does not hold a QueueConnection but rather: " + con);
}
return ((QueueConnection) con);
@@ -265,7 +264,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti
@Override
public QueueConnection createQueueConnection(String username, String password) throws JMSException {
- throw new javax.jms.IllegalStateException(
+ throw new jakarta.jms.IllegalStateException(
"SingleConnectionFactory does not support custom username and password");
}
@@ -277,7 +276,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti
con = createConnection();
}
if (!(con instanceof TopicConnection)) {
- throw new javax.jms.IllegalStateException(
+ throw new jakarta.jms.IllegalStateException(
"This SingleConnectionFactory does not hold a TopicConnection but rather: " + con);
}
return ((TopicConnection) con);
@@ -285,7 +284,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti
@Override
public TopicConnection createTopicConnection(String username, String password) throws JMSException {
- throw new javax.jms.IllegalStateException(
+ throw new jakarta.jms.IllegalStateException(
"SingleConnectionFactory does not support custom username and password");
}
@@ -319,7 +318,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti
/**
* Obtain an initialized shared Connection.
* @return the Connection (never {@code null})
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
* @see #initConnection()
*/
protected Connection getConnection() throws JMSException {
@@ -335,7 +334,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti
* Initialize the underlying shared Connection.
*
Closes and reinitializes the Connection if an underlying
* Connection is present already.
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
* @see #prepareConnection
*/
public void initConnection() throws JMSException {
@@ -396,7 +395,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti
/**
* Create a JMS Connection via this template's ConnectionFactory.
* @return the new JMS Connection
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
*/
protected Connection doCreateConnection() throws JMSException {
ConnectionFactory cf = getTargetConnectionFactory();
@@ -502,7 +501,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti
con.close();
}
}
- catch (javax.jms.IllegalStateException ex) {
+ catch (jakarta.jms.IllegalStateException ex) {
logger.debug("Ignoring Connection state exception - assuming already closed: " + ex);
}
catch (Throwable ex) {
@@ -569,7 +568,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti
return null;
}
else {
- throw new javax.jms.IllegalStateException(
+ throw new jakarta.jms.IllegalStateException(
"setClientID call not supported on proxy for shared Connection. " +
"Set the 'clientId' property on the SingleConnectionFactory instead.");
}
@@ -590,7 +589,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti
return null;
}
else {
- throw new javax.jms.IllegalStateException(
+ throw new jakarta.jms.IllegalStateException(
"setExceptionListener call not supported on proxy for shared Connection. " +
"Set the 'exceptionListener' property on the SingleConnectionFactory instead. " +
"Alternatively, activate SingleConnectionFactory's 'reconnectOnException' feature, " +
@@ -650,7 +649,7 @@ public class SingleConnectionFactory implements ConnectionFactory, QueueConnecti
catch (Throwable ex) {
logger.trace("Failed to close newly obtained JMS Session", ex);
}
- throw new javax.jms.IllegalStateException(msg);
+ throw new jakarta.jms.IllegalStateException(msg);
}
return session;
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/SmartConnectionFactory.java b/spring-jms/src/main/java/org/springframework/jms/connection/SmartConnectionFactory.java
index 222627a7f32..00eb4c6b1ea 100644
--- a/spring-jms/src/main/java/org/springframework/jms/connection/SmartConnectionFactory.java
+++ b/spring-jms/src/main/java/org/springframework/jms/connection/SmartConnectionFactory.java
@@ -16,11 +16,11 @@
package org.springframework.jms.connection;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
/**
- * Extension of the {@code javax.jms.ConnectionFactory} interface,
+ * Extension of the {@code jakarta.jms.ConnectionFactory} interface,
* indicating how to release Connections obtained from it.
*
* @author Juergen Hoeller
@@ -32,7 +32,7 @@ public interface SmartConnectionFactory extends ConnectionFactory {
* Should we stop the Connection, obtained from this ConnectionFactory?
* @param con the Connection to check
* @return whether a stop call is necessary
- * @see javax.jms.Connection#stop()
+ * @see jakarta.jms.Connection#stop()
*/
boolean shouldStop(Connection con);
diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/SynchedLocalTransactionFailedException.java b/spring-jms/src/main/java/org/springframework/jms/connection/SynchedLocalTransactionFailedException.java
index 311de08a2aa..a4fbdb961f3 100644
--- a/spring-jms/src/main/java/org/springframework/jms/connection/SynchedLocalTransactionFailedException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/connection/SynchedLocalTransactionFailedException.java
@@ -16,7 +16,7 @@
package org.springframework.jms.connection;
-import javax.jms.JMSException;
+import jakarta.jms.JMSException;
import org.springframework.jms.JmsException;
diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/TransactionAwareConnectionFactoryProxy.java b/spring-jms/src/main/java/org/springframework/jms/connection/TransactionAwareConnectionFactoryProxy.java
index 3dbbfb5c732..2bac2fa55d0 100644
--- a/spring-jms/src/main/java/org/springframework/jms/connection/TransactionAwareConnectionFactoryProxy.java
+++ b/spring-jms/src/main/java/org/springframework/jms/connection/TransactionAwareConnectionFactoryProxy.java
@@ -23,27 +23,27 @@ import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.JMSContext;
-import javax.jms.JMSException;
-import javax.jms.QueueConnection;
-import javax.jms.QueueConnectionFactory;
-import javax.jms.QueueSession;
-import javax.jms.Session;
-import javax.jms.TopicConnection;
-import javax.jms.TopicConnectionFactory;
-import javax.jms.TopicSession;
-import javax.jms.TransactionInProgressException;
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.JMSContext;
+import jakarta.jms.JMSException;
+import jakarta.jms.QueueConnection;
+import jakarta.jms.QueueConnectionFactory;
+import jakarta.jms.QueueSession;
+import jakarta.jms.Session;
+import jakarta.jms.TopicConnection;
+import jakarta.jms.TopicConnectionFactory;
+import jakarta.jms.TopicSession;
+import jakarta.jms.TransactionInProgressException;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
/**
- * Proxy for a target JMS {@link javax.jms.ConnectionFactory}, adding awareness of
+ * Proxy for a target JMS {@link jakarta.jms.ConnectionFactory}, adding awareness of
* Spring-managed transactions. Similar to a transactional JNDI ConnectionFactory
- * as provided by a Java EE application server.
+ * as provided by a Jakarta EE application server.
*
*
Messaging code which should remain unaware of Spring's JMS support can work with
* this proxy to seamlessly participate in Spring-managed transactions. Note that the
@@ -164,7 +164,7 @@ public class TransactionAwareConnectionFactoryProxy
public QueueConnection createQueueConnection() throws JMSException {
ConnectionFactory target = getTargetConnectionFactory();
if (!(target instanceof QueueConnectionFactory)) {
- throw new javax.jms.IllegalStateException("'targetConnectionFactory' is no QueueConnectionFactory");
+ throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is no QueueConnectionFactory");
}
QueueConnection targetConnection = ((QueueConnectionFactory) target).createQueueConnection();
return (QueueConnection) getTransactionAwareConnectionProxy(targetConnection);
@@ -174,7 +174,7 @@ public class TransactionAwareConnectionFactoryProxy
public QueueConnection createQueueConnection(String username, String password) throws JMSException {
ConnectionFactory target = getTargetConnectionFactory();
if (!(target instanceof QueueConnectionFactory)) {
- throw new javax.jms.IllegalStateException("'targetConnectionFactory' is no QueueConnectionFactory");
+ throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is no QueueConnectionFactory");
}
QueueConnection targetConnection = ((QueueConnectionFactory) target).createQueueConnection(username, password);
return (QueueConnection) getTransactionAwareConnectionProxy(targetConnection);
@@ -184,7 +184,7 @@ public class TransactionAwareConnectionFactoryProxy
public TopicConnection createTopicConnection() throws JMSException {
ConnectionFactory target = getTargetConnectionFactory();
if (!(target instanceof TopicConnectionFactory)) {
- throw new javax.jms.IllegalStateException("'targetConnectionFactory' is no TopicConnectionFactory");
+ throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is no TopicConnectionFactory");
}
TopicConnection targetConnection = ((TopicConnectionFactory) target).createTopicConnection();
return (TopicConnection) getTransactionAwareConnectionProxy(targetConnection);
@@ -194,7 +194,7 @@ public class TransactionAwareConnectionFactoryProxy
public TopicConnection createTopicConnection(String username, String password) throws JMSException {
ConnectionFactory target = getTargetConnectionFactory();
if (!(target instanceof TopicConnectionFactory)) {
- throw new javax.jms.IllegalStateException("'targetConnectionFactory' is no TopicConnectionFactory");
+ throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is no TopicConnectionFactory");
}
TopicConnection targetConnection = ((TopicConnectionFactory) target).createTopicConnection(username, password);
return (TopicConnection) getTransactionAwareConnectionProxy(targetConnection);
diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/UserCredentialsConnectionFactoryAdapter.java b/spring-jms/src/main/java/org/springframework/jms/connection/UserCredentialsConnectionFactoryAdapter.java
index f8d2e4b9b42..ef8dd8585fa 100644
--- a/spring-jms/src/main/java/org/springframework/jms/connection/UserCredentialsConnectionFactoryAdapter.java
+++ b/spring-jms/src/main/java/org/springframework/jms/connection/UserCredentialsConnectionFactoryAdapter.java
@@ -16,14 +16,14 @@
package org.springframework.jms.connection;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.JMSContext;
-import javax.jms.JMSException;
-import javax.jms.QueueConnection;
-import javax.jms.QueueConnectionFactory;
-import javax.jms.TopicConnection;
-import javax.jms.TopicConnectionFactory;
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.JMSContext;
+import jakarta.jms.JMSException;
+import jakarta.jms.QueueConnection;
+import jakarta.jms.QueueConnectionFactory;
+import jakarta.jms.TopicConnection;
+import jakarta.jms.TopicConnectionFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.NamedThreadLocal;
@@ -32,7 +32,7 @@ import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
/**
- * An adapter for a target JMS {@link javax.jms.ConnectionFactory}, applying the
+ * An adapter for a target JMS {@link jakarta.jms.ConnectionFactory}, applying the
* given user credentials to every standard {@code createConnection()} call,
* that is, implicitly invoking {@code createConnection(username, password)}
* on the target. All other methods simply delegate to the corresponding methods
@@ -179,8 +179,8 @@ public class UserCredentialsConnectionFactoryAdapter
* @param username the username to use
* @param password the password to use
* @return the Connection
- * @see javax.jms.ConnectionFactory#createConnection(String, String)
- * @see javax.jms.ConnectionFactory#createConnection()
+ * @see jakarta.jms.ConnectionFactory#createConnection(String, String)
+ * @see jakarta.jms.ConnectionFactory#createConnection()
*/
protected Connection doCreateConnection(@Nullable String username, @Nullable String password) throws JMSException {
ConnectionFactory target = obtainTargetConnectionFactory();
@@ -225,15 +225,15 @@ public class UserCredentialsConnectionFactoryAdapter
* @param username the username to use
* @param password the password to use
* @return the Connection
- * @see javax.jms.QueueConnectionFactory#createQueueConnection(String, String)
- * @see javax.jms.QueueConnectionFactory#createQueueConnection()
+ * @see jakarta.jms.QueueConnectionFactory#createQueueConnection(String, String)
+ * @see jakarta.jms.QueueConnectionFactory#createQueueConnection()
*/
protected QueueConnection doCreateQueueConnection(
@Nullable String username, @Nullable String password) throws JMSException {
ConnectionFactory target = obtainTargetConnectionFactory();
if (!(target instanceof QueueConnectionFactory)) {
- throw new javax.jms.IllegalStateException("'targetConnectionFactory' is not a QueueConnectionFactory");
+ throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is not a QueueConnectionFactory");
}
QueueConnectionFactory queueFactory = (QueueConnectionFactory) target;
if (StringUtils.hasLength(username)) {
@@ -277,15 +277,15 @@ public class UserCredentialsConnectionFactoryAdapter
* @param username the username to use
* @param password the password to use
* @return the Connection
- * @see javax.jms.TopicConnectionFactory#createTopicConnection(String, String)
- * @see javax.jms.TopicConnectionFactory#createTopicConnection()
+ * @see jakarta.jms.TopicConnectionFactory#createTopicConnection(String, String)
+ * @see jakarta.jms.TopicConnectionFactory#createTopicConnection()
*/
protected TopicConnection doCreateTopicConnection(
@Nullable String username, @Nullable String password) throws JMSException {
ConnectionFactory target = obtainTargetConnectionFactory();
if (!(target instanceof TopicConnectionFactory)) {
- throw new javax.jms.IllegalStateException("'targetConnectionFactory' is not a TopicConnectionFactory");
+ throw new jakarta.jms.IllegalStateException("'targetConnectionFactory' is not a TopicConnectionFactory");
}
TopicConnectionFactory queueFactory = (TopicConnectionFactory) target;
if (StringUtils.hasLength(username)) {
diff --git a/spring-jms/src/main/java/org/springframework/jms/core/BrowserCallback.java b/spring-jms/src/main/java/org/springframework/jms/core/BrowserCallback.java
index 5142cd35080..1a076bad501 100644
--- a/spring-jms/src/main/java/org/springframework/jms/core/BrowserCallback.java
+++ b/spring-jms/src/main/java/org/springframework/jms/core/BrowserCallback.java
@@ -16,9 +16,9 @@
package org.springframework.jms.core;
-import javax.jms.JMSException;
-import javax.jms.QueueBrowser;
-import javax.jms.Session;
+import jakarta.jms.JMSException;
+import jakarta.jms.QueueBrowser;
+import jakarta.jms.Session;
import org.springframework.lang.Nullable;
@@ -39,13 +39,13 @@ import org.springframework.lang.Nullable;
public interface BrowserCallback {
/**
- * Perform operations on the given {@link javax.jms.Session} and
- * {@link javax.jms.QueueBrowser}.
+ * Perform operations on the given {@link jakarta.jms.Session} and
+ * {@link jakarta.jms.QueueBrowser}.
* @param session the JMS {@code Session} object to use
* @param browser the JMS {@code QueueBrowser} object to use
* @return a result object from working with the {@code Session}, if any
* (or {@code null} if none)
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
*/
@Nullable
T doInJms(Session session, QueueBrowser browser) throws JMSException;
diff --git a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessageOperations.java b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessageOperations.java
index 50bba1b04ff..ebb821da62c 100644
--- a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessageOperations.java
+++ b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessageOperations.java
@@ -18,7 +18,7 @@ package org.springframework.jms.core;
import java.util.Map;
-import javax.jms.Destination;
+import jakarta.jms.Destination;
import org.springframework.lang.Nullable;
import org.springframework.messaging.Message;
@@ -31,7 +31,7 @@ import org.springframework.messaging.core.MessageSendingOperations;
/**
* A specialization of {@link MessageSendingOperations}, {@link MessageReceivingOperations}
* and {@link MessageRequestReplyOperations} for JMS related operations that allow to specify
- * a destination name rather than the actual {@link javax.jms.Destination}.
+ * a destination name rather than the actual {@link jakarta.jms.Destination}.
*
* @author Stephane Nicoll
* @since 4.1
diff --git a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java
index 7eaa1bd8d98..0835ae2e9b1 100644
--- a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java
+++ b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java
@@ -18,10 +18,10 @@ package org.springframework.jms.core;
import java.util.Map;
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Session;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Session;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.jms.InvalidDestinationException;
@@ -123,7 +123,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate
/**
* Set the {@link MessageConverter} to use to convert a {@link Message} from
- * the messaging to and from a {@link javax.jms.Message}. By default, a
+ * the messaging to and from a {@link jakarta.jms.Message}. By default, a
* {@link MessagingMessageConverter} is defined using a {@link SimpleMessageConverter}
* to convert the payload of the message.
* Consider configuring a {@link MessagingMessageConverter} with a different
@@ -139,7 +139,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate
/**
* Return the {@link MessageConverter} to use to convert a {@link Message}
- * from the messaging to and from a {@link javax.jms.Message}.
+ * from the messaging to and from a {@link jakarta.jms.Message}.
*/
public MessageConverter getJmsMessageConverter() {
return this.jmsMessageConverter;
@@ -373,7 +373,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate
@Nullable
protected Message> doReceive(Destination destination) {
try {
- javax.jms.Message jmsMessage = obtainJmsTemplate().receive(destination);
+ jakarta.jms.Message jmsMessage = obtainJmsTemplate().receive(destination);
return convertJmsMessage(jmsMessage);
}
catch (JmsException ex) {
@@ -384,7 +384,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate
@Nullable
protected Message> doReceive(String destinationName) {
try {
- javax.jms.Message jmsMessage = obtainJmsTemplate().receive(destinationName);
+ jakarta.jms.Message jmsMessage = obtainJmsTemplate().receive(destinationName);
return convertJmsMessage(jmsMessage);
}
catch (JmsException ex) {
@@ -396,7 +396,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate
@Nullable
protected Message> doSendAndReceive(Destination destination, Message> requestMessage) {
try {
- javax.jms.Message jmsMessage = obtainJmsTemplate().sendAndReceive(
+ jakarta.jms.Message jmsMessage = obtainJmsTemplate().sendAndReceive(
destination, createMessageCreator(requestMessage));
return convertJmsMessage(jmsMessage);
}
@@ -408,7 +408,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate
@Nullable
protected Message> doSendAndReceive(String destinationName, Message> requestMessage) {
try {
- javax.jms.Message jmsMessage = obtainJmsTemplate().sendAndReceive(
+ jakarta.jms.Message jmsMessage = obtainJmsTemplate().sendAndReceive(
destinationName, createMessageCreator(requestMessage));
return convertJmsMessage(jmsMessage);
}
@@ -431,7 +431,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate
}
@Nullable
- protected Message> convertJmsMessage(@Nullable javax.jms.Message message) {
+ protected Message> convertJmsMessage(@Nullable jakarta.jms.Message message) {
if (message == null) {
return null;
}
@@ -468,7 +468,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate
}
@Override
- public javax.jms.Message createMessage(Session session) throws JMSException {
+ public jakarta.jms.Message createMessage(Session session) throws JMSException {
try {
return this.messageConverter.toMessage(this.message, session);
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/core/JmsOperations.java b/spring-jms/src/main/java/org/springframework/jms/core/JmsOperations.java
index 9b2cef401b9..845be02a12e 100644
--- a/spring-jms/src/main/java/org/springframework/jms/core/JmsOperations.java
+++ b/spring-jms/src/main/java/org/springframework/jms/core/JmsOperations.java
@@ -16,9 +16,9 @@
package org.springframework.jms.core;
-import javax.jms.Destination;
-import javax.jms.Message;
-import javax.jms.Queue;
+import jakarta.jms.Destination;
+import jakarta.jms.Message;
+import jakarta.jms.Queue;
import org.springframework.jms.JmsException;
import org.springframework.lang.Nullable;
@@ -41,10 +41,10 @@ import org.springframework.lang.Nullable;
* @author Stephane Nicoll
* @since 1.1
* @see JmsTemplate
- * @see javax.jms.Destination
- * @see javax.jms.Session
- * @see javax.jms.MessageProducer
- * @see javax.jms.MessageConsumer
+ * @see jakarta.jms.Destination
+ * @see jakarta.jms.Session
+ * @see jakarta.jms.MessageProducer
+ * @see jakarta.jms.MessageConsumer
*/
public interface JmsOperations {
diff --git a/spring-jms/src/main/java/org/springframework/jms/core/JmsTemplate.java b/spring-jms/src/main/java/org/springframework/jms/core/JmsTemplate.java
index a190fe48dcf..cdbc1bc0bb5 100644
--- a/spring-jms/src/main/java/org/springframework/jms/core/JmsTemplate.java
+++ b/spring-jms/src/main/java/org/springframework/jms/core/JmsTemplate.java
@@ -16,18 +16,18 @@
package org.springframework.jms.core;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.DeliveryMode;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageProducer;
-import javax.jms.Queue;
-import javax.jms.QueueBrowser;
-import javax.jms.Session;
-import javax.jms.TemporaryQueue;
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.DeliveryMode;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageConsumer;
+import jakarta.jms.MessageProducer;
+import jakarta.jms.Queue;
+import jakarta.jms.QueueBrowser;
+import jakarta.jms.Session;
+import jakarta.jms.TemporaryQueue;
import org.springframework.jms.JmsException;
import org.springframework.jms.connection.ConnectionFactoryUtils;
@@ -50,7 +50,7 @@ import org.springframework.util.Assert;
* domain.
*
* Default settings for JMS Sessions are "not transacted" and "auto-acknowledge".
- * As defined by the Java EE specification, the transaction and acknowledgement
+ * As defined by the Jakarta EE specification, the transaction and acknowledgement
* parameters are ignored when a JMS Session is created inside an active
* transaction, no matter if a JTA transaction or a Spring-managed transaction.
* To configure them for native JMS usage, specify appropriate values for
@@ -70,7 +70,7 @@ import org.springframework.util.Assert;
* {@link org.springframework.jms.connection.SingleConnectionFactory} as a
* decorator for your target {@code ConnectionFactory}, reusing a single
* JMS Connection in a thread-safe fashion; this is often good enough for the
- * purpose of sending messages via this template. In a Java EE environment,
+ * purpose of sending messages via this template. In a Jakarta EE environment,
* make sure that the {@code ConnectionFactory} is obtained from the
* application's environment naming context via JNDI; application servers
* typically expose pooled, transaction-aware factories there.
@@ -83,8 +83,8 @@ import org.springframework.util.Assert;
* @see #setPubSubDomain
* @see #setDestinationResolver
* @see #setMessageConverter
- * @see javax.jms.MessageProducer
- * @see javax.jms.MessageConsumer
+ * @see jakarta.jms.MessageProducer
+ * @see jakarta.jms.MessageConsumer
*/
public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations {
@@ -195,7 +195,7 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations
* @see #convertAndSend(Object)
* @see #convertAndSend(Object, MessagePostProcessor)
* @see #setDestinationResolver
- * @see #setDefaultDestination(javax.jms.Destination)
+ * @see #setDefaultDestination(jakarta.jms.Destination)
*/
public void setDefaultDestinationName(@Nullable String destinationName) {
this.defaultDestination = destinationName;
@@ -254,7 +254,7 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations
* Set whether message IDs are enabled. Default is "true".
*
This is only a hint to the JMS producer.
* See the JMS javadocs for details.
- * @see javax.jms.MessageProducer#setDisableMessageID
+ * @see jakarta.jms.MessageProducer#setDisableMessageID
*/
public void setMessageIdEnabled(boolean messageIdEnabled) {
this.messageIdEnabled = messageIdEnabled;
@@ -271,7 +271,7 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations
* Set whether message timestamps are enabled. Default is "true".
*
This is only a hint to the JMS producer.
* See the JMS javadocs for details.
- * @see javax.jms.MessageProducer#setDisableMessageTimestamp
+ * @see jakarta.jms.MessageProducer#setDisableMessageTimestamp
*/
public void setMessageTimestampEnabled(boolean messageTimestampEnabled) {
this.messageTimestampEnabled = messageTimestampEnabled;
@@ -287,7 +287,7 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations
/**
* Set whether to inhibit the delivery of messages published by its own connection.
* Default is "false".
- * @see javax.jms.Session#createConsumer(javax.jms.Destination, String, boolean)
+ * @see jakarta.jms.Session#createConsumer(jakarta.jms.Destination, String, boolean)
*/
public void setPubSubNoLocal(boolean pubSubNoLocal) {
this.pubSubNoLocal = pubSubNoLocal;
@@ -308,9 +308,9 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations
* to indicate that a receive operation should check if a message is
* immediately available without blocking.
* @see #receiveFromConsumer(MessageConsumer, long)
- * @see javax.jms.MessageConsumer#receive(long)
- * @see javax.jms.MessageConsumer#receiveNoWait()
- * @see javax.jms.MessageConsumer#receive()
+ * @see jakarta.jms.MessageConsumer#receive(long)
+ * @see jakarta.jms.MessageConsumer#receiveNoWait()
+ * @see jakarta.jms.MessageConsumer#receive()
*/
public void setReceiveTimeout(long receiveTimeout) {
this.receiveTimeout = receiveTimeout;
@@ -388,8 +388,8 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations
* mode accordingly, to either "PERSISTENT" (2) or "NON_PERSISTENT" (1).
*
Default is "true" a.k.a. delivery mode "PERSISTENT".
* @see #setDeliveryMode(int)
- * @see javax.jms.DeliveryMode#PERSISTENT
- * @see javax.jms.DeliveryMode#NON_PERSISTENT
+ * @see jakarta.jms.DeliveryMode#PERSISTENT
+ * @see jakarta.jms.DeliveryMode#NON_PERSISTENT
*/
public void setDeliveryPersistent(boolean deliveryPersistent) {
this.deliveryMode = (deliveryPersistent ? DeliveryMode.PERSISTENT : DeliveryMode.NON_PERSISTENT);
@@ -402,10 +402,10 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations
* this is only used when "isExplicitQosEnabled" equals "true".
* @param deliveryMode the delivery mode to use
* @see #isExplicitQosEnabled
- * @see javax.jms.DeliveryMode#PERSISTENT
- * @see javax.jms.DeliveryMode#NON_PERSISTENT
- * @see javax.jms.Message#DEFAULT_DELIVERY_MODE
- * @see javax.jms.MessageProducer#send(javax.jms.Message, int, int, long)
+ * @see jakarta.jms.DeliveryMode#PERSISTENT
+ * @see jakarta.jms.DeliveryMode#NON_PERSISTENT
+ * @see jakarta.jms.Message#DEFAULT_DELIVERY_MODE
+ * @see jakarta.jms.MessageProducer#send(jakarta.jms.Message, int, int, long)
*/
public void setDeliveryMode(int deliveryMode) {
this.deliveryMode = deliveryMode;
@@ -423,8 +423,8 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations
*
Since a default value may be defined administratively,
* this is only used when "isExplicitQosEnabled" equals "true".
* @see #isExplicitQosEnabled
- * @see javax.jms.Message#DEFAULT_PRIORITY
- * @see javax.jms.MessageProducer#send(javax.jms.Message, int, int, long)
+ * @see jakarta.jms.Message#DEFAULT_PRIORITY
+ * @see jakarta.jms.MessageProducer#send(jakarta.jms.Message, int, int, long)
*/
public void setPriority(int priority) {
this.priority = priority;
@@ -443,8 +443,8 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations
* this is only used when "isExplicitQosEnabled" equals "true".
* @param timeToLive the message's lifetime (in milliseconds)
* @see #isExplicitQosEnabled
- * @see javax.jms.Message#DEFAULT_TIME_TO_LIVE
- * @see javax.jms.MessageProducer#send(javax.jms.Message, int, int, long)
+ * @see jakarta.jms.Message#DEFAULT_TIME_TO_LIVE
+ * @see jakarta.jms.MessageProducer#send(jakarta.jms.Message, int, int, long)
*/
public void setTimeToLive(long timeToLive) {
this.timeToLive = timeToLive;
diff --git a/spring-jms/src/main/java/org/springframework/jms/core/MessageCreator.java b/spring-jms/src/main/java/org/springframework/jms/core/MessageCreator.java
index d14ec884a25..80cf2a7e85f 100644
--- a/spring-jms/src/main/java/org/springframework/jms/core/MessageCreator.java
+++ b/spring-jms/src/main/java/org/springframework/jms/core/MessageCreator.java
@@ -16,9 +16,9 @@
package org.springframework.jms.core;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.Session;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.Session;
/**
* Creates a JMS message given a {@link Session}.
@@ -27,7 +27,7 @@ import javax.jms.Session;
* of the {@link JmsTemplate} class.
*
*
Implementations do not need to concern themselves with
- * checked {@code JMSExceptions} (from the '{@code javax.jms}'
+ * checked {@code JMSExceptions} (from the '{@code jakarta.jms}'
* package) that may be thrown from operations they attempt. The
* {@code JmsTemplate} will catch and handle these
* {@code JMSExceptions} appropriately.
@@ -43,7 +43,7 @@ public interface MessageCreator {
* @param session the JMS {@link Session} to be used to create the
* {@code Message} (never {@code null})
* @return the {@code Message} to be sent
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
*/
Message createMessage(Session session) throws JMSException;
diff --git a/spring-jms/src/main/java/org/springframework/jms/core/MessagePostProcessor.java b/spring-jms/src/main/java/org/springframework/jms/core/MessagePostProcessor.java
index 84c4c5da944..962e5caf519 100644
--- a/spring-jms/src/main/java/org/springframework/jms/core/MessagePostProcessor.java
+++ b/spring-jms/src/main/java/org/springframework/jms/core/MessagePostProcessor.java
@@ -16,8 +16,8 @@
package org.springframework.jms.core;
-import javax.jms.JMSException;
-import javax.jms.Message;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
/**
* To be used with JmsTemplate's send method that converts an object to a message.
@@ -30,7 +30,7 @@ import javax.jms.Message;
* @author Mark Pollack
* @since 1.1
* @see JmsTemplate#convertAndSend(String, Object, MessagePostProcessor)
- * @see JmsTemplate#convertAndSend(javax.jms.Destination, Object, MessagePostProcessor)
+ * @see JmsTemplate#convertAndSend(jakarta.jms.Destination, Object, MessagePostProcessor)
* @see org.springframework.jms.support.converter.MessageConverter
*/
@FunctionalInterface
@@ -42,7 +42,7 @@ public interface MessagePostProcessor {
* @param message the JMS message from the MessageConverter
* @return a post-processed variant of the message, or simply the incoming
* message; never {@code null}
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
*/
Message postProcessMessage(Message message) throws JMSException;
diff --git a/spring-jms/src/main/java/org/springframework/jms/core/ProducerCallback.java b/spring-jms/src/main/java/org/springframework/jms/core/ProducerCallback.java
index 961ad4aa803..952d3a6d15a 100644
--- a/spring-jms/src/main/java/org/springframework/jms/core/ProducerCallback.java
+++ b/spring-jms/src/main/java/org/springframework/jms/core/ProducerCallback.java
@@ -16,9 +16,9 @@
package org.springframework.jms.core;
-import javax.jms.JMSException;
-import javax.jms.MessageProducer;
-import javax.jms.Session;
+import jakarta.jms.JMSException;
+import jakarta.jms.MessageProducer;
+import jakarta.jms.Session;
import org.springframework.lang.Nullable;
@@ -36,7 +36,7 @@ import org.springframework.lang.Nullable;
* @since 1.1
* @param the result type
* @see JmsTemplate#execute(ProducerCallback)
- * @see JmsTemplate#execute(javax.jms.Destination, ProducerCallback)
+ * @see JmsTemplate#execute(jakarta.jms.Destination, ProducerCallback)
* @see JmsTemplate#execute(String, ProducerCallback)
*/
@FunctionalInterface
@@ -50,7 +50,7 @@ public interface ProducerCallback {
* @param producer the JMS {@code MessageProducer} object to use
* @return a result object from working with the {@code Session}, if any
* (or {@code null} if none)
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
*/
@Nullable
T doInJms(Session session, MessageProducer producer) throws JMSException;
diff --git a/spring-jms/src/main/java/org/springframework/jms/core/SessionCallback.java b/spring-jms/src/main/java/org/springframework/jms/core/SessionCallback.java
index 8bbd1fe31f6..99dfe64b0ca 100644
--- a/spring-jms/src/main/java/org/springframework/jms/core/SessionCallback.java
+++ b/spring-jms/src/main/java/org/springframework/jms/core/SessionCallback.java
@@ -16,8 +16,8 @@
package org.springframework.jms.core;
-import javax.jms.JMSException;
-import javax.jms.Session;
+import jakarta.jms.JMSException;
+import jakarta.jms.Session;
import org.springframework.lang.Nullable;
@@ -41,7 +41,7 @@ public interface SessionCallback {
* @param session the JMS {@code Session}
* @return a result object from working with the {@code Session}, if any
* (or {@code null} if none)
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
*/
@Nullable
T doInJms(Session session) throws JMSException;
diff --git a/spring-jms/src/main/java/org/springframework/jms/core/support/JmsGatewaySupport.java b/spring-jms/src/main/java/org/springframework/jms/core/support/JmsGatewaySupport.java
index 0ce0650a00c..f85c3db9925 100644
--- a/spring-jms/src/main/java/org/springframework/jms/core/support/JmsGatewaySupport.java
+++ b/spring-jms/src/main/java/org/springframework/jms/core/support/JmsGatewaySupport.java
@@ -16,8 +16,7 @@
package org.springframework.jms.core.support;
-import javax.jms.ConnectionFactory;
-
+import jakarta.jms.ConnectionFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -54,7 +53,7 @@ public abstract class JmsGatewaySupport implements InitializingBean {
* Set the JMS connection factory to be used by the gateway.
* Will automatically create a JmsTemplate for the given ConnectionFactory.
* @see #createJmsTemplate
- * @see #setConnectionFactory(javax.jms.ConnectionFactory)
+ * @see #setConnectionFactory(jakarta.jms.ConnectionFactory)
*/
public final void setConnectionFactory(ConnectionFactory connectionFactory) {
this.jmsTemplate = createJmsTemplate(connectionFactory);
@@ -83,7 +82,7 @@ public abstract class JmsGatewaySupport implements InitializingBean {
/**
* Set the JmsTemplate for the gateway.
- * @see #setConnectionFactory(javax.jms.ConnectionFactory)
+ * @see #setConnectionFactory(jakarta.jms.ConnectionFactory)
*/
public final void setJmsTemplate(@Nullable JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java
index b7e1734bb99..30ee11c812b 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java
@@ -20,8 +20,8 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-import javax.jms.Connection;
-import javax.jms.JMSException;
+import jakarta.jms.Connection;
+import jakarta.jms.JMSException;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
@@ -94,7 +94,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess
* Note that client IDs need to be unique among all active Connections
* of the underlying JMS provider. Furthermore, a client ID can only be
* assigned if the original ConnectionFactory hasn't already assigned one.
- * @see javax.jms.Connection#setClientID
+ * @see jakarta.jms.Connection#setClientID
* @see #setConnectionFactory
*/
public void setClientId(@Nullable String clientId) {
@@ -191,7 +191,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess
/**
* Initialize this container.
- *
Creates a JMS Connection, starts the {@link javax.jms.Connection}
+ *
Creates a JMS Connection, starts the {@link jakarta.jms.Connection}
* (if {@link #setAutoStartup(boolean) "autoStartup"} hasn't been turned off),
* and calls {@link #doInitialize()}.
* @throws org.springframework.jms.JmsException if startup failed
@@ -439,7 +439,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess
/**
* Start the shared Connection.
* @throws JMSException if thrown by JMS API methods
- * @see javax.jms.Connection#start()
+ * @see jakarta.jms.Connection#start()
*/
protected void startSharedConnection() throws JMSException {
synchronized (this.sharedConnectionMonitor) {
@@ -448,7 +448,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess
try {
this.sharedConnection.start();
}
- catch (javax.jms.IllegalStateException ex) {
+ catch (jakarta.jms.IllegalStateException ex) {
logger.debug("Ignoring Connection start exception - assuming already started: " + ex);
}
}
@@ -458,7 +458,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess
/**
* Stop the shared Connection.
* @throws JMSException if thrown by JMS API methods
- * @see javax.jms.Connection#start()
+ * @see jakarta.jms.Connection#start()
*/
protected void stopSharedConnection() throws JMSException {
synchronized (this.sharedConnectionMonitor) {
@@ -467,7 +467,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess
try {
this.sharedConnection.stop();
}
- catch (javax.jms.IllegalStateException ex) {
+ catch (jakarta.jms.IllegalStateException ex) {
logger.debug("Ignoring Connection stop exception - assuming already stopped: " + ex);
}
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java
index 534e12285f0..eb4c7e4e46c 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractMessageListenerContainer.java
@@ -16,16 +16,16 @@
package org.springframework.jms.listener;
-import javax.jms.Connection;
-import javax.jms.Destination;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageListener;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.Topic;
+import jakarta.jms.Connection;
+import jakarta.jms.Destination;
+import jakarta.jms.ExceptionListener;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageConsumer;
+import jakarta.jms.MessageListener;
+import jakarta.jms.Queue;
+import jakarta.jms.Session;
+import jakarta.jms.Topic;
import org.springframework.jms.support.JmsUtils;
import org.springframework.jms.support.QosSettings;
@@ -35,12 +35,12 @@ import org.springframework.util.ErrorHandler;
/**
* Abstract base class for Spring message listener container implementations.
- * Can either host a standard JMS {@link javax.jms.MessageListener} or Spring's
+ * Can either host a standard JMS {@link jakarta.jms.MessageListener} or Spring's
* {@link SessionAwareMessageListener} for actual message processing.
*
*
Usually holds a single JMS {@link Connection} that all listeners are supposed
* to be registered on, which is the standard JMS way of managing listener sessions.
- * Can alternatively also be used with a fresh Connection per listener, for Java EE
+ * Can alternatively also be used with a fresh Connection per listener, for Jakarta EE
* style XA-aware JMS messaging. The actual registration process is up to concrete
* subclasses.
*
@@ -99,7 +99,7 @@ import org.springframework.util.ErrorHandler;
* supported by {@link DefaultMessageListenerContainer}, through specifying
* an external "transactionManager" (typically a
* {@link org.springframework.transaction.jta.JtaTransactionManager}, with
- * a corresponding XA-aware JMS {@link javax.jms.ConnectionFactory} passed in
+ * a corresponding XA-aware JMS {@link jakarta.jms.ConnectionFactory} passed in
* as "connectionFactory").
*
* Note that XA transaction coordination adds significant runtime overhead,
@@ -116,7 +116,7 @@ import org.springframework.util.ErrorHandler;
* Alternatively, specify a
* {@link org.springframework.transaction.jta.JtaTransactionManager} as
* "transactionManager" for a fully XA-aware JMS provider - typically when
- * running on a Java EE server, but also for other environments with a JTA
+ * running on a Jakarta EE server, but also for other environments with a JTA
* transaction manager present. This will give full "exactly-once" guarantees
* without custom duplicate message checks, at the price of additional
* runtime processing overhead.
@@ -132,7 +132,7 @@ import org.springframework.util.ErrorHandler;
* @author Stephane Nicoll
* @since 2.0
* @see #setMessageListener
- * @see javax.jms.MessageListener
+ * @see jakarta.jms.MessageListener
* @see SessionAwareMessageListener
* @see #handleListenerException
* @see DefaultMessageListenerContainer
@@ -222,7 +222,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
* container picking up the new destination immediately (works e.g. with
* DefaultMessageListenerContainer, as long as the cache level is less than
* CACHE_CONSUMER). However, this is considered advanced usage; use it with care!
- * @see #setDestination(javax.jms.Destination)
+ * @see #setDestination(jakarta.jms.Destination)
*/
public void setDestinationName(@Nullable String destinationName) {
this.destination = destinationName;
@@ -280,7 +280,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
* CACHE_CONSUMER). However, this is considered advanced usage; use it with care!
* @throws IllegalArgumentException if the supplied listener is not a
* {@link MessageListener} or a {@link SessionAwareMessageListener}
- * @see javax.jms.MessageListener
+ * @see jakarta.jms.MessageListener
* @see SessionAwareMessageListener
*/
public void setMessageListener(@Nullable Object messageListener) {
@@ -307,7 +307,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
* @param messageListener the message listener object to check
* @throws IllegalArgumentException if the supplied listener is not a
* {@link MessageListener} or a {@link SessionAwareMessageListener}
- * @see javax.jms.MessageListener
+ * @see jakarta.jms.MessageListener
* @see SessionAwareMessageListener
*/
protected void checkMessageListener(@Nullable Object messageListener) {
@@ -449,7 +449,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
* Set whether to inhibit the delivery of messages published by its own connection.
* Default is "false".
* @since 4.1
- * @see javax.jms.Session#createConsumer(javax.jms.Destination, String, boolean)
+ * @see jakarta.jms.Session#createConsumer(jakarta.jms.Destination, String, boolean)
*/
public void setPubSubNoLocal(boolean pubSubNoLocal) {
this.pubSubNoLocal = pubSubNoLocal;
@@ -478,8 +478,8 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
}
/**
- * Return whether the Publish/Subscribe domain ({@link javax.jms.Topic Topics}) is used
- * for replies. Otherwise, the Point-to-Point domain ({@link javax.jms.Queue Queues})
+ * Return whether the Publish/Subscribe domain ({@link jakarta.jms.Topic Topics}) is used
+ * for replies. Otherwise, the Point-to-Point domain ({@link jakarta.jms.Queue Queues})
* is used.
* @since 4.2
*/
@@ -755,7 +755,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
* @param listener the JMS MessageListener to invoke
* @param message the received JMS Message
* @throws JMSException if thrown by JMS API methods
- * @see javax.jms.MessageListener#onMessage
+ * @see jakarta.jms.MessageListener#onMessage
*/
protected void doInvokeListener(MessageListener listener, Message message) throws JMSException {
listener.onMessage(message);
@@ -765,7 +765,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
* Perform a commit or message acknowledgement, as appropriate.
* @param session the JMS Session to commit
* @param message the Message to acknowledge
- * @throws javax.jms.JMSException in case of commit failure
+ * @throws jakarta.jms.JMSException in case of commit failure
*/
protected void commitIfNecessary(Session session, @Nullable Message message) throws JMSException {
// Commit session or acknowledge message.
@@ -784,7 +784,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
/**
* Perform a rollback, if appropriate.
* @param session the JMS Session to rollback
- * @throws javax.jms.JMSException in case of a rollback error
+ * @throws jakarta.jms.JMSException in case of a rollback error
*/
protected void rollbackIfNecessary(Session session) throws JMSException {
if (session.getTransacted()) {
@@ -802,7 +802,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
* Perform a rollback, handling rollback exceptions properly.
* @param session the JMS Session to rollback
* @param ex the thrown application exception or error
- * @throws javax.jms.JMSException in case of a rollback error
+ * @throws jakarta.jms.JMSException in case of a rollback error
*/
protected void rollbackOnExceptionIfNecessary(Session session, Throwable ex) throws JMSException {
try {
@@ -850,7 +850,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
* @param session the JMS Session to create a MessageConsumer for
* @param destination the JMS Destination to create a MessageConsumer for
* @return the new JMS MessageConsumer
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
*/
protected MessageConsumer createConsumer(Session session, Destination destination) throws JMSException {
if (isPubSubDomain() && destination instanceof Topic) {
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java
index 0a6287169a4..e681aaef1b1 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.java
@@ -16,12 +16,12 @@
package org.springframework.jms.listener;
-import javax.jms.Connection;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.Session;
+import jakarta.jms.Connection;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageConsumer;
+import jakarta.jms.Session;
import org.springframework.jms.connection.ConnectionFactoryUtils;
import org.springframework.jms.connection.JmsResourceHolder;
@@ -38,7 +38,7 @@ import org.springframework.util.Assert;
/**
* Base class for listener container implementations which are based on polling.
- * Provides support for listener handling based on {@link javax.jms.MessageConsumer},
+ * Provides support for listener handling based on {@link jakarta.jms.MessageConsumer},
* optionally participating in externally managed transactions.
*
* This listener container variant is built for repeated polling attempts,
@@ -48,7 +48,7 @@ import org.springframework.util.Assert;
* configured through the {@link #setReceiveTimeout "receiveTimeout"} property.
*
*
The underlying mechanism is based on standard JMS MessageConsumer handling,
- * which is perfectly compatible with both native JMS and JMS in a Java EE environment.
+ * which is perfectly compatible with both native JMS and JMS in a Jakarta EE environment.
* Neither the JMS {@code MessageConsumer.setMessageListener} facility nor the JMS
* ServerSessionPool facility is required. A further advantage of this approach is
* full control over the listening process, allowing for custom scaling and throttling
@@ -59,7 +59,7 @@ import org.springframework.util.Assert;
* {@link org.springframework.transaction.PlatformTransactionManager} into the
* {@link #setTransactionManager "transactionManager"} property. This will usually
* be a {@link org.springframework.transaction.jta.JtaTransactionManager} in a
- * Java EE environment, in combination with a JTA-aware JMS ConnectionFactory
+ * Jakarta EE environment, in combination with a JTA-aware JMS ConnectionFactory
* obtained from JNDI (check your application server's documentation).
*
*
This base class does not assume any specific mechanism for asynchronous
@@ -165,9 +165,9 @@ public abstract class AbstractPollingMessageListenerContainer extends AbstractMe
* discouraged since such a listener container cannot cleanly shut down.
* A negative value such as -1 indicates a no-wait receive operation.
* @see #receiveFromConsumer(MessageConsumer, long)
- * @see javax.jms.MessageConsumer#receive(long)
- * @see javax.jms.MessageConsumer#receiveNoWait()
- * @see javax.jms.MessageConsumer#receive()
+ * @see jakarta.jms.MessageConsumer#receive(long)
+ * @see jakarta.jms.MessageConsumer#receiveNoWait()
+ * @see jakarta.jms.MessageConsumer#receive()
* @see #setTransactionTimeout
*/
public void setReceiveTimeout(long receiveTimeout) {
@@ -211,7 +211,7 @@ public abstract class AbstractPollingMessageListenerContainer extends AbstractMe
* registering a MessageListener for the specified listener.
* @param session the JMS Session to work on
* @return the MessageConsumer
- * @throws javax.jms.JMSException if thrown by JMS methods
+ * @throws jakarta.jms.JMSException if thrown by JMS methods
* @see #receiveAndExecute
*/
protected MessageConsumer createListenerConsumer(Session session) throws JMSException {
@@ -266,7 +266,7 @@ public abstract class AbstractPollingMessageListenerContainer extends AbstractMe
* @param status the TransactionStatus (may be {@code null})
* @return whether a message has been received
* @throws JMSException if thrown by JMS methods
- * @see #doExecuteListener(javax.jms.Session, javax.jms.Message)
+ * @see #doExecuteListener(jakarta.jms.Session, jakarta.jms.Message)
*/
protected boolean doReceiveAndExecute(Object invoker, @Nullable Session session,
@Nullable MessageConsumer consumer, @Nullable TransactionStatus status) throws JMSException {
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java
index 856be8c914d..41fc11034f6 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java
@@ -20,10 +20,10 @@ import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.Executor;
-import javax.jms.Connection;
-import javax.jms.JMSException;
-import javax.jms.MessageConsumer;
-import javax.jms.Session;
+import jakarta.jms.Connection;
+import jakarta.jms.JMSException;
+import jakarta.jms.MessageConsumer;
+import jakarta.jms.Session;
import org.springframework.core.Constants;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
@@ -45,7 +45,7 @@ import org.springframework.util.backoff.FixedBackOff;
* Message listener container variant that uses plain JMS client APIs, specifically
* a loop of {@code MessageConsumer.receive()} calls that also allow for
* transactional reception of messages (registering them with XA transactions).
- * Designed to work in a native JMS environment as well as in a Java EE environment,
+ * Designed to work in a native JMS environment as well as in a Jakarta EE environment,
* with only minimal differences in configuration.
*
*
This is a simple but nevertheless powerful form of message listener container.
@@ -62,7 +62,7 @@ import org.springframework.util.backoff.FixedBackOff;
* abstraction. By default, the specified number of invoker tasks will be created
* on startup, according to the {@link #setConcurrentConsumers "concurrentConsumers"}
* setting. Specify an alternative {@code TaskExecutor} to integrate with an existing
- * thread pool facility (such as a Java EE server's), for example using a
+ * thread pool facility (such as a Jakarta EE server's), for example using a
* {@link org.springframework.scheduling.commonj.WorkManagerTaskExecutor CommonJ WorkManager}.
* With a native JMS setup, each of those listener threads is going to use a
* cached JMS {@code Session} and {@code MessageConsumer} (only refreshed in case
@@ -73,11 +73,11 @@ import org.springframework.util.backoff.FixedBackOff;
* {@link org.springframework.transaction.PlatformTransactionManager} into the
* {@link #setTransactionManager "transactionManager"} property. This will usually
* be a {@link org.springframework.transaction.jta.JtaTransactionManager} in a
- * Java EE environment, in combination with a JTA-aware JMS {@code ConnectionFactory}
- * obtained from JNDI (check your Java EE server's documentation). Note that this
+ * Jakarta EE environment, in combination with a JTA-aware JMS {@code ConnectionFactory}
+ * obtained from JNDI (check your Jakarta EE server's documentation). Note that this
* listener container will automatically reobtain all JMS handles for each transaction
* in case an external transaction manager is specified, for compatibility with
- * all Java EE servers (in particular JBoss). This non-caching behavior can be
+ * all Jakarta EE servers (in particular JBoss). This non-caching behavior can be
* overridden through the {@link #setCacheLevel "cacheLevel"} /
* {@link #setCacheLevelName "cacheLevelName"} property, enforcing caching of
* the {@code Connection} (or also {@code Session} and {@code MessageConsumer})
@@ -119,7 +119,7 @@ import org.springframework.util.backoff.FixedBackOff;
* @since 2.0
* @see #setTransactionManager
* @see #setCacheLevel
- * @see javax.jms.MessageConsumer#receive(long)
+ * @see jakarta.jms.MessageConsumer#receive(long)
* @see SimpleMessageListenerContainer
* @see org.springframework.jms.listener.endpoint.JmsMessageEndpointManager
*/
@@ -219,7 +219,7 @@ public class DefaultMessageListenerContainer extends AbstractPollingMessageListe
* of concurrent consumers.
*
Specify an alternative {@code TaskExecutor} for integration with an existing
* thread pool. Note that this really only adds value if the threads are
- * managed in a specific fashion, for example within a Java EE environment.
+ * managed in a specific fashion, for example within a Jakarta EE environment.
* A plain thread pool does not add much value, as this listener container
* will occupy a number of threads for its entire lifetime.
* @see #setConcurrentConsumers
@@ -273,7 +273,7 @@ public class DefaultMessageListenerContainer extends AbstractPollingMessageListe
*
Default is {@link #CACHE_NONE} if an external transaction manager has been specified
* (to reobtain all resources freshly within the scope of the external transaction),
* and {@link #CACHE_CONSUMER} otherwise (operating with local JMS resources).
- *
Some Java EE servers only register their JMS resources with an ongoing XA
+ *
Some Jakarta EE servers only register their JMS resources with an ongoing XA
* transaction in case of a freshly obtained JMS {@code Connection} and {@code Session},
* which is why this listener container by default does not cache any of those.
* However, depending on the rules of your server with respect to the caching
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/LocallyExposedJmsResourceHolder.java b/spring-jms/src/main/java/org/springframework/jms/listener/LocallyExposedJmsResourceHolder.java
index 2adad4f3cdb..c0148da51fc 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/LocallyExposedJmsResourceHolder.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/LocallyExposedJmsResourceHolder.java
@@ -16,7 +16,7 @@
package org.springframework.jms.listener;
-import javax.jms.Session;
+import jakarta.jms.Session;
import org.springframework.jms.connection.JmsResourceHolder;
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/MessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/MessageListenerContainer.java
index 89bfe78daac..8610e2f7e4a 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/MessageListenerContainer.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/MessageListenerContainer.java
@@ -40,7 +40,7 @@ public interface MessageListenerContainer extends SmartLifecycle {
/**
* Return the {@link MessageConverter} that can be used to
- * convert {@link javax.jms.Message}, if any.
+ * convert {@link jakarta.jms.Message}, if any.
*/
@Nullable
MessageConverter getMessageConverter();
@@ -53,15 +53,15 @@ public interface MessageListenerContainer extends SmartLifecycle {
DestinationResolver getDestinationResolver();
/**
- * Return whether the Publish/Subscribe domain ({@link javax.jms.Topic Topics}) is used.
- * Otherwise, the Point-to-Point domain ({@link javax.jms.Queue Queues}) is used.
+ * Return whether the Publish/Subscribe domain ({@link jakarta.jms.Topic Topics}) is used.
+ * Otherwise, the Point-to-Point domain ({@link jakarta.jms.Queue Queues}) is used.
*/
boolean isPubSubDomain();
/**
* Return whether the reply destination uses Publish/Subscribe domain
- * ({@link javax.jms.Topic Topics}). Otherwise, the Point-to-Point domain
- * ({@link javax.jms.Queue Queues}) is used.
+ * ({@link jakarta.jms.Topic Topics}). Otherwise, the Point-to-Point domain
+ * ({@link jakarta.jms.Queue Queues}) is used.
*
By default, the value is identical to {@link #isPubSubDomain()}.
*/
boolean isReplyPubSubDomain();
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/SessionAwareMessageListener.java b/spring-jms/src/main/java/org/springframework/jms/listener/SessionAwareMessageListener.java
index af07dfae5a6..f2ba17487c0 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/SessionAwareMessageListener.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/SessionAwareMessageListener.java
@@ -16,12 +16,12 @@
package org.springframework.jms.listener;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.Session;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.Session;
/**
- * Variant of the standard JMS {@link javax.jms.MessageListener} interface,
+ * Variant of the standard JMS {@link jakarta.jms.MessageListener} interface,
* offering not only the received Message but also the underlying
* JMS Session object. The latter can be used to send reply messages,
* without the need to access an external Connection/Session,
@@ -40,7 +40,7 @@ import javax.jms.Session;
* @see DefaultMessageListenerContainer
* @see SimpleMessageListenerContainer
* @see org.springframework.jms.listener.endpoint.JmsMessageEndpointManager
- * @see javax.jms.MessageListener
+ * @see jakarta.jms.MessageListener
*/
@FunctionalInterface
public interface SessionAwareMessageListener {
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/SimpleMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/SimpleMessageListenerContainer.java
index 469dfd43c87..b45de7781a6 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/SimpleMessageListenerContainer.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/SimpleMessageListenerContainer.java
@@ -20,14 +20,14 @@ import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.Executor;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.Session;
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.Destination;
+import jakarta.jms.ExceptionListener;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageConsumer;
+import jakarta.jms.Session;
import org.springframework.jms.support.JmsUtils;
import org.springframework.lang.Nullable;
@@ -59,7 +59,7 @@ import org.springframework.util.Assert;
*
* @author Juergen Hoeller
* @since 2.0
- * @see javax.jms.MessageConsumer#setMessageListener
+ * @see jakarta.jms.MessageConsumer#setMessageListener
* @see DefaultMessageListenerContainer
* @see org.springframework.jms.listener.endpoint.JmsMessageEndpointManager
*/
@@ -174,7 +174,7 @@ public class SimpleMessageListenerContainer extends AbstractMessageListenerConta
* underlying Session. As a consequence, it is not recommended to use
* this setting with a {@link SessionAwareMessageListener}, at least not
* if the latter performs actual work on the given Session. A standard
- * {@link javax.jms.MessageListener} will work fine, in general.
+ * {@link jakarta.jms.MessageListener} will work fine, in general.
* @see #setConcurrentConsumers
* @see org.springframework.core.task.SimpleAsyncTaskExecutor
* @see org.springframework.scheduling.commonj.WorkManagerTaskExecutor
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/SubscriptionNameProvider.java b/spring-jms/src/main/java/org/springframework/jms/listener/SubscriptionNameProvider.java
index c8622a78c06..d1178618d9d 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/SubscriptionNameProvider.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/SubscriptionNameProvider.java
@@ -21,7 +21,7 @@ package org.springframework.jms.listener;
* name for a durable subscription that they might be registered with. Otherwise
* the listener class name will be used as a default subscription name.
*
- * Applies to {@link javax.jms.MessageListener} objects as well as to
+ *
Applies to {@link jakarta.jms.MessageListener} objects as well as to
* {@link SessionAwareMessageListener} objects and plain listener methods
* (as supported by {@link org.springframework.jms.listener.adapter.MessageListenerAdapter}.
*
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/AbstractAdaptableMessageListener.java b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/AbstractAdaptableMessageListener.java
index e4b9cd44261..0bfec387262 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/AbstractAdaptableMessageListener.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/AbstractAdaptableMessageListener.java
@@ -16,15 +16,14 @@
package org.springframework.jms.listener.adapter;
-import javax.jms.BytesMessage;
-import javax.jms.Destination;
-import javax.jms.InvalidDestinationException;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.jms.MessageProducer;
-import javax.jms.Session;
-
+import jakarta.jms.BytesMessage;
+import jakarta.jms.Destination;
+import jakarta.jms.InvalidDestinationException;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageListener;
+import jakarta.jms.MessageProducer;
+import jakarta.jms.Session;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -96,7 +95,7 @@ public abstract class AbstractAdaptableMessageListener
* "JMSReplyTo" field.
*
Alternatively, specify a JMS Destination object as "defaultResponseDestination".
* @see #setDestinationResolver
- * @see #setDefaultResponseDestination(javax.jms.Destination)
+ * @see #setDefaultResponseDestination(jakarta.jms.Destination)
*/
public void setDefaultResponseQueueName(String destinationName) {
this.defaultResponseDestination = new DestinationNameHolder(destinationName, false);
@@ -108,7 +107,7 @@ public abstract class AbstractAdaptableMessageListener
* "JMSReplyTo" field.
*
Alternatively, specify a JMS Destination object as "defaultResponseDestination".
* @see #setDestinationResolver
- * @see #setDefaultResponseDestination(javax.jms.Destination)
+ * @see #setDefaultResponseDestination(jakarta.jms.Destination)
*/
public void setDefaultResponseTopicName(String destinationName) {
this.defaultResponseDestination = new DestinationNameHolder(destinationName, true);
@@ -139,9 +138,9 @@ public abstract class AbstractAdaptableMessageListener
* listener method arguments, and objects returned from listener
* methods back to JMS messages.
*
The default converter is a {@link SimpleMessageConverter}, which is able
- * to handle {@link javax.jms.BytesMessage BytesMessages},
- * {@link javax.jms.TextMessage TextMessages} and
- * {@link javax.jms.ObjectMessage ObjectMessages}.
+ * to handle {@link jakarta.jms.BytesMessage BytesMessages},
+ * {@link jakarta.jms.TextMessage TextMessages} and
+ * {@link jakarta.jms.ObjectMessage ObjectMessages}.
*/
public void setMessageConverter(@Nullable MessageConverter messageConverter) {
this.messageConverter = messageConverter;
@@ -208,7 +207,7 @@ public abstract class AbstractAdaptableMessageListener
* message listener container) for handling result objects as well.
* @param message the incoming JMS message
* @see #handleListenerException
- * @see #onMessage(javax.jms.Message, javax.jms.Session)
+ * @see #onMessage(jakarta.jms.Message, jakarta.jms.Session)
*/
@Override
public void onMessage(Message message) {
@@ -230,7 +229,7 @@ public abstract class AbstractAdaptableMessageListener
* In case of the Spring {@link SessionAwareMessageListener} mechanism,
* exceptions get handled by the caller instead.
* @param ex the exception to handle
- * @see #onMessage(javax.jms.Message)
+ * @see #onMessage(jakarta.jms.Message)
*/
protected void handleListenerException(Throwable ex) {
logger.error("Listener execution failed", ex);
@@ -343,7 +342,7 @@ public abstract class AbstractAdaptableMessageListener
* @param request the original incoming JMS message
* @param response the outgoing JMS message about to be sent
* @throws JMSException if thrown by JMS API methods
- * @see javax.jms.Message#setJMSCorrelationID
+ * @see jakarta.jms.Message#setJMSCorrelationID
*/
protected void postProcessResponse(Message request, Message response) throws JMSException {
String correlation = request.getJMSCorrelationID();
@@ -373,15 +372,15 @@ public abstract class AbstractAdaptableMessageListener
* it is returned; if it is {@code null}, then the configured
* {@link #resolveDefaultResponseDestination default response destination}
* is returned; if this too is {@code null}, then an
- * {@link javax.jms.InvalidDestinationException} is thrown.
+ * {@link jakarta.jms.InvalidDestinationException} is thrown.
* @param request the original incoming JMS message
* @param response the outgoing JMS message about to be sent
* @param session the JMS Session to operate on
* @return the response destination (never {@code null})
* @throws JMSException if thrown by JMS API methods
- * @throws javax.jms.InvalidDestinationException if no {@link Destination} can be determined
+ * @throws jakarta.jms.InvalidDestinationException if no {@link Destination} can be determined
* @see #setDefaultResponseDestination
- * @see javax.jms.Message#getJMSReplyTo()
+ * @see jakarta.jms.Message#getJMSReplyTo()
*/
protected Destination getResponseDestination(Message request, Message response, Session session)
throws JMSException {
@@ -401,7 +400,7 @@ public abstract class AbstractAdaptableMessageListener
* Resolve the default response destination into a JMS {@link Destination}, using this
* accessor's {@link DestinationResolver} in case of a destination name.
* @return the located {@link Destination}
- * @throws javax.jms.JMSException if resolution failed
+ * @throws jakarta.jms.JMSException if resolution failed
* @see #setDefaultResponseDestination
* @see #setDefaultResponseQueueName
* @see #setDefaultResponseTopicName
@@ -426,8 +425,8 @@ public abstract class AbstractAdaptableMessageListener
* @param session the JMS session to operate on
* @throws JMSException if thrown by JMS API methods
* @see #postProcessProducer
- * @see javax.jms.Session#createProducer
- * @see javax.jms.MessageProducer#send
+ * @see jakarta.jms.Session#createProducer
+ * @see jakarta.jms.MessageProducer#send
*/
protected void sendResponse(Session session, Destination destination, Message response) throws JMSException {
MessageProducer producer = session.createProducer(destination);
@@ -460,13 +459,13 @@ public abstract class AbstractAdaptableMessageListener
/**
* A {@link MessagingMessageConverter} that lazily invokes payload extraction and
- * delegates it to {@link #extractMessage(javax.jms.Message)} in order to enforce
+ * delegates it to {@link #extractMessage(jakarta.jms.Message)} in order to enforce
* backward compatibility.
*/
private class MessagingMessageConverterAdapter extends MessagingMessageConverter {
@Override
- public Object fromMessage(javax.jms.Message message) throws JMSException, MessageConversionException {
+ public Object fromMessage(jakarta.jms.Message message) throws JMSException, MessageConversionException {
return new LazyResolutionMessage(message);
}
@@ -505,7 +504,7 @@ public abstract class AbstractAdaptableMessageListener
protected class LazyResolutionMessage implements org.springframework.messaging.Message {
- private final javax.jms.Message message;
+ private final jakarta.jms.Message message;
@Nullable
private Object payload;
@@ -513,7 +512,7 @@ public abstract class AbstractAdaptableMessageListener
@Nullable
private MessageHeaders headers;
- public LazyResolutionMessage(javax.jms.Message message) {
+ public LazyResolutionMessage(jakarta.jms.Message message) {
this.message = message;
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/JmsResponse.java b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/JmsResponse.java
index a1f425774e5..16564a3b6c2 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/JmsResponse.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/JmsResponse.java
@@ -16,9 +16,9 @@
package org.springframework.jms.listener.adapter;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Session;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Session;
import org.springframework.jms.support.destination.DestinationResolver;
import org.springframework.lang.Nullable;
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessageListenerAdapter.java b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessageListenerAdapter.java
index 2743b70439c..1cf7c230d83 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessageListenerAdapter.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessageListenerAdapter.java
@@ -18,10 +18,10 @@ package org.springframework.jms.listener.adapter;
import java.lang.reflect.InvocationTargetException;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.jms.Session;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageListener;
+import jakarta.jms.Session;
import org.springframework.jms.listener.SessionAwareMessageListener;
import org.springframework.jms.listener.SubscriptionNameProvider;
@@ -51,7 +51,7 @@ import org.springframework.util.ObjectUtils;
* message content type such as {@code String} or byte array), it will get
* wrapped in a JMS {@code Message} and sent to the response destination
* (either the JMS "reply-to" destination or a
- * {@link #setDefaultResponseDestination(javax.jms.Destination) specified default
+ * {@link #setDefaultResponseDestination(jakarta.jms.Destination) specified default
* destination}).
*
* Note: The sending of response messages is only available when
@@ -86,7 +86,7 @@ import org.springframework.util.ObjectUtils;
*
* This next example illustrates a {@code Message} delegate
* that just consumes the {@code String} contents of
- * {@link javax.jms.TextMessage TextMessages}. Notice also how the
+ * {@link jakarta.jms.TextMessage TextMessages}. Notice also how the
* name of the {@code Message} handling method is different from the
* {@link #ORIGINAL_DEFAULT_LISTENER_METHOD original} (this will have to
* be configured in the attendant bean definition). Again, no {@code Message}
@@ -98,9 +98,9 @@ import org.springframework.util.ObjectUtils;
*
* This final example illustrates a {@code Message} delegate
* that just consumes the {@code String} contents of
- * {@link javax.jms.TextMessage TextMessages}. Notice how the return type
+ * {@link jakarta.jms.TextMessage TextMessages}. Notice how the return type
* of this method is {@code String}: This will result in the configured
- * {@link MessageListenerAdapter} sending a {@link javax.jms.TextMessage} in response.
+ * {@link MessageListenerAdapter} sending a {@link jakarta.jms.TextMessage} in response.
*
*
public interface ResponsiveTextMessageContentDelegate {
* String handleMessage(String text);
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapter.java b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapter.java
index 91072e40cb5..c858d2b1519 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapter.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapter.java
@@ -16,8 +16,8 @@
package org.springframework.jms.listener.adapter;
-import javax.jms.JMSException;
-import javax.jms.Session;
+import jakarta.jms.JMSException;
+import jakarta.jms.Session;
import org.springframework.core.MethodParameter;
import org.springframework.jms.support.JmsHeaderMapper;
@@ -31,14 +31,14 @@ import org.springframework.messaging.support.MessageBuilder;
import org.springframework.util.Assert;
/**
- * A {@link javax.jms.MessageListener} adapter that invokes a configurable
+ * A {@link jakarta.jms.MessageListener} adapter that invokes a configurable
* {@link InvocableHandlerMethod}.
*
- * Wraps the incoming {@link javax.jms.Message} to Spring's {@link Message}
+ *
Wraps the incoming {@link jakarta.jms.Message} to Spring's {@link Message}
* abstraction, copying the JMS standard headers using a configurable
* {@link JmsHeaderMapper}.
*
- *
The original {@link javax.jms.Message} and the {@link javax.jms.Session}
+ *
The original {@link jakarta.jms.Message} and the {@link jakarta.jms.Session}
* are provided as additional arguments so that these can be injected as
* method arguments if necessary.
*
@@ -56,7 +56,7 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis
/**
* Set the {@link InvocableHandlerMethod} to use to invoke the method
- * processing an incoming {@link javax.jms.Message}.
+ * processing an incoming {@link jakarta.jms.Message}.
*/
public void setHandlerMethod(InvocableHandlerMethod handlerMethod) {
this.handlerMethod = handlerMethod;
@@ -69,7 +69,7 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis
@Override
- public void onMessage(javax.jms.Message jmsMessage, @Nullable Session session) throws JMSException {
+ public void onMessage(jakarta.jms.Message jmsMessage, @Nullable Session session) throws JMSException {
Message> message = toMessagingMessage(jmsMessage);
if (logger.isDebugEnabled()) {
logger.debug("Processing [" + message + "]");
@@ -94,7 +94,7 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis
AbstractMessageSendingTemplate.CONVERSION_HINT_HEADER, returnType).build();
}
- protected Message> toMessagingMessage(javax.jms.Message jmsMessage) {
+ protected Message> toMessagingMessage(jakarta.jms.Message jmsMessage) {
try {
return (Message>) getMessagingMessageConverter().fromMessage(jmsMessage);
}
@@ -108,7 +108,7 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis
* with a dedicated error message.
*/
@Nullable
- private Object invokeHandler(javax.jms.Message jmsMessage, @Nullable Session session, Message> message) {
+ private Object invokeHandler(jakarta.jms.Message jmsMessage, @Nullable Session session, Message> message) {
InvocableHandlerMethod handlerMethod = getHandlerMethod();
try {
return handlerMethod.invoke(message, jmsMessage, session);
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactory.java b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactory.java
index 1702070063b..810d848138c 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactory.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactory.java
@@ -16,9 +16,8 @@
package org.springframework.jms.listener.endpoint;
-import javax.jms.Session;
-import javax.resource.spi.ResourceAdapter;
-
+import jakarta.jms.Session;
+import jakarta.resource.spi.ResourceAdapter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecConfig.java b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecConfig.java
index ba2f6da68a9..9109654e2ff 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecConfig.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecConfig.java
@@ -16,7 +16,7 @@
package org.springframework.jms.listener.endpoint;
-import javax.jms.Session;
+import jakarta.jms.Session;
import org.springframework.core.Constants;
import org.springframework.jms.support.QosSettings;
@@ -36,11 +36,11 @@ import org.springframework.lang.Nullable;
* @since 2.5
* @see JmsActivationSpecFactory
* @see JmsMessageEndpointManager#setActivationSpecConfig
- * @see javax.resource.spi.ResourceAdapter#endpointActivation
+ * @see jakarta.resource.spi.ResourceAdapter#endpointActivation
*/
public class JmsActivationSpecConfig {
- /** Constants instance for {@code javax.jms.Session}. */
+ /** Constants instance for {@code jakarta.jms.Session}. */
private static final Constants sessionConstants = new Constants(Session.class);
@@ -184,10 +184,10 @@ public class JmsActivationSpecConfig {
* supports "SESSION_TRANSACTED" in the form of RA-managed transactions
* (automatically translated by Spring's {@link DefaultJmsActivationSpecFactory}.
* @param constantName the name of the {@link Session} acknowledge mode constant
- * @see javax.jms.Session#AUTO_ACKNOWLEDGE
- * @see javax.jms.Session#CLIENT_ACKNOWLEDGE
- * @see javax.jms.Session#DUPS_OK_ACKNOWLEDGE
- * @see javax.jms.Session#SESSION_TRANSACTED
+ * @see jakarta.jms.Session#AUTO_ACKNOWLEDGE
+ * @see jakarta.jms.Session#CLIENT_ACKNOWLEDGE
+ * @see jakarta.jms.Session#DUPS_OK_ACKNOWLEDGE
+ * @see jakarta.jms.Session#SESSION_TRANSACTED
* @see StandardJmsActivationSpecFactory
* @see DefaultJmsActivationSpecFactory
*/
@@ -197,10 +197,10 @@ public class JmsActivationSpecConfig {
/**
* Set the JMS acknowledgement mode to use.
- * @see javax.jms.Session#AUTO_ACKNOWLEDGE
- * @see javax.jms.Session#CLIENT_ACKNOWLEDGE
- * @see javax.jms.Session#DUPS_OK_ACKNOWLEDGE
- * @see javax.jms.Session#SESSION_TRANSACTED
+ * @see jakarta.jms.Session#AUTO_ACKNOWLEDGE
+ * @see jakarta.jms.Session#CLIENT_ACKNOWLEDGE
+ * @see jakarta.jms.Session#DUPS_OK_ACKNOWLEDGE
+ * @see jakarta.jms.Session#SESSION_TRANSACTED
*/
public void setAcknowledgeMode(int acknowledgeMode) {
this.acknowledgeMode = acknowledgeMode;
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecFactory.java b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecFactory.java
index 2ef3bcbb5d3..2be2e2a2046 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecFactory.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsActivationSpecFactory.java
@@ -16,8 +16,8 @@
package org.springframework.jms.listener.endpoint;
-import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.ResourceAdapter;
+import jakarta.resource.spi.ActivationSpec;
+import jakarta.resource.spi.ResourceAdapter;
/**
* Strategy interface for creating JCA 1.5 ActivationSpec objects
@@ -32,7 +32,7 @@ import javax.resource.spi.ResourceAdapter;
* @since 2.5
* @see JmsActivationSpecConfig
* @see JmsMessageEndpointManager#setActivationSpecFactory
- * @see javax.resource.spi.ResourceAdapter#endpointActivation
+ * @see jakarta.resource.spi.ResourceAdapter#endpointActivation
*/
public interface JmsActivationSpecFactory {
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointFactory.java b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointFactory.java
index c27867f6f5b..5151aaa3cb6 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointFactory.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointFactory.java
@@ -16,10 +16,10 @@
package org.springframework.jms.listener.endpoint;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.resource.ResourceException;
-import javax.resource.spi.UnavailableException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageListener;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.UnavailableException;
import org.springframework.jca.endpoint.AbstractMessageEndpointFactory;
import org.springframework.lang.Nullable;
@@ -27,9 +27,9 @@ import org.springframework.util.Assert;
/**
* JMS-specific implementation of the JCA 1.7
- * {@link javax.resource.spi.endpoint.MessageEndpointFactory} interface,
+ * {@link jakarta.resource.spi.endpoint.MessageEndpointFactory} interface,
* providing transaction management capabilities for a JMS listener object
- * (e.g. a {@link javax.jms.MessageListener} object).
+ * (e.g. a {@link jakarta.jms.MessageListener} object).
*
*
Uses a static endpoint implementation, simply wrapping the
* specified message listener object and exposing all of its implemented
@@ -38,7 +38,7 @@ import org.springframework.util.Assert;
*
Typically used with Spring's {@link JmsMessageEndpointManager},
* but not tied to it. As a consequence, this endpoint factory could
* also be used with programmatic endpoint management on a native
- * {@link javax.resource.spi.ResourceAdapter} instance.
+ * {@link jakarta.resource.spi.ResourceAdapter} instance.
*
* @author Juergen Hoeller
* @author Stephane Nicoll
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointManager.java b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointManager.java
index 518736f59e2..72a4f99fab3 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointManager.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/JmsMessageEndpointManager.java
@@ -16,8 +16,8 @@
package org.springframework.jms.listener.endpoint;
-import javax.jms.MessageListener;
-import javax.resource.ResourceException;
+import jakarta.jms.MessageListener;
+import jakarta.resource.ResourceException;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.jca.endpoint.GenericMessageEndpointManager;
@@ -37,15 +37,15 @@ import org.springframework.lang.Nullable;
* object for activating the endpoint.
*
*
NOTE: This JCA-based endpoint manager supports standard JMS
- * {@link javax.jms.MessageListener} endpoints only. It does not support
+ * {@link jakarta.jms.MessageListener} endpoints only. It does not support
* Spring's {@link org.springframework.jms.listener.SessionAwareMessageListener}
* variant, simply because the JCA endpoint management contract does not allow
- * for obtaining the current JMS {@link javax.jms.Session}.
+ * for obtaining the current JMS {@link jakarta.jms.Session}.
*
* @author Juergen Hoeller
* @author Stephane Nicoll
* @since 2.5
- * @see javax.jms.MessageListener
+ * @see jakarta.jms.MessageListener
* @see #setActivationSpecConfig
* @see JmsActivationSpecConfig
* @see JmsActivationSpecFactory
@@ -86,7 +86,7 @@ public class JmsMessageEndpointManager extends GenericMessageEndpointManager
* invocations, enlisting the endpoint resource in each such transaction.
*
The passed-in object may be a transaction manager which implements
* Spring's {@link org.springframework.transaction.jta.TransactionFactory}
- * interface, or a plain {@link javax.transaction.TransactionManager}.
+ * interface, or a plain {@link jakarta.transaction.TransactionManager}.
*
If no transaction manager is specified, the endpoint invocation
* will simply not be wrapped in an XA transaction. Consult your
* resource provider's ActivationSpec documentation for the local
diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/StandardJmsActivationSpecFactory.java b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/StandardJmsActivationSpecFactory.java
index 632a1251316..f93eef25952 100644
--- a/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/StandardJmsActivationSpecFactory.java
+++ b/spring-jms/src/main/java/org/springframework/jms/listener/endpoint/StandardJmsActivationSpecFactory.java
@@ -18,12 +18,12 @@ package org.springframework.jms.listener.endpoint;
import java.util.Map;
-import javax.jms.JMSException;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.Topic;
-import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.ResourceAdapter;
+import jakarta.jms.JMSException;
+import jakarta.jms.Queue;
+import jakarta.jms.Session;
+import jakarta.jms.Topic;
+import jakarta.resource.spi.ActivationSpec;
+import jakarta.resource.spi.ResourceAdapter;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeanWrapper;
@@ -193,11 +193,11 @@ public class StandardJmsActivationSpecFactory implements JmsActivationSpecFactor
* having been requested.
* @param bw the BeanWrapper wrapping the ActivationSpec object
* @param ackMode the configured acknowledge mode
- * (according to the constants in {@link javax.jms.Session}
- * @see javax.jms.Session#AUTO_ACKNOWLEDGE
- * @see javax.jms.Session#DUPS_OK_ACKNOWLEDGE
- * @see javax.jms.Session#CLIENT_ACKNOWLEDGE
- * @see javax.jms.Session#SESSION_TRANSACTED
+ * (according to the constants in {@link jakarta.jms.Session}
+ * @see jakarta.jms.Session#AUTO_ACKNOWLEDGE
+ * @see jakarta.jms.Session#DUPS_OK_ACKNOWLEDGE
+ * @see jakarta.jms.Session#CLIENT_ACKNOWLEDGE
+ * @see jakarta.jms.Session#SESSION_TRANSACTED
*/
protected void applyAcknowledgeMode(BeanWrapper bw, int ackMode) {
if (ackMode == Session.SESSION_TRANSACTED) {
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java b/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java
index 305fc824983..5e8e19c7505 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/JmsAccessor.java
@@ -16,11 +16,10 @@
package org.springframework.jms.support;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.JMSException;
-import javax.jms.Session;
-
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.JMSException;
+import jakarta.jms.Session;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -47,7 +46,7 @@ import org.springframework.util.Assert;
*/
public abstract class JmsAccessor implements InitializingBean {
- /** Constants instance for {@code javax.jms.Session}. */
+ /** Constants instance for {@code jakarta.jms.Session}. */
private static final Constants sessionConstants = new Constants(Session.class);
@@ -95,7 +94,7 @@ public abstract class JmsAccessor implements InitializingBean {
* Default is "false".
*
Note that within a JTA transaction, the parameters passed to
* {@code create(Queue/Topic)Session(boolean transacted, int acknowledgeMode)}
- * method are not taken into account. Depending on the Java EE transaction context,
+ * method are not taken into account. Depending on the Jakarta EE transaction context,
* the container makes its own decisions on these values. Analogously, these
* parameters are not taken into account within a locally managed transaction
* either, since the accessor operates on an existing JMS Session in this case.
@@ -106,7 +105,7 @@ public abstract class JmsAccessor implements InitializingBean {
* transaction being managed alongside the main transaction (which might
* be a native JDBC transaction), with the JMS transaction committing
* right after the main transaction.
- * @see javax.jms.Connection#createSession(boolean, int)
+ * @see jakarta.jms.Connection#createSession(boolean, int)
*/
public void setSessionTransacted(boolean sessionTransacted) {
this.sessionTransacted = sessionTransacted;
@@ -127,10 +126,10 @@ public abstract class JmsAccessor implements InitializingBean {
*
If you want to use vendor-specific extensions to the acknowledgment mode,
* use {@link #setSessionAcknowledgeMode(int)} instead.
* @param constantName the name of the {@link Session} acknowledge mode constant
- * @see javax.jms.Session#AUTO_ACKNOWLEDGE
- * @see javax.jms.Session#CLIENT_ACKNOWLEDGE
- * @see javax.jms.Session#DUPS_OK_ACKNOWLEDGE
- * @see javax.jms.Connection#createSession(boolean, int)
+ * @see jakarta.jms.Session#AUTO_ACKNOWLEDGE
+ * @see jakarta.jms.Session#CLIENT_ACKNOWLEDGE
+ * @see jakarta.jms.Session#DUPS_OK_ACKNOWLEDGE
+ * @see jakarta.jms.Connection#createSession(boolean, int)
*/
public void setSessionAcknowledgeModeName(String constantName) {
setSessionAcknowledgeMode(sessionConstants.asNumber(constantName).intValue());
@@ -147,10 +146,10 @@ public abstract class JmsAccessor implements InitializingBean {
* the container makes its own decisions on these values. See section 17.3.5
* of the EJB spec.
* @param sessionAcknowledgeMode the acknowledgement mode constant
- * @see javax.jms.Session#AUTO_ACKNOWLEDGE
- * @see javax.jms.Session#CLIENT_ACKNOWLEDGE
- * @see javax.jms.Session#DUPS_OK_ACKNOWLEDGE
- * @see javax.jms.Connection#createSession(boolean, int)
+ * @see jakarta.jms.Session#AUTO_ACKNOWLEDGE
+ * @see jakarta.jms.Session#CLIENT_ACKNOWLEDGE
+ * @see jakarta.jms.Session#DUPS_OK_ACKNOWLEDGE
+ * @see jakarta.jms.Connection#createSession(boolean, int)
*/
public void setSessionAcknowledgeMode(int sessionAcknowledgeMode) {
this.sessionAcknowledgeMode = sessionAcknowledgeMode;
@@ -172,7 +171,7 @@ public abstract class JmsAccessor implements InitializingBean {
/**
- * Convert the specified checked {@link javax.jms.JMSException JMSException} to
+ * Convert the specified checked {@link jakarta.jms.JMSException JMSException} to
* a Spring runtime {@link org.springframework.jms.JmsException JmsException}
* equivalent.
*
The default implementation delegates to the
@@ -190,7 +189,7 @@ public abstract class JmsAccessor implements InitializingBean {
*
This implementation uses JMS 1.1 API.
* @return the new JMS Connection
* @throws JMSException if thrown by JMS API methods
- * @see javax.jms.ConnectionFactory#createConnection()
+ * @see jakarta.jms.ConnectionFactory#createConnection()
*/
protected Connection createConnection() throws JMSException {
return obtainConnectionFactory().createConnection();
@@ -202,7 +201,7 @@ public abstract class JmsAccessor implements InitializingBean {
* @param con the JMS Connection to create a Session for
* @return the new JMS Session
* @throws JMSException if thrown by JMS API methods
- * @see javax.jms.Connection#createSession(boolean, int)
+ * @see jakarta.jms.Connection#createSession(boolean, int)
*/
protected Session createSession(Connection con) throws JMSException {
return con.createSession(isSessionTransacted(), getSessionAcknowledgeMode());
@@ -213,9 +212,9 @@ public abstract class JmsAccessor implements InitializingBean {
*
This implementation uses JMS 1.1 API.
* @param session the JMS Session to check
* @return whether the given Session is in client acknowledge mode
- * @throws javax.jms.JMSException if thrown by JMS API methods
- * @see javax.jms.Session#getAcknowledgeMode()
- * @see javax.jms.Session#CLIENT_ACKNOWLEDGE
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
+ * @see jakarta.jms.Session#getAcknowledgeMode()
+ * @see jakarta.jms.Session#CLIENT_ACKNOWLEDGE
*/
protected boolean isClientAcknowledge(Session session) throws JMSException {
return (session.getAcknowledgeMode() == Session.CLIENT_ACKNOWLEDGE);
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaderMapper.java b/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaderMapper.java
index 3914d61bede..75e4d4fa327 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaderMapper.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaderMapper.java
@@ -16,13 +16,13 @@
package org.springframework.jms.support;
-import javax.jms.Message;
+import jakarta.jms.Message;
import org.springframework.messaging.support.HeaderMapper;
/**
* Strategy interface for mapping {@link org.springframework.messaging.Message}
- * headers to an outbound JMS {@link javax.jms.Message} (e.g. to configure JMS
+ * headers to an outbound JMS {@link jakarta.jms.Message} (e.g. to configure JMS
* properties) or extracting messaging header values from an inbound JMS Message.
*
* @author Mark Fisher
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaders.java b/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaders.java
index f4e5c028e7a..a2e7867e92f 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaders.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/JmsHeaders.java
@@ -37,53 +37,53 @@ public interface JmsHeaders {
* Correlation ID for the message. This may be the {@link #MESSAGE_ID} of
* the message that this message replies to. It may also be an
* application-specific identifier.
- * @see javax.jms.Message#getJMSCorrelationID()
+ * @see jakarta.jms.Message#getJMSCorrelationID()
*/
String CORRELATION_ID = PREFIX + "correlationId";
/**
* Name of the destination (topic or queue) of the message.
*
Read-only value.
- * @see javax.jms.Message#getJMSDestination()
- * @see javax.jms.Destination
- * @see javax.jms.Queue
- * @see javax.jms.Topic
+ * @see jakarta.jms.Message#getJMSDestination()
+ * @see jakarta.jms.Destination
+ * @see jakarta.jms.Queue
+ * @see jakarta.jms.Topic
*/
String DESTINATION = PREFIX + "destination";
/**
* Distribution mode.
*
Read-only value.
- * @see javax.jms.Message#getJMSDeliveryMode()
- * @see javax.jms.DeliveryMode
+ * @see jakarta.jms.Message#getJMSDeliveryMode()
+ * @see jakarta.jms.DeliveryMode
*/
String DELIVERY_MODE = PREFIX + "deliveryMode";
/**
* Message expiration date and time.
*
Read-only value.
- * @see javax.jms.Message#getJMSExpiration()
+ * @see jakarta.jms.Message#getJMSExpiration()
*/
String EXPIRATION = PREFIX + "expiration";
/**
* Unique identifier for a message.
*
Read-only value.
- * @see javax.jms.Message#getJMSMessageID()
+ * @see jakarta.jms.Message#getJMSMessageID()
*/
String MESSAGE_ID = PREFIX + "messageId";
/**
* The message priority level.
*
Read-only value.
- * @see javax.jms.Message#getJMSPriority()
+ * @see jakarta.jms.Message#getJMSPriority()
*/
String PRIORITY = PREFIX + "priority";
/**
* Name of the destination (topic or queue) the message replies should
* be sent to.
- * @see javax.jms.Message#getJMSReplyTo()
+ * @see jakarta.jms.Message#getJMSReplyTo()
*/
String REPLY_TO = PREFIX + "replyTo";
@@ -91,21 +91,21 @@ public interface JmsHeaders {
* Specify if the message was resent. This occurs when a message
* consumer fails to acknowledge the message reception.
*
Read-only value.
- * @see javax.jms.Message#getJMSRedelivered()
+ * @see jakarta.jms.Message#getJMSRedelivered()
*/
String REDELIVERED = PREFIX + "redelivered";
/**
* Message type label. This type is a string value describing the message
* in a functional manner.
- * @see javax.jms.Message#getJMSType()
+ * @see jakarta.jms.Message#getJMSType()
*/
String TYPE = PREFIX + "type";
/**
* Date and time of the message sending operation.
*
Read-only value.
- * @see javax.jms.Message#getJMSTimestamp()
+ * @see jakarta.jms.Message#getJMSTimestamp()
*/
String TIMESTAMP = PREFIX + "timestamp";
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/JmsMessageHeaderAccessor.java b/spring-jms/src/main/java/org/springframework/jms/support/JmsMessageHeaderAccessor.java
index c7ccdf4e96c..3523c7808ba 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/JmsMessageHeaderAccessor.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/JmsMessageHeaderAccessor.java
@@ -19,7 +19,7 @@ package org.springframework.jms.support;
import java.util.List;
import java.util.Map;
-import javax.jms.Destination;
+import jakarta.jms.Destination;
import org.springframework.lang.Nullable;
import org.springframework.messaging.Message;
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/JmsUtils.java b/spring-jms/src/main/java/org/springframework/jms/support/JmsUtils.java
index 3f33ba10211..4d6b136264c 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/JmsUtils.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/JmsUtils.java
@@ -16,14 +16,13 @@
package org.springframework.jms.support;
-import javax.jms.Connection;
-import javax.jms.JMSException;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageProducer;
-import javax.jms.QueueBrowser;
-import javax.jms.QueueRequestor;
-import javax.jms.Session;
-
+import jakarta.jms.Connection;
+import jakarta.jms.JMSException;
+import jakarta.jms.MessageConsumer;
+import jakarta.jms.MessageProducer;
+import jakarta.jms.QueueBrowser;
+import jakarta.jms.QueueRequestor;
+import jakarta.jms.Session;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -85,7 +84,7 @@ public abstract class JmsUtils {
con.close();
}
}
- catch (javax.jms.IllegalStateException ex) {
+ catch (jakarta.jms.IllegalStateException ex) {
logger.debug("Ignoring Connection state exception - assuming already closed: " + ex);
}
catch (JMSException ex) {
@@ -217,7 +216,7 @@ public abstract class JmsUtils {
try {
session.commit();
}
- catch (javax.jms.TransactionInProgressException | javax.jms.IllegalStateException ex) {
+ catch (jakarta.jms.TransactionInProgressException | jakarta.jms.IllegalStateException ex) {
// Ignore -> can only happen in case of a JTA transaction.
}
}
@@ -232,7 +231,7 @@ public abstract class JmsUtils {
try {
session.rollback();
}
- catch (javax.jms.TransactionInProgressException | javax.jms.IllegalStateException ex) {
+ catch (jakarta.jms.TransactionInProgressException | jakarta.jms.IllegalStateException ex) {
// Ignore -> can only happen in case of a JTA transaction.
}
}
@@ -242,7 +241,7 @@ public abstract class JmsUtils {
* incorporating a linked exception's message if appropriate.
* @param ex the JMSException to build a message for
* @return the descriptive message String
- * @see javax.jms.JMSException#getLinkedException()
+ * @see jakarta.jms.JMSException#getLinkedException()
*/
public static String buildExceptionMessage(JMSException ex) {
String message = ex.getMessage();
@@ -262,7 +261,7 @@ public abstract class JmsUtils {
}
/**
- * Convert the specified checked {@link javax.jms.JMSException JMSException} to a
+ * Convert the specified checked {@link jakarta.jms.JMSException JMSException} to a
* Spring runtime {@link org.springframework.jms.JmsException JmsException} equivalent.
* @param ex the original checked JMSException to convert
* @return the Spring runtime JmsException wrapping the given exception
@@ -270,41 +269,41 @@ public abstract class JmsUtils {
public static JmsException convertJmsAccessException(JMSException ex) {
Assert.notNull(ex, "JMSException must not be null");
- if (ex instanceof javax.jms.IllegalStateException) {
- return new org.springframework.jms.IllegalStateException((javax.jms.IllegalStateException) ex);
+ if (ex instanceof jakarta.jms.IllegalStateException) {
+ return new org.springframework.jms.IllegalStateException((jakarta.jms.IllegalStateException) ex);
}
- if (ex instanceof javax.jms.InvalidClientIDException) {
- return new InvalidClientIDException((javax.jms.InvalidClientIDException) ex);
+ if (ex instanceof jakarta.jms.InvalidClientIDException) {
+ return new InvalidClientIDException((jakarta.jms.InvalidClientIDException) ex);
}
- if (ex instanceof javax.jms.InvalidDestinationException) {
- return new InvalidDestinationException((javax.jms.InvalidDestinationException) ex);
+ if (ex instanceof jakarta.jms.InvalidDestinationException) {
+ return new InvalidDestinationException((jakarta.jms.InvalidDestinationException) ex);
}
- if (ex instanceof javax.jms.InvalidSelectorException) {
- return new InvalidSelectorException((javax.jms.InvalidSelectorException) ex);
+ if (ex instanceof jakarta.jms.InvalidSelectorException) {
+ return new InvalidSelectorException((jakarta.jms.InvalidSelectorException) ex);
}
- if (ex instanceof javax.jms.JMSSecurityException) {
- return new JmsSecurityException((javax.jms.JMSSecurityException) ex);
+ if (ex instanceof jakarta.jms.JMSSecurityException) {
+ return new JmsSecurityException((jakarta.jms.JMSSecurityException) ex);
}
- if (ex instanceof javax.jms.MessageEOFException) {
- return new MessageEOFException((javax.jms.MessageEOFException) ex);
+ if (ex instanceof jakarta.jms.MessageEOFException) {
+ return new MessageEOFException((jakarta.jms.MessageEOFException) ex);
}
- if (ex instanceof javax.jms.MessageFormatException) {
- return new MessageFormatException((javax.jms.MessageFormatException) ex);
+ if (ex instanceof jakarta.jms.MessageFormatException) {
+ return new MessageFormatException((jakarta.jms.MessageFormatException) ex);
}
- if (ex instanceof javax.jms.MessageNotReadableException) {
- return new MessageNotReadableException((javax.jms.MessageNotReadableException) ex);
+ if (ex instanceof jakarta.jms.MessageNotReadableException) {
+ return new MessageNotReadableException((jakarta.jms.MessageNotReadableException) ex);
}
- if (ex instanceof javax.jms.MessageNotWriteableException) {
- return new MessageNotWriteableException((javax.jms.MessageNotWriteableException) ex);
+ if (ex instanceof jakarta.jms.MessageNotWriteableException) {
+ return new MessageNotWriteableException((jakarta.jms.MessageNotWriteableException) ex);
}
- if (ex instanceof javax.jms.ResourceAllocationException) {
- return new ResourceAllocationException((javax.jms.ResourceAllocationException) ex);
+ if (ex instanceof jakarta.jms.ResourceAllocationException) {
+ return new ResourceAllocationException((jakarta.jms.ResourceAllocationException) ex);
}
- if (ex instanceof javax.jms.TransactionInProgressException) {
- return new TransactionInProgressException((javax.jms.TransactionInProgressException) ex);
+ if (ex instanceof jakarta.jms.TransactionInProgressException) {
+ return new TransactionInProgressException((jakarta.jms.TransactionInProgressException) ex);
}
- if (ex instanceof javax.jms.TransactionRolledBackException) {
- return new TransactionRolledBackException((javax.jms.TransactionRolledBackException) ex);
+ if (ex instanceof jakarta.jms.TransactionRolledBackException) {
+ return new TransactionRolledBackException((jakarta.jms.TransactionRolledBackException) ex);
}
// fallback
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/QosSettings.java b/spring-jms/src/main/java/org/springframework/jms/support/QosSettings.java
index f19a6970e42..2cd329fff70 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/QosSettings.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/QosSettings.java
@@ -16,7 +16,7 @@
package org.springframework.jms.support;
-import javax.jms.Message;
+import jakarta.jms.Message;
import org.springframework.lang.Nullable;
@@ -59,10 +59,10 @@ public class QosSettings {
* Set the delivery mode to use when sending a message.
* Default is the JMS Message default: "PERSISTENT".
* @param deliveryMode the delivery mode to use
- * @see javax.jms.DeliveryMode#PERSISTENT
- * @see javax.jms.DeliveryMode#NON_PERSISTENT
- * @see javax.jms.Message#DEFAULT_DELIVERY_MODE
- * @see javax.jms.MessageProducer#send(javax.jms.Message, int, int, long)
+ * @see jakarta.jms.DeliveryMode#PERSISTENT
+ * @see jakarta.jms.DeliveryMode#NON_PERSISTENT
+ * @see jakarta.jms.Message#DEFAULT_DELIVERY_MODE
+ * @see jakarta.jms.MessageProducer#send(jakarta.jms.Message, int, int, long)
*/
public void setDeliveryMode(int deliveryMode) {
this.deliveryMode = deliveryMode;
@@ -77,8 +77,8 @@ public class QosSettings {
/**
* Set the priority of a message when sending.
- * @see javax.jms.Message#DEFAULT_PRIORITY
- * @see javax.jms.MessageProducer#send(javax.jms.Message, int, int, long)
+ * @see jakarta.jms.Message#DEFAULT_PRIORITY
+ * @see jakarta.jms.MessageProducer#send(jakarta.jms.Message, int, int, long)
*/
public void setPriority(int priority) {
this.priority = priority;
@@ -94,8 +94,8 @@ public class QosSettings {
/**
* Set the time-to-live of the message when sending.
* @param timeToLive the message's lifetime (in milliseconds)
- * @see javax.jms.Message#DEFAULT_TIME_TO_LIVE
- * @see javax.jms.MessageProducer#send(javax.jms.Message, int, int, long)
+ * @see jakarta.jms.Message#DEFAULT_TIME_TO_LIVE
+ * @see jakarta.jms.MessageProducer#send(jakarta.jms.Message, int, int, long)
*/
public void setTimeToLive(long timeToLive) {
this.timeToLive = timeToLive;
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/SimpleJmsHeaderMapper.java b/spring-jms/src/main/java/org/springframework/jms/support/SimpleJmsHeaderMapper.java
index 36569911c69..43d53cf3ffc 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/SimpleJmsHeaderMapper.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/SimpleJmsHeaderMapper.java
@@ -23,9 +23,9 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Message;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.support.AbstractHeaderMapper;
@@ -61,7 +61,7 @@ public class SimpleJmsHeaderMapper extends AbstractHeaderMapper impleme
@Override
- public void fromHeaders(MessageHeaders headers, javax.jms.Message jmsMessage) {
+ public void fromHeaders(MessageHeaders headers, jakarta.jms.Message jmsMessage) {
try {
Object jmsCorrelationId = headers.get(JmsHeaders.CORRELATION_ID);
if (jmsCorrelationId instanceof Number) {
@@ -125,7 +125,7 @@ public class SimpleJmsHeaderMapper extends AbstractHeaderMapper impleme
}
@Override
- public MessageHeaders toHeaders(javax.jms.Message jmsMessage) {
+ public MessageHeaders toHeaders(jakarta.jms.Message jmsMessage) {
Map headers = new HashMap<>();
try {
try {
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java
index 401f5c0cb5e..7b6c3370aed 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java
@@ -24,18 +24,17 @@ import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
-import javax.jms.BytesMessage;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-
import com.fasterxml.jackson.annotation.JsonView;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
+import jakarta.jms.BytesMessage;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.Session;
+import jakarta.jms.TextMessage;
import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.core.MethodParameter;
@@ -212,7 +211,7 @@ public class MappingJackson2MessageConverter implements SmartMessageConverter, B
* @param session the Session to use for creating a JMS Message
* @param jsonView the view to use to filter the content
* @return the JMS Message
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
* @throws MessageConversionException in case of conversion failure
* @since 4.3
*/
@@ -343,7 +342,7 @@ public class MappingJackson2MessageConverter implements SmartMessageConverter, B
* @param object the payload object to set a type id for
* @param message the JMS Message on which to set the type id property
* @throws JMSException if thrown by JMS methods
- * @see #getJavaTypeForMessage(javax.jms.Message)
+ * @see #getJavaTypeForMessage(jakarta.jms.Message)
* @see #setTypeIdPropertyName(String)
* @see #setTypeIdMappings(java.util.Map)
*/
@@ -445,7 +444,7 @@ public class MappingJackson2MessageConverter implements SmartMessageConverter, B
* a different strategy, e.g. doing some heuristics based on message origin.
* @param message the JMS Message from which to get the type id property
* @throws JMSException if thrown by JMS methods
- * @see #setTypeIdOnMessage(Object, javax.jms.Message)
+ * @see #setTypeIdOnMessage(Object, jakarta.jms.Message)
* @see #setTypeIdPropertyName(String)
* @see #setTypeIdMappings(java.util.Map)
*/
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java
index 99c38631fda..b420ec92c6b 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java
@@ -22,16 +22,17 @@ import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
-import javax.jms.BytesMessage;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.Session;
-import javax.jms.TextMessage;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
+import jakarta.jms.BytesMessage;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.Session;
+import jakarta.jms.TextMessage;
+
import org.springframework.beans.factory.InitializingBean;
import org.springframework.lang.Nullable;
import org.springframework.oxm.Marshaller;
@@ -144,8 +145,8 @@ public class MarshallingMessageConverter implements MessageConverter, Initializi
/**
- * This implementation marshals the given object to a {@link javax.jms.TextMessage} or
- * {@link javax.jms.BytesMessage}. The desired message type can be defined by setting
+ * This implementation marshals the given object to a {@link jakarta.jms.TextMessage} or
+ * {@link jakarta.jms.BytesMessage}. The desired message type can be defined by setting
* the {@link #setTargetType "marshalTo"} property.
* @see #marshalToTextMessage
* @see #marshalToBytesMessage
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConversionException.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConversionException.java
index 837b19bb04c..e6ba699751d 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConversionException.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConversionException.java
@@ -21,7 +21,7 @@ import org.springframework.lang.Nullable;
/**
* Thrown by {@link MessageConverter} implementations when the conversion
- * of an object to/from a {@link javax.jms.Message} fails.
+ * of an object to/from a {@link jakarta.jms.Message} fails.
*
* @author Mark Pollack
* @since 1.1
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConverter.java
index b4c75ab0233..433123d1953 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConverter.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageConverter.java
@@ -16,9 +16,9 @@
package org.springframework.jms.support.converter;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.Session;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.Session;
/**
* Strategy interface that specifies a converter between Java objects and JMS messages.
@@ -42,7 +42,7 @@ public interface MessageConverter {
* @param object the object to convert
* @param session the Session to use for creating a JMS Message
* @return the JMS Message
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
* @throws MessageConversionException in case of conversion failure
*/
Message toMessage(Object object, Session session) throws JMSException, MessageConversionException;
@@ -51,7 +51,7 @@ public interface MessageConverter {
* Convert from a JMS Message to a Java object.
* @param message the message to convert
* @return the converted Java object
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
* @throws MessageConversionException in case of conversion failure
*/
Object fromMessage(Message message) throws JMSException, MessageConversionException;
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageType.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageType.java
index edaea0e38cd..98b46c77bbc 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageType.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessageType.java
@@ -18,8 +18,8 @@ package org.springframework.jms.support.converter;
/**
* Constants that indicate a target message type to convert to: a
- * {@link javax.jms.TextMessage}, a {@link javax.jms.BytesMessage},
- * a {@link javax.jms.MapMessage} or an {@link javax.jms.ObjectMessage}.
+ * {@link jakarta.jms.TextMessage}, a {@link jakarta.jms.BytesMessage},
+ * a {@link jakarta.jms.MapMessage} or an {@link jakarta.jms.ObjectMessage}.
*
* @author Juergen Hoeller
* @since 3.0
@@ -28,22 +28,22 @@ package org.springframework.jms.support.converter;
public enum MessageType {
/**
- * A {@link javax.jms.TextMessage}.
+ * A {@link jakarta.jms.TextMessage}.
*/
TEXT,
/**
- * A {@link javax.jms.BytesMessage}.
+ * A {@link jakarta.jms.BytesMessage}.
*/
BYTES,
/**
- * A {@link javax.jms.MapMessage}.
+ * A {@link jakarta.jms.MapMessage}.
*/
MAP,
/**
- * A {@link javax.jms.ObjectMessage}.
+ * A {@link jakarta.jms.ObjectMessage}.
*/
OBJECT
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessagingMessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessagingMessageConverter.java
index 441f306d728..98e8ad02639 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MessagingMessageConverter.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MessagingMessageConverter.java
@@ -18,8 +18,8 @@ package org.springframework.jms.support.converter;
import java.util.Map;
-import javax.jms.JMSException;
-import javax.jms.Session;
+import jakarta.jms.JMSException;
+import jakarta.jms.Session;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.jms.support.JmsHeaderMapper;
@@ -33,7 +33,7 @@ import org.springframework.util.Assert;
/**
* Convert a {@link Message} from the messaging abstraction to and from a
- * {@link javax.jms.Message} using an underlying {@link MessageConverter}
+ * {@link jakarta.jms.Message} using an underlying {@link MessageConverter}
* for the payload and a {@link org.springframework.jms.support.JmsHeaderMapper}
* to map the JMS headers to and from standard message headers.
*
@@ -100,7 +100,7 @@ public class MessagingMessageConverter implements MessageConverter, Initializing
@Override
- public javax.jms.Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
+ public jakarta.jms.Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
if (!(object instanceof Message)) {
throw new IllegalArgumentException("Could not convert [" + object + "] - only [" +
Message.class.getName() + "] is handled by this converter");
@@ -108,14 +108,14 @@ public class MessagingMessageConverter implements MessageConverter, Initializing
Message> input = (Message>) object;
MessageHeaders headers = input.getHeaders();
Object conversionHint = headers.get(AbstractMessagingTemplate.CONVERSION_HINT_HEADER);
- javax.jms.Message reply = createMessageForPayload(input.getPayload(), session, conversionHint);
+ jakarta.jms.Message reply = createMessageForPayload(input.getPayload(), session, conversionHint);
this.headerMapper.fromHeaders(headers, reply);
return reply;
}
@SuppressWarnings("unchecked")
@Override
- public Object fromMessage(javax.jms.Message message) throws JMSException, MessageConversionException {
+ public Object fromMessage(jakarta.jms.Message message) throws JMSException, MessageConversionException {
Map mappedHeaders = extractHeaders(message);
Object convertedObject = extractPayload(message);
MessageBuilder builder = (convertedObject instanceof org.springframework.messaging.Message ?
@@ -125,9 +125,9 @@ public class MessagingMessageConverter implements MessageConverter, Initializing
}
/**
- * Extract the payload of the specified {@link javax.jms.Message}.
+ * Extract the payload of the specified {@link jakarta.jms.Message}.
*/
- protected Object extractPayload(javax.jms.Message message) throws JMSException {
+ protected Object extractPayload(jakarta.jms.Message message) throws JMSException {
return this.payloadConverter.fromMessage(message);
}
@@ -138,13 +138,13 @@ public class MessagingMessageConverter implements MessageConverter, Initializing
* @since 4.3
* @see MessageConverter#toMessage(Object, Session)
*/
- protected javax.jms.Message createMessageForPayload(
+ protected jakarta.jms.Message createMessageForPayload(
Object payload, Session session, @Nullable Object conversionHint) throws JMSException {
return this.payloadConverter.toMessage(payload, session);
}
- protected final MessageHeaders extractHeaders(javax.jms.Message message) {
+ protected final MessageHeaders extractHeaders(jakarta.jms.Message message) {
return this.headerMapper.toHeaders(message);
}
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/SimpleMessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/SimpleMessageConverter.java
index 4c28352000b..deab9e8677f 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/converter/SimpleMessageConverter.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/SimpleMessageConverter.java
@@ -21,13 +21,13 @@ import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
-import javax.jms.BytesMessage;
-import javax.jms.JMSException;
-import javax.jms.MapMessage;
-import javax.jms.Message;
-import javax.jms.ObjectMessage;
-import javax.jms.Session;
-import javax.jms.TextMessage;
+import jakarta.jms.BytesMessage;
+import jakarta.jms.JMSException;
+import jakarta.jms.MapMessage;
+import jakarta.jms.Message;
+import jakarta.jms.ObjectMessage;
+import jakarta.jms.Session;
+import jakarta.jms.TextMessage;
import org.springframework.util.ObjectUtils;
@@ -37,9 +37,9 @@ import org.springframework.util.ObjectUtils;
* by {@link org.springframework.jms.core.JmsTemplate}, for
* {@code convertAndSend} and {@code receiveAndConvert} operations.
*
- * Converts a String to a {@link javax.jms.TextMessage}, a byte array to a
- * {@link javax.jms.BytesMessage}, a Map to a {@link javax.jms.MapMessage}, and
- * a Serializable object to a {@link javax.jms.ObjectMessage} (or vice versa).
+ *
Converts a String to a {@link jakarta.jms.TextMessage}, a byte array to a
+ * {@link jakarta.jms.BytesMessage}, a Map to a {@link jakarta.jms.MapMessage}, and
+ * a Serializable object to a {@link jakarta.jms.ObjectMessage} (or vice versa).
*
* @author Juergen Hoeller
* @since 1.1
@@ -117,7 +117,7 @@ public class SimpleMessageConverter implements MessageConverter {
* @param session current JMS session
* @return the resulting message
* @throws JMSException if thrown by JMS methods
- * @see javax.jms.Session#createTextMessage
+ * @see jakarta.jms.Session#createTextMessage
*/
protected TextMessage createMessageForString(String text, Session session) throws JMSException {
return session.createTextMessage(text);
@@ -129,7 +129,7 @@ public class SimpleMessageConverter implements MessageConverter {
* @param session current JMS session
* @return the resulting message
* @throws JMSException if thrown by JMS methods
- * @see javax.jms.Session#createBytesMessage
+ * @see jakarta.jms.Session#createBytesMessage
*/
protected BytesMessage createMessageForByteArray(byte[] bytes, Session session) throws JMSException {
BytesMessage message = session.createBytesMessage();
@@ -143,7 +143,7 @@ public class SimpleMessageConverter implements MessageConverter {
* @param session current JMS session
* @return the resulting message
* @throws JMSException if thrown by JMS methods
- * @see javax.jms.Session#createMapMessage
+ * @see jakarta.jms.Session#createMapMessage
*/
protected MapMessage createMessageForMap(Map, ?> map, Session session) throws JMSException {
MapMessage message = session.createMapMessage();
@@ -164,7 +164,7 @@ public class SimpleMessageConverter implements MessageConverter {
* @param session current JMS session
* @return the resulting message
* @throws JMSException if thrown by JMS methods
- * @see javax.jms.Session#createObjectMessage
+ * @see jakarta.jms.Session#createObjectMessage
*/
protected ObjectMessage createMessageForSerializable(Serializable object, Session session) throws JMSException {
return session.createObjectMessage(object);
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/SmartMessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/SmartMessageConverter.java
index 8ae6a894484..ab180e4eceb 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/converter/SmartMessageConverter.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/SmartMessageConverter.java
@@ -16,9 +16,9 @@
package org.springframework.jms.support.converter;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.Session;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.Session;
import org.springframework.lang.Nullable;
@@ -43,7 +43,7 @@ public interface SmartMessageConverter extends MessageConverter {
* @param conversionHint an extra object passed to the {@link MessageConverter},
* e.g. the associated {@code MethodParameter} (may be {@code null}}
* @return the JMS Message
- * @throws javax.jms.JMSException if thrown by JMS API methods
+ * @throws jakarta.jms.JMSException if thrown by JMS API methods
* @throws MessageConversionException in case of conversion failure
* @see #toMessage(Object, Session)
*/
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/destination/BeanFactoryDestinationResolver.java b/spring-jms/src/main/java/org/springframework/jms/support/destination/BeanFactoryDestinationResolver.java
index 0a7d5beaf3d..291e7a3d079 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/destination/BeanFactoryDestinationResolver.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/destination/BeanFactoryDestinationResolver.java
@@ -16,9 +16,9 @@
package org.springframework.jms.support.destination;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Session;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Session;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
@@ -30,7 +30,7 @@ import org.springframework.util.Assert;
* {@link DestinationResolver} implementation based on a Spring {@link BeanFactory}.
*
*
Will lookup Spring managed beans identified by bean name,
- * expecting them to be of type {@code javax.jms.Destination}.
+ * expecting them to be of type {@code jakarta.jms.Destination}.
*
* @author Juergen Hoeller
* @since 2.5
@@ -57,7 +57,7 @@ public class BeanFactoryDestinationResolver implements DestinationResolver, Bean
* replaced by the {@link BeanFactory} that creates it (c.f. the
* {@link BeanFactoryAware} contract). So only use this constructor if you
* are using this class outside the context of a Spring IoC container.
- * @param beanFactory the bean factory to be used to lookup {@link javax.jms.Destination Destination}
+ * @param beanFactory the bean factory to be used to lookup {@link jakarta.jms.Destination Destination}
*/
public BeanFactoryDestinationResolver(BeanFactory beanFactory) {
Assert.notNull(beanFactory, "BeanFactory is required");
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/destination/DestinationResolver.java b/spring-jms/src/main/java/org/springframework/jms/support/destination/DestinationResolver.java
index 7767f3d2ccd..ddc273729ab 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/destination/DestinationResolver.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/destination/DestinationResolver.java
@@ -16,9 +16,9 @@
package org.springframework.jms.support.destination;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Session;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Session;
import org.springframework.lang.Nullable;
@@ -51,7 +51,7 @@ public interface DestinationResolver {
* @param destinationName the name of the destination
* @param pubSubDomain {@code true} if the domain is pub-sub, {@code false} if P2P
* @return the JMS destination (either a topic or a queue)
- * @throws javax.jms.JMSException if the JMS Session failed to resolve the destination
+ * @throws jakarta.jms.JMSException if the JMS Session failed to resolve the destination
* @throws DestinationResolutionException in case of general destination resolution failure
*/
Destination resolveDestinationName(@Nullable Session session, String destinationName, boolean pubSubDomain)
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/destination/DynamicDestinationResolver.java b/spring-jms/src/main/java/org/springframework/jms/support/destination/DynamicDestinationResolver.java
index 80d69145f9a..0a1d885f7ef 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/destination/DynamicDestinationResolver.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/destination/DynamicDestinationResolver.java
@@ -16,11 +16,11 @@
package org.springframework.jms.support.destination;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.Topic;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Queue;
+import jakarta.jms.Session;
+import jakarta.jms.Topic;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
@@ -31,8 +31,8 @@ import org.springframework.util.Assert;
*
* @author Juergen Hoeller
* @since 1.1
- * @see javax.jms.Session#createQueue
- * @see javax.jms.Session#createTopic
+ * @see jakarta.jms.Session#createQueue
+ * @see jakarta.jms.Session#createTopic
*/
public class DynamicDestinationResolver implements DestinationResolver {
@@ -42,9 +42,9 @@ public class DynamicDestinationResolver implements DestinationResolver {
* @param destinationName the name of the destination
* @param pubSubDomain {@code true} if the domain is pub-sub, {@code false} if P2P
* @return the JMS destination (either a topic or a queue)
- * @throws javax.jms.JMSException if resolution failed
- * @see #resolveTopic(javax.jms.Session, String)
- * @see #resolveQueue(javax.jms.Session, String)
+ * @throws jakarta.jms.JMSException if resolution failed
+ * @see #resolveTopic(jakarta.jms.Session, String)
+ * @see #resolveQueue(jakarta.jms.Session, String)
*/
@Override
public Destination resolveDestinationName(@Nullable Session session, String destinationName, boolean pubSubDomain)
@@ -66,7 +66,7 @@ public class DynamicDestinationResolver implements DestinationResolver {
* @param session the current JMS Session
* @param topicName the name of the desired {@link Topic}
* @return the JMS {@link Topic}
- * @throws javax.jms.JMSException if resolution failed
+ * @throws jakarta.jms.JMSException if resolution failed
* @see Session#createTopic(String)
*/
protected Topic resolveTopic(Session session, String topicName) throws JMSException {
@@ -78,7 +78,7 @@ public class DynamicDestinationResolver implements DestinationResolver {
* @param session the current JMS Session
* @param queueName the name of the desired {@link Queue}
* @return the JMS {@link Queue}
- * @throws javax.jms.JMSException if resolution failed
+ * @throws jakarta.jms.JMSException if resolution failed
* @see Session#createQueue(String)
*/
protected Queue resolveQueue(Session session, String queueName) throws JMSException {
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/destination/JmsDestinationAccessor.java b/spring-jms/src/main/java/org/springframework/jms/support/destination/JmsDestinationAccessor.java
index 56953b02a7d..6711e7030f7 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/destination/JmsDestinationAccessor.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/destination/JmsDestinationAccessor.java
@@ -16,11 +16,11 @@
package org.springframework.jms.support.destination;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.Session;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageConsumer;
+import jakarta.jms.Session;
import org.springframework.jms.support.JmsAccessor;
import org.springframework.lang.Nullable;
@@ -62,7 +62,7 @@ public abstract class JmsDestinationAccessor extends JmsAccessor {
/**
* Set the {@link DestinationResolver} that is to be used to resolve
- * {@link javax.jms.Destination} references for this accessor.
+ * {@link jakarta.jms.Destination} references for this accessor.
*
The default resolver is a DynamicDestinationResolver. Specify a
* JndiDestinationResolver for resolving destination names as JNDI locations.
* @see org.springframework.jms.support.destination.DynamicDestinationResolver
@@ -85,8 +85,8 @@ public abstract class JmsDestinationAccessor extends JmsAccessor {
* Default is Point-to-Point (Queues).
*
This setting primarily indicates what type of destination to resolve
* if dynamic destinations are enabled.
- * @param pubSubDomain "true" for the Publish/Subscribe domain ({@link javax.jms.Topic Topics}),
- * "false" for the Point-to-Point domain ({@link javax.jms.Queue Queues})
+ * @param pubSubDomain "true" for the Publish/Subscribe domain ({@link jakarta.jms.Topic Topics}),
+ * "false" for the Point-to-Point domain ({@link jakarta.jms.Queue Queues})
* @see #setDestinationResolver
*/
public void setPubSubDomain(boolean pubSubDomain) {
@@ -94,8 +94,8 @@ public abstract class JmsDestinationAccessor extends JmsAccessor {
}
/**
- * Return whether the Publish/Subscribe domain ({@link javax.jms.Topic Topics}) is used.
- * Otherwise, the Point-to-Point domain ({@link javax.jms.Queue Queues}) is used.
+ * Return whether the Publish/Subscribe domain ({@link jakarta.jms.Topic Topics}) is used.
+ * Otherwise, the Point-to-Point domain ({@link jakarta.jms.Queue Queues}) is used.
*/
public boolean isPubSubDomain() {
return this.pubSubDomain;
@@ -108,7 +108,7 @@ public abstract class JmsDestinationAccessor extends JmsAccessor {
* @param session the current JMS {@link Session}
* @param destinationName the name of the destination
* @return the located {@link Destination}
- * @throws javax.jms.JMSException if resolution failed
+ * @throws jakarta.jms.JMSException if resolution failed
* @see #setDestinationResolver
*/
protected Destination resolveDestinationName(Session session, String destinationName) throws JMSException {
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/destination/JndiDestinationResolver.java b/spring-jms/src/main/java/org/springframework/jms/support/destination/JndiDestinationResolver.java
index 86e0e7da2ad..b27d883a088 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/destination/JndiDestinationResolver.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/destination/JndiDestinationResolver.java
@@ -19,13 +19,14 @@ package org.springframework.jms.support.destination;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.Topic;
import javax.naming.NamingException;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Queue;
+import jakarta.jms.Session;
+import jakarta.jms.Topic;
+
import org.springframework.jndi.JndiLocatorSupport;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
diff --git a/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms.xsd b/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms.xsd
index f454160fa58..e38673903d8 100644
--- a/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms.xsd
+++ b/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms.xsd
@@ -151,7 +151,7 @@
]]>
-
+
@@ -178,7 +178,7 @@
A reference to the DestinationResolver strategy for resolving destination names.
Default is a DynamicDestinationResolver, using the JMS provider's queue/topic
name resolution. Alternatively, specify a reference to a JndiDestinationResolver
- (typically in a Java EE environment).
+ (typically in a Jakarta EE environment).
]]>
@@ -260,7 +260,7 @@
The cache level for JMS resources: "none", "connection", "session", "consumer"
or "auto". By default ("auto"), the cache level will effectively be "consumer",
unless an external transaction manager has been specified - in which case the
- effective default will be "none" (assuming Java EE-style transaction management
+ effective default will be "none" (assuming Jakarta EE-style transaction management
where the given ConnectionFactory is an XA-aware pool).
]]>
@@ -411,7 +411,7 @@
]]>
-
+
@@ -435,7 +435,7 @@
@@ -516,7 +516,7 @@
diff --git a/spring-jms/src/test/java/org/springframework/jca/StubActivationSpec.java b/spring-jms/src/test/java/org/springframework/jca/StubActivationSpec.java
index 41950530e37..f7df15458d5 100644
--- a/spring-jms/src/test/java/org/springframework/jca/StubActivationSpec.java
+++ b/spring-jms/src/test/java/org/springframework/jca/StubActivationSpec.java
@@ -16,10 +16,10 @@
package org.springframework.jca;
-import javax.resource.ResourceException;
-import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.InvalidPropertyException;
-import javax.resource.spi.ResourceAdapter;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ActivationSpec;
+import jakarta.resource.spi.InvalidPropertyException;
+import jakarta.resource.spi.ResourceAdapter;
/**
* @author Juergen Hoeller
diff --git a/spring-jms/src/test/java/org/springframework/jca/StubResourceAdapter.java b/spring-jms/src/test/java/org/springframework/jca/StubResourceAdapter.java
index 787f6250a52..5f751395e1a 100644
--- a/spring-jms/src/test/java/org/springframework/jca/StubResourceAdapter.java
+++ b/spring-jms/src/test/java/org/springframework/jca/StubResourceAdapter.java
@@ -16,14 +16,15 @@
package org.springframework.jca;
-import javax.resource.ResourceException;
-import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.BootstrapContext;
-import javax.resource.spi.ResourceAdapter;
-import javax.resource.spi.ResourceAdapterInternalException;
-import javax.resource.spi.endpoint.MessageEndpointFactory;
import javax.transaction.xa.XAResource;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ActivationSpec;
+import jakarta.resource.spi.BootstrapContext;
+import jakarta.resource.spi.ResourceAdapter;
+import jakarta.resource.spi.ResourceAdapterInternalException;
+import jakarta.resource.spi.endpoint.MessageEndpointFactory;
+
/**
* @author Juergen Hoeller
*/
diff --git a/spring-jms/src/test/java/org/springframework/jms/StubConnectionFactory.java b/spring-jms/src/test/java/org/springframework/jms/StubConnectionFactory.java
index a8df4ed3774..a85c43aefe9 100644
--- a/spring-jms/src/test/java/org/springframework/jms/StubConnectionFactory.java
+++ b/spring-jms/src/test/java/org/springframework/jms/StubConnectionFactory.java
@@ -16,10 +16,10 @@
package org.springframework.jms;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.JMSContext;
-import javax.jms.JMSException;
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.JMSContext;
+import jakarta.jms.JMSException;
/**
* A stub implementation of the JMS ConnectionFactory for testing.
diff --git a/spring-jms/src/test/java/org/springframework/jms/StubQueue.java b/spring-jms/src/test/java/org/springframework/jms/StubQueue.java
index c529a2c066b..34e10a51143 100644
--- a/spring-jms/src/test/java/org/springframework/jms/StubQueue.java
+++ b/spring-jms/src/test/java/org/springframework/jms/StubQueue.java
@@ -16,10 +16,10 @@
package org.springframework.jms;
-import javax.jms.Queue;
+import jakarta.jms.Queue;
/**
- * Stub implementation of the {@link javax.jms.Queue} interface.
+ * Stub implementation of the {@link jakarta.jms.Queue} interface.
*
* @author Rick Evans
*/
diff --git a/spring-jms/src/test/java/org/springframework/jms/StubTextMessage.java b/spring-jms/src/test/java/org/springframework/jms/StubTextMessage.java
index cb4d0ee6f12..3276634761b 100644
--- a/spring-jms/src/test/java/org/springframework/jms/StubTextMessage.java
+++ b/spring-jms/src/test/java/org/springframework/jms/StubTextMessage.java
@@ -19,9 +19,9 @@ package org.springframework.jms;
import java.util.Enumeration;
import java.util.concurrent.ConcurrentHashMap;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.TextMessage;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.TextMessage;
/**
* Stub JMS Message implementation intended for testing purposes only.
diff --git a/spring-jms/src/test/java/org/springframework/jms/StubTopic.java b/spring-jms/src/test/java/org/springframework/jms/StubTopic.java
index 2621b9aea18..c11b925dc49 100644
--- a/spring-jms/src/test/java/org/springframework/jms/StubTopic.java
+++ b/spring-jms/src/test/java/org/springframework/jms/StubTopic.java
@@ -16,7 +16,7 @@
package org.springframework.jms;
-import javax.jms.Topic;
+import jakarta.jms.Topic;
/**
* Stub implementation of the {@link Topic} interface.
diff --git a/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java b/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java
index d0986f527dc..8ac5af2c956 100644
--- a/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java
@@ -18,9 +18,8 @@ package org.springframework.jms.annotation;
import java.lang.reflect.Method;
-import javax.jms.JMSException;
-import javax.jms.Session;
-
+import jakarta.jms.JMSException;
+import jakarta.jms.Session;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
diff --git a/spring-jms/src/test/java/org/springframework/jms/annotation/AnnotationDrivenNamespaceTests.java b/spring-jms/src/test/java/org/springframework/jms/annotation/AnnotationDrivenNamespaceTests.java
index f2d84d307b2..e4d28bcd3a4 100644
--- a/spring-jms/src/test/java/org/springframework/jms/annotation/AnnotationDrivenNamespaceTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/annotation/AnnotationDrivenNamespaceTests.java
@@ -16,9 +16,8 @@
package org.springframework.jms.annotation;
-import javax.jms.JMSException;
-import javax.jms.MessageListener;
-
+import jakarta.jms.JMSException;
+import jakarta.jms.MessageListener;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
diff --git a/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java b/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java
index 1bdc0d20c0e..1a1d61c5235 100644
--- a/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java
@@ -19,9 +19,8 @@ package org.springframework.jms.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import javax.jms.JMSException;
-import javax.jms.MessageListener;
-
+import jakarta.jms.JMSException;
+import jakarta.jms.MessageListener;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.BeanCreationException;
diff --git a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryIntegrationTests.java b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryIntegrationTests.java
index f1efec4d74a..b84fb7060c2 100644
--- a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryIntegrationTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryIntegrationTests.java
@@ -20,12 +20,11 @@ import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageListener;
+import jakarta.jms.Session;
+import jakarta.jms.TextMessage;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryTests.java b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryTests.java
index 865a0edc08f..c1cba94e1a7 100644
--- a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryTests.java
@@ -16,11 +16,10 @@
package org.springframework.jms.config;
-import javax.jms.ConnectionFactory;
-import javax.jms.MessageListener;
-import javax.jms.Session;
-import javax.transaction.TransactionManager;
-
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.MessageListener;
+import jakarta.jms.Session;
+import jakarta.transaction.TransactionManager;
import org.junit.jupiter.api.Test;
import org.springframework.beans.DirectFieldAccessor;
diff --git a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerEndpointTests.java b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerEndpointTests.java
index fa93a7f257c..0f66f2393a7 100644
--- a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerEndpointTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerEndpointTests.java
@@ -16,8 +16,7 @@
package org.springframework.jms.config;
-import javax.jms.MessageListener;
-
+import jakarta.jms.MessageListener;
import org.junit.jupiter.api.Test;
import org.springframework.beans.DirectFieldAccessor;
diff --git a/spring-jms/src/test/java/org/springframework/jms/config/JmsNamespaceHandlerTests.java b/spring-jms/src/test/java/org/springframework/jms/config/JmsNamespaceHandlerTests.java
index 43b9a1a6ca5..658ecf62ab4 100644
--- a/spring-jms/src/test/java/org/springframework/jms/config/JmsNamespaceHandlerTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/config/JmsNamespaceHandlerTests.java
@@ -21,11 +21,10 @@ import java.util.Iterator;
import java.util.Map;
import java.util.Set;
-import javax.jms.ConnectionFactory;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.jms.TextMessage;
-
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.Message;
+import jakarta.jms.MessageListener;
+import jakarta.jms.TextMessage;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java b/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java
index 4e74d2dc409..8e1c3ecd510 100644
--- a/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java
@@ -22,14 +22,13 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
-import javax.jms.Destination;
-import javax.jms.InvalidDestinationException;
-import javax.jms.JMSException;
-import javax.jms.ObjectMessage;
-import javax.jms.QueueSender;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-
+import jakarta.jms.Destination;
+import jakarta.jms.InvalidDestinationException;
+import jakarta.jms.JMSException;
+import jakarta.jms.ObjectMessage;
+import jakarta.jms.QueueSender;
+import jakarta.jms.Session;
+import jakarta.jms.TextMessage;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
@@ -127,7 +126,7 @@ class MethodJmsListenerEndpointTests {
@Test
void resolveMessageAndSession() throws JMSException {
- MessagingMessageListenerAdapter listener = createDefaultInstance(javax.jms.Message.class, Session.class);
+ MessagingMessageListenerAdapter listener = createDefaultInstance(jakarta.jms.Message.class, Session.class);
Session session = mock(Session.class);
listener.onMessage(createSimpleJmsTextMessage("test"), session);
@@ -521,7 +520,7 @@ class MethodJmsListenerEndpointTests {
private final Map invocations = new HashMap<>();
- public void resolveMessageAndSession(javax.jms.Message message, Session session) {
+ public void resolveMessageAndSession(jakarta.jms.Message message, Session session) {
this.invocations.put("resolveMessageAndSession", true);
assertThat(message).as("Message not injected").isNotNull();
assertThat(session).as("Session not injected").isNotNull();
diff --git a/spring-jms/src/test/java/org/springframework/jms/config/SimpleJmsListenerEndpointTests.java b/spring-jms/src/test/java/org/springframework/jms/config/SimpleJmsListenerEndpointTests.java
index b8ef640a60c..0ba4c762cb5 100644
--- a/spring-jms/src/test/java/org/springframework/jms/config/SimpleJmsListenerEndpointTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/config/SimpleJmsListenerEndpointTests.java
@@ -16,8 +16,7 @@
package org.springframework.jms.config;
-import javax.jms.MessageListener;
-
+import jakarta.jms.MessageListener;
import org.junit.jupiter.api.Test;
import org.springframework.jms.listener.SimpleMessageListenerContainer;
diff --git a/spring-jms/src/test/java/org/springframework/jms/connection/JmsTransactionManagerTests.java b/spring-jms/src/test/java/org/springframework/jms/connection/JmsTransactionManagerTests.java
index ae0878a29df..3b9897df3ff 100644
--- a/spring-jms/src/test/java/org/springframework/jms/connection/JmsTransactionManagerTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/connection/JmsTransactionManagerTests.java
@@ -16,14 +16,13 @@
package org.springframework.jms.connection;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageProducer;
-import javax.jms.Session;
-
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageProducer;
+import jakarta.jms.Session;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-jms/src/test/java/org/springframework/jms/connection/SingleConnectionFactoryTests.java b/spring-jms/src/test/java/org/springframework/jms/connection/SingleConnectionFactoryTests.java
index 85a6126dde2..110ffa2b106 100644
--- a/spring-jms/src/test/java/org/springframework/jms/connection/SingleConnectionFactoryTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/connection/SingleConnectionFactoryTests.java
@@ -16,18 +16,17 @@
package org.springframework.jms.connection;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.QueueConnection;
-import javax.jms.QueueConnectionFactory;
-import javax.jms.QueueSession;
-import javax.jms.Session;
-import javax.jms.TopicConnection;
-import javax.jms.TopicConnectionFactory;
-import javax.jms.TopicSession;
-
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.ExceptionListener;
+import jakarta.jms.JMSException;
+import jakarta.jms.QueueConnection;
+import jakarta.jms.QueueConnectionFactory;
+import jakarta.jms.QueueSession;
+import jakarta.jms.Session;
+import jakarta.jms.TopicConnection;
+import jakarta.jms.TopicConnectionFactory;
+import jakarta.jms.TopicSession;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/spring-jms/src/test/java/org/springframework/jms/connection/TestConnection.java b/spring-jms/src/test/java/org/springframework/jms/connection/TestConnection.java
index 3cef4288d49..99ebfa92ff9 100644
--- a/spring-jms/src/test/java/org/springframework/jms/connection/TestConnection.java
+++ b/spring-jms/src/test/java/org/springframework/jms/connection/TestConnection.java
@@ -16,15 +16,15 @@
package org.springframework.jms.connection;
-import javax.jms.Connection;
-import javax.jms.ConnectionConsumer;
-import javax.jms.ConnectionMetaData;
-import javax.jms.Destination;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.ServerSessionPool;
-import javax.jms.Session;
-import javax.jms.Topic;
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionConsumer;
+import jakarta.jms.ConnectionMetaData;
+import jakarta.jms.Destination;
+import jakarta.jms.ExceptionListener;
+import jakarta.jms.JMSException;
+import jakarta.jms.ServerSessionPool;
+import jakarta.jms.Session;
+import jakarta.jms.Topic;
/**
* @author Juergen Hoeller
diff --git a/spring-jms/src/test/java/org/springframework/jms/connection/TestExceptionListener.java b/spring-jms/src/test/java/org/springframework/jms/connection/TestExceptionListener.java
index 57b77ad160a..1e95a8c98b4 100644
--- a/spring-jms/src/test/java/org/springframework/jms/connection/TestExceptionListener.java
+++ b/spring-jms/src/test/java/org/springframework/jms/connection/TestExceptionListener.java
@@ -16,8 +16,8 @@
package org.springframework.jms.connection;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
+import jakarta.jms.ExceptionListener;
+import jakarta.jms.JMSException;
/**
* @author Juergen Hoeller
diff --git a/spring-jms/src/test/java/org/springframework/jms/core/JmsMessagingTemplateTests.java b/spring-jms/src/test/java/org/springframework/jms/core/JmsMessagingTemplateTests.java
index 96148ab15f4..10b63329467 100644
--- a/spring-jms/src/test/java/org/springframework/jms/core/JmsMessagingTemplateTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/core/JmsMessagingTemplateTests.java
@@ -20,13 +20,12 @@ import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.MessageFormatException;
-import javax.jms.MessageNotWriteableException;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.MessageFormatException;
+import jakarta.jms.MessageNotWriteableException;
+import jakarta.jms.Session;
+import jakarta.jms.TextMessage;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -237,7 +236,7 @@ public class JmsMessagingTemplateTests {
public void convertAndSendCustomJmsMessageConverter() throws JMSException {
this.messagingTemplate.setJmsMessageConverter(new SimpleMessageConverter() {
@Override
- public javax.jms.Message toMessage(Object object, Session session)
+ public jakarta.jms.Message toMessage(Object object, Session session)
throws JMSException, org.springframework.jms.support.converter.MessageConversionException {
throw new org.springframework.jms.support.converter.MessageConversionException("Test exception");
}
@@ -275,7 +274,7 @@ public class JmsMessagingTemplateTests {
@Test
public void receive() {
Destination destination = new Destination() {};
- javax.jms.Message jmsMessage = createJmsTextMessage();
+ jakarta.jms.Message jmsMessage = createJmsTextMessage();
given(this.jmsTemplate.receive(destination)).willReturn(jmsMessage);
Message> message = this.messagingTemplate.receive(destination);
@@ -285,7 +284,7 @@ public class JmsMessagingTemplateTests {
@Test
public void receiveName() {
- javax.jms.Message jmsMessage = createJmsTextMessage();
+ jakarta.jms.Message jmsMessage = createJmsTextMessage();
given(this.jmsTemplate.receive("myQueue")).willReturn(jmsMessage);
Message> message = this.messagingTemplate.receive("myQueue");
@@ -297,7 +296,7 @@ public class JmsMessagingTemplateTests {
public void receiveDefaultDestination() {
Destination destination = new Destination() {};
this.messagingTemplate.setDefaultDestination(destination);
- javax.jms.Message jmsMessage = createJmsTextMessage();
+ jakarta.jms.Message jmsMessage = createJmsTextMessage();
given(this.jmsTemplate.receive(destination)).willReturn(jmsMessage);
Message> message = this.messagingTemplate.receive();
@@ -308,7 +307,7 @@ public class JmsMessagingTemplateTests {
@Test
public void receiveDefaultDestinationName() {
this.messagingTemplate.setDefaultDestinationName("myQueue");
- javax.jms.Message jmsMessage = createJmsTextMessage();
+ jakarta.jms.Message jmsMessage = createJmsTextMessage();
given(this.jmsTemplate.receive("myQueue")).willReturn(jmsMessage);
Message> message = this.messagingTemplate.receive();
@@ -325,7 +324,7 @@ public class JmsMessagingTemplateTests {
@Test
public void receiveAndConvert() {
Destination destination = new Destination() {};
- javax.jms.Message jmsMessage = createJmsTextMessage("my Payload");
+ jakarta.jms.Message jmsMessage = createJmsTextMessage("my Payload");
given(this.jmsTemplate.receive(destination)).willReturn(jmsMessage);
String payload = this.messagingTemplate.receiveAndConvert(destination, String.class);
@@ -335,7 +334,7 @@ public class JmsMessagingTemplateTests {
@Test
public void receiveAndConvertName() {
- javax.jms.Message jmsMessage = createJmsTextMessage("my Payload");
+ jakarta.jms.Message jmsMessage = createJmsTextMessage("my Payload");
given(this.jmsTemplate.receive("myQueue")).willReturn(jmsMessage);
String payload = this.messagingTemplate.receiveAndConvert("myQueue", String.class);
@@ -347,7 +346,7 @@ public class JmsMessagingTemplateTests {
public void receiveAndConvertDefaultDestination() {
Destination destination = new Destination() {};
this.messagingTemplate.setDefaultDestination(destination);
- javax.jms.Message jmsMessage = createJmsTextMessage("my Payload");
+ jakarta.jms.Message jmsMessage = createJmsTextMessage("my Payload");
given(this.jmsTemplate.receive(destination)).willReturn(jmsMessage);
String payload = this.messagingTemplate.receiveAndConvert(String.class);
@@ -358,7 +357,7 @@ public class JmsMessagingTemplateTests {
@Test
public void receiveAndConvertDefaultDestinationName() {
this.messagingTemplate.setDefaultDestinationName("myQueue");
- javax.jms.Message jmsMessage = createJmsTextMessage("my Payload");
+ jakarta.jms.Message jmsMessage = createJmsTextMessage("my Payload");
given(this.jmsTemplate.receive("myQueue")).willReturn(jmsMessage);
String payload = this.messagingTemplate.receiveAndConvert(String.class);
@@ -368,7 +367,7 @@ public class JmsMessagingTemplateTests {
@Test
public void receiveAndConvertWithConversion() {
- javax.jms.Message jmsMessage = createJmsTextMessage("123");
+ jakarta.jms.Message jmsMessage = createJmsTextMessage("123");
given(this.jmsTemplate.receive("myQueue")).willReturn(jmsMessage);
this.messagingTemplate.setMessageConverter(new GenericMessageConverter());
@@ -380,7 +379,7 @@ public class JmsMessagingTemplateTests {
@Test
public void receiveAndConvertNoConverter() {
- javax.jms.Message jmsMessage = createJmsTextMessage("Hello");
+ jakarta.jms.Message jmsMessage = createJmsTextMessage("Hello");
given(this.jmsTemplate.receive("myQueue")).willReturn(jmsMessage);
assertThatExceptionOfType(org.springframework.messaging.converter.MessageConversionException.class).isThrownBy(() ->
@@ -398,7 +397,7 @@ public class JmsMessagingTemplateTests {
public void sendAndReceive() {
Destination destination = new Destination() {};
Message request = createTextMessage();
- javax.jms.Message replyJmsMessage = createJmsTextMessage();
+ jakarta.jms.Message replyJmsMessage = createJmsTextMessage();
given(this.jmsTemplate.sendAndReceive(eq(destination), any())).willReturn(replyJmsMessage);
Message> actual = this.messagingTemplate.sendAndReceive(destination, request);
@@ -409,7 +408,7 @@ public class JmsMessagingTemplateTests {
@Test
public void sendAndReceiveName() {
Message request = createTextMessage();
- javax.jms.Message replyJmsMessage = createJmsTextMessage();
+ jakarta.jms.Message replyJmsMessage = createJmsTextMessage();
given(this.jmsTemplate.sendAndReceive(eq("myQueue"), any())).willReturn(replyJmsMessage);
Message> actual = this.messagingTemplate.sendAndReceive("myQueue", request);
@@ -422,7 +421,7 @@ public class JmsMessagingTemplateTests {
Destination destination = new Destination() {};
this.messagingTemplate.setDefaultDestination(destination);
Message request = createTextMessage();
- javax.jms.Message replyJmsMessage = createJmsTextMessage();
+ jakarta.jms.Message replyJmsMessage = createJmsTextMessage();
given(this.jmsTemplate.sendAndReceive(eq(destination), any())).willReturn(replyJmsMessage);
Message> actual = this.messagingTemplate.sendAndReceive(request);
@@ -434,7 +433,7 @@ public class JmsMessagingTemplateTests {
public void sendAndReceiveDefaultDestinationName() {
this.messagingTemplate.setDefaultDestinationName("myQueue");
Message request = createTextMessage();
- javax.jms.Message replyJmsMessage = createJmsTextMessage();
+ jakarta.jms.Message replyJmsMessage = createJmsTextMessage();
given(this.jmsTemplate.sendAndReceive(eq("myQueue"), any())).willReturn(replyJmsMessage);
Message> actual = this.messagingTemplate.sendAndReceive(request);
@@ -453,7 +452,7 @@ public class JmsMessagingTemplateTests {
@Test
public void convertSendAndReceivePayload() throws JMSException {
Destination destination = new Destination() {};
- javax.jms.Message replyJmsMessage = createJmsTextMessage("My reply");
+ jakarta.jms.Message replyJmsMessage = createJmsTextMessage("My reply");
given(this.jmsTemplate.sendAndReceive(eq(destination), any())).willReturn(replyJmsMessage);
String reply = this.messagingTemplate.convertSendAndReceive(destination, "my Payload", String.class);
@@ -463,7 +462,7 @@ public class JmsMessagingTemplateTests {
@Test
public void convertSendAndReceivePayloadName() throws JMSException {
- javax.jms.Message replyJmsMessage = createJmsTextMessage("My reply");
+ jakarta.jms.Message replyJmsMessage = createJmsTextMessage("My reply");
given(this.jmsTemplate.sendAndReceive(eq("myQueue"), any())).willReturn(replyJmsMessage);
String reply = this.messagingTemplate.convertSendAndReceive("myQueue", "my Payload", String.class);
@@ -475,7 +474,7 @@ public class JmsMessagingTemplateTests {
public void convertSendAndReceiveDefaultDestination() throws JMSException {
Destination destination = new Destination() {};
this.messagingTemplate.setDefaultDestination(destination);
- javax.jms.Message replyJmsMessage = createJmsTextMessage("My reply");
+ jakarta.jms.Message replyJmsMessage = createJmsTextMessage("My reply");
given(this.jmsTemplate.sendAndReceive(eq(destination), any())).willReturn(replyJmsMessage);
String reply = this.messagingTemplate.convertSendAndReceive("my Payload", String.class);
@@ -486,7 +485,7 @@ public class JmsMessagingTemplateTests {
@Test
public void convertSendAndReceiveDefaultDestinationName() throws JMSException {
this.messagingTemplate.setDefaultDestinationName("myQueue");
- javax.jms.Message replyJmsMessage = createJmsTextMessage("My reply");
+ jakarta.jms.Message replyJmsMessage = createJmsTextMessage("My reply");
given(this.jmsTemplate.sendAndReceive(eq("myQueue"), any())).willReturn(replyJmsMessage);
String reply = this.messagingTemplate.convertSendAndReceive("my Payload", String.class);
@@ -515,7 +514,7 @@ public class JmsMessagingTemplateTests {
@Test
public void convertMessageConversionExceptionOnReceive() throws JMSException {
- javax.jms.Message message = createJmsTextMessage();
+ jakarta.jms.Message message = createJmsTextMessage();
MessageConverter messageConverter = mock(MessageConverter.class);
willThrow(org.springframework.jms.support.converter.MessageConversionException.class)
.given(messageConverter).fromMessage(message);
@@ -611,7 +610,7 @@ public class JmsMessagingTemplateTests {
return createTextMessage("Hello");
}
- private javax.jms.Message createJmsTextMessage(String payload) {
+ private jakarta.jms.Message createJmsTextMessage(String payload) {
try {
StubTextMessage jmsMessage = new StubTextMessage(payload);
jmsMessage.setStringProperty("foo", "bar");
@@ -622,7 +621,7 @@ public class JmsMessagingTemplateTests {
}
}
- private javax.jms.Message createJmsTextMessage() {
+ private jakarta.jms.Message createJmsTextMessage() {
return createJmsTextMessage("Hello");
}
@@ -650,7 +649,7 @@ public class JmsMessagingTemplateTests {
given(mock.createTextMessage(any())).willAnswer(
(Answer) invocation ->
new StubTextMessage((String) invocation.getArguments()[0]));
- javax.jms.Message message = creator.createMessage(mock);
+ jakarta.jms.Message message = creator.createMessage(mock);
verify(mock).createTextMessage(any());
return (TextMessage) message;
}
diff --git a/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTests.java b/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTests.java
index 0690e7d349d..9f82be855f9 100644
--- a/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTests.java
@@ -20,20 +20,20 @@ import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.List;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.DeliveryMode;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageProducer;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.TemporaryQueue;
-import javax.jms.TextMessage;
import javax.naming.Context;
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.DeliveryMode;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageConsumer;
+import jakarta.jms.MessageProducer;
+import jakarta.jms.Queue;
+import jakarta.jms.Session;
+import jakarta.jms.TemporaryQueue;
+import jakarta.jms.TextMessage;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -721,67 +721,67 @@ class JmsTemplateTests {
@Test
void testIllegalStateException() throws Exception {
- doTestJmsException(new javax.jms.IllegalStateException(""), org.springframework.jms.IllegalStateException.class);
+ doTestJmsException(new jakarta.jms.IllegalStateException(""), org.springframework.jms.IllegalStateException.class);
}
@Test
void testInvalidClientIDException() throws Exception {
- doTestJmsException(new javax.jms.InvalidClientIDException(""), InvalidClientIDException.class);
+ doTestJmsException(new jakarta.jms.InvalidClientIDException(""), InvalidClientIDException.class);
}
@Test
void testInvalidDestinationException() throws Exception {
- doTestJmsException(new javax.jms.InvalidDestinationException(""), InvalidDestinationException.class);
+ doTestJmsException(new jakarta.jms.InvalidDestinationException(""), InvalidDestinationException.class);
}
@Test
void testInvalidSelectorException() throws Exception {
- doTestJmsException(new javax.jms.InvalidSelectorException(""), InvalidSelectorException.class);
+ doTestJmsException(new jakarta.jms.InvalidSelectorException(""), InvalidSelectorException.class);
}
@Test
void testJmsSecurityException() throws Exception {
- doTestJmsException(new javax.jms.JMSSecurityException(""), JmsSecurityException.class);
+ doTestJmsException(new jakarta.jms.JMSSecurityException(""), JmsSecurityException.class);
}
@Test
void testMessageEOFException() throws Exception {
- doTestJmsException(new javax.jms.MessageEOFException(""), MessageEOFException.class);
+ doTestJmsException(new jakarta.jms.MessageEOFException(""), MessageEOFException.class);
}
@Test
void testMessageFormatException() throws Exception {
- doTestJmsException(new javax.jms.MessageFormatException(""), MessageFormatException.class);
+ doTestJmsException(new jakarta.jms.MessageFormatException(""), MessageFormatException.class);
}
@Test
void testMessageNotReadableException() throws Exception {
- doTestJmsException(new javax.jms.MessageNotReadableException(""), MessageNotReadableException.class);
+ doTestJmsException(new jakarta.jms.MessageNotReadableException(""), MessageNotReadableException.class);
}
@Test
void testMessageNotWriteableException() throws Exception {
- doTestJmsException(new javax.jms.MessageNotWriteableException(""), MessageNotWriteableException.class);
+ doTestJmsException(new jakarta.jms.MessageNotWriteableException(""), MessageNotWriteableException.class);
}
@Test
void testResourceAllocationException() throws Exception {
- doTestJmsException(new javax.jms.ResourceAllocationException(""), ResourceAllocationException.class);
+ doTestJmsException(new jakarta.jms.ResourceAllocationException(""), ResourceAllocationException.class);
}
@Test
void testTransactionInProgressException() throws Exception {
- doTestJmsException(new javax.jms.TransactionInProgressException(""), TransactionInProgressException.class);
+ doTestJmsException(new jakarta.jms.TransactionInProgressException(""), TransactionInProgressException.class);
}
@Test
void testTransactionRolledBackException() throws Exception {
- doTestJmsException(new javax.jms.TransactionRolledBackException(""), TransactionRolledBackException.class);
+ doTestJmsException(new jakarta.jms.TransactionRolledBackException(""), TransactionRolledBackException.class);
}
@Test
void testUncategorizedJmsException() throws Exception {
- doTestJmsException(new javax.jms.JMSException(""), UncategorizedJmsException.class);
+ doTestJmsException(new jakarta.jms.JMSException(""), UncategorizedJmsException.class);
}
protected void doTestJmsException(JMSException original, Class extends JmsException> thrownExceptionClass) throws Exception {
diff --git a/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTransactedTests.java b/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTransactedTests.java
index db51d87d132..e23fe83228f 100644
--- a/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTransactedTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/core/JmsTemplateTransactedTests.java
@@ -16,8 +16,7 @@
package org.springframework.jms.core;
-import javax.jms.Session;
-
+import jakarta.jms.Session;
import org.junit.jupiter.api.BeforeEach;
import static org.mockito.BDDMockito.given;
diff --git a/spring-jms/src/test/java/org/springframework/jms/core/support/JmsGatewaySupportTests.java b/spring-jms/src/test/java/org/springframework/jms/core/support/JmsGatewaySupportTests.java
index b4b7d3ab445..ead313c5396 100644
--- a/spring-jms/src/test/java/org/springframework/jms/core/support/JmsGatewaySupportTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/core/support/JmsGatewaySupportTests.java
@@ -18,8 +18,7 @@ package org.springframework.jms.core.support;
import java.util.ArrayList;
import java.util.List;
-import javax.jms.ConnectionFactory;
-
+import jakarta.jms.ConnectionFactory;
import org.junit.jupiter.api.Test;
import org.springframework.jms.core.JmsTemplate;
diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/DefaultMessageListenerContainerTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/DefaultMessageListenerContainerTests.java
index 4a83e858a33..66d638143f0 100644
--- a/spring-jms/src/test/java/org/springframework/jms/listener/DefaultMessageListenerContainerTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/listener/DefaultMessageListenerContainerTests.java
@@ -19,11 +19,10 @@ package org.springframework.jms.listener;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
import org.junit.jupiter.api.Test;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/MessageListenerContainerIntegrationTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/MessageListenerContainerIntegrationTests.java
deleted file mode 100644
index 306c88394f4..00000000000
--- a/spring-jms/src/test/java/org/springframework/jms/listener/MessageListenerContainerIntegrationTests.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2002-2021 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jms.listener;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import javax.jms.JMSException;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-
-import org.apache.activemq.ActiveMQConnectionFactory;
-import org.junit.jupiter.api.Test;
-
-import org.springframework.jms.core.JmsTemplate;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-/**
- * @author Juergen Hoeller
- * @since 5.3.5
- */
-public class MessageListenerContainerIntegrationTests {
-
- @Test
- public void simpleMessageListenerContainer() throws InterruptedException {
- SimpleMessageListenerContainer mlc = new SimpleMessageListenerContainer();
-
- testMessageListenerContainer(mlc);
- }
-
- @Test
- public void defaultMessageListenerContainer() throws InterruptedException {
- DefaultMessageListenerContainer mlc = new DefaultMessageListenerContainer();
-
- testMessageListenerContainer(mlc);
- }
-
- @Test
- public void defaultMessageListenerContainerWithMaxMessagesPerTask() throws InterruptedException {
- DefaultMessageListenerContainer mlc = new DefaultMessageListenerContainer();
- mlc.setConcurrentConsumers(1);
- mlc.setMaxConcurrentConsumers(2);
- mlc.setMaxMessagesPerTask(1);
-
- testMessageListenerContainer(mlc);
- }
-
- @Test
- public void defaultMessageListenerContainerWithIdleReceivesPerTaskLimit() throws InterruptedException {
- DefaultMessageListenerContainer mlc = new DefaultMessageListenerContainer();
- mlc.setConcurrentConsumers(1);
- mlc.setMaxConcurrentConsumers(2);
- mlc.setIdleReceivesPerTaskLimit(1);
-
- testMessageListenerContainer(mlc);
- }
-
- private void testMessageListenerContainer(AbstractMessageListenerContainer mlc) throws InterruptedException {
- ActiveMQConnectionFactory aqcf = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");
- TestMessageListener tml = new TestMessageListener();
-
- mlc.setConnectionFactory(aqcf);
- mlc.setMessageListener(tml);
- mlc.setDestinationName("test");
- mlc.afterPropertiesSet();
- mlc.start();
-
- JmsTemplate jt = new JmsTemplate(aqcf);
- jt.setDefaultDestinationName("test");
-
- Set messages = new HashSet<>();
- messages.add("text1");
- messages.add("text2");
- for (String message : messages) {
- jt.convertAndSend(message);
- }
- assertThat(tml.result()).isEqualTo(messages);
-
- mlc.destroy();
- }
-
-
- private static class TestMessageListener implements SessionAwareMessageListener {
-
- private final CountDownLatch latch = new CountDownLatch(2);
-
- private final Set messages = new CopyOnWriteArraySet<>();
-
- @Override
- public void onMessage(TextMessage message, Session session) throws JMSException {
- this.messages.add(message.getText());
- this.latch.countDown();
- }
-
- public Set result() throws InterruptedException {
- assertThat(this.latch.await(5, TimeUnit.SECONDS)).isTrue();
- return this.messages;
- }
- }
-
-}
diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/SimpleMessageListenerContainerTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/SimpleMessageListenerContainerTests.java
index 76bd754e2cc..7b001de2ab2 100644
--- a/spring-jms/src/test/java/org/springframework/jms/listener/SimpleMessageListenerContainerTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/listener/SimpleMessageListenerContainerTests.java
@@ -19,15 +19,14 @@ package org.springframework.jms.listener;
import java.util.HashSet;
import java.util.Set;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageListener;
-import javax.jms.Session;
-
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.ExceptionListener;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageConsumer;
+import jakarta.jms.MessageListener;
+import jakarta.jms.Session;
import org.junit.jupiter.api.Test;
import org.springframework.context.support.GenericApplicationContext;
diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/JmsResponseTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/JmsResponseTests.java
index b373b061a9b..c32fc0dd14e 100644
--- a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/JmsResponseTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/JmsResponseTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,10 +16,9 @@
package org.springframework.jms.listener.adapter;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Session;
-
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Session;
import org.junit.jupiter.api.Test;
import org.springframework.jms.support.destination.DestinationResolver;
@@ -54,7 +53,7 @@ public class JmsResponseTests {
}
@Test
- public void createWithNulResponse() {
+ public void createWithNullResponse() {
assertThatIllegalArgumentException().isThrownBy(() ->
JmsResponse.forQueue(null, "myQueue"));
}
diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageDelegate.java b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageDelegate.java
index 7138f269868..3c8f4de9cec 100644
--- a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageDelegate.java
+++ b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageDelegate.java
@@ -16,10 +16,10 @@
package org.springframework.jms.listener.adapter;
-import javax.jms.BytesMessage;
-import javax.jms.MapMessage;
-import javax.jms.ObjectMessage;
-import javax.jms.TextMessage;
+import jakarta.jms.BytesMessage;
+import jakarta.jms.MapMessage;
+import jakarta.jms.ObjectMessage;
+import jakarta.jms.TextMessage;
/**
* See the MessageListenerAdapterTests class for usage.
diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageListenerAdapterTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageListenerAdapterTests.java
index ceeab1c3b36..751ca9c27a2 100644
--- a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageListenerAdapterTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessageListenerAdapterTests.java
@@ -19,18 +19,17 @@ package org.springframework.jms.listener.adapter;
import java.io.ByteArrayInputStream;
import java.io.Serializable;
-import javax.jms.BytesMessage;
-import javax.jms.InvalidDestinationException;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageProducer;
-import javax.jms.ObjectMessage;
-import javax.jms.Queue;
-import javax.jms.QueueSender;
-import javax.jms.QueueSession;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-
+import jakarta.jms.BytesMessage;
+import jakarta.jms.InvalidDestinationException;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageProducer;
+import jakarta.jms.ObjectMessage;
+import jakarta.jms.Queue;
+import jakarta.jms.QueueSender;
+import jakarta.jms.QueueSession;
+import jakarta.jms.Session;
+import jakarta.jms.TextMessage;
import org.junit.jupiter.api.Test;
import org.mockito.stubbing.Answer;
diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapterTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapterTests.java
index 4a984a256e3..03f44a70f30 100644
--- a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapterTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapterTests.java
@@ -20,16 +20,15 @@ import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
-import javax.jms.DeliveryMode;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.MessageProducer;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-import javax.jms.Topic;
-
import com.fasterxml.jackson.annotation.JsonView;
+import jakarta.jms.DeliveryMode;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.MessageProducer;
+import jakarta.jms.Queue;
+import jakarta.jms.Session;
+import jakarta.jms.TextMessage;
+import jakarta.jms.Topic;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -85,7 +84,7 @@ public class MessagingMessageListenerAdapterTests {
Session session = mock(Session.class);
given(session.createTextMessage("Response")).willReturn(new StubTextMessage("Response"));
MessagingMessageListenerAdapter listener = getSimpleInstance("echo", Message.class);
- javax.jms.Message replyMessage = listener.buildMessage(session, result);
+ jakarta.jms.Message replyMessage = listener.buildMessage(session, result);
verify(session).createTextMessage("Response");
assertThat(replyMessage).as("reply should never be null").isNotNull();
@@ -97,7 +96,7 @@ public class MessagingMessageListenerAdapterTests {
@Test
public void exceptionInListener() {
- javax.jms.Message message = new StubTextMessage("foo");
+ jakarta.jms.Message message = new StubTextMessage("foo");
Session session = mock(Session.class);
MessagingMessageListenerAdapter listener = getSimpleInstance("fail", String.class);
assertThatExceptionOfType(ListenerExecutionFailedException.class)
@@ -109,7 +108,7 @@ public class MessagingMessageListenerAdapterTests {
@Test
public void exceptionInInvocation() {
- javax.jms.Message message = new StubTextMessage("foo");
+ jakarta.jms.Message message = new StubTextMessage("foo");
Session session = mock(Session.class);
MessagingMessageListenerAdapter listener = getSimpleInstance("wrongParam", Integer.class);
@@ -120,7 +119,7 @@ public class MessagingMessageListenerAdapterTests {
@Test
public void payloadConversionLazilyInvoked() throws JMSException {
- javax.jms.Message jmsMessage = mock(javax.jms.Message.class);
+ jakarta.jms.Message jmsMessage = mock(jakarta.jms.Message.class);
MessageConverter messageConverter = mock(MessageConverter.class);
given(messageConverter.fromMessage(jmsMessage)).willReturn("FooBar");
MessagingMessageListenerAdapter listener = getSimpleInstance("simple", Message.class);
@@ -133,7 +132,7 @@ public class MessagingMessageListenerAdapterTests {
@Test
public void headerConversionLazilyInvoked() throws JMSException {
- javax.jms.Message jmsMessage = mock(javax.jms.Message.class);
+ jakarta.jms.Message jmsMessage = mock(jakarta.jms.Message.class);
given(jmsMessage.getPropertyNames()).willThrow(new IllegalArgumentException("Header failure"));
MessagingMessageListenerAdapter listener = getSimpleInstance("simple", Message.class);
Message> message = listener.toMessagingMessage(jmsMessage);
@@ -146,7 +145,7 @@ public class MessagingMessageListenerAdapterTests {
@Test
public void incomingMessageUsesMessageConverter() throws JMSException {
- javax.jms.Message jmsMessage = mock(javax.jms.Message.class);
+ jakarta.jms.Message jmsMessage = mock(jakarta.jms.Message.class);
Session session = mock(Session.class);
MessageConverter messageConverter = mock(MessageConverter.class);
given(messageConverter.fromMessage(jmsMessage)).willReturn("FooBar");
@@ -167,7 +166,7 @@ public class MessagingMessageListenerAdapterTests {
Message result = MessageBuilder.withPayload("Response").build();
MessagingMessageListenerAdapter listener = getSimpleInstance("echo", Message.class);
listener.setMessageConverter(messageConverter);
- javax.jms.Message replyMessage = listener.buildMessage(session, result);
+ jakarta.jms.Message replyMessage = listener.buildMessage(session, result);
verify(messageConverter, times(1)).toMessage("Response", session);
assertThat(replyMessage).as("reply should never be null").isNotNull();
@@ -186,7 +185,7 @@ public class MessagingMessageListenerAdapterTests {
given(session.createProducer(replyDestination)).willReturn(messageProducer);
MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadToQueue", Message.class);
- listener.onMessage(mock(javax.jms.Message.class), session);
+ listener.onMessage(mock(jakarta.jms.Message.class), session);
verify(session).createQueue("queueOut");
verify(session).createTextMessage("Response");
@@ -209,11 +208,11 @@ public class MessagingMessageListenerAdapterTests {
QosSettings settings = new QosSettings();
settings.setTimeToLive(6000);
listener.setResponseQosSettings(settings);
- listener.onMessage(mock(javax.jms.Message.class), session);
+ listener.onMessage(mock(jakarta.jms.Message.class), session);
verify(session).createQueue("queueOut");
verify(session).createTextMessage("Response");
- verify(messageProducer).send(responseMessage, javax.jms.Message.DEFAULT_DELIVERY_MODE,
- javax.jms.Message.DEFAULT_PRIORITY, 6000);
+ verify(messageProducer).send(responseMessage, jakarta.jms.Message.DEFAULT_DELIVERY_MODE,
+ jakarta.jms.Message.DEFAULT_PRIORITY, 6000);
verify(messageProducer).close();
}
@@ -231,7 +230,7 @@ public class MessagingMessageListenerAdapterTests {
MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadToQueue", Message.class);
QosSettings settings = new QosSettings(DeliveryMode.NON_PERSISTENT, 6, 6000);
listener.setResponseQosSettings(settings);
- listener.onMessage(mock(javax.jms.Message.class), session);
+ listener.onMessage(mock(jakarta.jms.Message.class), session);
verify(session).createQueue("queueOut");
verify(session).createTextMessage("Response");
verify(messageProducer).send(responseMessage, DeliveryMode.NON_PERSISTENT, 6, 6000);
@@ -250,7 +249,7 @@ public class MessagingMessageListenerAdapterTests {
given(session.createProducer(replyDestination)).willReturn(messageProducer);
MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadToTopic", Message.class);
- listener.onMessage(mock(javax.jms.Message.class), session);
+ listener.onMessage(mock(jakarta.jms.Message.class), session);
verify(session).createTopic("topicOut");
verify(session).createTextMessage("Response");
@@ -267,7 +266,7 @@ public class MessagingMessageListenerAdapterTests {
given(session.createProducer(sharedReplyDestination)).willReturn(messageProducer);
MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadToDestination", Message.class);
- listener.onMessage(mock(javax.jms.Message.class), session);
+ listener.onMessage(mock(jakarta.jms.Message.class), session);
verify(session, times(0)).createQueue(anyString());
verify(session).createTextMessage("Response");
@@ -288,7 +287,7 @@ public class MessagingMessageListenerAdapterTests {
MessagingMessageListenerAdapter listener =
getPayloadInstance("Response", "replyPayloadNoDestination", Message.class);
listener.setDefaultResponseDestination(replyDestination);
- listener.onMessage(mock(javax.jms.Message.class), session);
+ listener.onMessage(mock(jakarta.jms.Message.class), session);
verify(session, times(0)).createQueue(anyString());
verify(session).createTextMessage("Response");
@@ -331,7 +330,7 @@ public class MessagingMessageListenerAdapterTests {
messageConverter.setTargetType(MessageType.TEXT);
listener.setMessageConverter(messageConverter);
listener.setDefaultResponseDestination(replyDestination);
- listener.onMessage(mock(javax.jms.Message.class), session);
+ listener.onMessage(mock(jakarta.jms.Message.class), session);
verify(session, times(0)).createQueue(anyString());
verify(session).createTextMessage(replyContent);
@@ -358,7 +357,7 @@ public class MessagingMessageListenerAdapterTests {
Method method = ReflectionUtils.findMethod(SampleBean.class, methodName, parameterTypes);
MessagingMessageListenerAdapter adapter = new MessagingMessageListenerAdapter() {
@Override
- protected Object extractMessage(javax.jms.Message message) {
+ protected Object extractMessage(jakarta.jms.Message message) {
return payload;
}
};
diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveJmsTextMessageReturningMessageDelegate.java b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveJmsTextMessageReturningMessageDelegate.java
index 1ad04534840..0fcecaed3d9 100644
--- a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveJmsTextMessageReturningMessageDelegate.java
+++ b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveJmsTextMessageReturningMessageDelegate.java
@@ -16,7 +16,7 @@
package org.springframework.jms.listener.adapter;
-import javax.jms.TextMessage;
+import jakarta.jms.TextMessage;
/**
* See the MessageListenerAdapterTests class for usage.
diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveMessageDelegate.java b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveMessageDelegate.java
index c162dc09814..fe4b6970c93 100644
--- a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveMessageDelegate.java
+++ b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/ResponsiveMessageDelegate.java
@@ -19,10 +19,10 @@ package org.springframework.jms.listener.adapter;
import java.io.Serializable;
import java.util.Map;
-import javax.jms.BytesMessage;
-import javax.jms.MapMessage;
-import javax.jms.ObjectMessage;
-import javax.jms.TextMessage;
+import jakarta.jms.BytesMessage;
+import jakarta.jms.MapMessage;
+import jakarta.jms.ObjectMessage;
+import jakarta.jms.TextMessage;
/**
* See the MessageListenerAdapterTests class for usage.
diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactoryTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactoryTests.java
index 32e9400b7c1..0540c97ea30 100644
--- a/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactoryTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/DefaultJmsActivationSpecFactoryTests.java
@@ -16,9 +16,8 @@
package org.springframework.jms.listener.endpoint;
-import javax.jms.Destination;
-import javax.jms.Session;
-
+import jakarta.jms.Destination;
+import jakarta.jms.Session;
import org.junit.jupiter.api.Test;
import org.springframework.jca.StubResourceAdapter;
diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpec.java b/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpec.java
index c9d16c4e04b..b648e7f8daa 100644
--- a/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpec.java
+++ b/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpec.java
@@ -16,7 +16,7 @@
package org.springframework.jms.listener.endpoint;
-import javax.jms.Destination;
+import jakarta.jms.Destination;
import org.springframework.jca.StubActivationSpec;
diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpecFactory.java b/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpecFactory.java
index 17e4aafd554..735070cc5db 100644
--- a/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpecFactory.java
+++ b/spring-jms/src/test/java/org/springframework/jms/listener/endpoint/StubJmsActivationSpecFactory.java
@@ -16,8 +16,8 @@
package org.springframework.jms.listener.endpoint;
-import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.ResourceAdapter;
+import jakarta.resource.spi.ActivationSpec;
+import jakarta.resource.spi.ResourceAdapter;
import org.springframework.jca.StubActivationSpec;
diff --git a/spring-jms/src/test/java/org/springframework/jms/support/JmsAccessorTests.java b/spring-jms/src/test/java/org/springframework/jms/support/JmsAccessorTests.java
index bb1710043e5..1e2f4b66763 100644
--- a/spring-jms/src/test/java/org/springframework/jms/support/JmsAccessorTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/support/JmsAccessorTests.java
@@ -16,8 +16,7 @@
package org.springframework.jms.support;
-import javax.jms.Session;
-
+import jakarta.jms.Session;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/spring-jms/src/test/java/org/springframework/jms/support/JmsMessageHeaderAccessorTests.java b/spring-jms/src/test/java/org/springframework/jms/support/JmsMessageHeaderAccessorTests.java
index 2255f34ea5d..939cb6aa29b 100644
--- a/spring-jms/src/test/java/org/springframework/jms/support/JmsMessageHeaderAccessorTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/support/JmsMessageHeaderAccessorTests.java
@@ -18,9 +18,8 @@ package org.springframework.jms.support;
import java.util.Map;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
import org.junit.jupiter.api.Test;
import org.springframework.jms.StubTextMessage;
diff --git a/spring-jms/src/test/java/org/springframework/jms/support/SimpleJmsHeaderMapperTests.java b/spring-jms/src/test/java/org/springframework/jms/support/SimpleJmsHeaderMapperTests.java
index 8839696b4d3..331fdaa0a56 100644
--- a/spring-jms/src/test/java/org/springframework/jms/support/SimpleJmsHeaderMapperTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/support/SimpleJmsHeaderMapperTests.java
@@ -19,10 +19,9 @@ package org.springframework.jms.support;
import java.util.Date;
import java.util.Map;
-import javax.jms.DeliveryMode;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-
+import jakarta.jms.DeliveryMode;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
import org.junit.jupiter.api.Test;
import org.springframework.jms.StubTextMessage;
@@ -51,7 +50,7 @@ public class SimpleJmsHeaderMapperTests {
Message message = initBuilder()
.setHeader(JmsHeaders.REPLY_TO, replyTo).build();
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
assertThat(jmsMessage.getJMSReplyTo()).isNotNull();
assertThat(jmsMessage.getJMSReplyTo()).isSameAs(replyTo);
@@ -61,7 +60,7 @@ public class SimpleJmsHeaderMapperTests {
public void JmsReplyToIgnoredIfIncorrectType() throws JMSException {
Message message = initBuilder()
.setHeader(JmsHeaders.REPLY_TO, "not-a-destination").build();
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
assertThat(jmsMessage.getJMSReplyTo()).isNull();
}
@@ -71,7 +70,7 @@ public class SimpleJmsHeaderMapperTests {
String jmsCorrelationId = "ABC-123";
Message message = initBuilder()
.setHeader(JmsHeaders.CORRELATION_ID, jmsCorrelationId).build();
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
assertThat(jmsMessage.getJMSCorrelationID()).isNotNull();
assertThat(jmsMessage.getJMSCorrelationID()).isEqualTo(jmsCorrelationId);
@@ -81,7 +80,7 @@ public class SimpleJmsHeaderMapperTests {
public void jmsCorrelationIdNumberConvertsToString() throws JMSException {
Message message = initBuilder()
.setHeader(JmsHeaders.CORRELATION_ID, 123).build();
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
assertThat(jmsMessage.getJMSCorrelationID()).isEqualTo("123");
}
@@ -90,7 +89,7 @@ public class SimpleJmsHeaderMapperTests {
public void jmsCorrelationIdIgnoredIfIncorrectType() throws JMSException {
Message message = initBuilder()
.setHeader(JmsHeaders.CORRELATION_ID, new Date()).build();
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
assertThat(jmsMessage.getJMSCorrelationID()).isNull();
}
@@ -100,7 +99,7 @@ public class SimpleJmsHeaderMapperTests {
String jmsType = "testing";
Message message = initBuilder()
.setHeader(JmsHeaders.TYPE, jmsType).build();
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
assertThat(jmsMessage.getJMSType()).isNotNull();
assertThat(jmsMessage.getJMSType()).isEqualTo(jmsType);
@@ -110,7 +109,7 @@ public class SimpleJmsHeaderMapperTests {
public void jmsTypeIgnoredIfIncorrectType() throws JMSException {
Message message = initBuilder()
.setHeader(JmsHeaders.TYPE, 123).build();
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
assertThat(jmsMessage.getJMSType()).isNull();
}
@@ -126,13 +125,13 @@ public class SimpleJmsHeaderMapperTests {
.setHeader(JmsHeaders.REDELIVERED, true)
.setHeader(JmsHeaders.TIMESTAMP, System.currentTimeMillis())
.build();
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
assertThat(jmsMessage.getJMSDestination()).isNull();
assertThat(jmsMessage.getJMSDeliveryMode()).isEqualTo(DeliveryMode.PERSISTENT);
assertThat(jmsMessage.getJMSExpiration()).isEqualTo(0);
assertThat(jmsMessage.getJMSMessageID()).isNull();
- assertThat(jmsMessage.getJMSPriority()).isEqualTo(javax.jms.Message.DEFAULT_PRIORITY);
+ assertThat(jmsMessage.getJMSPriority()).isEqualTo(jakarta.jms.Message.DEFAULT_PRIORITY);
assertThat(jmsMessage.getJMSRedelivered()).isFalse();
assertThat(jmsMessage.getJMSTimestamp()).isEqualTo(0);
}
@@ -142,7 +141,7 @@ public class SimpleJmsHeaderMapperTests {
Message message = initBuilder()
.setHeader(MessageHeaders.CONTENT_TYPE, "foo")
.build();
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
Object value = jmsMessage.getObjectProperty(JmsHeaderMapper.CONTENT_TYPE_PROPERTY);
assertThat(value).isNotNull();
@@ -154,7 +153,7 @@ public class SimpleJmsHeaderMapperTests {
Message message = initBuilder()
.setHeader("foo", 123)
.build();
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
Object value = jmsMessage.getObjectProperty("foo");
assertThat(value).isNotNull();
@@ -168,7 +167,7 @@ public class SimpleJmsHeaderMapperTests {
.setHeader("foo", 123)
.build();
mapper.setOutboundPrefix("custom_");
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
Object value = jmsMessage.getObjectProperty("custom_foo");
assertThat(value).isNotNull();
@@ -182,7 +181,7 @@ public class SimpleJmsHeaderMapperTests {
Message message = initBuilder()
.setHeader("destination", destination)
.build();
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
Object value = jmsMessage.getObjectProperty("destination");
assertThat(value).isNull();
@@ -190,7 +189,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void attemptToReadDisallowedCorrelationIdPropertyIsNotFatal() throws JMSException {
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public String getJMSCorrelationID() throws JMSException {
throw new JMSException("illegal property");
@@ -201,7 +200,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void attemptToReadDisallowedDestinationPropertyIsNotFatal() throws JMSException {
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public Destination getJMSDestination() throws JMSException {
throw new JMSException("illegal property");
@@ -212,7 +211,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void attemptToReadDisallowedDeliveryModePropertyIsNotFatal() throws JMSException {
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public int getJMSDeliveryMode() throws JMSException {
throw new JMSException("illegal property");
@@ -223,7 +222,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void attemptToReadDisallowedExpirationPropertyIsNotFatal() throws JMSException {
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public long getJMSExpiration() throws JMSException {
throw new JMSException("illegal property");
@@ -234,7 +233,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void attemptToReadDisallowedMessageIdPropertyIsNotFatal() throws JMSException {
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public String getJMSMessageID() throws JMSException {
throw new JMSException("illegal property");
@@ -245,7 +244,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void attemptToReadDisallowedPriorityPropertyIsNotFatal() throws JMSException {
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public int getJMSPriority() throws JMSException {
throw new JMSException("illegal property");
@@ -256,7 +255,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void attemptToReadDisallowedReplyToPropertyIsNotFatal() throws JMSException {
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public Destination getJMSReplyTo() throws JMSException {
throw new JMSException("illegal property");
@@ -267,7 +266,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void attemptToReadDisallowedRedeliveredPropertyIsNotFatal() throws JMSException {
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public boolean getJMSRedelivered() throws JMSException {
throw new JMSException("illegal property");
@@ -278,7 +277,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void attemptToReadDisallowedTypePropertyIsNotFatal() throws JMSException {
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public String getJMSType() throws JMSException {
throw new JMSException("illegal property");
@@ -289,7 +288,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void attemptToReadDisallowedTimestampPropertyIsNotFatal() throws JMSException {
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public long getJMSTimestamp() throws JMSException {
throw new JMSException("illegal property");
@@ -300,7 +299,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void attemptToReadDisallowedUserPropertyIsNotFatal() throws JMSException {
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public Object getObjectProperty(String name) throws JMSException {
if (name.equals("fail")) {
@@ -321,7 +320,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void jmsCorrelationIdMappedToHeader() throws JMSException {
String correlationId = "ABC-123";
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
jmsMessage.setJMSCorrelationID(correlationId);
assertInboundHeader(jmsMessage, JmsHeaders.CORRELATION_ID, correlationId);
}
@@ -329,7 +328,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void destinationMappedToHeader() throws JMSException {
Destination destination = new Destination() {};
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
jmsMessage.setJMSDestination(destination);
assertInboundHeader(jmsMessage, JmsHeaders.DESTINATION, destination);
}
@@ -337,7 +336,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void jmsDeliveryModeMappedToHeader() throws JMSException {
int deliveryMode = 1;
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
jmsMessage.setJMSDeliveryMode(deliveryMode);
assertInboundHeader(jmsMessage, JmsHeaders.DELIVERY_MODE, deliveryMode);
}
@@ -345,7 +344,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void jmsExpirationMappedToHeader() throws JMSException {
long expiration = 1000L;
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
jmsMessage.setJMSExpiration(expiration);
assertInboundHeader(jmsMessage, JmsHeaders.EXPIRATION, expiration);
}
@@ -353,7 +352,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void jmsMessageIdMappedToHeader() throws JMSException {
String messageId = "ID:ABC-123";
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
jmsMessage.setJMSMessageID(messageId);
assertInboundHeader(jmsMessage, JmsHeaders.MESSAGE_ID, messageId);
}
@@ -361,7 +360,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void jmsPriorityMappedToHeader() throws JMSException {
int priority = 8;
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
jmsMessage.setJMSPriority(priority);
assertInboundHeader(jmsMessage, JmsHeaders.PRIORITY, priority);
}
@@ -369,7 +368,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void jmsReplyToMappedToHeader() throws JMSException {
Destination replyTo = new Destination() {};
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
jmsMessage.setJMSReplyTo(replyTo);
assertInboundHeader(jmsMessage, JmsHeaders.REPLY_TO, replyTo);
}
@@ -377,7 +376,7 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void jmsTypeMappedToHeader() throws JMSException {
String type = "testing";
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
jmsMessage.setJMSType(type);
assertInboundHeader(jmsMessage, JmsHeaders.TYPE, type);
}
@@ -385,28 +384,28 @@ public class SimpleJmsHeaderMapperTests {
@Test
public void jmsTimestampMappedToHeader() throws JMSException {
long timestamp = 123L;
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
jmsMessage.setJMSTimestamp(timestamp);
assertInboundHeader(jmsMessage, JmsHeaders.TIMESTAMP, timestamp);
}
@Test
public void contentTypePropertyMappedToHeader() throws JMSException {
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
jmsMessage.setStringProperty("content_type", "foo");
assertInboundHeader(jmsMessage, MessageHeaders.CONTENT_TYPE, "foo");
}
@Test
public void userDefinedPropertyMappedToHeader() throws JMSException {
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
jmsMessage.setIntProperty("foo", 123);
assertInboundHeader(jmsMessage, "foo", 123);
}
@Test
public void userDefinedPropertyMappedToHeaderWithCustomPrefix() throws JMSException {
- javax.jms.Message jmsMessage = new StubTextMessage();
+ jakarta.jms.Message jmsMessage = new StubTextMessage();
jmsMessage.setIntProperty("foo", 123);
mapper.setInboundPrefix("custom_");
assertInboundHeader(jmsMessage, "custom_foo", 123);
@@ -419,7 +418,7 @@ public class SimpleJmsHeaderMapperTests {
.setHeader("bad", 456)
.setHeader("bar", 789)
.build();
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public void setObjectProperty(String name, Object value) throws JMSException {
if (name.equals("bad")) {
@@ -444,7 +443,7 @@ public class SimpleJmsHeaderMapperTests {
.setHeader("bad", 456)
.setHeader("bar", 789)
.build();
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public void setObjectProperty(String name, Object value) throws JMSException {
if (name.equals("bad")) {
@@ -468,7 +467,7 @@ public class SimpleJmsHeaderMapperTests {
.setHeader(JmsHeaders.REPLY_TO, new Destination() {})
.setHeader("foo", "bar")
.build();
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public void setJMSReplyTo(Destination replyTo) throws JMSException {
throw new JMSException("illegal property");
@@ -486,7 +485,7 @@ public class SimpleJmsHeaderMapperTests {
.setHeader(JmsHeaders.TYPE, "someType")
.setHeader("foo", "bar")
.build();
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public void setJMSType(String type) throws JMSException {
throw new JMSException("illegal property");
@@ -504,7 +503,7 @@ public class SimpleJmsHeaderMapperTests {
.setHeader(JmsHeaders.CORRELATION_ID, "abc")
.setHeader("foo", "bar")
.build();
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public void setJMSCorrelationID(String correlationId) throws JMSException {
throw new JMSException("illegal property");
@@ -522,7 +521,7 @@ public class SimpleJmsHeaderMapperTests {
.setHeader(JmsHeaders.CORRELATION_ID, 123)
.setHeader("foo", "bar")
.build();
- javax.jms.Message jmsMessage = new StubTextMessage() {
+ jakarta.jms.Message jmsMessage = new StubTextMessage() {
@Override
public void setJMSCorrelationID(String correlationId) throws JMSException {
throw new JMSException("illegal property");
@@ -535,7 +534,7 @@ public class SimpleJmsHeaderMapperTests {
}
- private void assertInboundHeader(javax.jms.Message jmsMessage, String headerId, Object value) {
+ private void assertInboundHeader(jakarta.jms.Message jmsMessage, String headerId, Object value) {
Map headers = mapper.toHeaders(jmsMessage);
Object headerValue = headers.get(headerId);
if (value == null) {
@@ -548,7 +547,7 @@ public class SimpleJmsHeaderMapperTests {
}
}
- private void assertAttemptReadDisallowedPropertyIsNotFatal(javax.jms.Message jmsMessage, String headerId)
+ private void assertAttemptReadDisallowedPropertyIsNotFatal(jakarta.jms.Message jmsMessage, String headerId)
throws JMSException {
jmsMessage.setStringProperty("foo", "bar");
Map headers = mapper.toHeaders(jmsMessage);
diff --git a/spring-jms/src/test/java/org/springframework/jms/support/SimpleMessageConverterTests.java b/spring-jms/src/test/java/org/springframework/jms/support/SimpleMessageConverterTests.java
index 41aed17f47a..bcbb41a64a3 100644
--- a/spring-jms/src/test/java/org/springframework/jms/support/SimpleMessageConverterTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/support/SimpleMessageConverterTests.java
@@ -21,14 +21,13 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import javax.jms.BytesMessage;
-import javax.jms.JMSException;
-import javax.jms.MapMessage;
-import javax.jms.Message;
-import javax.jms.ObjectMessage;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-
+import jakarta.jms.BytesMessage;
+import jakarta.jms.JMSException;
+import jakarta.jms.MapMessage;
+import jakarta.jms.Message;
+import jakarta.jms.ObjectMessage;
+import jakarta.jms.Session;
+import jakarta.jms.TextMessage;
import org.junit.jupiter.api.Test;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
diff --git a/spring-jms/src/test/java/org/springframework/jms/support/converter/MappingJackson2MessageConverterTests.java b/spring-jms/src/test/java/org/springframework/jms/support/converter/MappingJackson2MessageConverterTests.java
index 4f428c27093..42eb86a6871 100644
--- a/spring-jms/src/test/java/org/springframework/jms/support/converter/MappingJackson2MessageConverterTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/support/converter/MappingJackson2MessageConverterTests.java
@@ -23,12 +23,11 @@ import java.util.Date;
import java.util.HashMap;
import java.util.Map;
-import javax.jms.BytesMessage;
-import javax.jms.JMSException;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-
import com.fasterxml.jackson.annotation.JsonView;
+import jakarta.jms.BytesMessage;
+import jakarta.jms.JMSException;
+import jakarta.jms.Session;
+import jakarta.jms.TextMessage;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.stubbing.Answer;
diff --git a/spring-jms/src/test/java/org/springframework/jms/support/converter/MarshallingMessageConverterTests.java b/spring-jms/src/test/java/org/springframework/jms/support/converter/MarshallingMessageConverterTests.java
index b0c23cd0bff..a0c37d17450 100644
--- a/spring-jms/src/test/java/org/springframework/jms/support/converter/MarshallingMessageConverterTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/support/converter/MarshallingMessageConverterTests.java
@@ -16,12 +16,12 @@
package org.springframework.jms.support.converter;
-import javax.jms.BytesMessage;
-import javax.jms.Session;
-import javax.jms.TextMessage;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
+import jakarta.jms.BytesMessage;
+import jakarta.jms.Session;
+import jakarta.jms.TextMessage;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-jms/src/test/java/org/springframework/jms/support/converter/MessagingMessageConverterTests.java b/spring-jms/src/test/java/org/springframework/jms/support/converter/MessagingMessageConverterTests.java
index d1c28956e5e..e5e5a26bb47 100644
--- a/spring-jms/src/test/java/org/springframework/jms/support/converter/MessagingMessageConverterTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/support/converter/MessagingMessageConverterTests.java
@@ -18,11 +18,10 @@ package org.springframework.jms.support.converter;
import java.io.Serializable;
-import javax.jms.JMSException;
-import javax.jms.ObjectMessage;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-
+import jakarta.jms.JMSException;
+import jakarta.jms.ObjectMessage;
+import jakarta.jms.Session;
+import jakarta.jms.TextMessage;
import org.junit.jupiter.api.Test;
import org.springframework.jms.StubTextMessage;
@@ -75,7 +74,7 @@ public class MessagingMessageConverterTests {
private boolean called;
@Override
- public Object fromMessage(javax.jms.Message message) throws JMSException, MessageConversionException {
+ public Object fromMessage(jakarta.jms.Message message) throws JMSException, MessageConversionException {
if (this.called) {
throw new java.lang.IllegalStateException("Converter called twice");
}
diff --git a/spring-jms/src/test/java/org/springframework/jms/support/destination/DynamicDestinationResolverTests.java b/spring-jms/src/test/java/org/springframework/jms/support/destination/DynamicDestinationResolverTests.java
index 0a11c2e186b..841cb96bd52 100644
--- a/spring-jms/src/test/java/org/springframework/jms/support/destination/DynamicDestinationResolverTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/support/destination/DynamicDestinationResolverTests.java
@@ -16,14 +16,13 @@
package org.springframework.jms.support.destination;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Queue;
-import javax.jms.QueueSession;
-import javax.jms.Session;
-import javax.jms.Topic;
-import javax.jms.TopicSession;
-
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Queue;
+import jakarta.jms.QueueSession;
+import jakarta.jms.Session;
+import jakarta.jms.Topic;
+import jakarta.jms.TopicSession;
import org.junit.jupiter.api.Test;
import org.springframework.jms.StubQueue;
diff --git a/spring-jms/src/test/java/org/springframework/jms/support/destination/JmsDestinationAccessorTests.java b/spring-jms/src/test/java/org/springframework/jms/support/destination/JmsDestinationAccessorTests.java
index 24e1777ca42..3e02eabc4ee 100644
--- a/spring-jms/src/test/java/org/springframework/jms/support/destination/JmsDestinationAccessorTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/support/destination/JmsDestinationAccessorTests.java
@@ -16,8 +16,7 @@
package org.springframework.jms.support.destination;
-import javax.jms.ConnectionFactory;
-
+import jakarta.jms.ConnectionFactory;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/spring-jms/src/test/java/org/springframework/jms/support/destination/JndiDestinationResolverTests.java b/spring-jms/src/test/java/org/springframework/jms/support/destination/JndiDestinationResolverTests.java
index 29003335868..895373eab59 100644
--- a/spring-jms/src/test/java/org/springframework/jms/support/destination/JndiDestinationResolverTests.java
+++ b/spring-jms/src/test/java/org/springframework/jms/support/destination/JndiDestinationResolverTests.java
@@ -16,10 +16,10 @@
package org.springframework.jms.support.destination;
-import javax.jms.Destination;
-import javax.jms.Session;
import javax.naming.NamingException;
+import jakarta.jms.Destination;
+import jakarta.jms.Session;
import org.junit.jupiter.api.Test;
import org.springframework.jms.StubTopic;
diff --git a/spring-messaging/spring-messaging.gradle b/spring-messaging/spring-messaging.gradle
index c0c7270ebde..61554bc7183 100644
--- a/spring-messaging/spring-messaging.gradle
+++ b/spring-messaging/spring-messaging.gradle
@@ -13,15 +13,15 @@ dependencies {
optional("io.rsocket:rsocket-transport-netty")
optional("com.fasterxml.jackson.core:jackson-databind")
optional("com.google.code.gson:gson")
- optional("javax.json.bind:javax.json.bind-api")
- optional("javax.xml.bind:jaxb-api")
+ optional("jakarta.json.bind:jakarta.json.bind-api")
+ optional("jakarta.xml.bind:jakarta.xml.bind-api")
optional("com.google.protobuf:protobuf-java-util")
optional("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
optional("org.jetbrains.kotlinx:kotlinx-serialization-json")
testImplementation(testFixtures(project(":spring-core")))
- testImplementation("javax.inject:javax.inject-tck")
- testImplementation("javax.servlet:javax.servlet-api")
- testImplementation("javax.validation:validation-api")
+ testImplementation("jakarta.inject:jakarta.inject-tck")
+ testImplementation("jakarta.servlet:jakarta.servlet-api")
+ testImplementation("jakarta.validation:jakarta.validation-api")
testImplementation("com.thoughtworks.xstream:xstream")
testImplementation("org.apache.activemq:activemq-broker")
testImplementation("org.apache.activemq:activemq-kahadb-store")
@@ -32,10 +32,10 @@ dependencies {
testImplementation("org.jetbrains.kotlin:kotlin-stdlib")
testImplementation("org.xmlunit:xmlunit-assertj")
testImplementation("org.xmlunit:xmlunit-matchers")
- testRuntimeOnly("com.sun.activation:javax.activation")
+ testRuntimeOnly("com.sun.activation:jakarta.activation")
testRuntimeOnly("com.sun.xml.bind:jaxb-core")
testRuntimeOnly("com.sun.xml.bind:jaxb-impl")
- testRuntimeOnly("javax.json:javax.json-api")
- testRuntimeOnly("org.apache.johnzon:johnzon-jsonb")
+ testRuntimeOnly("jakarta.json:jakarta.json-api")
+ testRuntimeOnly("org.eclipse:yasson")
testRuntimeOnly(project(":spring-context"))
}
diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/JsonbMessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/JsonbMessageConverter.java
index e327edbc2fc..53ea6058798 100644
--- a/spring-messaging/src/main/java/org/springframework/messaging/converter/JsonbMessageConverter.java
+++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/JsonbMessageConverter.java
@@ -21,9 +21,9 @@ import java.io.Writer;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
-import javax.json.bind.Jsonb;
-import javax.json.bind.JsonbBuilder;
-import javax.json.bind.JsonbConfig;
+import jakarta.json.bind.Jsonb;
+import jakarta.json.bind.JsonbBuilder;
+import jakarta.json.bind.JsonbConfig;
import org.springframework.util.Assert;
@@ -33,8 +33,8 @@ import org.springframework.util.Assert;
*
* @author Juergen Hoeller
* @since 5.3
- * @see javax.json.bind.Jsonb
- * @see javax.json.bind.JsonbBuilder
+ * @see jakarta.json.bind.Jsonb
+ * @see jakarta.json.bind.JsonbBuilder
* @see #setJsonb
*/
public class JsonbMessageConverter extends AbstractJsonMessageConverter {
diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolver.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolver.java
index c36a99ba97a..07b0d28a4df 100644
--- a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolver.java
+++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolver.java
@@ -63,7 +63,7 @@ import org.springframework.validation.annotation.Validated;
* {@link DataBuffer DataBuffer}.
*
* Validation is applied if the method argument is annotated with
- * {@code @javax.validation.Valid} or
+ * {@code @jakarta.validation.Valid} or
* {@link org.springframework.validation.annotation.Validated}. Validation
* failure results in an {@link MethodArgumentNotValidException}.
*
@@ -143,7 +143,7 @@ public class PayloadMethodArgumentResolver implements HandlerMethodArgumentResol
* {@link Decoder}.
*
*
Validation is applied if the method argument is annotated with
- * {@code @javax.validation.Valid} or
+ * {@code @jakarta.validation.Valid} or
* {@link org.springframework.validation.annotation.Validated}. Validation
* failure results in an {@link MethodArgumentNotValidException}.
*
diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/PayloadMethodArgumentResolver.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/PayloadMethodArgumentResolver.java
index 2ced8c86cd4..92e5d5ecc9f 100644
--- a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/PayloadMethodArgumentResolver.java
+++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/PayloadMethodArgumentResolver.java
@@ -190,7 +190,7 @@ public class PayloadMethodArgumentResolver implements HandlerMethodArgumentResol
/**
* Validate the payload if applicable.
- *
The default implementation checks for {@code @javax.validation.Valid},
+ *
The default implementation checks for {@code @jakarta.validation.Valid},
* Spring's {@link Validated},
* and custom annotations whose name starts with "Valid".
* @param message the currently processed message
diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java
index fb4150ad7b0..c44ff260103 100644
--- a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java
+++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java
@@ -112,7 +112,7 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) &&
ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader);
gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", classLoader);
- jsonbPresent = ClassUtils.isPresent("javax.json.bind.Jsonb", classLoader);
+ jsonbPresent = ClassUtils.isPresent("jakarta.json.bind.Jsonb", classLoader);
kotlinSerializationJsonPresent = ClassUtils.isPresent("kotlinx.serialization.json.Json", classLoader);
}
@@ -553,7 +553,7 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
if (this.applicationContext != null && this.applicationContext.containsBean(MVC_VALIDATOR_NAME)) {
validator = this.applicationContext.getBean(MVC_VALIDATOR_NAME, Validator.class);
}
- else if (ClassUtils.isPresent("javax.validation.Validator", getClass().getClassLoader())) {
+ else if (ClassUtils.isPresent("jakarta.validation.Validator", getClass().getClassLoader())) {
Class> clazz;
try {
String className = "org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean";
diff --git a/spring-messaging/src/test/java/org/springframework/messaging/converter/JsonbMessageConverterTests.java b/spring-messaging/src/test/java/org/springframework/messaging/converter/JsonbMessageConverterTests.java
index 63380ea4ebc..b5026deffdc 100644
--- a/spring-messaging/src/test/java/org/springframework/messaging/converter/JsonbMessageConverterTests.java
+++ b/spring-messaging/src/test/java/org/springframework/messaging/converter/JsonbMessageConverterTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
package org.springframework.messaging.converter;
import java.lang.reflect.Method;
+import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap;
@@ -74,8 +75,8 @@ public class JsonbMessageConverterTests {
HashMap actual = (HashMap) converter.fromMessage(message, HashMap.class);
assertThat(actual.get("string")).isEqualTo("Foo");
- assertThat(actual.get("number")).isEqualTo(42);
- assertThat((Double) actual.get("fraction")).isCloseTo(42D, within(0D));
+ assertThat(actual.get("number")).isEqualTo(new BigDecimal(42));
+ assertThat((BigDecimal) actual.get("fraction")).isCloseTo(new BigDecimal(42), within(new BigDecimal(0)));
assertThat(actual.get("array")).isEqualTo(Arrays.asList("Foo", "Bar"));
assertThat(actual.get("bool")).isEqualTo(Boolean.TRUE);
}
@@ -165,7 +166,7 @@ public class JsonbMessageConverterTests {
String payload = "H\u00e9llo W\u00f6rld";
Message> message = converter.toMessage(payload, headers);
- assertThat(new String((byte[]) message.getPayload(), StandardCharsets.UTF_16BE)).isEqualTo(payload);
+ assertThat(new String((byte[]) message.getPayload(), StandardCharsets.UTF_16BE)).isEqualTo("\"" + payload + "\"");
assertThat(message.getHeaders().get(MessageHeaders.CONTENT_TYPE)).isEqualTo(contentType);
}
@@ -181,7 +182,7 @@ public class JsonbMessageConverterTests {
String payload = "H\u00e9llo W\u00f6rld";
Message> message = converter.toMessage(payload, headers);
- assertThat(message.getPayload()).isEqualTo(payload);
+ assertThat(message.getPayload()).isEqualTo("\"" + payload + "\"");
assertThat(message.getHeaders().get(MessageHeaders.CONTENT_TYPE)).isEqualTo(contentType);
}
diff --git a/spring-messaging/src/test/java/org/springframework/messaging/converter/MarshallingMessageConverterTests.java b/spring-messaging/src/test/java/org/springframework/messaging/converter/MarshallingMessageConverterTests.java
index a676edb99b1..19aad50fdd9 100644
--- a/spring-messaging/src/test/java/org/springframework/messaging/converter/MarshallingMessageConverterTests.java
+++ b/spring-messaging/src/test/java/org/springframework/messaging/converter/MarshallingMessageConverterTests.java
@@ -19,8 +19,7 @@ package org.springframework.messaging.converter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
-import javax.xml.bind.annotation.XmlRootElement;
-
+import jakarta.xml.bind.annotation.XmlRootElement;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.xmlunit.diff.DifferenceEvaluator;
diff --git a/spring-orm/spring-orm.gradle b/spring-orm/spring-orm.gradle
index 7870f5d77d7..d7d2bebf52b 100644
--- a/spring-orm/spring-orm.gradle
+++ b/spring-orm/spring-orm.gradle
@@ -9,13 +9,13 @@ dependencies {
optional(project(":spring-context"))
optional(project(":spring-web"))
optional("org.eclipse.persistence:org.eclipse.persistence.jpa")
- optional("org.hibernate:hibernate-core")
- optional("javax.servlet:javax.servlet-api")
+ optional("org.hibernate:hibernate-core-jakarta")
+ optional("jakarta.servlet:jakarta.servlet-api")
testImplementation(testFixtures(project(":spring-beans")))
testImplementation(testFixtures(project(":spring-context")))
testImplementation(testFixtures(project(":spring-core")))
testImplementation(testFixtures(project(":spring-web")))
testImplementation("org.aspectj:aspectjweaver")
testImplementation("org.hsqldb:hsqldb")
- testRuntimeOnly("javax.xml.bind:jaxb-api")
+ testRuntimeOnly("jakarta.xml.bind:jakarta.xml.bind-api")
}
diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/ConfigurableJtaPlatform.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/ConfigurableJtaPlatform.java
index 839fe1777ca..38265a6f1f9 100644
--- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/ConfigurableJtaPlatform.java
+++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/ConfigurableJtaPlatform.java
@@ -16,14 +16,13 @@
package org.springframework.orm.hibernate5;
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-import javax.transaction.TransactionSynchronizationRegistry;
-import javax.transaction.UserTransaction;
-
+import jakarta.transaction.Status;
+import jakarta.transaction.Synchronization;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.TransactionSynchronizationRegistry;
+import jakarta.transaction.UserTransaction;
import org.hibernate.TransactionException;
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateExceptionTranslator.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateExceptionTranslator.java
index bfd086eb626..2f69163421f 100644
--- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateExceptionTranslator.java
+++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateExceptionTranslator.java
@@ -16,8 +16,7 @@
package org.springframework.orm.hibernate5;
-import javax.persistence.PersistenceException;
-
+import jakarta.persistence.PersistenceException;
import org.hibernate.HibernateException;
import org.hibernate.JDBCException;
diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTemplate.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTemplate.java
index e624fca329a..dd2d7ff1fad 100644
--- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTemplate.java
+++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTemplate.java
@@ -25,8 +25,7 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.List;
-import javax.persistence.PersistenceException;
-
+import jakarta.persistence.PersistenceException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTransactionManager.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTransactionManager.java
index 65990f3e833..8d0001c5741 100644
--- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTransactionManager.java
+++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTransactionManager.java
@@ -20,9 +20,9 @@ import java.sql.Connection;
import java.sql.ResultSet;
import java.util.function.Consumer;
-import javax.persistence.PersistenceException;
import javax.sql.DataSource;
+import jakarta.persistence.PersistenceException;
import org.hibernate.ConnectionReleaseMode;
import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java
index dc840bdfdc5..eb8fc4acfeb 100644
--- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java
+++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java
@@ -281,7 +281,7 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator
/**
* Set the Spring {@link org.springframework.transaction.jta.JtaTransactionManager}
- * or the JTA {@link javax.transaction.TransactionManager} to be used with Hibernate,
+ * or the JTA {@link jakarta.transaction.TransactionManager} to be used with Hibernate,
* if any. Implicitly sets up {@code JtaPlatform}.
* @see LocalSessionFactoryBuilder#setJtaTransactionManager
*/
@@ -343,8 +343,8 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator
/**
* Specify custom type filters for Spring-based scanning for entity classes.
* Default is to search all specified packages for classes annotated with
- * {@code @javax.persistence.Entity}, {@code @javax.persistence.Embeddable}
- * or {@code @javax.persistence.MappedSuperclass}.
+ * {@code @jakarta.persistence.Entity}, {@code @jakarta.persistence.Embeddable}
+ * or {@code @jakarta.persistence.MappedSuperclass}.
* @see #setPackagesToScan
*/
public void setEntityTypeFilters(TypeFilter... entityTypeFilters) {
diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBuilder.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBuilder.java
index 9011db8fb55..5fac7741cd2 100644
--- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBuilder.java
+++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBuilder.java
@@ -28,14 +28,14 @@ import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
-import javax.persistence.AttributeConverter;
-import javax.persistence.Converter;
-import javax.persistence.Embeddable;
-import javax.persistence.Entity;
-import javax.persistence.MappedSuperclass;
import javax.sql.DataSource;
-import javax.transaction.TransactionManager;
+import jakarta.persistence.AttributeConverter;
+import jakarta.persistence.Converter;
+import jakarta.persistence.Embeddable;
+import jakarta.persistence.Entity;
+import jakarta.persistence.MappedSuperclass;
+import jakarta.transaction.TransactionManager;
import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.SessionFactory;
@@ -269,8 +269,8 @@ public class LocalSessionFactoryBuilder extends Configuration {
/**
* Specify custom type filters for Spring-based scanning for entity classes.
*
Default is to search all specified packages for classes annotated with
- * {@code @javax.persistence.Entity}, {@code @javax.persistence.Embeddable}
- * or {@code @javax.persistence.MappedSuperclass}.
+ * {@code @jakarta.persistence.Entity}, {@code @jakarta.persistence.Embeddable}
+ * or {@code @jakarta.persistence.MappedSuperclass}.
* @see #scanPackages
*/
public LocalSessionFactoryBuilder setEntityTypeFilters(TypeFilter... entityTypeFilters) {
diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/SessionFactoryUtils.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/SessionFactoryUtils.java
index d3b61969aac..32cf2bc90e7 100644
--- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/SessionFactoryUtils.java
+++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/SessionFactoryUtils.java
@@ -19,9 +19,9 @@ package org.springframework.orm.hibernate5;
import java.lang.reflect.Method;
import java.util.Map;
-import javax.persistence.PersistenceException;
import javax.sql.DataSource;
+import jakarta.persistence.PersistenceException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/SpringSessionContext.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/SpringSessionContext.java
index 859abaf7284..a7a5e2f3d26 100644
--- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/SpringSessionContext.java
+++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/SpringSessionContext.java
@@ -16,10 +16,9 @@
package org.springframework.orm.hibernate5;
-import javax.transaction.Status;
-import javax.transaction.SystemException;
-import javax.transaction.TransactionManager;
-
+import jakarta.transaction.Status;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.TransactionManager;
import org.apache.commons.logging.LogFactory;
import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/support/OpenSessionInViewFilter.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/support/OpenSessionInViewFilter.java
index 3379e517c38..7c90bf31ba1 100644
--- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/support/OpenSessionInViewFilter.java
+++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/support/OpenSessionInViewFilter.java
@@ -18,11 +18,10 @@ package org.springframework.orm.hibernate5.support;
import java.io.IOException;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
import org.hibernate.Session;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java
index 4a787866287..1a732825461 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java
@@ -34,15 +34,15 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.function.Consumer;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceException;
-import javax.persistence.Query;
-import javax.persistence.SynchronizationType;
-import javax.persistence.spi.PersistenceProvider;
-import javax.persistence.spi.PersistenceUnitInfo;
import javax.sql.DataSource;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.PersistenceException;
+import jakarta.persistence.Query;
+import jakarta.persistence.SynchronizationType;
+import jakarta.persistence.spi.PersistenceProvider;
+import jakarta.persistence.spi.PersistenceUnitInfo;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -64,7 +64,7 @@ import org.springframework.util.CollectionUtils;
/**
* Abstract {@link org.springframework.beans.factory.FactoryBean} that creates
- * a local JPA {@link javax.persistence.EntityManagerFactory} instance within
+ * a local JPA {@link jakarta.persistence.EntityManagerFactory} instance within
* a Spring application context.
*
*
Encapsulates the common functionality between the different JPA bootstrap
@@ -149,8 +149,8 @@ public abstract class AbstractEntityManagerFactoryBean implements
* taken from the JpaVendorAdapter (if any) or retrieved through scanning
* (as far as possible).
* @see JpaVendorAdapter#getPersistenceProvider()
- * @see javax.persistence.spi.PersistenceProvider
- * @see javax.persistence.Persistence
+ * @see jakarta.persistence.spi.PersistenceProvider
+ * @see jakarta.persistence.Persistence
*/
public void setPersistenceProviderClass(Class extends PersistenceProvider> persistenceProviderClass) {
this.persistenceProvider = BeanUtils.instantiateClass(persistenceProviderClass);
@@ -162,8 +162,8 @@ public abstract class AbstractEntityManagerFactoryBean implements
* will be taken from the JpaVendorAdapter (if any) or determined
* by the persistence unit deployment descriptor (as far as possible).
* @see JpaVendorAdapter#getPersistenceProvider()
- * @see javax.persistence.spi.PersistenceProvider
- * @see javax.persistence.Persistence
+ * @see jakarta.persistence.spi.PersistenceProvider
+ * @see jakarta.persistence.Persistence
*/
public void setPersistenceProvider(@Nullable PersistenceProvider persistenceProvider) {
this.persistenceProvider = persistenceProvider;
@@ -180,7 +180,7 @@ public abstract class AbstractEntityManagerFactoryBean implements
*
Default is none, indicating the default EntityManagerFactory
* configuration. The persistence provider will throw an exception if
* ambiguous EntityManager configurations are found.
- * @see javax.persistence.Persistence#createEntityManagerFactory(String)
+ * @see jakarta.persistence.Persistence#createEntityManagerFactory(String)
*/
public void setPersistenceUnitName(@Nullable String persistenceUnitName) {
this.persistenceUnitName = persistenceUnitName;
@@ -197,8 +197,8 @@ public abstract class AbstractEntityManagerFactoryBean implements
* {@code Persistence.createEntityManagerFactory} (if any).
*
Can be populated with a String "value" (parsed via PropertiesEditor) or a
* "props" element in XML bean definitions.
- * @see javax.persistence.Persistence#createEntityManagerFactory(String, Map)
- * @see javax.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory(PersistenceUnitInfo, Map)
+ * @see jakarta.persistence.Persistence#createEntityManagerFactory(String, Map)
+ * @see jakarta.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory(PersistenceUnitInfo, Map)
*/
public void setJpaProperties(Properties jpaProperties) {
CollectionUtils.mergePropertiesIntoMap(jpaProperties, this.jpaPropertyMap);
@@ -208,8 +208,8 @@ public abstract class AbstractEntityManagerFactoryBean implements
* Specify JPA properties as a Map, to be passed into
* {@code Persistence.createEntityManagerFactory} (if any).
*
Can be populated with a "map" or "props" element in XML bean definitions.
- * @see javax.persistence.Persistence#createEntityManagerFactory(String, Map)
- * @see javax.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory(PersistenceUnitInfo, Map)
+ * @see jakarta.persistence.Persistence#createEntityManagerFactory(String, Map)
+ * @see jakarta.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory(PersistenceUnitInfo, Map)
*/
public void setJpaPropertyMap(@Nullable Map jpaProperties) {
if (jpaProperties != null) {
@@ -231,7 +231,7 @@ public abstract class AbstractEntityManagerFactoryBean implements
* Specify the (potentially vendor-specific) EntityManagerFactory interface
* that this EntityManagerFactory proxy is supposed to implement.
* The default will be taken from the specific JpaVendorAdapter, if any,
- * or set to the standard {@code javax.persistence.EntityManagerFactory}
+ * or set to the standard {@code jakarta.persistence.EntityManagerFactory}
* interface else.
* @see JpaVendorAdapter#getEntityManagerFactoryInterface()
*/
@@ -243,7 +243,7 @@ public abstract class AbstractEntityManagerFactoryBean implements
* Specify the (potentially vendor-specific) EntityManager interface
* that this factory's EntityManagers are supposed to implement.
*
The default will be taken from the specific JpaVendorAdapter, if any,
- * or set to the standard {@code javax.persistence.EntityManager}
+ * or set to the standard {@code jakarta.persistence.EntityManager}
* interface else.
* @see JpaVendorAdapter#getEntityManagerInterface()
* @see EntityManagerFactoryInfo#getEntityManagerInterface()
@@ -468,7 +468,7 @@ public abstract class AbstractEntityManagerFactoryBean implements
if (entityManagerFactoryInterface != null) {
throw new IllegalStateException("EntityManagerFactory interface [" + entityManagerFactoryInterface +
"] seems to conflict with Spring's EntityManagerFactoryInfo mixin - consider resetting the "+
- "'entityManagerFactoryInterface' property to plain [javax.persistence.EntityManagerFactory]", ex);
+ "'entityManagerFactoryInterface' property to plain [jakarta.persistence.EntityManagerFactory]", ex);
}
else {
throw new IllegalStateException("Conflicting EntityManagerFactory interfaces - " +
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/DefaultJpaDialect.java b/spring-orm/src/main/java/org/springframework/orm/jpa/DefaultJpaDialect.java
index 7fe2d71eeff..d78a2f79948 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/DefaultJpaDialect.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/DefaultJpaDialect.java
@@ -19,8 +19,8 @@ package org.springframework.orm.jpa;
import java.io.Serializable;
import java.sql.SQLException;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceException;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceException;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.datasource.ConnectionHandle;
@@ -53,7 +53,7 @@ public class DefaultJpaDialect implements JpaDialect, Serializable {
* is no state to be kept for a standard JPA transaction. Hence, subclasses do not
* have to care about the return value ({@code null}) of this implementation
* and are free to return their own transaction data Object.
- * @see javax.persistence.EntityTransaction#begin
+ * @see jakarta.persistence.EntityTransaction#begin
* @see org.springframework.transaction.InvalidIsolationLevelException
* @see #cleanupTransaction
*/
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryAccessor.java b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryAccessor.java
index b7ca9b83cd0..5f73add8581 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryAccessor.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryAccessor.java
@@ -20,9 +20,8 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -59,8 +58,8 @@ public abstract class EntityManagerFactoryAccessor implements BeanFactoryAware {
/**
* Set the JPA EntityManagerFactory that should be used to create
* EntityManagers.
- * @see javax.persistence.EntityManagerFactory#createEntityManager()
- * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
+ * @see jakarta.persistence.EntityManagerFactory#createEntityManager()
+ * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
*/
public void setEntityManagerFactory(@Nullable EntityManagerFactory emf) {
this.entityManagerFactory = emf;
@@ -112,7 +111,7 @@ public abstract class EntityManagerFactoryAccessor implements BeanFactoryAware {
* {@code EntityManagerFactory.createEntityManager(Map)} (if any).
*
Can be populated with a String "value" (parsed via PropertiesEditor)
* or a "props" element in XML bean definitions.
- * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
+ * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
*/
public void setJpaProperties(Properties jpaProperties) {
CollectionUtils.mergePropertiesIntoMap(jpaProperties, this.jpaPropertyMap);
@@ -122,7 +121,7 @@ public abstract class EntityManagerFactoryAccessor implements BeanFactoryAware {
* Specify JPA properties as a Map, to be passed into
* {@code EntityManagerFactory.createEntityManager(Map)} (if any).
*
Can be populated with a "map" or "props" element in XML bean definitions.
- * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
+ * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
*/
public void setJpaPropertyMap(@Nullable Map jpaProperties) {
if (jpaProperties != null) {
@@ -162,8 +161,8 @@ public abstract class EntityManagerFactoryAccessor implements BeanFactoryAware {
* Can be overridden in subclasses to create specific EntityManager variants.
* @return a new EntityManager
* @throws IllegalStateException if this accessor is not configured with an EntityManagerFactory
- * @see javax.persistence.EntityManagerFactory#createEntityManager()
- * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
+ * @see jakarta.persistence.EntityManagerFactory#createEntityManager()
+ * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
*/
protected EntityManager createEntityManager() throws IllegalStateException {
EntityManagerFactory emf = obtainEntityManagerFactory();
@@ -175,8 +174,8 @@ public abstract class EntityManagerFactoryAccessor implements BeanFactoryAware {
* Obtain the transactional EntityManager for this accessor's EntityManagerFactory, if any.
* @return the transactional EntityManager, or {@code null} if none
* @throws IllegalStateException if this accessor is not configured with an EntityManagerFactory
- * @see EntityManagerFactoryUtils#getTransactionalEntityManager(javax.persistence.EntityManagerFactory)
- * @see EntityManagerFactoryUtils#getTransactionalEntityManager(javax.persistence.EntityManagerFactory, java.util.Map)
+ * @see EntityManagerFactoryUtils#getTransactionalEntityManager(jakarta.persistence.EntityManagerFactory)
+ * @see EntityManagerFactoryUtils#getTransactionalEntityManager(jakarta.persistence.EntityManagerFactory, java.util.Map)
*/
@Nullable
protected EntityManager getTransactionalEntityManager() throws IllegalStateException{
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryInfo.java b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryInfo.java
index 2b4d72159b4..cdb9dda3ce5 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryInfo.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryInfo.java
@@ -18,12 +18,13 @@ package org.springframework.orm.jpa;
import java.util.Map;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.spi.PersistenceProvider;
-import javax.persistence.spi.PersistenceUnitInfo;
import javax.sql.DataSource;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.spi.PersistenceProvider;
+import jakarta.persistence.spi.PersistenceUnitInfo;
+
import org.springframework.lang.Nullable;
/**
@@ -65,7 +66,7 @@ public interface EntityManagerFactoryInfo {
* {@code getPersistenceUnitName()} must be equal to the value returned by
* {@code PersistenceUnitInfo.getPersistenceUnitName()}.
* @see #getPersistenceUnitInfo()
- * @see javax.persistence.spi.PersistenceUnitInfo#getPersistenceUnitName()
+ * @see jakarta.persistence.spi.PersistenceUnitInfo#getPersistenceUnitName()
*/
@Nullable
String getPersistenceUnitName();
@@ -83,7 +84,7 @@ public interface EntityManagerFactoryInfo {
* that this factory's EntityManagers will implement.
*
A {@code null} return value suggests that autodetection is supposed
* to happen: either based on a target {@code EntityManager} instance
- * or simply defaulting to {@code javax.persistence.EntityManager}.
+ * or simply defaulting to {@code jakarta.persistence.EntityManager}.
*/
@Nullable
Class extends EntityManager> getEntityManagerInterface();
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryUtils.java b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryUtils.java
index e8fb5e15fb8..2bf67927124 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryUtils.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryUtils.java
@@ -18,21 +18,20 @@ package org.springframework.orm.jpa;
import java.util.Map;
-import javax.persistence.EntityExistsException;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityNotFoundException;
-import javax.persistence.LockTimeoutException;
-import javax.persistence.NoResultException;
-import javax.persistence.NonUniqueResultException;
-import javax.persistence.OptimisticLockException;
-import javax.persistence.PersistenceException;
-import javax.persistence.PessimisticLockException;
-import javax.persistence.Query;
-import javax.persistence.QueryTimeoutException;
-import javax.persistence.SynchronizationType;
-import javax.persistence.TransactionRequiredException;
-
+import jakarta.persistence.EntityExistsException;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityNotFoundException;
+import jakarta.persistence.LockTimeoutException;
+import jakarta.persistence.NoResultException;
+import jakarta.persistence.NonUniqueResultException;
+import jakarta.persistence.OptimisticLockException;
+import jakarta.persistence.PersistenceException;
+import jakarta.persistence.PessimisticLockException;
+import jakarta.persistence.Query;
+import jakarta.persistence.QueryTimeoutException;
+import jakarta.persistence.SynchronizationType;
+import jakarta.persistence.TransactionRequiredException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -168,8 +167,8 @@ public abstract class EntityManagerFactoryUtils {
* @param properties the properties to be passed into the {@code createEntityManager}
* call (may be {@code null})
* @return the EntityManager, or {@code null} if none found
- * @throws javax.persistence.PersistenceException if the EntityManager couldn't be created
- * @see #getTransactionalEntityManager(javax.persistence.EntityManagerFactory)
+ * @throws jakarta.persistence.PersistenceException if the EntityManager couldn't be created
+ * @see #getTransactionalEntityManager(jakarta.persistence.EntityManagerFactory)
* @see JpaTransactionManager
*/
@Nullable
@@ -189,8 +188,8 @@ public abstract class EntityManagerFactoryUtils {
* @param synchronizedWithTransaction whether to automatically join ongoing
* transactions (according to the JPA 2.1 SynchronizationType rules)
* @return the EntityManager, or {@code null} if none found
- * @throws javax.persistence.PersistenceException if the EntityManager couldn't be created
- * @see #getTransactionalEntityManager(javax.persistence.EntityManagerFactory)
+ * @throws jakarta.persistence.PersistenceException if the EntityManager couldn't be created
+ * @see #getTransactionalEntityManager(jakarta.persistence.EntityManagerFactory)
* @see JpaTransactionManager
*/
@Nullable
@@ -334,7 +333,7 @@ public abstract class EntityManagerFactoryUtils {
/**
* Apply the current transaction timeout, if any, to the given JPA Query object.
- *
This method sets the JPA 2.0 query hint "javax.persistence.query.timeout" accordingly.
+ *
This method sets the JPA 2.0 query hint "jakarta.persistence.query.timeout" accordingly.
* @param query the JPA Query object
* @param emf the JPA EntityManagerFactory that the Query was created for
*/
@@ -343,7 +342,7 @@ public abstract class EntityManagerFactoryUtils {
if (emHolder != null && emHolder.hasTimeout()) {
int timeoutValue = (int) emHolder.getTimeToLiveInMillis();
try {
- query.setHint("javax.persistence.query.timeout", timeoutValue);
+ query.setHint("jakarta.persistence.query.timeout", timeoutValue);
}
catch (IllegalArgumentException ex) {
// oh well, at least we tried...
@@ -418,7 +417,7 @@ public abstract class EntityManagerFactoryUtils {
* Close the given JPA EntityManager,
* catching and logging any cleanup exceptions thrown.
* @param em the JPA EntityManager to close (may be {@code null})
- * @see javax.persistence.EntityManager#close()
+ * @see jakarta.persistence.EntityManager#close()
*/
public static void closeEntityManager(@Nullable EntityManager em) {
if (em != null) {
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerHolder.java b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerHolder.java
index 512cac8fe9c..cc72652674d 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerHolder.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerHolder.java
@@ -16,7 +16,7 @@
package org.springframework.orm.jpa;
-import javax.persistence.EntityManager;
+import jakarta.persistence.EntityManager;
import org.springframework.lang.Nullable;
import org.springframework.transaction.SavepointManager;
@@ -26,7 +26,7 @@ import org.springframework.util.Assert;
/**
* Resource holder wrapping a JPA {@link EntityManager}.
* {@link JpaTransactionManager} binds instances of this class to the thread,
- * for a given {@link javax.persistence.EntityManagerFactory}.
+ * for a given {@link jakarta.persistence.EntityManagerFactory}.
*
*
Also serves as a base class for {@link org.springframework.orm.hibernate5.SessionHolder},
* as of 5.1.
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerProxy.java b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerProxy.java
index 84e574d538f..704b60d234c 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerProxy.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerProxy.java
@@ -16,14 +16,14 @@
package org.springframework.orm.jpa;
-import javax.persistence.EntityManager;
+import jakarta.persistence.EntityManager;
/**
- * Subinterface of {@link javax.persistence.EntityManager} to be implemented by
+ * Subinterface of {@link jakarta.persistence.EntityManager} to be implemented by
* EntityManager proxies. Allows access to the underlying target EntityManager.
*
*
This interface is mainly intended for framework usage. Application code
- * should prefer the use of the {@link javax.persistence.EntityManager#getDelegate()}
+ * should prefer the use of the {@link jakarta.persistence.EntityManager#getDelegate()}
* method to access native functionality of the underlying resource.
*
* @author Juergen Hoeller
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java b/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java
index 8e9173a94bf..29b7a008ca9 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java
@@ -25,13 +25,12 @@ import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
-import javax.persistence.TransactionRequiredException;
-import javax.persistence.spi.PersistenceUnitInfo;
-import javax.persistence.spi.PersistenceUnitTransactionType;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityTransaction;
+import jakarta.persistence.TransactionRequiredException;
+import jakarta.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.spi.PersistenceUnitTransactionType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -47,14 +46,14 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.ConcurrentReferenceHashMap;
/**
- * Delegate for creating a variety of {@link javax.persistence.EntityManager}
+ * Delegate for creating a variety of {@link jakarta.persistence.EntityManager}
* proxies that follow the JPA spec's semantics for "extended" EntityManagers.
*
*
Supports several different variants of "extended" EntityManagers:
* in particular, an "application-managed extended EntityManager", as defined
- * by {@link javax.persistence.EntityManagerFactory#createEntityManager()},
+ * by {@link jakarta.persistence.EntityManagerFactory#createEntityManager()},
* as well as a "container-managed extended EntityManager", as defined by
- * {@link javax.persistence.PersistenceContextType#EXTENDED}.
+ * {@link jakarta.persistence.PersistenceContextType#EXTENDED}.
*
*
The original difference between "application-managed" and "container-managed"
* was the need for explicit joining of an externally managed transaction through
@@ -69,9 +68,9 @@ import org.springframework.util.ConcurrentReferenceHashMap;
* @author Rod Johnson
* @author Mark Paluch
* @since 2.0
- * @see javax.persistence.EntityManagerFactory#createEntityManager()
- * @see javax.persistence.PersistenceContextType#EXTENDED
- * @see javax.persistence.EntityManager#joinTransaction()
+ * @see jakarta.persistence.EntityManagerFactory#createEntityManager()
+ * @see jakarta.persistence.PersistenceContextType#EXTENDED
+ * @see jakarta.persistence.EntityManager#joinTransaction()
* @see SharedEntityManagerCreator
*/
public abstract class ExtendedEntityManagerCreator {
@@ -131,7 +130,7 @@ public abstract class ExtendedEntityManagerCreator {
* JpaDialect and PersistenceUnitInfo will be detected accordingly.
* @return a container-managed EntityManager that will automatically participate
* in any managed transaction
- * @see javax.persistence.EntityManagerFactory#createEntityManager()
+ * @see jakarta.persistence.EntityManagerFactory#createEntityManager()
*/
public static EntityManager createContainerManagedEntityManager(EntityManagerFactory emf) {
return createContainerManagedEntityManager(emf, null, true);
@@ -146,7 +145,7 @@ public abstract class ExtendedEntityManagerCreator {
* call (may be {@code null})
* @return a container-managed EntityManager that will automatically participate
* in any managed transaction
- * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
+ * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
*/
public static EntityManager createContainerManagedEntityManager(EntityManagerFactory emf, @Nullable Map, ?> properties) {
return createContainerManagedEntityManager(emf, properties, true);
@@ -164,7 +163,7 @@ public abstract class ExtendedEntityManagerCreator {
* @return a container-managed EntityManager that expects container-driven lifecycle
* management but may opt out of automatic transaction synchronization
* @since 4.0
- * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
+ * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
*/
public static EntityManager createContainerManagedEntityManager(
EntityManagerFactory emf, @Nullable Map, ?> properties, boolean synchronizedWithTransaction) {
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaDialect.java b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaDialect.java
index 9ef53884a49..b2c172b453f 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaDialect.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaDialect.java
@@ -18,8 +18,8 @@ package org.springframework.orm.jpa;
import java.sql.SQLException;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceException;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceException;
import org.springframework.dao.support.PersistenceExceptionTranslator;
import org.springframework.jdbc.datasource.ConnectionHandle;
@@ -73,11 +73,11 @@ public interface JpaDialect extends PersistenceExceptionTranslator {
* @return an arbitrary object that holds transaction data, if any
* (to be passed into {@link #cleanupTransaction}). May implement the
* {@link org.springframework.transaction.SavepointManager} interface.
- * @throws javax.persistence.PersistenceException if thrown by JPA methods
+ * @throws jakarta.persistence.PersistenceException if thrown by JPA methods
* @throws java.sql.SQLException if thrown by JDBC methods
* @throws org.springframework.transaction.TransactionException in case of invalid arguments
* @see #cleanupTransaction
- * @see javax.persistence.EntityTransaction#begin
+ * @see jakarta.persistence.EntityTransaction#begin
* @see org.springframework.jdbc.datasource.DataSourceUtils#prepareConnectionForTransaction
*/
@Nullable
@@ -100,7 +100,7 @@ public interface JpaDialect extends PersistenceExceptionTranslator {
* @param name the name of the transaction (if any)
* @return an arbitrary object that holds transaction data, if any
* (to be passed into cleanupTransaction)
- * @throws javax.persistence.PersistenceException if thrown by JPA methods
+ * @throws jakarta.persistence.PersistenceException if thrown by JPA methods
* @see #cleanupTransaction
*/
@Nullable
@@ -143,7 +143,7 @@ public interface JpaDialect extends PersistenceExceptionTranslator {
* @param readOnly whether the Connection is only needed for read-only purposes
* @return a handle for the Connection, to be passed into {@code releaseJdbcConnection},
* or {@code null} if no JDBC Connection can be retrieved
- * @throws javax.persistence.PersistenceException if thrown by JPA methods
+ * @throws jakarta.persistence.PersistenceException if thrown by JPA methods
* @throws java.sql.SQLException if thrown by JDBC methods
* @see #releaseJdbcConnection
* @see org.springframework.jdbc.datasource.ConnectionHandle#getConnection
@@ -163,7 +163,7 @@ public interface JpaDialect extends PersistenceExceptionTranslator {
* transaction completes or when the EntityManager is closed.
* @param conHandle the JDBC Connection handle to release
* @param entityManager the current JPA EntityManager
- * @throws javax.persistence.PersistenceException if thrown by JPA methods
+ * @throws jakarta.persistence.PersistenceException if thrown by JPA methods
* @throws java.sql.SQLException if thrown by JDBC methods
* @see #getJdbcConnection
*/
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaObjectRetrievalFailureException.java b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaObjectRetrievalFailureException.java
index 26e51471682..20bb6ba841b 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaObjectRetrievalFailureException.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaObjectRetrievalFailureException.java
@@ -16,7 +16,7 @@
package org.springframework.orm.jpa;
-import javax.persistence.EntityNotFoundException;
+import jakarta.persistence.EntityNotFoundException;
import org.springframework.orm.ObjectRetrievalFailureException;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaOptimisticLockingFailureException.java b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaOptimisticLockingFailureException.java
index 89b6bfcce5c..a6eb2d1c446 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaOptimisticLockingFailureException.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaOptimisticLockingFailureException.java
@@ -16,7 +16,7 @@
package org.springframework.orm.jpa;
-import javax.persistence.OptimisticLockException;
+import jakarta.persistence.OptimisticLockException;
import org.springframework.orm.ObjectOptimisticLockingFailureException;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java
index 2746339bc62..79e48b7d0f3 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java
@@ -21,13 +21,14 @@ import java.util.Map;
import java.util.Properties;
import java.util.function.Consumer;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
-import javax.persistence.PersistenceException;
-import javax.persistence.RollbackException;
import javax.sql.DataSource;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityTransaction;
+import jakarta.persistence.PersistenceException;
+import jakarta.persistence.RollbackException;
+
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
@@ -58,7 +59,7 @@ import org.springframework.util.CollectionUtils;
/**
* {@link org.springframework.transaction.PlatformTransactionManager} implementation
- * for a single JPA {@link javax.persistence.EntityManagerFactory}. Binds a JPA
+ * for a single JPA {@link jakarta.persistence.EntityManagerFactory}. Binds a JPA
* EntityManager from the specified factory to the thread, potentially allowing for
* one thread-bound EntityManager per factory. {@link SharedEntityManagerCreator} and
* {@code @PersistenceContext} are aware of thread-bound entity managers and participate
@@ -209,7 +210,7 @@ public class JpaTransactionManager extends AbstractPlatformTransactionManager
* {@code EntityManagerFactory.createEntityManager(Map)} (if any).
*
Can be populated with a String "value" (parsed via PropertiesEditor)
* or a "props" element in XML bean definitions.
- * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
+ * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
*/
public void setJpaProperties(@Nullable Properties jpaProperties) {
CollectionUtils.mergePropertiesIntoMap(jpaProperties, this.jpaPropertyMap);
@@ -219,7 +220,7 @@ public class JpaTransactionManager extends AbstractPlatformTransactionManager
* Specify JPA properties as a Map, to be passed into
* {@code EntityManagerFactory.createEntityManager(Map)} (if any).
*
Can be populated with a "map" or "props" element in XML bean definitions.
- * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
+ * @see jakarta.persistence.EntityManagerFactory#createEntityManager(java.util.Map)
*/
public void setJpaPropertyMap(@Nullable Map jpaProperties) {
if (jpaProperties != null) {
@@ -475,7 +476,7 @@ public class JpaTransactionManager extends AbstractPlatformTransactionManager
* {@link EntityManagerFactoryInfo#createNativeEntityManager}
* if possible which in turns applies
* {@link JpaVendorAdapter#postProcessEntityManager(EntityManager)}.
- * @see javax.persistence.EntityManagerFactory#createEntityManager()
+ * @see jakarta.persistence.EntityManagerFactory#createEntityManager()
*/
protected EntityManager createEntityManagerForTransaction() {
EntityManagerFactory emf = obtainEntityManagerFactory();
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaVendorAdapter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaVendorAdapter.java
index 4d283283a3e..7ea555d6d77 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaVendorAdapter.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaVendorAdapter.java
@@ -19,10 +19,10 @@ package org.springframework.orm.jpa;
import java.util.Collections;
import java.util.Map;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.spi.PersistenceProvider;
-import javax.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.spi.PersistenceProvider;
+import jakarta.persistence.spi.PersistenceUnitInfo;
import org.springframework.lang.Nullable;
@@ -64,10 +64,10 @@ public interface JpaVendorAdapter {
* non-unit-dependent properties. Effectively, this PersistenceUnitInfo-based
* variant only needs to be implemented if there is an actual need to react
* to unit-specific characteristics such as the transaction type.
- * NOTE: This variant will only be invoked in case of Java EE style
+ *
NOTE: This variant will only be invoked in case of Jakarta EE style
* container bootstrapping where a {@link PersistenceUnitInfo} is present
* (i.e. {@link LocalContainerEntityManagerFactoryBean}. In case of simple
- * Java SE style bootstrapping via {@link javax.persistence.Persistence}
+ * Java SE style bootstrapping via {@link jakarta.persistence.Persistence}
* (i.e. {@link LocalEntityManagerFactoryBean}), the parameter-less
* {@link #getJpaPropertyMap()} variant will be called directly.
* @param pui the PersistenceUnitInfo for the current persistence unit
@@ -75,7 +75,7 @@ public interface JpaVendorAdapter {
* facilities, or an empty Map if there are no properties to expose
* @since 4.3.13
* @see PersistenceUnitInfo#getTransactionType()
- * @see javax.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory(PersistenceUnitInfo, Map)
+ * @see jakarta.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory(PersistenceUnitInfo, Map)
*/
default Map getJpaPropertyMap(PersistenceUnitInfo pui) {
return getJpaPropertyMap();
@@ -89,7 +89,7 @@ public interface JpaVendorAdapter {
* JPA property values specified here.
* @return a Map of JPA properties, as accepted by the standard JPA bootstrap
* facilities, or an empty Map if there are no properties to expose
- * @see javax.persistence.Persistence#createEntityManagerFactory(String, Map)
+ * @see jakarta.persistence.Persistence#createEntityManagerFactory(String, Map)
*/
default Map getJpaPropertyMap() {
return Collections.emptyMap();
@@ -109,7 +109,7 @@ public interface JpaVendorAdapter {
* that the EntityManagerFactory proxy is supposed to implement.
* If the provider does not offer any EntityManagerFactory extensions,
* the adapter should simply return the standard
- * {@link javax.persistence.EntityManagerFactory} class here.
+ * {@link jakarta.persistence.EntityManagerFactory} class here.
* @since 2.5.2
*/
default Class extends EntityManagerFactory> getEntityManagerFactoryInterface() {
@@ -121,7 +121,7 @@ public interface JpaVendorAdapter {
* that this provider's EntityManagers will implement.
*
If the provider does not offer any EntityManager extensions,
* the adapter should simply return the standard
- * {@link javax.persistence.EntityManager} class here.
+ * {@link jakarta.persistence.EntityManager} class here.
*/
default Class extends EntityManager> getEntityManagerInterface() {
return EntityManager.class;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java
index 6fc17b5c5fd..3ec01ff8d84 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java
@@ -16,14 +16,15 @@
package org.springframework.orm.jpa;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceException;
-import javax.persistence.SharedCacheMode;
-import javax.persistence.ValidationMode;
-import javax.persistence.spi.PersistenceProvider;
-import javax.persistence.spi.PersistenceUnitInfo;
import javax.sql.DataSource;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.PersistenceException;
+import jakarta.persistence.SharedCacheMode;
+import jakarta.persistence.ValidationMode;
+import jakarta.persistence.spi.PersistenceProvider;
+import jakarta.persistence.spi.PersistenceUnitInfo;
+
import org.springframework.beans.BeanUtils;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.context.weaving.LoadTimeWeaverAware;
@@ -40,7 +41,7 @@ import org.springframework.util.ClassUtils;
/**
* {@link org.springframework.beans.factory.FactoryBean} that creates a JPA
- * {@link javax.persistence.EntityManagerFactory} according to JPA's standard
+ * {@link jakarta.persistence.EntityManagerFactory} according to JPA's standard
* container bootstrap contract. This is the most powerful way to set
* up a shared JPA EntityManagerFactory in a Spring application context;
* the EntityManagerFactory can then be passed to JPA-based DAOs via
@@ -58,10 +59,10 @@ import org.springframework.util.ClassUtils;
* instead of being tied to a special VM agent specified on JVM startup.
*
*
Internally, this FactoryBean parses the {@code persistence.xml} file
- * itself and creates a corresponding {@link javax.persistence.spi.PersistenceUnitInfo}
+ * itself and creates a corresponding {@link jakarta.persistence.spi.PersistenceUnitInfo}
* object (with further configuration merged in, such as JDBC DataSources and the
* Spring LoadTimeWeaver), to be passed to the chosen JPA
- * {@link javax.persistence.spi.PersistenceProvider}. This corresponds to a
+ * {@link jakarta.persistence.spi.PersistenceProvider}. This corresponds to a
* local JPA container with full support for the standard JPA container contract.
*
*
The exposed EntityManagerFactory object will implement all the interfaces of
@@ -84,7 +85,7 @@ import org.springframework.util.ClassUtils;
* @see EntityManagerFactoryInfo
* @see LocalEntityManagerFactoryBean
* @see org.springframework.orm.jpa.support.SharedEntityManagerBean
- * @see javax.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory
+ * @see jakarta.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory
*/
@SuppressWarnings("serial")
public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManagerFactoryBean
@@ -220,7 +221,7 @@ public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManage
* overriding a value in {@code persistence.xml} if set.
*
NOTE: Only applied if no external PersistenceUnitManager specified.
* @since 4.0
- * @see javax.persistence.spi.PersistenceUnitInfo#getSharedCacheMode()
+ * @see jakarta.persistence.spi.PersistenceUnitInfo#getSharedCacheMode()
* @see #setPersistenceUnitManager
*/
public void setSharedCacheMode(SharedCacheMode sharedCacheMode) {
@@ -232,7 +233,7 @@ public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManage
* overriding a value in {@code persistence.xml} if set.
*
NOTE: Only applied if no external PersistenceUnitManager specified.
* @since 4.0
- * @see javax.persistence.spi.PersistenceUnitInfo#getValidationMode()
+ * @see jakarta.persistence.spi.PersistenceUnitInfo#getValidationMode()
* @see #setPersistenceUnitManager
*/
public void setValidationMode(ValidationMode validationMode) {
@@ -250,7 +251,7 @@ public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManage
* Note that this variant typically works for JTA transaction management as well;
* if it does not, consider using the explicit {@link #setJtaDataSource} instead.
*
NOTE: Only applied if no external PersistenceUnitManager specified.
- * @see javax.persistence.spi.PersistenceUnitInfo#getNonJtaDataSource()
+ * @see jakarta.persistence.spi.PersistenceUnitInfo#getNonJtaDataSource()
* @see #setPersistenceUnitManager
*/
public void setDataSource(DataSource dataSource) {
@@ -267,7 +268,7 @@ public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManage
* on the PersistenceUnitInfo passed to the PersistenceProvider, as well as
* overriding data source configuration in {@code persistence.xml} (if any).
*
NOTE: Only applied if no external PersistenceUnitManager specified.
- * @see javax.persistence.spi.PersistenceUnitInfo#getJtaDataSource()
+ * @see jakarta.persistence.spi.PersistenceUnitInfo#getJtaDataSource()
* @see #setPersistenceUnitManager
*/
public void setJtaDataSource(DataSource jtaDataSource) {
@@ -394,7 +395,7 @@ public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManage
*
The default implementation is empty.
* @param emf the newly created EntityManagerFactory we are working with
* @param pui the PersistenceUnitInfo used to configure the EntityManagerFactory
- * @see javax.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory
+ * @see jakarta.persistence.spi.PersistenceProvider#createContainerEntityManagerFactory
*/
protected void postProcessEntityManagerFactory(EntityManagerFactory emf, PersistenceUnitInfo pui) {
}
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBean.java
index dcc9961f55c..10e528cee58 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBean.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBean.java
@@ -16,14 +16,14 @@
package org.springframework.orm.jpa;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-import javax.persistence.PersistenceException;
-import javax.persistence.spi.PersistenceProvider;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Persistence;
+import jakarta.persistence.PersistenceException;
+import jakarta.persistence.spi.PersistenceProvider;
/**
* {@link org.springframework.beans.factory.FactoryBean} that creates a JPA
- * {@link javax.persistence.EntityManagerFactory} according to JPA's standard
+ * {@link jakarta.persistence.EntityManagerFactory} according to JPA's standard
* standalone bootstrap contract. This is the simplest way to set up a
* shared JPA EntityManagerFactory in a Spring application context; the
* EntityManagerFactory can then be passed to JPA-based DAOs via
@@ -41,7 +41,7 @@ import javax.persistence.spi.PersistenceProvider;
*
This EntityManagerFactory bootstrap is appropriate for standalone applications
* which solely use JPA for data access. If you want to set up your persistence
* provider for an external DataSource and/or for global transactions which span
- * multiple resources, you will need to either deploy it into a full Java EE
+ * multiple resources, you will need to either deploy it into a full Jakarta EE
* application server and access the deployed EntityManagerFactory via JNDI,
* or use Spring's {@link LocalContainerEntityManagerFactoryBean} with appropriate
* configuration for local setup according to JPA's container contract.
@@ -65,15 +65,15 @@ import javax.persistence.spi.PersistenceProvider;
* @see LocalContainerEntityManagerFactoryBean
* @see org.springframework.jndi.JndiObjectFactoryBean
* @see org.springframework.orm.jpa.support.SharedEntityManagerBean
- * @see javax.persistence.Persistence#createEntityManagerFactory
- * @see javax.persistence.spi.PersistenceProvider#createEntityManagerFactory
+ * @see jakarta.persistence.Persistence#createEntityManagerFactory
+ * @see jakarta.persistence.spi.PersistenceProvider#createEntityManagerFactory
*/
@SuppressWarnings("serial")
public class LocalEntityManagerFactoryBean extends AbstractEntityManagerFactoryBean {
/**
* Initialize the EntityManagerFactory for the given configuration.
- * @throws javax.persistence.PersistenceException in case of JPA initialization errors
+ * @throws jakarta.persistence.PersistenceException in case of JPA initialization errors
*/
@Override
protected EntityManagerFactory createNativeEntityManagerFactory() throws PersistenceException {
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java b/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java
index 5b109cf8986..26add517b03 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java
@@ -28,13 +28,12 @@ import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.ParameterMode;
-import javax.persistence.Query;
-import javax.persistence.StoredProcedureQuery;
-import javax.persistence.TransactionRequiredException;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.ParameterMode;
+import jakarta.persistence.Query;
+import jakarta.persistence.StoredProcedureQuery;
+import jakarta.persistence.TransactionRequiredException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -45,8 +44,8 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.ConcurrentReferenceHashMap;
/**
- * Delegate for creating a shareable JPA {@link javax.persistence.EntityManager}
- * reference for a given {@link javax.persistence.EntityManagerFactory}.
+ * Delegate for creating a shareable JPA {@link jakarta.persistence.EntityManager}
+ * reference for a given {@link jakarta.persistence.EntityManagerFactory}.
*
*
A shared EntityManager will behave just like an EntityManager fetched from
* an application server's JNDI environment, as defined by the JPA specification.
@@ -54,17 +53,17 @@ import org.springframework.util.ConcurrentReferenceHashMap;
* otherwise it will fall back to a newly created EntityManager per operation.
*
*
For a behavioral definition of such a shared transactional EntityManager,
- * see {@link javax.persistence.PersistenceContextType#TRANSACTION} and its
+ * see {@link jakarta.persistence.PersistenceContextType#TRANSACTION} and its
* discussion in the JPA spec document. This is also the default being used
- * for the annotation-based {@link javax.persistence.PersistenceContext#type()}.
+ * for the annotation-based {@link jakarta.persistence.PersistenceContext#type()}.
*
* @author Juergen Hoeller
* @author Rod Johnson
* @author Oliver Gierke
* @author Mark Paluch
* @since 2.0
- * @see javax.persistence.PersistenceContext
- * @see javax.persistence.PersistenceContextType#TRANSACTION
+ * @see jakarta.persistence.PersistenceContext
+ * @see jakarta.persistence.PersistenceContextType#TRANSACTION
* @see org.springframework.orm.jpa.JpaTransactionManager
* @see ExtendedEntityManagerCreator
*/
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/ClassFileTransformerAdapter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/ClassFileTransformerAdapter.java
index 162e886c2db..0654e12c3d9 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/ClassFileTransformerAdapter.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/ClassFileTransformerAdapter.java
@@ -19,8 +19,7 @@ package org.springframework.orm.jpa.persistenceunit;
import java.lang.instrument.ClassFileTransformer;
import java.security.ProtectionDomain;
-import javax.persistence.spi.ClassTransformer;
-
+import jakarta.persistence.spi.ClassTransformer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -35,7 +34,7 @@ import org.springframework.util.Assert;
* @author Rod Johnson
* @author Juergen Hoeller
* @since 2.0
- * @see javax.persistence.spi.PersistenceUnitInfo#addTransformer(javax.persistence.spi.ClassTransformer)
+ * @see jakarta.persistence.spi.PersistenceUnitInfo#addTransformer(jakarta.persistence.spi.ClassTransformer)
*/
class ClassFileTransformerAdapter implements ClassFileTransformer {
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java
index 8e2fd410d54..c16527b6153 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java
@@ -26,16 +26,16 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import javax.persistence.Converter;
-import javax.persistence.Embeddable;
-import javax.persistence.Entity;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.PersistenceException;
-import javax.persistence.SharedCacheMode;
-import javax.persistence.ValidationMode;
-import javax.persistence.spi.PersistenceUnitInfo;
import javax.sql.DataSource;
+import jakarta.persistence.Converter;
+import jakarta.persistence.Embeddable;
+import jakarta.persistence.Entity;
+import jakarta.persistence.MappedSuperclass;
+import jakarta.persistence.PersistenceException;
+import jakarta.persistence.SharedCacheMode;
+import jakarta.persistence.ValidationMode;
+import jakarta.persistence.spi.PersistenceUnitInfo;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -274,7 +274,7 @@ public class DefaultPersistenceUnitManager
* Specify the JPA 2.0 shared cache mode for all of this manager's persistence
* units, overriding any value in {@code persistence.xml} if set.
* @since 4.0
- * @see javax.persistence.spi.PersistenceUnitInfo#getSharedCacheMode()
+ * @see jakarta.persistence.spi.PersistenceUnitInfo#getSharedCacheMode()
*/
public void setSharedCacheMode(SharedCacheMode sharedCacheMode) {
this.sharedCacheMode = sharedCacheMode;
@@ -284,7 +284,7 @@ public class DefaultPersistenceUnitManager
* Specify the JPA 2.0 validation mode for all of this manager's persistence
* units, overriding any value in {@code persistence.xml} if set.
* @since 4.0
- * @see javax.persistence.spi.PersistenceUnitInfo#getValidationMode()
+ * @see jakarta.persistence.spi.PersistenceUnitInfo#getValidationMode()
*/
public void setValidationMode(ValidationMode validationMode) {
this.validationMode = validationMode;
@@ -341,7 +341,7 @@ public class DefaultPersistenceUnitManager
*
In JPA speak, a DataSource passed in here will be uses as "nonJtaDataSource"
* on the PersistenceUnitInfo passed to the PersistenceProvider, provided that
* none has been registered before.
- * @see javax.persistence.spi.PersistenceUnitInfo#getNonJtaDataSource()
+ * @see jakarta.persistence.spi.PersistenceUnitInfo#getNonJtaDataSource()
*/
public void setDefaultDataSource(@Nullable DataSource defaultDataSource) {
this.defaultDataSource = defaultDataSource;
@@ -363,7 +363,7 @@ public class DefaultPersistenceUnitManager
*
In JPA speak, a DataSource passed in here will be uses as "jtaDataSource"
* on the PersistenceUnitInfo passed to the PersistenceProvider, provided that
* none has been registered before.
- * @see javax.persistence.spi.PersistenceUnitInfo#getJtaDataSource()
+ * @see jakarta.persistence.spi.PersistenceUnitInfo#getJtaDataSource()
*/
public void setDefaultJtaDataSource(@Nullable DataSource defaultJtaDataSource) {
this.defaultJtaDataSource = defaultJtaDataSource;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/MutablePersistenceUnitInfo.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/MutablePersistenceUnitInfo.java
index b006f76bfaf..7bd5304b006 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/MutablePersistenceUnitInfo.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/MutablePersistenceUnitInfo.java
@@ -21,19 +21,20 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
-import javax.persistence.SharedCacheMode;
-import javax.persistence.ValidationMode;
-import javax.persistence.spi.ClassTransformer;
-import javax.persistence.spi.PersistenceUnitTransactionType;
import javax.sql.DataSource;
+import jakarta.persistence.SharedCacheMode;
+import jakarta.persistence.ValidationMode;
+import jakarta.persistence.spi.ClassTransformer;
+import jakarta.persistence.spi.PersistenceUnitTransactionType;
+
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
/**
* Spring's base implementation of the JPA
- * {@link javax.persistence.spi.PersistenceUnitInfo} interface,
+ * {@link jakarta.persistence.spi.PersistenceUnitInfo} interface,
* used to bootstrap an {@code EntityManagerFactory} in a container.
*
*
This implementation is largely a JavaBean, offering mutators
@@ -171,7 +172,7 @@ public class MutablePersistenceUnitInfo implements SmartPersistenceUnitInfo {
/**
* Add a managed class name to the persistence provider's metadata.
- * @see javax.persistence.spi.PersistenceUnitInfo#getManagedClassNames()
+ * @see jakarta.persistence.spi.PersistenceUnitInfo#getManagedClassNames()
* @see #addManagedPackage
*/
public void addManagedClassName(String managedClassName) {
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitManager.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitManager.java
index e9bb1429a7f..bf69b58929e 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitManager.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitManager.java
@@ -16,14 +16,14 @@
package org.springframework.orm.jpa.persistenceunit;
-import javax.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.spi.PersistenceUnitInfo;
/**
* Interface that defines an abstraction for finding and managing
* JPA PersistenceUnitInfos. Used by
* {@link org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean}
- * in order to obtain a {@link javax.persistence.spi.PersistenceUnitInfo}
- * for building a concrete {@link javax.persistence.EntityManagerFactory}.
+ * in order to obtain a {@link jakarta.persistence.spi.PersistenceUnitInfo}
+ * for building a concrete {@link jakarta.persistence.EntityManagerFactory}.
*
*
Obtaining a PersistenceUnitInfo instance is an exclusive process.
* A PersistenceUnitInfo instance is not available for further calls
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitReader.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitReader.java
index 092285cd25f..1b2cd4b53e2 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitReader.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceUnitReader.java
@@ -22,13 +22,13 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.List;
-import javax.persistence.SharedCacheMode;
-import javax.persistence.ValidationMode;
-import javax.persistence.spi.PersistenceUnitTransactionType;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
+import jakarta.persistence.SharedCacheMode;
+import jakarta.persistence.ValidationMode;
+import jakarta.persistence.spi.PersistenceUnitTransactionType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SmartPersistenceUnitInfo.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SmartPersistenceUnitInfo.java
index 1ed577af6e4..3ad341cc9c1 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SmartPersistenceUnitInfo.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SmartPersistenceUnitInfo.java
@@ -18,7 +18,7 @@ package org.springframework.orm.jpa.persistenceunit;
import java.util.List;
-import javax.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.spi.PersistenceUnitInfo;
/**
* Extension of the standard JPA PersistenceUnitInfo interface, for advanced collaboration
@@ -42,7 +42,7 @@ public interface SmartPersistenceUnitInfo extends PersistenceUnitInfo {
/**
* Set the persistence provider's own package name, for exclusion from class transformation.
- * @see #addTransformer(javax.persistence.spi.ClassTransformer)
+ * @see #addTransformer(jakarta.persistence.spi.ClassTransformer)
* @see #getNewTempClassLoader()
*/
void setPersistenceProviderPackageName(String persistenceProviderPackageName);
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SpringPersistenceUnitInfo.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SpringPersistenceUnitInfo.java
index 0cf289f3ee1..da5e46fdbd8 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SpringPersistenceUnitInfo.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SpringPersistenceUnitInfo.java
@@ -16,7 +16,7 @@
package org.springframework.orm.jpa.persistenceunit;
-import javax.persistence.spi.ClassTransformer;
+import jakarta.persistence.spi.ClassTransformer;
import org.springframework.core.DecoratingClassLoader;
import org.springframework.instrument.classloading.LoadTimeWeaver;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/support/AsyncRequestInterceptor.java b/spring-orm/src/main/java/org/springframework/orm/jpa/support/AsyncRequestInterceptor.java
index 7f31393e132..46efcd21cb7 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/support/AsyncRequestInterceptor.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/support/AsyncRequestInterceptor.java
@@ -18,8 +18,7 @@ package org.springframework.orm.jpa.support;
import java.util.concurrent.Callable;
-import javax.persistence.EntityManagerFactory;
-
+import jakarta.persistence.EntityManagerFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewFilter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewFilter.java
index a36c0d64c8f..4b185400544 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewFilter.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewFilter.java
@@ -18,13 +18,13 @@ package org.springframework.orm.jpa.support;
import java.io.IOException;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceException;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.PersistenceException;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.lang.Nullable;
@@ -242,7 +242,7 @@ public class OpenEntityManagerInViewFilter extends OncePerRequestFilter {
* Create a JPA EntityManager to be bound to a request.
*
Can be overridden in subclasses.
* @param emf the EntityManagerFactory to use
- * @see javax.persistence.EntityManagerFactory#createEntityManager()
+ * @see jakarta.persistence.EntityManagerFactory#createEntityManager()
*/
protected EntityManager createEntityManager(EntityManagerFactory emf) {
return emf.createEntityManager();
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewInterceptor.java b/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewInterceptor.java
index 5382e9bdfab..e6cc8f14fe5 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewInterceptor.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewInterceptor.java
@@ -16,9 +16,9 @@
package org.springframework.orm.jpa.support;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceException;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.PersistenceException;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataAccessResourceFailureException;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.java b/spring-orm/src/main/java/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.java
index d9ff7afc141..20747130ac7 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.java
@@ -29,13 +29,13 @@ import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceContext;
-import javax.persistence.PersistenceContextType;
-import javax.persistence.PersistenceProperty;
-import javax.persistence.PersistenceUnit;
-import javax.persistence.SynchronizationType;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.PersistenceContext;
+import jakarta.persistence.PersistenceContextType;
+import jakarta.persistence.PersistenceProperty;
+import jakarta.persistence.PersistenceUnit;
+import jakarta.persistence.SynchronizationType;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.PropertyValues;
@@ -71,10 +71,10 @@ import org.springframework.util.ReflectionUtils;
import org.springframework.util.StringUtils;
/**
- * BeanPostProcessor that processes {@link javax.persistence.PersistenceUnit}
- * and {@link javax.persistence.PersistenceContext} annotations, for injection of
- * the corresponding JPA resources {@link javax.persistence.EntityManagerFactory}
- * and {@link javax.persistence.EntityManager}. Any such annotated fields or methods
+ * BeanPostProcessor that processes {@link jakarta.persistence.PersistenceUnit}
+ * and {@link jakarta.persistence.PersistenceContext} annotations, for injection of
+ * the corresponding JPA resources {@link jakarta.persistence.EntityManagerFactory}
+ * and {@link jakarta.persistence.EntityManager}. Any such annotated fields or methods
* in any Spring-managed object will automatically be injected.
*
*
This post-processor will inject sub-interfaces of {@code EntityManagerFactory}
@@ -88,7 +88,7 @@ import org.springframework.util.StringUtils;
* with the "unitName" attribute, or no attribute at all (for the default unit).
* If those annotations are present with the "name" attribute at the class level,
* they will simply be ignored, since those only serve as deployment hint
- * (as per the Java EE specification).
+ * (as per the Jakarta EE specification).
*
*
This post-processor can either obtain EntityManagerFactory beans defined
* in the Spring application context (the default), or obtain EntityManagerFactory
@@ -106,9 +106,9 @@ import org.springframework.util.StringUtils;
*
* In the JNDI case, specify the corresponding JNDI names in this post-processor's
* {@link #setPersistenceUnits "persistenceUnits" map}, typically with matching
- * {@code persistence-unit-ref} entries in the Java EE deployment descriptor.
+ * {@code persistence-unit-ref} entries in the Jakarta EE deployment descriptor.
* By default, those names are considered as resource references (according to the
- * Java EE resource-ref convention), located underneath the "java:comp/env/" namespace.
+ * Jakarta EE resource-ref convention), located underneath the "java:comp/env/" namespace.
* For example:
*
*
@@ -123,18 +123,18 @@ import org.springframework.util.StringUtils;
*
* In this case, the specified persistence units will always be resolved in JNDI
* rather than as Spring-defined beans. The entire persistence unit deployment,
- * including the weaving of persistent classes, is then up to the Java EE server.
+ * including the weaving of persistent classes, is then up to the Jakarta EE server.
* Persistence contexts (i.e. EntityManager references) will be built based on
* those server-provided EntityManagerFactory references, using Spring's own
* transaction synchronization facilities for transactional EntityManager handling
* (typically with Spring's {@code @Transactional} annotation for demarcation
* and {@link org.springframework.transaction.jta.JtaTransactionManager} as backend).
*
- * If you prefer the Java EE server's own EntityManager handling, specify entries
+ *
If you prefer the Jakarta EE server's own EntityManager handling, specify entries
* in this post-processor's {@link #setPersistenceContexts "persistenceContexts" map}
* (or {@link #setExtendedPersistenceContexts "extendedPersistenceContexts" map},
* typically with matching {@code persistence-context-ref} entries in the
- * Java EE deployment descriptor. For example:
+ * Jakarta EE deployment descriptor. For example:
*
*
* <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
@@ -165,8 +165,8 @@ import org.springframework.util.StringUtils;
* @author Rod Johnson
* @author Juergen Hoeller
* @since 2.0
- * @see javax.persistence.PersistenceUnit
- * @see javax.persistence.PersistenceContext
+ * @see jakarta.persistence.PersistenceUnit
+ * @see jakarta.persistence.PersistenceContext
*/
@SuppressWarnings("serial")
public class PersistenceAnnotationBeanPostProcessor
@@ -216,7 +216,7 @@ public class PersistenceAnnotationBeanPostProcessor
}
/**
- * Set whether the lookup occurs in a Java EE container, i.e. if the prefix
+ * Set whether the lookup occurs in a Jakarta EE container, i.e. if the prefix
* "java:comp/env/" needs to be added if the JNDI name doesn't already
* contain it. PersistenceAnnotationBeanPostProcessor's default is "true".
* @see org.springframework.jndi.JndiLocatorSupport#setResourceRef
@@ -230,12 +230,12 @@ public class PersistenceAnnotationBeanPostProcessor
* as a Map from persistence unit name to persistence unit JNDI name
* (which needs to resolve to an EntityManagerFactory instance).
* JNDI names specified here should refer to {@code persistence-unit-ref}
- * entries in the Java EE deployment descriptor, matching the target persistence unit.
+ * entries in the Jakarta EE deployment descriptor, matching the target persistence unit.
*
In case of no unit name specified in the annotation, the specified value
* for the {@link #setDefaultPersistenceUnitName default persistence unit}
* will be taken (by default, the value mapped to the empty String),
* or simply the single persistence unit if there is only one.
- *
This is mainly intended for use in a Java EE environment, with all lookup
+ *
This is mainly intended for use in a Jakarta EE environment, with all lookup
* driven by the standard JPA annotations, and all EntityManagerFactory
* references obtained from JNDI. No separate EntityManagerFactory bean
* definitions are necessary in such a scenario.
@@ -244,7 +244,7 @@ public class PersistenceAnnotationBeanPostProcessor
* EntityManagers built on top of the EntityManagerFactory defined here.
* Note that those will be Spring-managed EntityManagers, which implement
* transaction synchronization based on Spring's facilities.
- * If you prefer the Java EE server's own EntityManager handling,
+ * If you prefer the Jakarta EE server's own EntityManager handling,
* specify corresponding "persistenceContexts"/"extendedPersistenceContexts".
*/
public void setPersistenceUnits(Map persistenceUnits) {
@@ -256,17 +256,17 @@ public class PersistenceAnnotationBeanPostProcessor
* as a Map from persistence unit name to persistence context JNDI name
* (which needs to resolve to an EntityManager instance).
* JNDI names specified here should refer to {@code persistence-context-ref}
- * entries in the Java EE deployment descriptors, matching the target persistence unit
+ * entries in the Jakarta EE deployment descriptors, matching the target persistence unit
* and being set up with persistence context type {@code Transaction}.
*
In case of no unit name specified in the annotation, the specified value
* for the {@link #setDefaultPersistenceUnitName default persistence unit}
* will be taken (by default, the value mapped to the empty String),
* or simply the single persistence unit if there is only one.
- *
This is mainly intended for use in a Java EE environment, with all
+ *
This is mainly intended for use in a Jakarta EE environment, with all
* lookup driven by the standard JPA annotations, and all EntityManager
* references obtained from JNDI. No separate EntityManagerFactory bean
* definitions are necessary in such a scenario, and all EntityManager
- * handling is done by the Java EE server itself.
+ * handling is done by the Jakarta EE server itself.
*/
public void setPersistenceContexts(Map persistenceContexts) {
this.persistenceContexts = persistenceContexts;
@@ -277,17 +277,17 @@ public class PersistenceAnnotationBeanPostProcessor
* as a Map from persistence unit name to persistence context JNDI name
* (which needs to resolve to an EntityManager instance).
* JNDI names specified here should refer to {@code persistence-context-ref}
- * entries in the Java EE deployment descriptors, matching the target persistence unit
+ * entries in the Jakarta EE deployment descriptors, matching the target persistence unit
* and being set up with persistence context type {@code Extended}.
*
In case of no unit name specified in the annotation, the specified value
* for the {@link #setDefaultPersistenceUnitName default persistence unit}
* will be taken (by default, the value mapped to the empty String),
* or simply the single persistence unit if there is only one.
- *
This is mainly intended for use in a Java EE environment, with all
+ *
This is mainly intended for use in a Jakarta EE environment, with all
* lookup driven by the standard JPA annotations, and all EntityManager
* references obtained from JNDI. No separate EntityManagerFactory bean
* definitions are necessary in such a scenario, and all EntityManager
- * handling is done by the Java EE server itself.
+ * handling is done by the Jakarta EE server itself.
*/
public void setExtendedPersistenceContexts(Map extendedPersistenceContexts) {
this.extendedPersistenceContexts = extendedPersistenceContexts;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/support/SharedEntityManagerBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/support/SharedEntityManagerBean.java
index 60c37803cda..a3f465dc68d 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/support/SharedEntityManagerBean.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/support/SharedEntityManagerBean.java
@@ -16,8 +16,8 @@
package org.springframework.orm.jpa.support;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
@@ -28,10 +28,10 @@ import org.springframework.orm.jpa.SharedEntityManagerCreator;
import org.springframework.util.Assert;
/**
- * {@link FactoryBean} that exposes a shared JPA {@link javax.persistence.EntityManager}
+ * {@link FactoryBean} that exposes a shared JPA {@link jakarta.persistence.EntityManager}
* reference for a given EntityManagerFactory. Typically used for an EntityManagerFactory
* created by {@link org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean},
- * as direct alternative to a JNDI lookup for a Java EE server's EntityManager reference.
+ * as direct alternative to a JNDI lookup for a Jakarta EE server's EntityManager reference.
*
* The shared EntityManager will behave just like an EntityManager fetched from an
* application server's JNDI environment, as defined by the JPA specification.
@@ -65,9 +65,9 @@ public class SharedEntityManagerBean extends EntityManagerFactoryAccessor
* Specify the EntityManager interface to expose.
*
Default is the EntityManager interface as defined by the
* EntityManagerFactoryInfo, if available. Else, the standard
- * {@code javax.persistence.EntityManager} interface will be used.
+ * {@code jakarta.persistence.EntityManager} interface will be used.
* @see org.springframework.orm.jpa.EntityManagerFactoryInfo#getEntityManagerInterface()
- * @see javax.persistence.EntityManager
+ * @see jakarta.persistence.EntityManager
*/
public void setEntityManagerInterface(Class extends EntityManager> entityManagerInterface) {
Assert.notNull(entityManagerInterface, "'entityManagerInterface' must not be null");
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/AbstractJpaVendorAdapter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/AbstractJpaVendorAdapter.java
index 37203ab9c4b..8e6d0101f56 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/AbstractJpaVendorAdapter.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/AbstractJpaVendorAdapter.java
@@ -19,9 +19,9 @@ package org.springframework.orm.jpa.vendor;
import java.util.Collections;
import java.util.Map;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.spi.PersistenceUnitInfo;
import org.springframework.lang.Nullable;
import org.springframework.orm.jpa.JpaDialect;
@@ -89,7 +89,7 @@ public abstract class AbstractJpaVendorAdapter implements JpaVendorAdapter {
* persistence provider. For any more advanced needs, specify the appropriate
* vendor-specific settings as "jpaProperties".
*
NOTE: Do not set this flag to 'true' while also setting JPA 2.1's
- * {@code javax.persistence.schema-generation.database.action} property.
+ * {@code jakarta.persistence.schema-generation.database.action} property.
* These two schema generation mechanisms - standard JPA versus provider-native -
* are mutually exclusive, e.g. with Hibernate 5.
* @see org.springframework.orm.jpa.AbstractEntityManagerFactoryBean#setJpaProperties
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaDialect.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaDialect.java
index 30db932f167..7fefab90c24 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaDialect.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaDialect.java
@@ -19,9 +19,8 @@ package org.springframework.orm.jpa.vendor;
import java.sql.Connection;
import java.sql.SQLException;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceException;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceException;
import org.eclipse.persistence.sessions.UnitOfWork;
import org.springframework.jdbc.datasource.ConnectionHandle;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaVendorAdapter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaVendorAdapter.java
index f3bc463226b..b64258d9dbf 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaVendorAdapter.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaVendorAdapter.java
@@ -20,9 +20,8 @@ import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
-import javax.persistence.EntityManager;
-import javax.persistence.spi.PersistenceProvider;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.spi.PersistenceProvider;
import org.eclipse.persistence.config.PersistenceUnitProperties;
import org.eclipse.persistence.config.TargetDatabase;
import org.eclipse.persistence.jpa.JpaEntityManager;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java
index a6d82beb63c..327f887f08f 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java
@@ -19,9 +19,8 @@ package org.springframework.orm.jpa.vendor;
import java.sql.Connection;
import java.sql.SQLException;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceException;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceException;
import org.hibernate.ConnectionReleaseMode;
import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaSessionFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaSessionFactoryBean.java
index 090bd23b513..b02e90d04f8 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaSessionFactoryBean.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaSessionFactoryBean.java
@@ -18,8 +18,7 @@ package org.springframework.orm.jpa.vendor;
import java.lang.reflect.Method;
-import javax.persistence.EntityManagerFactory;
-
+import jakarta.persistence.EntityManagerFactory;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.FactoryBean;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java
index ef3324db352..5807200a9c2 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java
@@ -19,12 +19,11 @@ package org.springframework.orm.jpa.vendor;
import java.util.HashMap;
import java.util.Map;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.spi.PersistenceProvider;
-import javax.persistence.spi.PersistenceUnitInfo;
-import javax.persistence.spi.PersistenceUnitTransactionType;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.spi.PersistenceProvider;
+import jakarta.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.spi.PersistenceUnitTransactionType;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AvailableSettings;
diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/SpringHibernateJpaPersistenceProvider.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/SpringHibernateJpaPersistenceProvider.java
index 32c6b4ed524..f0e98f85456 100644
--- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/SpringHibernateJpaPersistenceProvider.java
+++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/SpringHibernateJpaPersistenceProvider.java
@@ -20,9 +20,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.spi.PersistenceUnitInfo;
-
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.spi.PersistenceUnitInfo;
import org.hibernate.cfg.Configuration;
import org.hibernate.jpa.HibernatePersistenceProvider;
import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractContainerEntityManagerFactoryIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractContainerEntityManagerFactoryIntegrationTests.java
index 8885d6eb7e0..30218d1dd86 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractContainerEntityManagerFactoryIntegrationTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractContainerEntityManagerFactoryIntegrationTests.java
@@ -19,11 +19,10 @@ package org.springframework.orm.jpa;
import java.lang.reflect.Proxy;
import java.util.List;
-import javax.persistence.EntityManager;
-import javax.persistence.FlushModeType;
-import javax.persistence.NoResultException;
-import javax.persistence.Query;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.FlushModeType;
+import jakarta.persistence.NoResultException;
+import jakarta.persistence.Query;
import org.junit.jupiter.api.Test;
import org.springframework.core.testfixture.io.SerializationTestUtils;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBeanTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBeanTests.java
index 3220e271bf2..084391597c1 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBeanTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBeanTests.java
@@ -16,10 +16,9 @@
package org.springframework.orm.jpa;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceException;
-import javax.persistence.spi.PersistenceUnitInfo;
-
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.PersistenceException;
+import jakarta.persistence.spi.PersistenceUnitInfo;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryIntegrationTests.java
index 56a6d288a5e..5a314c2fa37 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryIntegrationTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryIntegrationTests.java
@@ -16,11 +16,11 @@
package org.springframework.orm.jpa;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Query;
import javax.sql.DataSource;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Query;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/ApplicationManagedEntityManagerIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/ApplicationManagedEntityManagerIntegrationTests.java
index 69986ebf539..765d62bfcfb 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/ApplicationManagedEntityManagerIntegrationTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/ApplicationManagedEntityManagerIntegrationTests.java
@@ -19,10 +19,9 @@ package org.springframework.orm.jpa;
import java.lang.reflect.Proxy;
import java.util.List;
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import javax.persistence.TransactionRequiredException;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.Query;
+import jakarta.persistence.TransactionRequiredException;
import org.junit.jupiter.api.Test;
import org.springframework.orm.jpa.domain.Person;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/ContainerManagedEntityManagerIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/ContainerManagedEntityManagerIntegrationTests.java
index f87101156d2..a61c10cd0a3 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/ContainerManagedEntityManagerIntegrationTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/ContainerManagedEntityManagerIntegrationTests.java
@@ -19,11 +19,10 @@ package org.springframework.orm.jpa;
import java.lang.reflect.Proxy;
import java.util.List;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceException;
-import javax.persistence.Query;
-import javax.persistence.TransactionRequiredException;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceException;
+import jakarta.persistence.Query;
+import jakarta.persistence.TransactionRequiredException;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/DefaultJpaDialectTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/DefaultJpaDialectTests.java
index fedb323fba7..12c75166f6f 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/DefaultJpaDialectTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/DefaultJpaDialectTests.java
@@ -16,10 +16,9 @@
package org.springframework.orm.jpa;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
-import javax.persistence.OptimisticLockException;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityTransaction;
+import jakarta.persistence.OptimisticLockException;
import org.junit.jupiter.api.Test;
import org.springframework.transaction.TransactionDefinition;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryUtilsTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryUtilsTests.java
index 4525931ed53..b651f8eb677 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryUtilsTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryUtilsTests.java
@@ -16,16 +16,15 @@
package org.springframework.orm.jpa;
-import javax.persistence.EntityExistsException;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityNotFoundException;
-import javax.persistence.NoResultException;
-import javax.persistence.NonUniqueResultException;
-import javax.persistence.OptimisticLockException;
-import javax.persistence.PersistenceException;
-import javax.persistence.TransactionRequiredException;
-
+import jakarta.persistence.EntityExistsException;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityNotFoundException;
+import jakarta.persistence.NoResultException;
+import jakarta.persistence.NonUniqueResultException;
+import jakarta.persistence.OptimisticLockException;
+import jakarta.persistence.PersistenceException;
+import jakarta.persistence.TransactionRequiredException;
import org.junit.jupiter.api.Test;
import org.springframework.dao.DataAccessException;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java
index 3a53b2cb9a1..881bccca79b 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java
@@ -19,11 +19,10 @@ package org.springframework.orm.jpa;
import java.util.ArrayList;
import java.util.List;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
-import javax.persistence.RollbackException;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityTransaction;
+import jakarta.persistence.RollbackException;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java
index a2495d2267c..d3741988e25 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java
@@ -19,16 +19,15 @@ package org.springframework.orm.jpa;
import java.util.Map;
import java.util.Properties;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
-import javax.persistence.OptimisticLockException;
-import javax.persistence.PersistenceException;
-import javax.persistence.spi.PersistenceProvider;
-import javax.persistence.spi.PersistenceUnitInfo;
-import javax.persistence.spi.PersistenceUnitTransactionType;
-import javax.persistence.spi.ProviderUtil;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityTransaction;
+import jakarta.persistence.OptimisticLockException;
+import jakarta.persistence.PersistenceException;
+import jakarta.persistence.spi.PersistenceProvider;
+import jakarta.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.spi.PersistenceUnitTransactionType;
+import jakarta.persistence.spi.ProviderUtil;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBeanTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBeanTests.java
index 4d6b8095b95..b3d16aaf009 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBeanTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBeanTests.java
@@ -19,11 +19,10 @@ package org.springframework.orm.jpa;
import java.util.Map;
import java.util.Properties;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.spi.PersistenceProvider;
-import javax.persistence.spi.PersistenceUnitInfo;
-import javax.persistence.spi.ProviderUtil;
-
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.spi.PersistenceProvider;
+import jakarta.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.spi.ProviderUtil;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/SharedEntityManagerCreatorTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/SharedEntityManagerCreatorTests.java
index 86df24330b8..f2768122b78 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/SharedEntityManagerCreatorTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/SharedEntityManagerCreatorTests.java
@@ -16,13 +16,12 @@
package org.springframework.orm.jpa;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.ParameterMode;
-import javax.persistence.Query;
-import javax.persistence.StoredProcedureQuery;
-import javax.persistence.TransactionRequiredException;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.ParameterMode;
+import jakarta.persistence.Query;
+import jakarta.persistence.StoredProcedureQuery;
+import jakarta.persistence.TransactionRequiredException;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/domain/DriversLicense.java b/spring-orm/src/test/java/org/springframework/orm/jpa/domain/DriversLicense.java
index 4bb0082dde4..0a088e3efe7 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/domain/DriversLicense.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/domain/DriversLicense.java
@@ -16,9 +16,9 @@
package org.springframework.orm.jpa.domain;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
@Entity
@Table(name="DRIVERS_LICENSE")
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/domain/Person.java b/spring-orm/src/test/java/org/springframework/orm/jpa/domain/Person.java
index 1586a2c2501..b8c0e564b14 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/domain/Person.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/domain/Person.java
@@ -16,16 +16,16 @@
package org.springframework.orm.jpa.domain;
-import javax.persistence.Basic;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.EntityListeners;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToOne;
+import jakarta.persistence.Basic;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EntityListeners;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.OneToOne;
import org.springframework.beans.testfixture.beans.TestBean;
import org.springframework.context.ApplicationContext;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/domain/PersonListener.java b/spring-orm/src/test/java/org/springframework/orm/jpa/domain/PersonListener.java
index 072e2f9795b..90a6e94e00d 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/domain/PersonListener.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/domain/PersonListener.java
@@ -16,7 +16,7 @@
package org.springframework.orm.jpa.domain;
-import javax.persistence.PostLoad;
+import jakarta.persistence.PostLoad;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateEntityManagerFactoryIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateEntityManagerFactoryIntegrationTests.java
index 03206c523ce..c8c9e5e2854 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateEntityManagerFactoryIntegrationTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateEntityManagerFactoryIntegrationTests.java
@@ -16,8 +16,7 @@
package org.springframework.orm.jpa.hibernate;
-import javax.persistence.EntityManager;
-
+import jakarta.persistence.EntityManager;
import org.hibernate.FlushMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateMultiEntityManagerFactoryIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateMultiEntityManagerFactoryIntegrationTests.java
index 5653474b60d..2a959616964 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateMultiEntityManagerFactoryIntegrationTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateMultiEntityManagerFactoryIntegrationTests.java
@@ -16,9 +16,8 @@
package org.springframework.orm.jpa.hibernate;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateNativeEntityManagerFactorySpringBeanContainerIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateNativeEntityManagerFactorySpringBeanContainerIntegrationTests.java
index 5eb4055b417..5e5d848e1af 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateNativeEntityManagerFactorySpringBeanContainerIntegrationTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateNativeEntityManagerFactorySpringBeanContainerIntegrationTests.java
@@ -16,8 +16,7 @@
package org.springframework.orm.jpa.hibernate;
-import javax.persistence.AttributeConverter;
-
+import jakarta.persistence.AttributeConverter;
import org.hibernate.SessionFactory;
import org.hibernate.resource.beans.container.spi.BeanContainer;
import org.hibernate.resource.beans.container.spi.ContainedBean;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/persistenceunit/PersistenceXmlParsingTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/persistenceunit/PersistenceXmlParsingTests.java
index d7a78f9e87b..253c3a2f247 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/persistenceunit/PersistenceXmlParsingTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/persistenceunit/PersistenceXmlParsingTests.java
@@ -21,10 +21,10 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
-import javax.persistence.spi.PersistenceUnitInfo;
-import javax.persistence.spi.PersistenceUnitTransactionType;
import javax.sql.DataSource;
+import jakarta.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.spi.PersistenceUnitTransactionType;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java
index 70360c26dea..1851fdfb622 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java
@@ -21,12 +21,11 @@ import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.servlet.AsyncEvent;
-import javax.servlet.AsyncListener;
-import javax.servlet.FilterChain;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.servlet.AsyncEvent;
+import jakarta.servlet.AsyncListener;
+import jakarta.servlet.FilterChain;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceContextTransactionTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceContextTransactionTests.java
index 9d5fc76147a..82e22136e0b 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceContextTransactionTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceContextTransactionTests.java
@@ -16,13 +16,12 @@
package org.springframework.orm.jpa.support;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
-import javax.persistence.PersistenceContext;
-import javax.persistence.PersistenceContextType;
-import javax.persistence.SynchronizationType;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityTransaction;
+import jakarta.persistence.PersistenceContext;
+import jakarta.persistence.PersistenceContextType;
+import jakarta.persistence.SynchronizationType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java
index 919f2fb1259..c38924840ab 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java
@@ -24,13 +24,12 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceContext;
-import javax.persistence.PersistenceContextType;
-import javax.persistence.PersistenceProperty;
-import javax.persistence.PersistenceUnit;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.PersistenceContext;
+import jakarta.persistence.PersistenceContextType;
+import jakarta.persistence.PersistenceProperty;
+import jakarta.persistence.PersistenceUnit;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.FactoryBean;
diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/SharedEntityManagerFactoryTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/SharedEntityManagerFactoryTests.java
index 4e344c18300..93f53e1e511 100644
--- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/SharedEntityManagerFactoryTests.java
+++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/SharedEntityManagerFactoryTests.java
@@ -16,9 +16,8 @@
package org.springframework.orm.jpa.support;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
import org.junit.jupiter.api.Test;
import org.springframework.orm.jpa.EntityManagerHolder;
diff --git a/spring-orm/src/test/resources/org/springframework/orm/jpa/domain/spring.components b/spring-orm/src/test/resources/org/springframework/orm/jpa/domain/spring.components
index 4b6de536dfa..f42629baebf 100644
--- a/spring-orm/src/test/resources/org/springframework/orm/jpa/domain/spring.components
+++ b/spring-orm/src/test/resources/org/springframework/orm/jpa/domain/spring.components
@@ -1,2 +1,2 @@
-org.springframework.orm.jpa.domain.Person=javax.persistence.Entity
-org.springframework.orm.jpa.domain.DriversLicense=javax.persistence.Entity
\ No newline at end of file
+org.springframework.orm.jpa.domain.Person=jakarta.persistence.Entity
+org.springframework.orm.jpa.domain.DriversLicense=jakarta.persistence.Entity
\ No newline at end of file
diff --git a/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager-native.xml b/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager-native.xml
index 95572a9f759..90c0d836c1d 100644
--- a/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager-native.xml
+++ b/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager-native.xml
@@ -28,6 +28,6 @@
-
+
diff --git a/spring-oxm/spring-oxm.gradle b/spring-oxm/spring-oxm.gradle
index f47726a8bd5..bce9c151769 100644
--- a/spring-oxm/spring-oxm.gradle
+++ b/spring-oxm/spring-oxm.gradle
@@ -4,17 +4,8 @@ plugins {
description = "Spring Object/XML Marshalling"
-configurations {
- jibx
-}
-
-dependencies {
- jibx "org.jibx:jibx-bind:1.3.3"
- jibx "org.apache.bcel:bcel:6.0"
-}
-
xjc {
- xjcVersion = '2.2'
+ xjcVersion = '3.0'
}
sourceSets {
@@ -26,10 +17,9 @@ sourceSets {
dependencies {
api(project(":spring-beans"))
api(project(":spring-core"))
- optional("javax.xml.bind:jaxb-api")
- optional("javax.activation:javax.activation-api")
+ optional("jakarta.xml.bind:jakarta.xml.bind-api")
+ optional("jakarta.activation:jakarta.activation-api")
optional("com.thoughtworks.xstream:xstream")
- optional("org.jibx:jibx-run")
testImplementation(project(":spring-context"))
testImplementation(testFixtures(project(":spring-core")))
testImplementation("org.ogce:xpp3")
@@ -42,25 +32,3 @@ dependencies {
testRuntimeOnly("com.sun.xml.bind:jaxb-core")
testRuntimeOnly("com.sun.xml.bind:jaxb-impl")
}
-
-// JiBX compiler is currently not compatible with JDK 9+.
-// If testToolchain has been set, we assume the custom JDK version is 9+.
-if ((JavaVersion.current() == JavaVersion.VERSION_1_8) && !project.hasProperty("testToolchain")) {
- compileTestJava {
- def bindingXml = "${projectDir}/src/test/resources/org/springframework/oxm/jibx/binding.xml"
-
- doLast() {
- project.ant {
- taskdef(name: "jibx",
- classname: "org.jibx.binding.ant.CompileTask",
- classpath: configurations.jibx.asPath)
-
- jibx(verbose: false, load: true, binding: bindingXml) {
- classpathset(dir: sourceSets.test.java.classesDirectory.get().getAsFile()) {
- include(name: "**/jibx/**/*")
- }
- }
- }
- }
- }
-}
diff --git a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/ClassPathJaxb2TypeScanner.java b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/ClassPathJaxb2TypeScanner.java
index 520d2a627d7..b989541fd35 100644
--- a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/ClassPathJaxb2TypeScanner.java
+++ b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/ClassPathJaxb2TypeScanner.java
@@ -20,11 +20,11 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlRegistry;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSeeAlso;
-import javax.xml.bind.annotation.XmlType;
+import jakarta.xml.bind.annotation.XmlEnum;
+import jakarta.xml.bind.annotation.XmlRegistry;
+import jakarta.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlSeeAlso;
+import jakarta.xml.bind.annotation.XmlType;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
diff --git a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java
index 176ccc83f8b..7267f311cc0 100644
--- a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java
+++ b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -38,22 +38,7 @@ import java.util.Date;
import java.util.Map;
import java.util.UUID;
-import javax.activation.DataHandler;
-import javax.activation.DataSource;
import javax.xml.XMLConstants;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.MarshalException;
-import javax.xml.bind.Marshaller;
-import javax.xml.bind.UnmarshalException;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.bind.ValidationEventHandler;
-import javax.xml.bind.ValidationException;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-import javax.xml.bind.attachment.AttachmentMarshaller;
-import javax.xml.bind.attachment.AttachmentUnmarshaller;
import javax.xml.datatype.Duration;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;
@@ -70,6 +55,21 @@ import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
+import jakarta.activation.DataHandler;
+import jakarta.activation.DataSource;
+import jakarta.xml.bind.JAXBContext;
+import jakarta.xml.bind.JAXBElement;
+import jakarta.xml.bind.JAXBException;
+import jakarta.xml.bind.MarshalException;
+import jakarta.xml.bind.Marshaller;
+import jakarta.xml.bind.UnmarshalException;
+import jakarta.xml.bind.Unmarshaller;
+import jakarta.xml.bind.ValidationEventHandler;
+import jakarta.xml.bind.ValidationException;
+import jakarta.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.adapters.XmlAdapter;
+import jakarta.xml.bind.attachment.AttachmentMarshaller;
+import jakarta.xml.bind.attachment.AttachmentUnmarshaller;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.ls.LSResourceResolver;
@@ -275,11 +275,11 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi
*
These properties will be set on the underlying JAXB {@code Marshaller},
* and allow for features such as indentation.
* @param properties the properties
- * @see javax.xml.bind.Marshaller#setProperty(String, Object)
- * @see javax.xml.bind.Marshaller#JAXB_ENCODING
- * @see javax.xml.bind.Marshaller#JAXB_FORMATTED_OUTPUT
- * @see javax.xml.bind.Marshaller#JAXB_NO_NAMESPACE_SCHEMA_LOCATION
- * @see javax.xml.bind.Marshaller#JAXB_SCHEMA_LOCATION
+ * @see jakarta.xml.bind.Marshaller#setProperty(String, Object)
+ * @see jakarta.xml.bind.Marshaller#JAXB_ENCODING
+ * @see jakarta.xml.bind.Marshaller#JAXB_FORMATTED_OUTPUT
+ * @see jakarta.xml.bind.Marshaller#JAXB_NO_NAMESPACE_SCHEMA_LOCATION
+ * @see jakarta.xml.bind.Marshaller#JAXB_SCHEMA_LOCATION
*/
public void setMarshallerProperties(Map properties) {
this.marshallerProperties = properties;
@@ -289,7 +289,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi
* Set the JAXB {@code Unmarshaller} properties.
* These properties will be set on the underlying JAXB {@code Unmarshaller}.
* @param properties the properties
- * @see javax.xml.bind.Unmarshaller#setProperty(String, Object)
+ * @see jakarta.xml.bind.Unmarshaller#setProperty(String, Object)
*/
public void setUnmarshallerProperties(Map properties) {
this.unmarshallerProperties = properties;
@@ -409,7 +409,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi
/**
* Specify a JAXB mapped class for partial unmarshalling.
- * @see javax.xml.bind.Unmarshaller#unmarshal(javax.xml.transform.Source, Class)
+ * @see jakarta.xml.bind.Unmarshaller#unmarshal(javax.xml.transform.Source, Class)
*/
public void setMappedClass(Class> mappedClass) {
this.mappedClass = mappedClass;
@@ -574,7 +574,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi
}
}
- @SuppressWarnings("deprecation") // on JDK 9
+ @SuppressWarnings("deprecation")
private Schema loadSchema(Resource[] resources, String schemaLanguage) throws IOException, SAXException {
if (logger.isDebugEnabled()) {
logger.debug("Setting validation schema to " +
@@ -857,7 +857,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi
}
}
- @SuppressWarnings("deprecation") // on JDK 9
+ @SuppressWarnings("deprecation")
private Source processSource(Source source) {
if (StaxUtils.isStaxSource(source) || source instanceof DOMSource) {
return source;
diff --git a/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeContainer.java b/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeContainer.java
index 03545723951..11f24456d0a 100644
--- a/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeContainer.java
+++ b/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeContainer.java
@@ -16,7 +16,7 @@
package org.springframework.oxm.mime;
-import javax.activation.DataHandler;
+import jakarta.activation.DataHandler;
import org.springframework.lang.Nullable;
diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Airplane.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Airplane.java
index e9436034e81..503fb73315b 100644
--- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Airplane.java
+++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Airplane.java
@@ -16,7 +16,7 @@
package org.springframework.oxm.jaxb;
-import javax.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Airplane {
diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/BinaryObject.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/BinaryObject.java
index 4457329e31b..b76441b806a 100644
--- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/BinaryObject.java
+++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/BinaryObject.java
@@ -16,10 +16,10 @@
package org.springframework.oxm.jaxb;
-import javax.activation.DataHandler;
-import javax.xml.bind.annotation.XmlAttachmentRef;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
+import jakarta.activation.DataHandler;
+import jakarta.xml.bind.annotation.XmlAttachmentRef;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlRootElement;
@XmlRootElement(namespace = "http://springframework.org/spring-ws")
public class BinaryObject {
diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2MarshallerTests.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2MarshallerTests.java
index a0e88fef268..07453a56864 100644
--- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2MarshallerTests.java
+++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2MarshallerTests.java
@@ -23,11 +23,6 @@ import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Collections;
-import javax.activation.DataHandler;
-import javax.activation.FileDataSource;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
import javax.xml.namespace.QName;
import javax.xml.transform.Result;
import javax.xml.transform.sax.SAXResult;
@@ -35,6 +30,11 @@ import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
+import jakarta.activation.DataHandler;
+import jakarta.activation.FileDataSource;
+import jakarta.xml.bind.JAXBElement;
+import jakarta.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlType;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.InOrder;
@@ -141,7 +141,7 @@ class Jaxb2MarshallerTests extends AbstractMarshallerTests {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath(CONTEXT_PATH);
marshaller.setMarshallerProperties(
- Collections.singletonMap(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE));
+ Collections.singletonMap(jakarta.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE));
marshaller.afterPropertiesSet();
}
@@ -307,10 +307,10 @@ class Jaxb2MarshallerTests extends AbstractMarshallerTests {
@Test // SPR-10806
void unmarshalStreamSourceWithXmlOptions() throws Exception {
- final javax.xml.bind.Unmarshaller unmarshaller = mock(javax.xml.bind.Unmarshaller.class);
+ final jakarta.xml.bind.Unmarshaller unmarshaller = mock(jakarta.xml.bind.Unmarshaller.class);
Jaxb2Marshaller marshaller = new Jaxb2Marshaller() {
@Override
- public javax.xml.bind.Unmarshaller createUnmarshaller() {
+ public jakarta.xml.bind.Unmarshaller createUnmarshaller() {
return unmarshaller;
}
};
@@ -341,10 +341,10 @@ class Jaxb2MarshallerTests extends AbstractMarshallerTests {
@Test // SPR-10806
void unmarshalSaxSourceWithXmlOptions() throws Exception {
- final javax.xml.bind.Unmarshaller unmarshaller = mock(javax.xml.bind.Unmarshaller.class);
+ final jakarta.xml.bind.Unmarshaller unmarshaller = mock(jakarta.xml.bind.Unmarshaller.class);
Jaxb2Marshaller marshaller = new Jaxb2Marshaller() {
@Override
- public javax.xml.bind.Unmarshaller createUnmarshaller() {
+ public jakarta.xml.bind.Unmarshaller createUnmarshaller() {
return unmarshaller;
}
};
diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java
index 4a4b9c9998c..0b9ac09b56f 100644
--- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java
+++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java
@@ -20,14 +20,14 @@ import java.io.File;
import java.io.IOException;
import java.io.StringReader;
-import javax.activation.DataHandler;
-import javax.activation.FileDataSource;
-import javax.xml.bind.JAXBElement;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
+import jakarta.activation.DataHandler;
+import jakarta.activation.FileDataSource;
+import jakarta.xml.bind.JAXBElement;
import org.junit.jupiter.api.Test;
import org.springframework.core.io.ClassPathResource;
diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Primitives.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Primitives.java
index 2f61fc4b669..d02de24e808 100644
--- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Primitives.java
+++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Primitives.java
@@ -16,9 +16,10 @@
package org.springframework.oxm.jaxb;
-import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
+import jakarta.xml.bind.JAXBElement;
+
/**
* Used by {@link org.springframework.oxm.jaxb.Jaxb2MarshallerTests}.
*
diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/StandardClasses.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/StandardClasses.java
index c5e3c2ae7ed..14adba20759 100644
--- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/StandardClasses.java
+++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/StandardClasses.java
@@ -26,17 +26,18 @@ import java.util.Date;
import java.util.GregorianCalendar;
import java.util.UUID;
-import javax.activation.DataHandler;
-import javax.activation.DataSource;
-import javax.activation.URLDataSource;
import javax.imageio.ImageIO;
-import javax.xml.bind.JAXBElement;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.Duration;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;
+import jakarta.activation.DataHandler;
+import jakarta.activation.DataSource;
+import jakarta.activation.URLDataSource;
+import jakarta.xml.bind.JAXBElement;
+
/**
* Used by {@link org.springframework.oxm.jaxb.Jaxb2MarshallerTests}.
*
@@ -58,7 +59,7 @@ public class StandardClasses {
javax.xml.datatype.Duration
java.lang.Object
java.awt.Image
- javax.activation.DataHandler
+ jakarta.activation.DataHandler
javax.xml.transform.Source
java.util.UUID
*/
diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/XmlRegObjectFactory.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/XmlRegObjectFactory.java
index 458385eda86..547367c856d 100644
--- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/XmlRegObjectFactory.java
+++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/XmlRegObjectFactory.java
@@ -16,11 +16,12 @@
package org.springframework.oxm.jaxb;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.annotation.XmlElementDecl;
-import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;
+import jakarta.xml.bind.JAXBElement;
+import jakarta.xml.bind.annotation.XmlElementDecl;
+import jakarta.xml.bind.annotation.XmlRegistry;
+
@XmlRegistry
public class XmlRegObjectFactory {
diff --git a/spring-test/spring-test.gradle b/spring-test/spring-test.gradle
index 365ce7d316f..8d0e2076243 100644
--- a/spring-test/spring-test.gradle
+++ b/spring-test/spring-test.gradle
@@ -14,21 +14,21 @@ dependencies {
optional(project(":spring-webflux"))
optional(project(":spring-webmvc"))
optional(project(":spring-websocket"))
- optional("javax.activation:javax.activation-api")
- optional("javax.el:javax.el-api")
- optional("javax.inject:javax.inject")
- optional("javax.servlet:javax.servlet-api")
- optional("javax.servlet.jsp:javax.servlet.jsp-api")
- optional("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api")
- optional("javax.xml.bind:jaxb-api")
- optional("javax.websocket:javax.websocket-api")
+ optional("jakarta.activation:jakarta.activation-api")
+ optional("jakarta.el:jakarta.el-api")
+ optional("jakarta.inject:jakarta.inject-api")
+ optional("jakarta.servlet:jakarta.servlet-api")
+ optional("jakarta.servlet.jsp:jakarta.servlet.jsp-api")
+ optional("jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api")
+ optional("jakarta.xml.bind:jakarta.xml.bind-api")
+ optional("jakarta.websocket:jakarta.websocket-api")
optional("junit:junit")
+ optional("org.apache.tomcat.embed:tomcat-embed-core")
optional("org.junit.jupiter:junit-jupiter-api")
optional("org.testng:testng")
optional("org.aspectj:aspectjweaver")
optional("org.codehaus.groovy:groovy")
optional("org.hamcrest:hamcrest")
- optional("org.apache.taglibs:taglibs-standard-jstlel")
optional("net.sourceforge.htmlunit:htmlunit")
optional("org.seleniumhq.selenium:htmlunit-driver") {
exclude group: "net.bytebuddy", module: "byte-buddy"
@@ -39,7 +39,6 @@ dependencies {
optional("org.xmlunit:xmlunit-matchers")
optional("org.skyscreamer:jsonassert")
optional("com.jayway.jsonpath:json-path")
- optional("commons-fileupload:commons-fileupload")
optional("org.jetbrains.kotlin:kotlin-reflect")
optional("org.jetbrains.kotlin:kotlin-stdlib")
optional("io.projectreactor:reactor-test")
@@ -52,14 +51,14 @@ dependencies {
testImplementation(testFixtures(project(":spring-core")))
testImplementation(testFixtures(project(":spring-tx")))
testImplementation(testFixtures(project(":spring-web")))
- testImplementation("javax.annotation:javax.annotation-api")
+ testImplementation("jakarta.annotation:jakarta.annotation-api")
testImplementation("javax.cache:cache-api")
- testImplementation("javax.ejb:javax.ejb-api")
- testImplementation("javax.interceptor:javax.interceptor-api")
- testImplementation("javax.mail:javax.mail-api")
- testImplementation("org.hibernate:hibernate-core")
+ testImplementation("jakarta.ejb:jakarta.ejb-api")
+ testImplementation("jakarta.interceptor:jakarta.interceptor-api")
+ testImplementation("jakarta.mail:jakarta.mail-api")
+ testImplementation("org.hibernate:hibernate-core-jakarta")
testImplementation("org.hibernate:hibernate-validator")
- testImplementation("javax.validation:validation-api")
+ testImplementation("jakarta.validation:jakarta.validation-api")
testImplementation("org.junit.platform:junit-platform-runner") {
exclude group: "junit", module: "junit"
}
@@ -67,9 +66,6 @@ dependencies {
testImplementation("com.fasterxml.jackson.core:jackson-databind")
testImplementation("com.thoughtworks.xstream:xstream")
testImplementation("com.rometools:rome")
- testImplementation("org.apache.tiles:tiles-api")
- testImplementation("org.apache.tiles:tiles-core")
- testImplementation("org.apache.tiles:tiles-servlet")
testImplementation("org.hsqldb:hsqldb")
testImplementation("org.apache.httpcomponents:httpclient")
testImplementation("io.projectreactor.netty:reactor-netty-http")
@@ -77,7 +73,7 @@ dependencies {
testRuntimeOnly("org.junit.vintage:junit-vintage-engine") {
exclude group: "junit", module: "junit"
}
- testRuntimeOnly("org.glassfish:javax.el")
+ testRuntimeOnly("org.glassfish:jakarta.el")
testRuntimeOnly("com.sun.xml.bind:jaxb-core")
testRuntimeOnly("com.sun.xml.bind:jaxb-impl")
}
diff --git a/spring-test/src/main/java/org/springframework/mock/jndi/SimpleNamingContextBuilder.java b/spring-test/src/main/java/org/springframework/mock/jndi/SimpleNamingContextBuilder.java
index 2d6110b6926..802dcaf32c4 100644
--- a/spring-test/src/main/java/org/springframework/mock/jndi/SimpleNamingContextBuilder.java
+++ b/spring-test/src/main/java/org/springframework/mock/jndi/SimpleNamingContextBuilder.java
@@ -39,7 +39,7 @@ import org.springframework.util.ReflectionUtils;
* configure JNDI appropriately, so that {@code new InitialContext()}
* will expose the required objects. Also usable for standalone applications,
* e.g. for binding a JDBC DataSource to a well-known JNDI location, to be
- * able to use traditional Java EE data access code outside of a Java EE
+ * able to use traditional Jakarta EE data access code outside of a Jakarta EE
* container.
*
* There are various choices for DataSource implementations:
diff --git a/spring-test/src/main/java/org/springframework/mock/jndi/package-info.java b/spring-test/src/main/java/org/springframework/mock/jndi/package-info.java
index fc31fe57512..b2ec4eaacaa 100644
--- a/spring-test/src/main/java/org/springframework/mock/jndi/package-info.java
+++ b/spring-test/src/main/java/org/springframework/mock/jndi/package-info.java
@@ -7,7 +7,7 @@
*
*
Useful for setting up a simple JNDI environment for test suites
* or stand-alone applications. If, for example, JDBC DataSources get bound to the
- * same JNDI names as within a Java EE container, both application code and
+ * same JNDI names as within a Jakarta EE container, both application code and
* configuration can be reused without changes.
*/
@NonNullApi
diff --git a/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletInputStream.java b/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletInputStream.java
index 4b69e164915..1be569c2217 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletInputStream.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletInputStream.java
@@ -19,13 +19,13 @@ package org.springframework.mock.web;
import java.io.IOException;
import java.io.InputStream;
-import javax.servlet.ReadListener;
-import javax.servlet.ServletInputStream;
+import jakarta.servlet.ReadListener;
+import jakarta.servlet.ServletInputStream;
import org.springframework.util.Assert;
/**
- * Delegating implementation of {@link javax.servlet.ServletInputStream}.
+ * Delegating implementation of {@link jakarta.servlet.ServletInputStream}.
*
*
Used by {@link MockHttpServletRequest}; typically not directly
* used for testing application controllers.
diff --git a/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletOutputStream.java b/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletOutputStream.java
index 9fa54fed482..41ff6b15b7d 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletOutputStream.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/DelegatingServletOutputStream.java
@@ -19,13 +19,13 @@ package org.springframework.mock.web;
import java.io.IOException;
import java.io.OutputStream;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.WriteListener;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.WriteListener;
import org.springframework.util.Assert;
/**
- * Delegating implementation of {@link javax.servlet.ServletOutputStream}.
+ * Delegating implementation of {@link jakarta.servlet.ServletOutputStream}.
*
*
Used by {@link MockHttpServletResponse}; typically not directly
* used for testing application controllers.
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockAsyncContext.java b/spring-test/src/main/java/org/springframework/mock/web/MockAsyncContext.java
index f3c6fcc1ad6..982d4e3b261 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockAsyncContext.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockAsyncContext.java
@@ -20,15 +20,15 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import javax.servlet.AsyncContext;
-import javax.servlet.AsyncEvent;
-import javax.servlet.AsyncListener;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.AsyncEvent;
+import jakarta.servlet.AsyncListener;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.BeanUtils;
import org.springframework.lang.Nullable;
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockBodyContent.java b/spring-test/src/main/java/org/springframework/mock/web/MockBodyContent.java
index a8c31873b04..85ee83f89fe 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockBodyContent.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockBodyContent.java
@@ -21,14 +21,14 @@ import java.io.Reader;
import java.io.StringReader;
import java.io.Writer;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.JspWriter;
-import javax.servlet.jsp.tagext.BodyContent;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.jsp.JspWriter;
+import jakarta.servlet.jsp.tagext.BodyContent;
import org.springframework.lang.Nullable;
/**
- * Mock implementation of the {@link javax.servlet.jsp.tagext.BodyContent} class.
+ * Mock implementation of the {@link jakarta.servlet.jsp.tagext.BodyContent} class.
* Only necessary for testing applications when testing custom JSP tags.
*
* @author Juergen Hoeller
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java b/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java
index 372898cd5a3..a00d67e335d 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java
@@ -20,7 +20,7 @@ import java.time.DateTimeException;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
-import javax.servlet.http.Cookie;
+import jakarta.servlet.http.Cookie;
import org.springframework.core.style.ToStringCreator;
import org.springframework.lang.Nullable;
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockExpressionEvaluator.java b/spring-test/src/main/java/org/springframework/mock/web/MockExpressionEvaluator.java
deleted file mode 100644
index bfd549ac5dc..00000000000
--- a/spring-test/src/main/java/org/springframework/mock/web/MockExpressionEvaluator.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.mock.web;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-
-import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;
-
-/**
- * Mock implementation of the JSP 2.0 {@link javax.servlet.jsp.el.ExpressionEvaluator}
- * interface, delegating to the Apache JSTL {@link ExpressionEvaluatorManager}.
- * Only necessary for testing applications when testing custom JSP tags.
- *
- *
Note that the Apache JSTL implementation (jstl.jar, standard.jar) has to be
- * available on the classpath to use this expression evaluator.
- *
- * @author Juergen Hoeller
- * @since 1.1.5
- * @see org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager
- */
-@SuppressWarnings("deprecation")
-public class MockExpressionEvaluator extends javax.servlet.jsp.el.ExpressionEvaluator {
-
- private final PageContext pageContext;
-
-
- /**
- * Create a new MockExpressionEvaluator for the given PageContext.
- * @param pageContext the JSP PageContext to run in
- */
- public MockExpressionEvaluator(PageContext pageContext) {
- this.pageContext = pageContext;
- }
-
-
- @Override
- @SuppressWarnings("rawtypes")
- public javax.servlet.jsp.el.Expression parseExpression(final String expression, final Class expectedType,
- final javax.servlet.jsp.el.FunctionMapper functionMapper) throws javax.servlet.jsp.el.ELException {
-
- return new javax.servlet.jsp.el.Expression() {
- @Override
- public Object evaluate(javax.servlet.jsp.el.VariableResolver variableResolver) throws javax.servlet.jsp.el.ELException {
- return doEvaluate(expression, expectedType, functionMapper);
- }
- };
- }
-
- @Override
- @SuppressWarnings("rawtypes")
- public Object evaluate(String expression, Class expectedType, javax.servlet.jsp.el.VariableResolver variableResolver,
- javax.servlet.jsp.el.FunctionMapper functionMapper) throws javax.servlet.jsp.el.ELException {
-
- return doEvaluate(expression, expectedType, functionMapper);
- }
-
- @SuppressWarnings("rawtypes")
- protected Object doEvaluate(String expression, Class expectedType, javax.servlet.jsp.el.FunctionMapper functionMapper)
- throws javax.servlet.jsp.el.ELException {
-
- try {
- return ExpressionEvaluatorManager.evaluate("JSP EL expression", expression, expectedType, this.pageContext);
- }
- catch (JspException ex) {
- throw new javax.servlet.jsp.el.ELException("Parsing of JSP EL expression \"" + expression + "\" failed", ex);
- }
- }
-
-}
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockFilterChain.java b/spring-test/src/main/java/org/springframework/mock/web/MockFilterChain.java
index 0f60d941476..39b874b1664 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockFilterChain.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockFilterChain.java
@@ -22,20 +22,20 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.List;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.Servlet;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.Servlet;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
/**
- * Mock implementation of the {@link javax.servlet.FilterChain} interface.
+ * Mock implementation of the {@link jakarta.servlet.FilterChain} interface.
*
*
A {@link MockFilterChain} can be configured with one or more filters and a
* Servlet to invoke. The first time the chain is called, it invokes all filters
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockFilterConfig.java b/spring-test/src/main/java/org/springframework/mock/web/MockFilterConfig.java
index 172dd646873..4755b516835 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockFilterConfig.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockFilterConfig.java
@@ -21,17 +21,17 @@ import java.util.Enumeration;
import java.util.LinkedHashMap;
import java.util.Map;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletContext;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletContext;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
- * Mock implementation of the {@link javax.servlet.FilterConfig} interface.
+ * Mock implementation of the {@link jakarta.servlet.FilterConfig} interface.
*
*
Used for testing the web framework; also useful for testing
- * custom {@link javax.servlet.Filter} implementations.
+ * custom {@link jakarta.servlet.Filter} implementations.
*
* @author Juergen Hoeller
* @since 1.0.2
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletMapping.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletMapping.java
index 62664d5dac3..17615a3bdcf 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletMapping.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletMapping.java
@@ -16,8 +16,8 @@
package org.springframework.mock.web;
-import javax.servlet.http.HttpServletMapping;
-import javax.servlet.http.MappingMatch;
+import jakarta.servlet.http.HttpServletMapping;
+import jakarta.servlet.http.MappingMatch;
import org.springframework.lang.Nullable;
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java
index e12c278baca..1a3e7102e9e 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java
@@ -43,20 +43,20 @@ import java.util.Set;
import java.util.TimeZone;
import java.util.stream.Collectors;
-import javax.servlet.AsyncContext;
-import javax.servlet.DispatcherType;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpUpgradeHandler;
-import javax.servlet.http.Part;
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.DispatcherType;
+import jakarta.servlet.RequestDispatcher;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletInputStream;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpUpgradeHandler;
+import jakarta.servlet.http.Part;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
@@ -71,7 +71,7 @@ import org.springframework.util.StreamUtils;
import org.springframework.util.StringUtils;
/**
- * Mock implementation of the {@link javax.servlet.http.HttpServletRequest} interface.
+ * Mock implementation of the {@link jakarta.servlet.http.HttpServletRequest} interface.
*
*
The default, preferred {@link Locale} for the server mocked by this request
* is {@link Locale#ENGLISH}. This value can be changed via {@link #addPreferredLocale}
@@ -820,7 +820,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
*
In contrast to the Servlet specification, this mock implementation
* does not take into consideration any locales
* specified via the {@code Accept-Language} header.
- * @see javax.servlet.ServletRequest#getLocale()
+ * @see jakarta.servlet.ServletRequest#getLocale()
* @see #addPreferredLocale(Locale)
* @see #setPreferredLocales(List)
*/
@@ -838,7 +838,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
*
In contrast to the Servlet specification, this mock implementation
* does not take into consideration any locales
* specified via the {@code Accept-Language} header.
- * @see javax.servlet.ServletRequest#getLocales()
+ * @see jakarta.servlet.ServletRequest#getLocales()
* @see #addPreferredLocale(Locale)
* @see #setPreferredLocales(List)
*/
@@ -861,7 +861,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
/**
* Return {@code true} if the {@link #setSecure secure} flag has been set
* to {@code true} or if the {@link #getScheme scheme} is {@code https}.
- * @see javax.servlet.ServletRequest#isSecure()
+ * @see jakarta.servlet.ServletRequest#isSecure()
*/
@Override
public boolean isSecure() {
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java
index a1b3eca3b08..df02fa4deba 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java
@@ -38,9 +38,9 @@ import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
@@ -51,7 +51,7 @@ import org.springframework.util.StringUtils;
import org.springframework.web.util.WebUtils;
/**
- * Mock implementation of the {@link javax.servlet.http.HttpServletResponse} interface.
+ * Mock implementation of the {@link jakarta.servlet.http.HttpServletResponse} interface.
*
*
As of Spring Framework 5.0, this set of mocks is designed on a Servlet 4.0 baseline.
*
@@ -383,7 +383,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
@Override
public void setLocale(@Nullable Locale locale) {
- // Although the Javadoc for javax.servlet.ServletResponse.setLocale(Locale) does not
+ // Although the Javadoc for jakarta.servlet.ServletResponse.setLocale(Locale) does not
// state how a null value for the supplied Locale should be handled, both Tomcat and
// Jetty simply ignore a null value. So we do the same here.
if (locale == null) {
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpSession.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpSession.java
index fb8e8bdddd4..244880d8d79 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpSession.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpSession.java
@@ -25,17 +25,17 @@ import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionBindingEvent;
-import javax.servlet.http.HttpSessionBindingListener;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSessionBindingEvent;
+import jakarta.servlet.http.HttpSessionBindingListener;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
/**
- * Mock implementation of the {@link javax.servlet.http.HttpSession} interface.
+ * Mock implementation of the {@link jakarta.servlet.http.HttpSession} interface.
*
*
As of Spring 5.0, this set of mocks is designed on a Servlet 4.0 baseline.
*
@@ -149,7 +149,7 @@ public class MockHttpSession implements HttpSession {
}
@Override
- public javax.servlet.http.HttpSessionContext getSessionContext() {
+ public jakarta.servlet.http.HttpSessionContext getSessionContext() {
throw new UnsupportedOperationException("getSessionContext");
}
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockJspWriter.java b/spring-test/src/main/java/org/springframework/mock/web/MockJspWriter.java
index 5eabb13e27a..b99202c1e53 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockJspWriter.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockJspWriter.java
@@ -20,13 +20,13 @@ import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.JspWriter;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.jsp.JspWriter;
import org.springframework.lang.Nullable;
/**
- * Mock implementation of the {@link javax.servlet.jsp.JspWriter} class.
+ * Mock implementation of the {@link jakarta.servlet.jsp.JspWriter} class.
* Only necessary for testing applications when testing custom JSP tags.
*
* @author Juergen Hoeller
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockMultipartHttpServletRequest.java b/spring-test/src/main/java/org/springframework/mock/web/MockMultipartHttpServletRequest.java
index 15153dcea3e..af199e42336 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockMultipartHttpServletRequest.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockMultipartHttpServletRequest.java
@@ -24,9 +24,9 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.Part;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.Part;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockPageContext.java b/spring-test/src/main/java/org/springframework/mock/web/MockPageContext.java
index 565da0386e1..9911449917c 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockPageContext.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockPageContext.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2018 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,24 +24,24 @@ import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
-import javax.el.ELContext;
-import javax.servlet.Servlet;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import javax.servlet.jsp.JspWriter;
-import javax.servlet.jsp.PageContext;
+import jakarta.el.ELContext;
+import jakarta.servlet.Servlet;
+import jakarta.servlet.ServletConfig;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
+import jakarta.servlet.jsp.JspWriter;
+import jakarta.servlet.jsp.PageContext;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
- * Mock implementation of the {@link javax.servlet.jsp.PageContext} interface.
+ * Mock implementation of the {@link jakarta.servlet.jsp.PageContext} interface.
* Only necessary for testing applications when testing custom JSP tags.
*
*
Note: Expects initialization via the constructor rather than via the
@@ -293,8 +293,9 @@ public class MockPageContext extends PageContext {
@Override
@Deprecated
- public javax.servlet.jsp.el.ExpressionEvaluator getExpressionEvaluator() {
- return new MockExpressionEvaluator(this);
+ @Nullable
+ public jakarta.servlet.jsp.el.ExpressionEvaluator getExpressionEvaluator() {
+ return null;
}
@Override
@@ -306,7 +307,7 @@ public class MockPageContext extends PageContext {
@Override
@Deprecated
@Nullable
- public javax.servlet.jsp.el.VariableResolver getVariableResolver() {
+ public jakarta.servlet.jsp.el.VariableResolver getVariableResolver() {
return null;
}
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockPart.java b/spring-test/src/main/java/org/springframework/mock/web/MockPart.java
index d68dd3b3095..f706aabbda7 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockPart.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockPart.java
@@ -22,7 +22,7 @@ import java.io.InputStream;
import java.util.Collection;
import java.util.Collections;
-import javax.servlet.http.Part;
+import jakarta.servlet.http.Part;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
@@ -30,7 +30,7 @@ import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
- * Mock implementation of {@code javax.servlet.http.Part}.
+ * Mock implementation of {@code jakarta.servlet.http.Part}.
*
* @author Rossen Stoyanchev
* @author Juergen Hoeller
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockRequestDispatcher.java b/spring-test/src/main/java/org/springframework/mock/web/MockRequestDispatcher.java
index eb8d976539d..9a34e6b45cc 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockRequestDispatcher.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockRequestDispatcher.java
@@ -16,18 +16,17 @@
package org.springframework.mock.web;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-
+import jakarta.servlet.RequestDispatcher;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletResponseWrapper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.util.Assert;
/**
- * Mock implementation of the {@link javax.servlet.RequestDispatcher} interface.
+ * Mock implementation of the {@link jakarta.servlet.RequestDispatcher} interface.
*
* @author Rod Johnson
* @author Juergen Hoeller
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockServletConfig.java b/spring-test/src/main/java/org/springframework/mock/web/MockServletConfig.java
index 1f2208a10bc..08b7d4826a3 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockServletConfig.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockServletConfig.java
@@ -21,14 +21,14 @@ import java.util.Enumeration;
import java.util.LinkedHashMap;
import java.util.Map;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletConfig;
+import jakarta.servlet.ServletContext;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
- * Mock implementation of the {@link javax.servlet.ServletConfig} interface.
+ * Mock implementation of the {@link jakarta.servlet.ServletConfig} interface.
*
* @author Rod Johnson
* @author Juergen Hoeller
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java b/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java
index 232faade3c3..736d44168ef 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java
@@ -31,17 +31,16 @@ import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
-import javax.servlet.Filter;
-import javax.servlet.FilterRegistration;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.Servlet;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRegistration;
-import javax.servlet.SessionCookieConfig;
-import javax.servlet.SessionTrackingMode;
-import javax.servlet.descriptor.JspConfigDescriptor;
-
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterRegistration;
+import jakarta.servlet.RequestDispatcher;
+import jakarta.servlet.Servlet;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRegistration;
+import jakarta.servlet.SessionCookieConfig;
+import jakarta.servlet.SessionTrackingMode;
+import jakarta.servlet.descriptor.JspConfigDescriptor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -59,7 +58,7 @@ import org.springframework.util.StringUtils;
import org.springframework.web.util.WebUtils;
/**
- * Mock implementation of the {@link javax.servlet.ServletContext} interface.
+ * Mock implementation of the {@link jakarta.servlet.ServletContext} interface.
*
*
As of Spring 5.0, this set of mocks is designed on a Servlet 4.0 baseline.
*
@@ -663,7 +662,7 @@ public class MockServletContext implements ServletContext {
/**
* This method always returns {@code null}.
- * @see javax.servlet.ServletContext#getServletRegistration(java.lang.String)
+ * @see jakarta.servlet.ServletContext#getServletRegistration(java.lang.String)
*/
@Override
@Nullable
@@ -673,7 +672,7 @@ public class MockServletContext implements ServletContext {
/**
* This method always returns an {@linkplain Collections#emptyMap empty map}.
- * @see javax.servlet.ServletContext#getServletRegistrations()
+ * @see jakarta.servlet.ServletContext#getServletRegistrations()
*/
@Override
public Map getServletRegistrations() {
@@ -702,7 +701,7 @@ public class MockServletContext implements ServletContext {
/**
* This method always returns {@code null}.
- * @see javax.servlet.ServletContext#getFilterRegistration(java.lang.String)
+ * @see jakarta.servlet.ServletContext#getFilterRegistration(java.lang.String)
*/
@Override
@Nullable
@@ -712,7 +711,7 @@ public class MockServletContext implements ServletContext {
/**
* This method always returns an {@linkplain Collections#emptyMap empty map}.
- * @see javax.servlet.ServletContext#getFilterRegistrations()
+ * @see jakarta.servlet.ServletContext#getFilterRegistrations()
*/
@Override
public Map getFilterRegistrations() {
diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockSessionCookieConfig.java b/spring-test/src/main/java/org/springframework/mock/web/MockSessionCookieConfig.java
index 8ea88f1a8bc..3a98a87a602 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/MockSessionCookieConfig.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/MockSessionCookieConfig.java
@@ -16,16 +16,16 @@
package org.springframework.mock.web;
-import javax.servlet.SessionCookieConfig;
+import jakarta.servlet.SessionCookieConfig;
import org.springframework.lang.Nullable;
/**
- * Mock implementation of the {@link javax.servlet.SessionCookieConfig} interface.
+ * Mock implementation of the {@link jakarta.servlet.SessionCookieConfig} interface.
*
* @author Juergen Hoeller
* @since 4.0
- * @see javax.servlet.ServletContext#getSessionCookieConfig()
+ * @see jakarta.servlet.ServletContext#getSessionCookieConfig()
*/
public class MockSessionCookieConfig implements SessionCookieConfig {
diff --git a/spring-test/src/main/java/org/springframework/mock/web/PassThroughFilterChain.java b/spring-test/src/main/java/org/springframework/mock/web/PassThroughFilterChain.java
index dfc5f7b303a..03fbfac1051 100644
--- a/spring-test/src/main/java/org/springframework/mock/web/PassThroughFilterChain.java
+++ b/spring-test/src/main/java/org/springframework/mock/web/PassThroughFilterChain.java
@@ -18,26 +18,26 @@ package org.springframework.mock.web;
import java.io.IOException;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.Servlet;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.Servlet;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
- * Implementation of the {@link javax.servlet.FilterConfig} interface which
+ * Implementation of the {@link jakarta.servlet.FilterConfig} interface which
* simply passes the call through to a given Filter/FilterChain combination
* (indicating the next Filter in the chain along with the FilterChain that it is
* supposed to work on) or to a given Servlet (indicating the end of the chain).
*
* @author Juergen Hoeller
* @since 2.0.3
- * @see javax.servlet.Filter
- * @see javax.servlet.Servlet
+ * @see jakarta.servlet.Filter
+ * @see jakarta.servlet.Servlet
* @see MockFilterChain
*/
public class PassThroughFilterChain implements FilterChain {
diff --git a/spring-test/src/main/java/org/springframework/test/context/ContextConfiguration.java b/spring-test/src/main/java/org/springframework/test/context/ContextConfiguration.java
index 9eaabcb4f03..8b65d08e2b6 100644
--- a/spring-test/src/main/java/org/springframework/test/context/ContextConfiguration.java
+++ b/spring-test/src/main/java/org/springframework/test/context/ContextConfiguration.java
@@ -57,7 +57,7 @@ import org.springframework.core.annotation.AliasFor;
* {@link org.springframework.stereotype.Component @Component},
* {@link org.springframework.stereotype.Service @Service},
* {@link org.springframework.stereotype.Repository @Repository}, etc.)
- * A JSR-330 compliant class that is annotated with {@code javax.inject} annotations
+ * A JSR-330 compliant class that is annotated with {@code jakarta.inject} annotations
* Any class that contains {@link org.springframework.context.annotation.Bean @Bean}-methods
* Any other class that is intended to be registered as a Spring component (i.e., a Spring bean
* in the {@code ApplicationContext}), potentially taking advantage of automatic autowiring of a
diff --git a/spring-test/src/main/java/org/springframework/test/context/ContextLoader.java b/spring-test/src/main/java/org/springframework/test/context/ContextLoader.java
index 232846264a1..8856f6d89c8 100644
--- a/spring-test/src/main/java/org/springframework/test/context/ContextLoader.java
+++ b/spring-test/src/main/java/org/springframework/test/context/ContextLoader.java
@@ -72,8 +72,8 @@ public interface ContextLoader {
* contexts} loaded by this ContextLoader. Beans will therefore automatically
* be candidates for annotation-based dependency injection using
* {@link org.springframework.beans.factory.annotation.Autowired @Autowired},
- * {@link javax.annotation.Resource @Resource}, and
- * {@link javax.inject.Inject @Inject}.
+ * {@link jakarta.annotation.Resource @Resource}, and
+ * {@link jakarta.inject.Inject @Inject}.
* Any ApplicationContext loaded by a ContextLoader must
* register a JVM shutdown hook for itself. Unless the context gets closed
* early, all context instances will be automatically closed on JVM
diff --git a/spring-test/src/main/java/org/springframework/test/context/SmartContextLoader.java b/spring-test/src/main/java/org/springframework/test/context/SmartContextLoader.java
index dfdd198c45f..f59be7fc4f9 100644
--- a/spring-test/src/main/java/org/springframework/test/context/SmartContextLoader.java
+++ b/spring-test/src/main/java/org/springframework/test/context/SmartContextLoader.java
@@ -101,8 +101,8 @@ public interface SmartContextLoader extends ContextLoader {
* {@code SmartContextLoader}. Beans will therefore automatically be
* candidates for annotation-based dependency injection using
* {@link org.springframework.beans.factory.annotation.Autowired @Autowired},
- * {@link javax.annotation.Resource @Resource}, and
- * {@link javax.inject.Inject @Inject}. In addition, concrete implementations
+ * {@link jakarta.annotation.Resource @Resource}, and
+ * {@link jakarta.inject.Inject @Inject}. In addition, concrete implementations
* should set the active bean definition profiles in the context's
* {@link org.springframework.core.env.Environment Environment}.
*
Any {@code ApplicationContext} loaded by a
diff --git a/spring-test/src/main/java/org/springframework/test/context/web/AbstractGenericWebContextLoader.java b/spring-test/src/main/java/org/springframework/test/context/web/AbstractGenericWebContextLoader.java
index c363dd2d671..e42545a4699 100644
--- a/spring-test/src/main/java/org/springframework/test/context/web/AbstractGenericWebContextLoader.java
+++ b/spring-test/src/main/java/org/springframework/test/context/web/AbstractGenericWebContextLoader.java
@@ -16,8 +16,7 @@
package org.springframework.test.context.web;
-import javax.servlet.ServletContext;
-
+import jakarta.servlet.ServletContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
diff --git a/spring-test/src/main/java/org/springframework/test/context/web/ServletTestExecutionListener.java b/spring-test/src/main/java/org/springframework/test/context/web/ServletTestExecutionListener.java
index b981840f9ba..3051524eb89 100644
--- a/spring-test/src/main/java/org/springframework/test/context/web/ServletTestExecutionListener.java
+++ b/spring-test/src/main/java/org/springframework/test/context/web/ServletTestExecutionListener.java
@@ -16,8 +16,7 @@
package org.springframework.test.context.web;
-import javax.servlet.ServletContext;
-
+import jakarta.servlet.ServletContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
diff --git a/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainer.java b/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainer.java
index b375615283f..cc86220b62d 100644
--- a/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainer.java
+++ b/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainer.java
@@ -21,16 +21,16 @@ import java.net.URI;
import java.util.Collections;
import java.util.Set;
-import javax.websocket.ClientEndpointConfig;
-import javax.websocket.DeploymentException;
-import javax.websocket.Endpoint;
-import javax.websocket.Extension;
-import javax.websocket.Session;
-import javax.websocket.server.ServerContainer;
-import javax.websocket.server.ServerEndpointConfig;
+import jakarta.websocket.ClientEndpointConfig;
+import jakarta.websocket.DeploymentException;
+import jakarta.websocket.Endpoint;
+import jakarta.websocket.Extension;
+import jakarta.websocket.Session;
+import jakarta.websocket.server.ServerContainer;
+import jakarta.websocket.server.ServerEndpointConfig;
/**
- * Mock implementation of the {@link javax.websocket.server.ServerContainer} interface.
+ * Mock implementation of the {@link jakarta.websocket.server.ServerContainer} interface.
*
* @author Sam Brannen
* @since 4.3.1
diff --git a/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizer.java b/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizer.java
index 1a8e129f80a..c746941672b 100644
--- a/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizer.java
+++ b/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizer.java
@@ -16,7 +16,7 @@
package org.springframework.test.context.web.socket;
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.lang.Nullable;
@@ -27,7 +27,7 @@ import org.springframework.web.context.WebApplicationContext;
/**
* {@link ContextCustomizer} that instantiates a new {@link MockServerContainer}
* and stores it in the {@code ServletContext} under the attribute named
- * {@code "javax.websocket.server.ServerContainer"}.
+ * {@code "jakarta.websocket.server.ServerContainer"}.
*
* @author Sam Brannen
* @since 4.3.1
@@ -40,7 +40,7 @@ class MockServerContainerContextCustomizer implements ContextCustomizer {
WebApplicationContext wac = (WebApplicationContext) context;
ServletContext sc = wac.getServletContext();
if (sc != null) {
- sc.setAttribute("javax.websocket.server.ServerContainer", new MockServerContainer());
+ sc.setAttribute("jakarta.websocket.server.ServerContainer", new MockServerContainer());
}
}
}
diff --git a/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizerFactory.java b/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizerFactory.java
index e69b2bab072..0cb74f154c0 100644
--- a/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizerFactory.java
+++ b/spring-test/src/main/java/org/springframework/test/context/web/socket/MockServerContainerContextCustomizerFactory.java
@@ -42,7 +42,7 @@ class MockServerContainerContextCustomizerFactory implements ContextCustomizerFa
private static final String MOCK_SERVER_CONTAINER_CONTEXT_CUSTOMIZER_CLASS_NAME =
"org.springframework.test.context.web.socket.MockServerContainerContextCustomizer";
- private static final boolean webSocketPresent = ClassUtils.isPresent("javax.websocket.server.ServerContainer",
+ private static final boolean webSocketPresent = ClassUtils.isPresent("jakarta.websocket.server.ServerContainer",
MockServerContainerContextCustomizerFactory.class.getClassLoader());
diff --git a/spring-test/src/main/java/org/springframework/test/util/ReflectionTestUtils.java b/spring-test/src/main/java/org/springframework/test/util/ReflectionTestUtils.java
index 2197d861b0b..419374b9576 100644
--- a/spring-test/src/main/java/org/springframework/test/util/ReflectionTestUtils.java
+++ b/spring-test/src/main/java/org/springframework/test/util/ReflectionTestUtils.java
@@ -45,12 +45,12 @@ import org.springframework.util.StringUtils;
* {@code public} setter methods for properties in a domain entity.
* Spring's support for annotations such as
* {@link org.springframework.beans.factory.annotation.Autowired @Autowired},
- * {@link javax.inject.Inject @Inject}, and
- * {@link javax.annotation.Resource @Resource} which provides dependency
+ * {@link jakarta.inject.Inject @Inject}, and
+ * {@link jakarta.annotation.Resource @Resource} which provides dependency
* injection for {@code private} or {@code protected} fields, setter methods,
* and configuration methods.
- * Use of annotations such as {@link javax.annotation.PostConstruct @PostConstruct}
- * and {@link javax.annotation.PreDestroy @PreDestroy} for lifecycle callback
+ * Use of annotations such as {@link jakarta.annotation.PostConstruct @PostConstruct}
+ * and {@link jakarta.annotation.PreDestroy @PreDestroy} for lifecycle callback
* methods.
*
*
diff --git a/spring-test/src/main/java/org/springframework/test/web/client/match/ContentRequestMatchers.java b/spring-test/src/main/java/org/springframework/test/web/client/match/ContentRequestMatchers.java
index ec883b02a41..0ce6350a5da 100644
--- a/spring-test/src/main/java/org/springframework/test/web/client/match/ContentRequestMatchers.java
+++ b/spring-test/src/main/java/org/springframework/test/web/client/match/ContentRequestMatchers.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,32 +16,36 @@
package org.springframework.test.web.client.match;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.util.List;
import java.util.Map;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
+import org.apache.tomcat.util.http.fileupload.FileItem;
+import org.apache.tomcat.util.http.fileupload.FileUpload;
+import org.apache.tomcat.util.http.fileupload.UploadContext;
+import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.hamcrest.Matcher;
import org.w3c.dom.Node;
import org.springframework.core.io.Resource;
+import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpRequest;
import org.springframework.http.converter.FormHttpMessageConverter;
+import org.springframework.lang.Nullable;
import org.springframework.mock.http.MockHttpInputMessage;
import org.springframework.mock.http.client.MockClientHttpRequest;
-import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.util.JsonExpectationsHelper;
import org.springframework.test.util.XmlExpectationsHelper;
import org.springframework.test.web.client.RequestMatcher;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.StreamUtils;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
-import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.springframework.test.util.AssertionErrors.assertEquals;
@@ -217,7 +221,7 @@ public class ContentRequestMatchers {
@SuppressWarnings("ConstantConditions")
private RequestMatcher multipartData(MultiValueMap expectedMap, boolean containsExactly) {
return request -> {
- MultiValueMap actualMap = MultipartHelper.parse(request);
+ MultiValueMap actualMap = MultipartHelper.parse((MockClientHttpRequest) request);
if (containsExactly) {
assertEquals("Multipart request content: " + actualMap, expectedMap.size(), actualMap.size());
}
@@ -235,8 +239,8 @@ public class ContentRequestMatchers {
expected = StreamUtils.copyToByteArray(((Resource) expected).getInputStream());
}
if (expected instanceof byte[]) {
- assertTrue("Multipart is not a file", actual instanceof MultipartFile);
- assertEquals("Multipart content", expected, ((MultipartFile) actual).getBytes());
+ assertTrue("Multipart is not a file", actual instanceof byte[]);
+ assertEquals("Multipart content", expected, (byte[]) actual);
}
else if (expected instanceof String) {
assertTrue("Multipart is not a String", actual instanceof String);
@@ -356,28 +360,42 @@ public class ContentRequestMatchers {
private static class MultipartHelper {
- public static MultiValueMap parse(ClientHttpRequest request) {
- MultipartHttpServletRequest servletRequest = adaptToMultipartRequest(request);
- MultiValueMap result = new LinkedMultiValueMap<>();
- for (Map.Entry> entry : servletRequest.getMultiFileMap().entrySet()) {
- for (MultipartFile value : entry.getValue()) {
- result.add(entry.getKey(), value);
+ public static MultiValueMap parse(MockClientHttpRequest request) {
+ try {
+ FileUpload fileUpload = new FileUpload(new DiskFileItemFactory());
+
+ List fileItems = fileUpload.parseRequest(new UploadContext() {
+ private final byte[] body = request.getBodyAsBytes();
+ @Override
+ @Nullable
+ public String getCharacterEncoding() {
+ return request.getHeaders().getFirst(HttpHeaders.CONTENT_ENCODING);
+ }
+ @Override
+ @Nullable
+ public String getContentType() {
+ return request.getHeaders().getFirst(HttpHeaders.CONTENT_TYPE);
+ }
+ @Override
+ public InputStream getInputStream() {
+ return new ByteArrayInputStream(this.body);
+ }
+ @Override
+ public long contentLength() {
+ return this.body.length;
+ }
+ });
+
+ MultiValueMap result = new LinkedMultiValueMap<>();
+ for (FileItem fileItem : fileItems) {
+ result.add(fileItem.getFieldName(),
+ (fileItem.isFormField() ? fileItem.getString() : fileItem.get()));
}
+ return result;
}
- for (Map.Entry entry : servletRequest.getParameterMap().entrySet()) {
- for (String value : entry.getValue()) {
- result.add(entry.getKey(), value);
- }
+ catch (Exception ex) {
+ throw new IllegalStateException("Failed to parse multipart request", ex);
}
- return result;
- }
-
- private static MultipartHttpServletRequest adaptToMultipartRequest(ClientHttpRequest request) {
- MockClientHttpRequest source = (MockClientHttpRequest) request;
- MockHttpServletRequest target = new MockHttpServletRequest();
- target.setContent(source.getBodyAsBytes());
- source.getHeaders().forEach((name, values) -> values.forEach(v -> target.addHeader(name, v)));
- return new CommonsMultipartResolver().resolveMultipart(target);
}
}
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvc.java b/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvc.java
index 0c8a28c7fd6..16a968e9a85 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvc.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvc.java
@@ -20,13 +20,13 @@ import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
-import javax.servlet.AsyncContext;
-import javax.servlet.DispatcherType;
-import javax.servlet.Filter;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.DispatcherType;
+import jakarta.servlet.Filter;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponseWrapper;
import org.springframework.beans.Mergeable;
import org.springframework.lang.Nullable;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvcBuilderSupport.java b/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvcBuilderSupport.java
index d635b00b1ba..7ea2eac3633 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvcBuilderSupport.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/MockMvcBuilderSupport.java
@@ -19,8 +19,8 @@ package org.springframework.test.web.servlet;
import java.nio.charset.Charset;
import java.util.List;
-import javax.servlet.Filter;
-import javax.servlet.ServletException;
+import jakarta.servlet.Filter;
+import jakarta.servlet.ServletException;
import org.springframework.core.NestedRuntimeException;
import org.springframework.lang.Nullable;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/RequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/RequestBuilder.java
index db14261075d..e6537d810d3 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/RequestBuilder.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/RequestBuilder.java
@@ -16,7 +16,7 @@
package org.springframework.test.web.servlet;
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
import org.springframework.mock.web.MockHttpServletRequest;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/TestDispatcherServlet.java b/spring-test/src/main/java/org/springframework/test/web/servlet/TestDispatcherServlet.java
index 8c9a4f9fb7a..6d97dfce348 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/TestDispatcherServlet.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/TestDispatcherServlet.java
@@ -20,10 +20,10 @@ import java.io.IOException;
import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.springframework.lang.Nullable;
import org.springframework.mock.web.MockAsyncContext;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/client/AbstractMockMvcServerSpec.java b/spring-test/src/main/java/org/springframework/test/web/servlet/client/AbstractMockMvcServerSpec.java
index cf1b2d60fe8..e9ccb32e6b3 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/client/AbstractMockMvcServerSpec.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/client/AbstractMockMvcServerSpec.java
@@ -15,7 +15,7 @@
*/
package org.springframework.test.web.servlet.client;
-import javax.servlet.Filter;
+import jakarta.servlet.Filter;
import org.springframework.http.client.reactive.ClientHttpConnector;
import org.springframework.test.web.reactive.server.WebTestClient;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcHttpConnector.java b/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcHttpConnector.java
index 705e89432b7..edfd28361e2 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcHttpConnector.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcHttpConnector.java
@@ -23,8 +23,7 @@ import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Function;
-import javax.servlet.http.Cookie;
-
+import jakarta.servlet.http.Cookie;
import reactor.core.publisher.Mono;
import org.springframework.core.ResolvableType;
@@ -166,7 +165,7 @@ public class MockMvcHttpConnector implements ClientHttpConnector {
buffer.read(partBytes);
DataBufferUtils.release(buffer);
- // Adapt to javax.servlet.http.Part...
+ // Adapt to jakarta.servlet.http.Part...
MockPart mockPart = (part instanceof FilePart ?
new MockPart(part.name(), ((FilePart) part).filename(), partBytes) :
new MockPart(part.name(), partBytes));
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcWebTestClient.java b/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcWebTestClient.java
index a59879f795d..2738797ad09 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcWebTestClient.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcWebTestClient.java
@@ -17,7 +17,7 @@ package org.springframework.test.web.servlet.client;
import java.util.function.Supplier;
-import javax.servlet.Filter;
+import jakarta.servlet.Filter;
import org.springframework.format.support.FormattingConversionService;
import org.springframework.http.client.reactive.ClientHttpConnector;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java
index 7d76e63e751..16df1e7e489 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java
@@ -33,17 +33,16 @@ import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
-import javax.servlet.ServletContext;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
import com.gargoylesoftware.htmlunit.CookieManager;
import com.gargoylesoftware.htmlunit.FormEncodingType;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.WebRequest;
import com.gargoylesoftware.htmlunit.util.KeyDataPair;
import com.gargoylesoftware.htmlunit.util.NameValuePair;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.springframework.beans.Mergeable;
import org.springframework.http.MediaType;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebConnection.java b/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebConnection.java
index cbe396dc861..e7d3eb3e312 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebConnection.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebConnection.java
@@ -85,7 +85,7 @@ public final class MockMvcWebConnection implements WebConnection {
* Create a new instance with the specified context path.
* The path may be {@code null} in which case the first path segment
* of the URL is turned into the contextPath. Otherwise it must conform
- * to {@link javax.servlet.http.HttpServletRequest#getContextPath()}
+ * to {@link jakarta.servlet.http.HttpServletRequest#getContextPath()}
* which states that it can be an empty string and otherwise must start
* with a "/" character and not end with a "/" character.
* @param mockMvc the {@code MockMvc} instance to use (never {@code null})
@@ -105,7 +105,7 @@ public final class MockMvcWebConnection implements WebConnection {
/**
* Validate the supplied {@code contextPath}.
*
If the value is not {@code null}, it must conform to
- * {@link javax.servlet.http.HttpServletRequest#getContextPath()} which
+ * {@link jakarta.servlet.http.HttpServletRequest#getContextPath()} which
* states that it can be an empty string and otherwise must start with
* a "/" character and not end with a "/" character.
* @param contextPath the path to validate
@@ -155,10 +155,10 @@ public final class MockMvcWebConnection implements WebConnection {
return resultActions.andReturn().getResponse();
}
- private void storeCookies(WebRequest webRequest, javax.servlet.http.Cookie[] cookies) {
+ private void storeCookies(WebRequest webRequest, jakarta.servlet.http.Cookie[] cookies) {
Date now = new Date();
CookieManager cookieManager = this.webClient.getCookieManager();
- for (javax.servlet.http.Cookie cookie : cookies) {
+ for (jakarta.servlet.http.Cookie cookie : cookies) {
if (cookie.getDomain() == null) {
cookie.setDomain(webRequest.getUrl().getHost());
}
@@ -173,7 +173,7 @@ public final class MockMvcWebConnection implements WebConnection {
}
}
- private static com.gargoylesoftware.htmlunit.util.Cookie createCookie(javax.servlet.http.Cookie cookie) {
+ private static com.gargoylesoftware.htmlunit.util.Cookie createCookie(jakarta.servlet.http.Cookie cookie) {
Date expires = null;
if (cookie.getMaxAge() > -1) {
expires = new Date(System.currentTimeMillis() + cookie.getMaxAge() * 1000);
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java
index c4ec1cd9173..e7122070f13 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java
@@ -30,10 +30,10 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpSession;
import org.springframework.beans.Mergeable;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
@@ -185,7 +185,7 @@ public class MockHttpServletRequestBuilder
* the requestURI. This is because most applications don't actually depend
* on the name under which they're deployed. If specified here, the context
* path must start with a "/" and must not end with a "/".
- * @see javax.servlet.http.HttpServletRequest#getContextPath()
+ * @see jakarta.servlet.http.HttpServletRequest#getContextPath()
*/
public MockHttpServletRequestBuilder contextPath(String contextPath) {
if (StringUtils.hasText(contextPath)) {
@@ -207,7 +207,7 @@ public class MockHttpServletRequestBuilder
* {@code "/accounts/1"} as opposed to {@code "/main/accounts/1"}.
* If specified here, the servletPath must start with a "/" and must not
* end with a "/".
- * @see javax.servlet.http.HttpServletRequest#getServletPath()
+ * @see jakarta.servlet.http.HttpServletRequest#getServletPath()
*/
public MockHttpServletRequestBuilder servletPath(String servletPath) {
if (StringUtils.hasText(servletPath)) {
@@ -224,7 +224,7 @@ public class MockHttpServletRequestBuilder
* by removing the contextPath and the servletPath from the requestURI and using any
* remaining part. If specified here, the pathInfo must start with a "/".
*
If specified, the pathInfo will be used as-is.
- * @see javax.servlet.http.HttpServletRequest#getPathInfo()
+ * @see jakarta.servlet.http.HttpServletRequest#getPathInfo()
*/
public MockHttpServletRequestBuilder pathInfo(@Nullable String pathInfo) {
if (StringUtils.hasText(pathInfo)) {
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java
index 73a0a3bd29d..e9a8b694493 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java
@@ -26,8 +26,8 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import javax.servlet.ServletContext;
-import javax.servlet.http.Part;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.http.Part;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java
index 068320216f6..c9e7dbc74cc 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java
@@ -18,7 +18,7 @@ package org.springframework.test.web.servlet.request;
import java.net.URI;
-import javax.servlet.DispatcherType;
+import jakarta.servlet.DispatcherType;
import org.springframework.http.HttpMethod;
import org.springframework.mock.web.MockHttpServletRequest;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/result/ContentResultMatchers.java b/spring-test/src/main/java/org/springframework/test/web/servlet/result/ContentResultMatchers.java
index f2d9360107f..c91b2631ced 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/result/ContentResultMatchers.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/result/ContentResultMatchers.java
@@ -20,10 +20,10 @@ import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Map;
-import javax.servlet.http.HttpServletResponse;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
+import jakarta.servlet.http.HttpServletResponse;
import org.hamcrest.Matcher;
import org.w3c.dom.Node;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/result/CookieResultMatchers.java b/spring-test/src/main/java/org/springframework/test/web/servlet/result/CookieResultMatchers.java
index a548731f2ab..a8a40a29c44 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/result/CookieResultMatchers.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/result/CookieResultMatchers.java
@@ -16,8 +16,7 @@
package org.springframework.test.web.servlet.result;
-import javax.servlet.http.Cookie;
-
+import jakarta.servlet.http.Cookie;
import org.hamcrest.Matcher;
import org.springframework.test.web.servlet.MvcResult;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/result/PrintingResultHandler.java b/spring-test/src/main/java/org/springframework/test/web/servlet/result/PrintingResultHandler.java
index f0ea1c5b658..f9539b1a6a0 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/result/PrintingResultHandler.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/result/PrintingResultHandler.java
@@ -21,9 +21,9 @@ import java.util.Enumeration;
import java.util.Map;
import java.util.stream.Collectors;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.springframework.core.style.ToStringCreator;
import org.springframework.http.HttpHeaders;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/result/RequestResultMatchers.java b/spring-test/src/main/java/org/springframework/test/web/servlet/result/RequestResultMatchers.java
index 926e3f4349f..2cd6f3b9fc2 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/result/RequestResultMatchers.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/result/RequestResultMatchers.java
@@ -18,9 +18,8 @@ package org.springframework.test.web.servlet.result;
import java.util.concurrent.Callable;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
import org.hamcrest.Matcher;
import org.springframework.lang.Nullable;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/AbstractMockMvcBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/AbstractMockMvcBuilder.java
index e5ed43ce30a..dcf4b06b687 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/AbstractMockMvcBuilder.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/AbstractMockMvcBuilder.java
@@ -20,8 +20,8 @@ import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
-import javax.servlet.Filter;
-import javax.servlet.ServletContext;
+import jakarta.servlet.Filter;
+import jakarta.servlet.ServletContext;
import org.springframework.lang.Nullable;
import org.springframework.mock.web.MockServletConfig;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/ConfigurableMockMvcBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/ConfigurableMockMvcBuilder.java
index 45b9f05d04a..fcd96945c26 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/ConfigurableMockMvcBuilder.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/ConfigurableMockMvcBuilder.java
@@ -18,7 +18,7 @@ package org.springframework.test.web.servlet.setup;
import java.nio.charset.Charset;
-import javax.servlet.Filter;
+import jakarta.servlet.Filter;
import org.springframework.test.web.servlet.DispatcherServletCustomizer;
import org.springframework.test.web.servlet.MockMvcBuilder;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/DefaultMockMvcBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/DefaultMockMvcBuilder.java
index 4e47244f655..7b72cc94746 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/DefaultMockMvcBuilder.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/DefaultMockMvcBuilder.java
@@ -16,7 +16,7 @@
package org.springframework.test.web.servlet.setup;
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
import org.springframework.context.ApplicationContext;
import org.springframework.util.Assert;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/MockMvcBuilders.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/MockMvcBuilders.java
index 60bab94c01e..71b523d7971 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/MockMvcBuilders.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/MockMvcBuilders.java
@@ -45,7 +45,7 @@ public final class MockMvcBuilders {
*
The {@link org.springframework.web.servlet.DispatcherServlet DispatcherServlet}
* will use the context to discover Spring MVC infrastructure and application
* controllers in it. The context must have been configured with a
- * {@link javax.servlet.ServletContext ServletContext}.
+ * {@link jakarta.servlet.ServletContext ServletContext}.
*/
public static DefaultMockMvcBuilder webAppContextSetup(WebApplicationContext context) {
return new DefaultMockMvcBuilder(context);
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/PatternMappingFilterProxy.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/PatternMappingFilterProxy.java
index 1966016813c..2bcb3135b84 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/PatternMappingFilterProxy.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/PatternMappingFilterProxy.java
@@ -20,13 +20,13 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
import org.springframework.util.Assert;
import org.springframework.web.util.UrlPathHelper;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/SharedHttpSessionConfigurer.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/SharedHttpSessionConfigurer.java
index 7fcc663134a..d12bca60d82 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/SharedHttpSessionConfigurer.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/SharedHttpSessionConfigurer.java
@@ -16,7 +16,7 @@
package org.springframework.test.web.servlet.setup;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSession;
import org.springframework.lang.Nullable;
import org.springframework.test.web.servlet.request.RequestPostProcessor;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java
index 1675a494034..ac94d5c103f 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java
@@ -25,7 +25,7 @@ import java.util.Locale;
import java.util.Map;
import java.util.function.Supplier;
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeansException;
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StubWebApplicationContext.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StubWebApplicationContext.java
index c5271e8d18e..368bd0bede2 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StubWebApplicationContext.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StubWebApplicationContext.java
@@ -23,7 +23,7 @@ import java.util.Locale;
import java.util.Map;
import java.util.Set;
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeansException;
diff --git a/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt b/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt
index e997204d3fd..d00d9fe6c95 100644
--- a/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt
+++ b/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt
@@ -24,7 +24,7 @@ import org.springframework.test.web.servlet.request.RequestPostProcessor
import org.springframework.util.MultiValueMap
import java.security.Principal
import java.util.*
-import javax.servlet.http.Cookie
+import jakarta.servlet.http.Cookie
/**
* Provide a [MockHttpServletRequestBuilder] Kotlin DSL in order to be able to write idiomatic Kotlin code.
diff --git a/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockMultipartHttpServletRequestDsl.kt b/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockMultipartHttpServletRequestDsl.kt
index 1a2e83745a7..e2b3ad565cf 100644
--- a/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockMultipartHttpServletRequestDsl.kt
+++ b/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockMultipartHttpServletRequestDsl.kt
@@ -18,7 +18,7 @@ package org.springframework.test.web.servlet
import org.springframework.mock.web.MockMultipartFile
import org.springframework.test.web.servlet.request.MockMultipartHttpServletRequestBuilder
-import javax.servlet.http.Part
+import jakarta.servlet.http.Part
/**
* Provide a [MockMultipartHttpServletRequestBuilder] Kotlin DSL in order to be able to write idiomatic Kotlin code.
diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockFilterChainTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockFilterChainTests.java
index 4babe4467a3..de0a06343ee 100644
--- a/spring-test/src/test/java/org/springframework/mock/web/MockFilterChainTests.java
+++ b/spring-test/src/test/java/org/springframework/mock/web/MockFilterChainTests.java
@@ -18,14 +18,13 @@ package org.springframework.mock.web;
import java.io.IOException;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.Servlet;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.Servlet;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java
index 6ade7c90a71..19c428eae0c 100644
--- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java
+++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java
@@ -30,8 +30,7 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
-import javax.servlet.http.Cookie;
-
+import jakarta.servlet.http.Cookie;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpHeaders;
diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java
index fe0f90f7b50..bc4ebd8a9ea 100644
--- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java
+++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java
@@ -24,9 +24,8 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletResponse;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpSessionTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpSessionTests.java
index a27c0f12c40..d20693b2d20 100644
--- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpSessionTests.java
+++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpSessionTests.java
@@ -18,9 +18,8 @@ package org.springframework.mock.web;
import java.util.concurrent.atomic.AtomicInteger;
-import javax.servlet.http.HttpSessionBindingEvent;
-import javax.servlet.http.HttpSessionBindingListener;
-
+import jakarta.servlet.http.HttpSessionBindingEvent;
+import jakarta.servlet.http.HttpSessionBindingListener;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockPageContextTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockPageContextTests.java
index d9026333731..6ab8d15b259 100644
--- a/spring-test/src/test/java/org/springframework/mock/web/MockPageContextTests.java
+++ b/spring-test/src/test/java/org/springframework/mock/web/MockPageContextTests.java
@@ -16,8 +16,7 @@
package org.springframework.mock.web;
-import javax.servlet.jsp.PageContext;
-
+import jakarta.servlet.jsp.PageContext;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockServletContextTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockServletContextTests.java
index fd26ff1e25c..e9ef2635f8b 100644
--- a/spring-test/src/test/java/org/springframework/mock/web/MockServletContextTests.java
+++ b/spring-test/src/test/java/org/springframework/mock/web/MockServletContextTests.java
@@ -21,10 +21,9 @@ import java.net.URL;
import java.util.Map;
import java.util.Set;
-import javax.servlet.FilterRegistration;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletRegistration;
-
+import jakarta.servlet.FilterRegistration;
+import jakarta.servlet.RequestDispatcher;
+import jakarta.servlet.ServletRegistration;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/context/groovy/GroovySpringContextTests.java b/spring-test/src/test/java/org/springframework/test/context/groovy/GroovySpringContextTests.java
index ae020512502..fd3034b4524 100644
--- a/spring-test/src/test/java/org/springframework/test/context/groovy/GroovySpringContextTests.java
+++ b/spring-test/src/test/java/org/springframework/test/context/groovy/GroovySpringContextTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.context.groovy;
-import javax.annotation.Resource;
-
+import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
diff --git a/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/ControllerIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/ControllerIntegrationTests.java
index c9a689f1ac7..d12afba4c47 100644
--- a/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/ControllerIntegrationTests.java
+++ b/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/ControllerIntegrationTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.context.hierarchies.web;
-import javax.servlet.ServletContext;
-
+import jakarta.servlet.ServletContext;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
diff --git a/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/DispatcherWacRootWacEarTests.java b/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/DispatcherWacRootWacEarTests.java
index bb48aefa72d..b4485ebf1ed 100644
--- a/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/DispatcherWacRootWacEarTests.java
+++ b/spring-test/src/test/java/org/springframework/test/context/hierarchies/web/DispatcherWacRootWacEarTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.context.hierarchies.web;
-import javax.servlet.ServletContext;
-
+import jakarta.servlet.ServletContext;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/ConcreteTransactionalJUnit4SpringContextTests.java b/spring-test/src/test/java/org/springframework/test/context/junit4/ConcreteTransactionalJUnit4SpringContextTests.java
index 5112f3770d3..1c95a609d2b 100644
--- a/spring-test/src/test/java/org/springframework/test/context/junit4/ConcreteTransactionalJUnit4SpringContextTests.java
+++ b/spring-test/src/test/java/org/springframework/test/context/junit4/ConcreteTransactionalJUnit4SpringContextTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.context.junit4;
-import javax.annotation.Resource;
-
+import jakarta.annotation.Resource;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/SpringJUnit4ClassRunnerAppCtxTests.java b/spring-test/src/test/java/org/springframework/test/context/junit4/SpringJUnit4ClassRunnerAppCtxTests.java
index 4f17e973e11..710957ab233 100644
--- a/spring-test/src/test/java/org/springframework/test/context/junit4/SpringJUnit4ClassRunnerAppCtxTests.java
+++ b/spring-test/src/test/java/org/springframework/test/context/junit4/SpringJUnit4ClassRunnerAppCtxTests.java
@@ -16,10 +16,9 @@
package org.springframework.test.context.junit4;
-import javax.annotation.Resource;
-import javax.inject.Inject;
-import javax.inject.Named;
-
+import jakarta.annotation.Resource;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/orm/HibernateSessionFlushingTests.java b/spring-test/src/test/java/org/springframework/test/context/junit4/orm/HibernateSessionFlushingTests.java
index 6c0dc92e900..d75539d4ebb 100644
--- a/spring-test/src/test/java/org/springframework/test/context/junit4/orm/HibernateSessionFlushingTests.java
+++ b/spring-test/src/test/java/org/springframework/test/context/junit4/orm/HibernateSessionFlushingTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.context.junit4.orm;
-import javax.persistence.PersistenceException;
-
+import jakarta.persistence.PersistenceException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.exception.ConstraintViolationException;
diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/Jsr250LifecycleTests.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/Jsr250LifecycleTests.java
index 11e4d9e8696..e7889b92399 100644
--- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/Jsr250LifecycleTests.java
+++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/Jsr250LifecycleTests.java
@@ -16,9 +16,8 @@
package org.springframework.test.context.junit4.spr4868;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.PreDestroy;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.After;
diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/LifecycleBean.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/LifecycleBean.java
index be527d05a90..fe452ee03fc 100644
--- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/LifecycleBean.java
+++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr4868/LifecycleBean.java
@@ -16,9 +16,8 @@
package org.springframework.test.context.junit4.spr4868;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.PreDestroy;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass1.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass1.java
index 4726b44119b..9567ddd3b86 100644
--- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass1.java
+++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass1.java
@@ -16,9 +16,9 @@
package org.springframework.test.context.junit4.spr8849;
-import javax.annotation.Resource;
import javax.sql.DataSource;
+import jakarta.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass2.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass2.java
index 2b0c99398d5..0cca4255043 100644
--- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass2.java
+++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass2.java
@@ -16,9 +16,9 @@
package org.springframework.test.context.junit4.spr8849;
-import javax.annotation.Resource;
import javax.sql.DataSource;
+import jakarta.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass3.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass3.java
index 953ee8e471d..1d978e8524e 100644
--- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass3.java
+++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass3.java
@@ -16,9 +16,9 @@
package org.springframework.test.context.junit4.spr8849;
-import javax.annotation.Resource;
import javax.sql.DataSource;
+import jakarta.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass4.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass4.java
index 4f4f76f4bb7..7a6a189549f 100644
--- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass4.java
+++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr8849/TestClass4.java
@@ -16,9 +16,9 @@
package org.springframework.test.context.junit4.spr8849;
-import javax.annotation.Resource;
import javax.sql.DataSource;
+import jakarta.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/spr9051/LifecycleBean.java b/spring-test/src/test/java/org/springframework/test/context/junit4/spr9051/LifecycleBean.java
index 64876355d05..2a8c01156c2 100644
--- a/spring-test/src/test/java/org/springframework/test/context/junit4/spr9051/LifecycleBean.java
+++ b/spring-test/src/test/java/org/springframework/test/context/junit4/spr9051/LifecycleBean.java
@@ -16,7 +16,7 @@
package org.springframework.test.context.junit4.spr9051;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
/**
* Simple POJO that contains lifecycle callbacks.
diff --git a/spring-test/src/test/java/org/springframework/test/context/testng/ConcreteTransactionalTestNGSpringContextTests.java b/spring-test/src/test/java/org/springframework/test/context/testng/ConcreteTransactionalTestNGSpringContextTests.java
index 3da61007d1e..191f03683fa 100644
--- a/spring-test/src/test/java/org/springframework/test/context/testng/ConcreteTransactionalTestNGSpringContextTests.java
+++ b/spring-test/src/test/java/org/springframework/test/context/testng/ConcreteTransactionalTestNGSpringContextTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.context.testng;
-import javax.annotation.Resource;
-
+import jakarta.annotation.Resource;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
diff --git a/spring-test/src/test/java/org/springframework/test/context/testng/transaction/ejb/AbstractEjbTxDaoTestNGTests.java b/spring-test/src/test/java/org/springframework/test/context/testng/transaction/ejb/AbstractEjbTxDaoTestNGTests.java
index 98eae227ce6..3b56ad3f329 100644
--- a/spring-test/src/test/java/org/springframework/test/context/testng/transaction/ejb/AbstractEjbTxDaoTestNGTests.java
+++ b/spring-test/src/test/java/org/springframework/test/context/testng/transaction/ejb/AbstractEjbTxDaoTestNGTests.java
@@ -16,10 +16,9 @@
package org.springframework.test.context.testng.transaction.ejb;
-import javax.ejb.EJB;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-
+import jakarta.ejb.EJB;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceContext;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/context/testng/web/TestNGSpringContextWebTests.java b/spring-test/src/test/java/org/springframework/test/context/testng/web/TestNGSpringContextWebTests.java
index 14bead449f1..e919453d2f4 100644
--- a/spring-test/src/test/java/org/springframework/test/context/testng/web/TestNGSpringContextWebTests.java
+++ b/spring-test/src/test/java/org/springframework/test/context/testng/web/TestNGSpringContextWebTests.java
@@ -18,8 +18,7 @@ package org.springframework.test.context.testng.web;
import java.io.File;
-import javax.servlet.ServletContext;
-
+import jakarta.servlet.ServletContext;
import org.testng.annotations.Test;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/AbstractEjbTxDaoTests.java b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/AbstractEjbTxDaoTests.java
index a98ce7135cc..03183be05c6 100644
--- a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/AbstractEjbTxDaoTests.java
+++ b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/AbstractEjbTxDaoTests.java
@@ -16,10 +16,9 @@
package org.springframework.test.context.transaction.ejb;
-import javax.ejb.EJB;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-
+import jakarta.ejb.EJB;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceContext;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/AbstractEjbTxTestEntityDao.java b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/AbstractEjbTxTestEntityDao.java
index ed518cfc257..f1bd39dcaf9 100644
--- a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/AbstractEjbTxTestEntityDao.java
+++ b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/AbstractEjbTxTestEntityDao.java
@@ -16,9 +16,9 @@
package org.springframework.test.context.transaction.ejb.dao;
-import javax.ejb.TransactionAttribute;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
+import jakarta.ejb.TransactionAttribute;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceContext;
import org.springframework.test.context.transaction.ejb.model.TestEntity;
diff --git a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiredEjbTxTestEntityDao.java b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiredEjbTxTestEntityDao.java
index f87fa0aa97d..667e6acbe87 100644
--- a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiredEjbTxTestEntityDao.java
+++ b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiredEjbTxTestEntityDao.java
@@ -16,10 +16,10 @@
package org.springframework.test.context.transaction.ejb.dao;
-import javax.ejb.Local;
-import javax.ejb.Stateless;
-import javax.ejb.TransactionAttribute;
-import javax.ejb.TransactionAttributeType;
+import jakarta.ejb.Local;
+import jakarta.ejb.Stateless;
+import jakarta.ejb.TransactionAttribute;
+import jakarta.ejb.TransactionAttributeType;
/**
* EJB implementation of {@link TestEntityDao} which declares transaction
diff --git a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiresNewEjbTxTestEntityDao.java b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiresNewEjbTxTestEntityDao.java
index e9957398501..b7e9281c7c8 100644
--- a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiresNewEjbTxTestEntityDao.java
+++ b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/dao/RequiresNewEjbTxTestEntityDao.java
@@ -16,10 +16,10 @@
package org.springframework.test.context.transaction.ejb.dao;
-import javax.ejb.Local;
-import javax.ejb.Stateless;
-import javax.ejb.TransactionAttribute;
-import javax.ejb.TransactionAttributeType;
+import jakarta.ejb.Local;
+import jakarta.ejb.Stateless;
+import jakarta.ejb.TransactionAttribute;
+import jakarta.ejb.TransactionAttributeType;
/**
* EJB implementation of {@link TestEntityDao} which declares transaction
diff --git a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/model/TestEntity.java b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/model/TestEntity.java
index 9f1cd44840b..79a87ac9908 100644
--- a/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/model/TestEntity.java
+++ b/spring-test/src/test/java/org/springframework/test/context/transaction/ejb/model/TestEntity.java
@@ -16,10 +16,10 @@
package org.springframework.test.context.transaction.ejb.model;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
/**
* Test entity for EJB transaction support in the TestContext framework.
diff --git a/spring-test/src/test/java/org/springframework/test/context/web/AbstractBasicWacTests.java b/spring-test/src/test/java/org/springframework/test/context/web/AbstractBasicWacTests.java
index facccee81ef..32a13490a22 100644
--- a/spring-test/src/test/java/org/springframework/test/context/web/AbstractBasicWacTests.java
+++ b/spring-test/src/test/java/org/springframework/test/context/web/AbstractBasicWacTests.java
@@ -18,8 +18,7 @@ package org.springframework.test.context.web;
import java.io.File;
-import javax.servlet.ServletContext;
-
+import jakarta.servlet.ServletContext;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/spring-test/src/test/java/org/springframework/test/context/web/JUnit4SpringContextWebTests.java b/spring-test/src/test/java/org/springframework/test/context/web/JUnit4SpringContextWebTests.java
index 4119039364e..a24e430b87d 100644
--- a/spring-test/src/test/java/org/springframework/test/context/web/JUnit4SpringContextWebTests.java
+++ b/spring-test/src/test/java/org/springframework/test/context/web/JUnit4SpringContextWebTests.java
@@ -18,8 +18,7 @@ package org.springframework.test.context.web;
import java.io.File;
-import javax.servlet.ServletContext;
-
+import jakarta.servlet.ServletContext;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/spring-test/src/test/java/org/springframework/test/context/web/ServletContextAwareBean.java b/spring-test/src/test/java/org/springframework/test/context/web/ServletContextAwareBean.java
index 3e0e84fc9c4..d9f0109ca0a 100644
--- a/spring-test/src/test/java/org/springframework/test/context/web/ServletContextAwareBean.java
+++ b/spring-test/src/test/java/org/springframework/test/context/web/ServletContextAwareBean.java
@@ -16,7 +16,7 @@
package org.springframework.test.context.web;
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
import org.springframework.web.context.ServletContextAware;
diff --git a/spring-test/src/test/java/org/springframework/test/context/web/socket/WebSocketServletServerContainerFactoryBeanTests.java b/spring-test/src/test/java/org/springframework/test/context/web/socket/WebSocketServletServerContainerFactoryBeanTests.java
index 42fecb9d3af..b508f44d64b 100644
--- a/spring-test/src/test/java/org/springframework/test/context/web/socket/WebSocketServletServerContainerFactoryBeanTests.java
+++ b/spring-test/src/test/java/org/springframework/test/context/web/socket/WebSocketServletServerContainerFactoryBeanTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.context.web.socket;
-import javax.websocket.server.ServerContainer;
-
+import jakarta.websocket.server.ServerContainer;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/spring-test/src/test/java/org/springframework/test/util/subpackage/Component.java b/spring-test/src/test/java/org/springframework/test/util/subpackage/Component.java
index f0b41c658ac..67659274138 100644
--- a/spring-test/src/test/java/org/springframework/test/util/subpackage/Component.java
+++ b/spring-test/src/test/java/org/springframework/test/util/subpackage/Component.java
@@ -16,8 +16,8 @@
package org.springframework.test.util.subpackage;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.PreDestroy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
diff --git a/spring-test/src/test/java/org/springframework/test/web/Person.java b/spring-test/src/test/java/org/springframework/test/web/Person.java
index 61e83c129be..2282b70dc30 100644
--- a/spring-test/src/test/java/org/springframework/test/web/Person.java
+++ b/spring-test/src/test/java/org/springframework/test/web/Person.java
@@ -16,8 +16,8 @@
package org.springframework.test.web;
-import javax.validation.constraints.NotNull;
-import javax.xml.bind.annotation.XmlRootElement;
+import jakarta.validation.constraints.NotNull;
+import jakarta.xml.bind.annotation.XmlRootElement;
import org.springframework.util.ObjectUtils;
diff --git a/spring-test/src/test/java/org/springframework/test/web/client/match/ContentRequestMatchersTests.java b/spring-test/src/test/java/org/springframework/test/web/client/match/ContentRequestMatchersTests.java
index b36c9c9a068..2210fcf08bc 100644
--- a/spring-test/src/test/java/org/springframework/test/web/client/match/ContentRequestMatchersTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/client/match/ContentRequestMatchersTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,7 +19,6 @@ package org.springframework.test.web.client.match;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.http.MediaType;
@@ -38,13 +37,7 @@ import static org.hamcrest.Matchers.hasXPath;
*/
public class ContentRequestMatchersTests {
- private MockClientHttpRequest request;
-
-
- @BeforeEach
- public void setUp() {
- this.request = new MockClientHttpRequest();
- }
+ private final MockClientHttpRequest request = new MockClientHttpRequest();
@Test
diff --git a/spring-test/src/test/java/org/springframework/test/web/client/match/MultipartRequestMatchersTests.java b/spring-test/src/test/java/org/springframework/test/web/client/match/MultipartRequestMatchersTests.java
index 9f70ea77980..850bcb208da 100644
--- a/spring-test/src/test/java/org/springframework/test/web/client/match/MultipartRequestMatchersTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/client/match/MultipartRequestMatchersTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -53,7 +53,7 @@ public class MultipartRequestMatchersTests {
@BeforeEach
- public void setUp() {
+ public void setup() {
this.request.getHeaders().setContentType(MediaType.MULTIPART_FORM_DATA);
}
diff --git a/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XmlContentRequestMatchersIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XmlContentRequestMatchersIntegrationTests.java
index 897a3fc36f6..23994b1b985 100644
--- a/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XmlContentRequestMatchersIntegrationTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XmlContentRequestMatchersIntegrationTests.java
@@ -22,12 +22,11 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
-
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlElementWrapper;
+import jakarta.xml.bind.annotation.XmlRootElement;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XpathRequestMatchersIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XpathRequestMatchersIntegrationTests.java
index 6654a579f40..d48d6d881ad 100644
--- a/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XpathRequestMatchersIntegrationTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/client/samples/matchers/XpathRequestMatchersIntegrationTests.java
@@ -24,12 +24,11 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
-
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlElementWrapper;
+import jakarta.xml.bind.annotation.XmlRootElement;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/Person.java b/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/Person.java
index 23c2115e1d7..7dfd5189ddd 100644
--- a/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/Person.java
+++ b/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/Person.java
@@ -15,10 +15,9 @@
*/
package org.springframework.test.web.reactive.server.samples;
-import javax.xml.bind.annotation.XmlRootElement;
-
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
+import jakarta.xml.bind.annotation.XmlRootElement;
@XmlRootElement
class Person {
diff --git a/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/XmlContentTests.java b/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/XmlContentTests.java
index 870c7231e05..fef7d629a2b 100644
--- a/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/XmlContentTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/reactive/server/samples/XmlContentTests.java
@@ -21,11 +21,10 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlRootElement;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpHeaders;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HelloController.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HelloController.java
index 848aa704225..d430cdcd80b 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HelloController.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HelloController.java
@@ -16,7 +16,7 @@
package org.springframework.test.web.servlet.htmlunit;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilderTests.java
index 96ebbb4ed52..5e3fdaa3f60 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilderTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilderTests.java
@@ -28,11 +28,6 @@ import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
-import javax.servlet.ServletContext;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.Part;
-
import com.gargoylesoftware.htmlunit.FormEncodingType;
import com.gargoylesoftware.htmlunit.HttpMethod;
import com.gargoylesoftware.htmlunit.WebClient;
@@ -40,6 +35,10 @@ import com.gargoylesoftware.htmlunit.WebRequest;
import com.gargoylesoftware.htmlunit.util.KeyDataPair;
import com.gargoylesoftware.htmlunit.util.MimeType;
import com.gargoylesoftware.htmlunit.util.NameValuePair;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpSession;
+import jakarta.servlet.http.Part;
import org.apache.commons.io.IOUtils;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.junit.jupiter.api.BeforeEach;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcConnectionBuilderSupportTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcConnectionBuilderSupportTests.java
index 20abbd53e5d..c2040c84912 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcConnectionBuilderSupportTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcConnectionBuilderSupportTests.java
@@ -19,12 +19,11 @@ package org.springframework.test.web.servlet.htmlunit;
import java.io.IOException;
import java.net.URL;
-import javax.servlet.http.HttpServletRequest;
-
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.WebConnection;
import com.gargoylesoftware.htmlunit.WebRequest;
import com.gargoylesoftware.htmlunit.WebResponse;
+import jakarta.servlet.http.HttpServletRequest;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebClientBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebClientBuilderTests.java
index ea425f63b41..ca50d3d90e2 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebClientBuilderTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockMvcWebClientBuilderTests.java
@@ -19,14 +19,13 @@ package org.springframework.test.web.servlet.htmlunit;
import java.io.IOException;
import java.net.URL;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import com.gargoylesoftware.htmlunit.HttpMethod;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.WebRequest;
import com.gargoylesoftware.htmlunit.WebResponse;
import com.gargoylesoftware.htmlunit.util.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.Configuration;
@@ -157,13 +156,13 @@ class MockMvcWebClientBuilderTests {
@PostMapping(path = "/", produces = "text/plain")
String setCookie(@RequestParam String cookie, HttpServletResponse response) {
- response.addCookie(new javax.servlet.http.Cookie(COOKIE_NAME, cookie));
+ response.addCookie(new jakarta.servlet.http.Cookie(COOKIE_NAME, cookie));
return "Set";
}
@DeleteMapping(path = "/", produces = "text/plain")
String deleteCookie(HttpServletResponse response) {
- javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie(COOKIE_NAME, "");
+ jakarta.servlet.http.Cookie cookie = new jakarta.servlet.http.Cookie(COOKIE_NAME, "");
cookie.setMaxAge(0);
response.addCookie(cookie);
return "Delete";
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockWebResponseBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockWebResponseBuilderTests.java
index eb4797cd0e7..9b6a102a2f4 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockWebResponseBuilderTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/MockWebResponseBuilderTests.java
@@ -20,11 +20,10 @@ import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.List;
-import javax.servlet.http.Cookie;
-
import com.gargoylesoftware.htmlunit.WebRequest;
import com.gargoylesoftware.htmlunit.WebResponse;
import com.gargoylesoftware.htmlunit.util.NameValuePair;
+import jakarta.servlet.http.Cookie;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/webdriver/MockMvcHtmlUnitDriverBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/webdriver/MockMvcHtmlUnitDriverBuilderTests.java
index ee85328fc55..d817f25194f 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/webdriver/MockMvcHtmlUnitDriverBuilderTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/htmlunit/webdriver/MockMvcHtmlUnitDriverBuilderTests.java
@@ -18,9 +18,8 @@ package org.springframework.test.web.servlet.htmlunit.webdriver;
import java.io.IOException;
-import javax.servlet.http.HttpServletRequest;
-
import com.gargoylesoftware.htmlunit.util.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java
index b493cbbca4d..6cdf99d09fc 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java
@@ -29,9 +29,8 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
-import javax.servlet.ServletContext;
-import javax.servlet.http.Cookie;
-
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.http.Cookie;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpHeaders;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilderTests.java
index 22263b90959..b58e329a3d6 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilderTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilderTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.web.servlet.request;
-import javax.servlet.http.Part;
-
+import jakarta.servlet.http.Part;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpMethod;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/result/PrintingResultHandlerTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/result/PrintingResultHandlerTests.java
index f91c39fda96..c7c3cab6772 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/result/PrintingResultHandlerTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/result/PrintingResultHandlerTests.java
@@ -22,9 +22,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpSession;
-
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpSession;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/JavaConfigTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/JavaConfigTests.java
index 7f27c859c6d..3026b5af21b 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/JavaConfigTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/JavaConfigTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -39,9 +39,7 @@ import org.springframework.web.servlet.config.annotation.DefaultServletHandlerCo
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
-import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-import org.springframework.web.servlet.view.tiles3.TilesConfigurer;
import static org.mockito.BDDMockito.given;
@@ -84,14 +82,6 @@ class JavaConfigTests {
.expectBody().json("{\"name\":\"Joe\",\"someDouble\":0.0,\"someBoolean\":false}");
}
- @Test
- void tilesDefinitions() {
- testClient.get().uri("/")
- .exchange()
- .expectStatus().isOk()
- .expectHeader().valueEquals("Forwarded-Url", "/WEB-INF/layouts/standardLayout.jsp");
- }
-
@Configuration
static class RootConfig {
@@ -128,18 +118,6 @@ class JavaConfigTests {
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
-
- @Override
- public void configureViewResolvers(ViewResolverRegistry registry) {
- registry.tiles();
- }
-
- @Bean
- TilesConfigurer tilesConfigurer() {
- TilesConfigurer configurer = new TilesConfigurer();
- configurer.setDefinitions("/WEB-INF/**/tiles.xml");
- return configurer;
- }
}
}
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/WebAppResourceTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/WebAppResourceTests.java
index ec356ba0721..58e58104d60 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/WebAppResourceTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/WebAppResourceTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -60,16 +60,6 @@ public class WebAppResourceTests {
this.testClient = MockMvcWebTestClient.bindToApplicationContext(this.wac).build();
}
- // TilesConfigurer: resources under "/WEB-INF/**/tiles.xml"
-
- @Test
- public void tilesDefinitions() {
- testClient.get().uri("/")
- .exchange()
- .expectStatus().isOk()
- .expectHeader().valueEquals("Forwarded-Url", "/WEB-INF/layouts/standardLayout.jsp");
- }
-
// Resources served via
@Test
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/XmlConfigTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/XmlConfigTests.java
index f3364da5795..84fa33c0d56 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/XmlConfigTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/context/XmlConfigTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -73,12 +73,4 @@ public class XmlConfigTests {
.expectBody().json("{\"name\":\"Joe\",\"someDouble\":0.0,\"someBoolean\":false}");
}
- @Test
- public void tilesDefinitions() {
- testClient.get().uri("/")
- .exchange()
- .expectStatus().isOk()
- .expectHeader().valueEquals("Forwarded-Url", "/WEB-INF/layouts/standardLayout.jsp");
- }
-
}
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/FilterTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/FilterTests.java
index 3016c00d794..6adae504d18 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/FilterTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/FilterTests.java
@@ -20,19 +20,18 @@ import java.io.IOException;
import java.security.Principal;
import java.util.concurrent.CompletableFuture;
-import javax.servlet.AsyncContext;
-import javax.servlet.AsyncListener;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-import javax.validation.Valid;
-
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.AsyncListener;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequestWrapper;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponseWrapper;
+import jakarta.validation.Valid;
import org.junit.jupiter.api.Test;
import org.springframework.http.MediaType;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/MultipartControllerTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/MultipartControllerTests.java
index b60a0e6f6e3..66a60d16dd6 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/MultipartControllerTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/MultipartControllerTests.java
@@ -23,13 +23,12 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.Part;
-
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequestWrapper;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.Part;
import org.junit.jupiter.api.Test;
import org.springframework.http.MediaType;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/RedirectTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/RedirectTests.java
index 18c48affbcf..0bd139cf9b7 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/RedirectTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/RedirectTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.web.servlet.samples.client.standalone;
-import javax.validation.Valid;
-
+import jakarta.validation.Valid;
import org.junit.jupiter.api.Test;
import org.springframework.stereotype.Controller;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/ResponseBodyTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/ResponseBodyTests.java
index 1f8cd1f787c..691a60e8040 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/ResponseBodyTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/ResponseBodyTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.web.servlet.samples.client.standalone;
-import javax.validation.constraints.NotNull;
-
+import jakarta.validation.constraints.NotNull;
import org.junit.jupiter.api.Test;
import org.springframework.http.MediaType;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java
index 629ada4fa9a..61ccee4fb32 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java
@@ -18,9 +18,8 @@ package org.springframework.test.web.servlet.samples.client.standalone.resulthan
import java.nio.charset.StandardCharsets;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletResponse;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/ModelAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/ModelAssertionTests.java
index 76384b3b437..3794eb41671 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/ModelAssertionTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/ModelAssertionTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.web.servlet.samples.client.standalone.resultmatches;
-import javax.validation.Valid;
-
+import jakarta.validation.Valid;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpMethod;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XmlContentAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XmlContentAssertionTests.java
index a6084599376..029b7686159 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XmlContentAssertionTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XmlContentAssertionTests.java
@@ -19,12 +19,11 @@ package org.springframework.test.web.servlet.samples.client.standalone.resultmat
import java.util.Arrays;
import java.util.List;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
-
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlElementWrapper;
+import jakarta.xml.bind.annotation.XmlRootElement;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpHeaders;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XpathAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XpathAssertionTests.java
index b464c422490..e7f50190afc 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XpathAssertionTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/client/standalone/resultmatches/XpathAssertionTests.java
@@ -21,12 +21,11 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
-
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlElementWrapper;
+import jakarta.xml.bind.annotation.XmlRootElement;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpHeaders;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/JavaConfigTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/JavaConfigTests.java
index 9cde95fe2ce..48646aa92a3 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/JavaConfigTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/JavaConfigTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.web.servlet.samples.context;
-import javax.servlet.ServletContext;
-
+import jakarta.servlet.ServletContext;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -42,9 +41,7 @@ import org.springframework.web.servlet.config.annotation.DefaultServletHandlerCo
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
-import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-import org.springframework.web.servlet.view.tiles3.TilesConfigurer;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
@@ -52,7 +49,6 @@ import static org.mockito.BDDMockito.given;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@@ -130,13 +126,6 @@ public class JavaConfigTests {
.satisfies(error -> assertThat(error.getSuppressed()).hasSize(2));
}
- @Test
- public void tilesDefinitions() throws Exception {
- this.mockMvc.perform(get("/"))
- .andExpect(status().isOk())
- .andExpect(forwardedUrl("/WEB-INF/layouts/standardLayout.jsp"));
- }
-
/**
* Verify that the breaking change introduced in SPR-12553 has been reverted.
@@ -202,18 +191,6 @@ public class JavaConfigTests {
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
-
- @Override
- public void configureViewResolvers(ViewResolverRegistry registry) {
- registry.tiles();
- }
-
- @Bean
- public TilesConfigurer tilesConfigurer() {
- TilesConfigurer configurer = new TilesConfigurer();
- configurer.setDefinitions("/WEB-INF/**/tiles.xml");
- return configurer;
- }
}
}
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/WebAppResourceTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/WebAppResourceTests.java
index 57c3b1737a8..b4c46125c7e 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/WebAppResourceTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/WebAppResourceTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -60,14 +60,6 @@ public class WebAppResourceTests {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).alwaysExpect(status().isOk()).build();
}
- // TilesConfigurer: resources under "/WEB-INF/**/tiles.xml"
-
- @Test
- public void tilesDefinitions() throws Exception {
- this.mockMvc.perform(get("/"))
- .andExpect(forwardedUrl("/WEB-INF/layouts/standardLayout.jsp"));
- }
-
// Resources served via
@Test
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/XmlConfigTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/XmlConfigTests.java
index 783aead7479..bda280e7e95 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/XmlConfigTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/context/XmlConfigTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -35,7 +35,6 @@ import static org.mockito.BDDMockito.given;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
/**
@@ -75,11 +74,4 @@ public class XmlConfigTests {
.andExpect(content().string("{\"name\":\"Joe\",\"someDouble\":0.0,\"someBoolean\":false}"));
}
- @Test
- public void tilesDefinitions() throws Exception {
- this.mockMvc.perform(get("/"))//
- .andExpect(status().isOk())//
- .andExpect(forwardedUrl("/WEB-INF/layouts/standardLayout.jsp"));
- }
-
}
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/CustomRequestAttributesRequestContextHolderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/CustomRequestAttributesRequestContextHolderTests.java
index acf32025509..e9aa203f394 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/CustomRequestAttributesRequestContextHolderTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/CustomRequestAttributesRequestContextHolderTests.java
@@ -16,10 +16,9 @@
package org.springframework.test.web.servlet.samples.spr;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/RequestContextHolderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/RequestContextHolderTests.java
index 8cdafdf10c8..be54c77e7f0 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/RequestContextHolderTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/spr/RequestContextHolderTests.java
@@ -18,11 +18,10 @@ package org.springframework.test.web.servlet.samples.spr;
import java.io.IOException;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/FilterTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/FilterTests.java
index 93bb514d195..07b359ee6e3 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/FilterTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/FilterTests.java
@@ -20,20 +20,19 @@ import java.io.IOException;
import java.security.Principal;
import java.util.concurrent.CompletableFuture;
-import javax.servlet.AsyncContext;
-import javax.servlet.AsyncListener;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-import javax.validation.Valid;
-
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.AsyncListener;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequestWrapper;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponseWrapper;
+import jakarta.validation.Valid;
import org.junit.jupiter.api.Test;
import org.springframework.http.MediaType;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java
index a00dd2774e3..e61d50f0d6e 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java
@@ -23,14 +23,13 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.Part;
-
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequestWrapper;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.Part;
import org.junit.jupiter.api.Test;
import org.springframework.http.MediaType;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/RedirectTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/RedirectTests.java
index 0981973439a..60df4a8fffd 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/RedirectTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/RedirectTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.web.servlet.samples.standalone;
-import javax.validation.Valid;
-
+import jakarta.validation.Valid;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerIntegrationTests.java
index 9d47134e0fb..726743039a1 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerIntegrationTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerIntegrationTests.java
@@ -18,9 +18,8 @@ package org.springframework.test.web.servlet.samples.standalone.resulthandlers;
import java.io.StringWriter;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletResponse;
import org.junit.jupiter.api.Test;
import org.springframework.test.web.servlet.result.PrintingResultHandler;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java
index 1600c095263..87986b2a014 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resulthandlers/PrintingResultHandlerSmokeTests.java
@@ -18,9 +18,8 @@ package org.springframework.test.web.servlet.samples.standalone.resulthandlers;
import java.io.StringWriter;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletResponse;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/ModelAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/ModelAssertionTests.java
index a22b760bc82..1f5e4471e0a 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/ModelAssertionTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/ModelAssertionTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.web.servlet.samples.standalone.resultmatchers;
-import javax.validation.Valid;
-
+import jakarta.validation.Valid;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XmlContentAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XmlContentAssertionTests.java
index 11540766e5e..a2abe1f75b3 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XmlContentAssertionTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XmlContentAssertionTests.java
@@ -19,12 +19,11 @@ package org.springframework.test.web.servlet.samples.standalone.resultmatchers;
import java.util.Arrays;
import java.util.List;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
-
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlElementWrapper;
+import jakarta.xml.bind.annotation.XmlRootElement;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XpathAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XpathAssertionTests.java
index 4bd5d2fc3dd..3bece04be76 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XpathAssertionTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/XpathAssertionTests.java
@@ -21,12 +21,11 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
-
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlElementWrapper;
+import jakarta.xml.bind.annotation.XmlRootElement;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/setup/ConditionalDelegatingFilterProxyTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/setup/ConditionalDelegatingFilterProxyTests.java
index 9fbc3c94569..ffaa26a02a4 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/setup/ConditionalDelegatingFilterProxyTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/setup/ConditionalDelegatingFilterProxyTests.java
@@ -16,13 +16,12 @@
package org.springframework.test.web.servlet.setup;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/setup/SharedHttpSessionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/setup/SharedHttpSessionTests.java
index 31f308cff65..92d194f5139 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/setup/SharedHttpSessionTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/setup/SharedHttpSessionTests.java
@@ -16,8 +16,7 @@
package org.springframework.test.web.servlet.setup;
-import javax.servlet.http.HttpSession;
-
+import jakarta.servlet.http.HttpSession;
import org.junit.jupiter.api.Test;
import org.springframework.stereotype.Controller;
diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilderTests.java
index d55800e1817..463ad180730 100644
--- a/spring-test/src/test/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilderTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilderTests.java
@@ -18,14 +18,13 @@ package org.springframework.test.web.servlet.setup;
import java.io.IOException;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ser.impl.UnknownSerializer;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.junit.jupiter.api.Test;
import org.springframework.http.converter.json.SpringHandlerInstantiator;
diff --git a/spring-test/src/test/resources/org/springframework/test/web/servlet/samples/context/servlet-context.xml b/spring-test/src/test/resources/org/springframework/test/web/servlet/samples/context/servlet-context.xml
index 0c442c5d7b8..7322877fbb5 100644
--- a/spring-test/src/test/resources/org/springframework/test/web/servlet/samples/context/servlet-context.xml
+++ b/spring-test/src/test/resources/org/springframework/test/web/servlet/samples/context/servlet-context.xml
@@ -5,31 +5,16 @@
http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
- /WEB-INF/**/tiles.xml
-
-
-
+
\ No newline at end of file
diff --git a/spring-tx/spring-tx.gradle b/spring-tx/spring-tx.gradle
index f3ec8c3f3ac..293804e78cd 100644
--- a/spring-tx/spring-tx.gradle
+++ b/spring-tx/spring-tx.gradle
@@ -7,11 +7,10 @@ dependencies {
api(project(":spring-core"))
optional(project(":spring-aop"))
optional(project(":spring-context")) // for JCA, @EnableTransactionManagement
- optional("javax.ejb:javax.ejb-api")
- optional("javax.interceptor:javax.interceptor-api")
- optional("javax.resource:javax.resource-api")
- optional("javax.transaction:javax.transaction-api")
- optional("com.ibm.websphere:uow")
+ optional("jakarta.ejb:jakarta.ejb-api")
+ optional("jakarta.interceptor:jakarta.interceptor-api")
+ optional("jakarta.resource:jakarta.resource-api")
+ optional("jakarta.transaction:jakarta.transaction-api")
optional("io.projectreactor:reactor-core")
optional("io.vavr:vavr")
optional("org.jetbrains.kotlin:kotlin-reflect")
@@ -23,6 +22,6 @@ dependencies {
testImplementation(testFixtures(project(":spring-core")))
testImplementation("org.aspectj:aspectjweaver")
testImplementation("org.codehaus.groovy:groovy")
- testImplementation("org.eclipse.persistence:javax.persistence")
+ testImplementation("jakarta.persistence:jakarta.persistence-api")
testImplementation("io.projectreactor:reactor-test")
}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/CannotCreateRecordException.java b/spring-tx/src/main/java/org/springframework/jca/cci/CannotCreateRecordException.java
deleted file mode 100644
index 5685b061c97..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/CannotCreateRecordException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci;
-
-import javax.resource.ResourceException;
-
-import org.springframework.dao.DataAccessResourceFailureException;
-
-/**
- * Exception thrown when the creating of a CCI Record failed
- * for connector-internal reasons.
- *
- * @author Juergen Hoeller
- * @since 1.2
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@SuppressWarnings("serial")
-public class CannotCreateRecordException extends DataAccessResourceFailureException {
-
- /**
- * Constructor for CannotCreateRecordException.
- * @param msg message
- * @param ex the root ResourceException cause
- */
- public CannotCreateRecordException(String msg, ResourceException ex) {
- super(msg, ex);
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/CannotGetCciConnectionException.java b/spring-tx/src/main/java/org/springframework/jca/cci/CannotGetCciConnectionException.java
deleted file mode 100644
index dcd68cecc40..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/CannotGetCciConnectionException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci;
-
-import javax.resource.ResourceException;
-
-import org.springframework.dao.DataAccessResourceFailureException;
-
-/**
- * Fatal exception thrown when we can't connect to an EIS using CCI.
- *
- * @author Thierry Templier
- * @author Juergen Hoeller
- * @since 1.2
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@SuppressWarnings("serial")
-public class CannotGetCciConnectionException extends DataAccessResourceFailureException {
-
- /**
- * Constructor for CannotGetCciConnectionException.
- * @param msg message
- * @param ex the root ResourceException cause
- */
- public CannotGetCciConnectionException(String msg, ResourceException ex) {
- super(msg, ex);
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/CciOperationNotSupportedException.java b/spring-tx/src/main/java/org/springframework/jca/cci/CciOperationNotSupportedException.java
deleted file mode 100644
index bc2d9df4be8..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/CciOperationNotSupportedException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci;
-
-import javax.resource.ResourceException;
-
-import org.springframework.dao.InvalidDataAccessResourceUsageException;
-
-/**
- * Exception thrown when the connector doesn't support a specific CCI operation.
- *
- * @author Juergen Hoeller
- * @since 1.2
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@SuppressWarnings("serial")
-public class CciOperationNotSupportedException extends InvalidDataAccessResourceUsageException {
-
- /**
- * Constructor for CciOperationNotSupportedException.
- * @param msg message
- * @param ex the root ResourceException cause
- */
- public CciOperationNotSupportedException(String msg, ResourceException ex) {
- super(msg, ex);
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/InvalidResultSetAccessException.java b/spring-tx/src/main/java/org/springframework/jca/cci/InvalidResultSetAccessException.java
deleted file mode 100644
index f7a1895cf9c..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/InvalidResultSetAccessException.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2002-2012 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci;
-
-import java.sql.SQLException;
-
-import org.springframework.dao.InvalidDataAccessResourceUsageException;
-
-/**
- * Exception thrown when a ResultSet has been accessed in an invalid fashion.
- * Such exceptions always have a {@code java.sql.SQLException} root cause.
- *
- *
This typically happens when an invalid ResultSet column index or name
- * has been specified.
- *
- * @author Juergen Hoeller
- * @since 1.2
- * @see javax.resource.cci.ResultSet
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@SuppressWarnings("serial")
-public class InvalidResultSetAccessException extends InvalidDataAccessResourceUsageException {
-
- /**
- * Constructor for InvalidResultSetAccessException.
- * @param msg message
- * @param ex the root cause
- */
- public InvalidResultSetAccessException(String msg, SQLException ex) {
- super(ex.getMessage(), ex);
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/RecordTypeNotSupportedException.java b/spring-tx/src/main/java/org/springframework/jca/cci/RecordTypeNotSupportedException.java
deleted file mode 100644
index b4e9bacc7a4..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/RecordTypeNotSupportedException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci;
-
-import javax.resource.ResourceException;
-
-import org.springframework.dao.InvalidDataAccessResourceUsageException;
-
-/**
- * Exception thrown when the creating of a CCI Record failed because
- * the connector doesn't support the desired CCI Record type.
- *
- * @author Juergen Hoeller
- * @since 1.2
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@SuppressWarnings("serial")
-public class RecordTypeNotSupportedException extends InvalidDataAccessResourceUsageException {
-
- /**
- * Constructor for RecordTypeNotSupportedException.
- * @param msg message
- * @param ex the root ResourceException cause
- */
- public RecordTypeNotSupportedException(String msg, ResourceException ex) {
- super(msg, ex);
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/CciLocalTransactionManager.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/CciLocalTransactionManager.java
deleted file mode 100644
index 4b0ad9d51c0..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/CciLocalTransactionManager.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.connection;
-
-import javax.resource.NotSupportedException;
-import javax.resource.ResourceException;
-import javax.resource.cci.Connection;
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.spi.LocalTransactionException;
-
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.lang.Nullable;
-import org.springframework.transaction.CannotCreateTransactionException;
-import org.springframework.transaction.TransactionDefinition;
-import org.springframework.transaction.TransactionException;
-import org.springframework.transaction.TransactionSystemException;
-import org.springframework.transaction.support.AbstractPlatformTransactionManager;
-import org.springframework.transaction.support.DefaultTransactionStatus;
-import org.springframework.transaction.support.ResourceTransactionManager;
-import org.springframework.transaction.support.TransactionSynchronizationManager;
-import org.springframework.util.Assert;
-
-/**
- * {@link org.springframework.transaction.PlatformTransactionManager} implementation
- * that manages local transactions for a single CCI ConnectionFactory.
- * Binds a CCI Connection from the specified ConnectionFactory to the thread,
- * potentially allowing for one thread-bound Connection per ConnectionFactory.
- *
- *
Application code is required to retrieve the CCI Connection via
- * {@link ConnectionFactoryUtils#getConnection(ConnectionFactory)} instead of a standard
- * Java EE-style {@link ConnectionFactory#getConnection()} call. Spring classes such as
- * {@link org.springframework.jca.cci.core.CciTemplate} use this strategy implicitly.
- * If not used in combination with this transaction manager, the
- * {@link ConnectionFactoryUtils} lookup strategy behaves exactly like the native
- * DataSource lookup; it can thus be used in a portable fashion.
- *
- *
Alternatively, you can allow application code to work with the standard
- * Java EE lookup pattern {@link ConnectionFactory#getConnection()}, for example
- * for legacy code that is not aware of Spring at all. In that case, define a
- * {@link TransactionAwareConnectionFactoryProxy} for your target ConnectionFactory,
- * which will automatically participate in Spring-managed transactions.
- *
- * @author Thierry Templier
- * @author Juergen Hoeller
- * @since 1.2
- * @see ConnectionFactoryUtils#getConnection(javax.resource.cci.ConnectionFactory)
- * @see ConnectionFactoryUtils#releaseConnection
- * @see TransactionAwareConnectionFactoryProxy
- * @see org.springframework.jca.cci.core.CciTemplate
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@SuppressWarnings("serial")
-public class CciLocalTransactionManager extends AbstractPlatformTransactionManager
- implements ResourceTransactionManager, InitializingBean {
-
- @Nullable
- private ConnectionFactory connectionFactory;
-
-
- /**
- * Create a new CciLocalTransactionManager instance.
- * A ConnectionFactory has to be set to be able to use it.
- * @see #setConnectionFactory
- */
- public CciLocalTransactionManager() {
- }
-
- /**
- * Create a new CciLocalTransactionManager instance.
- * @param connectionFactory the CCI ConnectionFactory to manage local transactions for
- */
- public CciLocalTransactionManager(ConnectionFactory connectionFactory) {
- setConnectionFactory(connectionFactory);
- afterPropertiesSet();
- }
-
-
- /**
- * Set the CCI ConnectionFactory that this instance should manage local
- * transactions for.
- */
- public void setConnectionFactory(@Nullable ConnectionFactory cf) {
- if (cf instanceof TransactionAwareConnectionFactoryProxy) {
- // If we got a TransactionAwareConnectionFactoryProxy, we need to perform transactions
- // for its underlying target ConnectionFactory, else JMS access code won't see
- // properly exposed transactions (i.e. transactions for the target ConnectionFactory).
- this.connectionFactory = ((TransactionAwareConnectionFactoryProxy) cf).getTargetConnectionFactory();
- }
- else {
- this.connectionFactory = cf;
- }
- }
-
- /**
- * Return the CCI ConnectionFactory that this instance manages local
- * transactions for.
- */
- @Nullable
- public ConnectionFactory getConnectionFactory() {
- return this.connectionFactory;
- }
-
- private ConnectionFactory obtainConnectionFactory() {
- ConnectionFactory connectionFactory = getConnectionFactory();
- Assert.state(connectionFactory != null, "No ConnectionFactory set");
- return connectionFactory;
- }
-
- @Override
- public void afterPropertiesSet() {
- if (getConnectionFactory() == null) {
- throw new IllegalArgumentException("Property 'connectionFactory' is required");
- }
- }
-
-
- @Override
- public Object getResourceFactory() {
- return obtainConnectionFactory();
- }
-
- @Override
- protected Object doGetTransaction() {
- CciLocalTransactionObject txObject = new CciLocalTransactionObject();
- ConnectionHolder conHolder =
- (ConnectionHolder) TransactionSynchronizationManager.getResource(obtainConnectionFactory());
- txObject.setConnectionHolder(conHolder);
- return txObject;
- }
-
- @Override
- protected boolean isExistingTransaction(Object transaction) {
- CciLocalTransactionObject txObject = (CciLocalTransactionObject) transaction;
- // Consider a pre-bound connection as transaction.
- return txObject.hasConnectionHolder();
- }
-
- @Override
- protected void doBegin(Object transaction, TransactionDefinition definition) {
- CciLocalTransactionObject txObject = (CciLocalTransactionObject) transaction;
- ConnectionFactory connectionFactory = obtainConnectionFactory();
- Connection con = null;
-
- try {
- con = connectionFactory.getConnection();
- if (logger.isDebugEnabled()) {
- logger.debug("Acquired Connection [" + con + "] for local CCI transaction");
- }
-
- ConnectionHolder connectionHolder = new ConnectionHolder(con);
- connectionHolder.setSynchronizedWithTransaction(true);
-
- con.getLocalTransaction().begin();
- int timeout = determineTimeout(definition);
- if (timeout != TransactionDefinition.TIMEOUT_DEFAULT) {
- connectionHolder.setTimeoutInSeconds(timeout);
- }
-
- txObject.setConnectionHolder(connectionHolder);
- TransactionSynchronizationManager.bindResource(connectionFactory, connectionHolder);
- }
- catch (NotSupportedException ex) {
- ConnectionFactoryUtils.releaseConnection(con, connectionFactory);
- throw new CannotCreateTransactionException("CCI Connection does not support local transactions", ex);
- }
- catch (LocalTransactionException ex) {
- ConnectionFactoryUtils.releaseConnection(con, connectionFactory);
- throw new CannotCreateTransactionException("Could not begin local CCI transaction", ex);
- }
- catch (Throwable ex) {
- ConnectionFactoryUtils.releaseConnection(con, connectionFactory);
- throw new TransactionSystemException("Unexpected failure on begin of CCI local transaction", ex);
- }
- }
-
- @Override
- protected Object doSuspend(Object transaction) {
- CciLocalTransactionObject txObject = (CciLocalTransactionObject) transaction;
- txObject.setConnectionHolder(null);
- return TransactionSynchronizationManager.unbindResource(obtainConnectionFactory());
- }
-
- @Override
- protected void doResume(@Nullable Object transaction, Object suspendedResources) {
- ConnectionHolder conHolder = (ConnectionHolder) suspendedResources;
- TransactionSynchronizationManager.bindResource(obtainConnectionFactory(), conHolder);
- }
-
- protected boolean isRollbackOnly(Object transaction) throws TransactionException {
- CciLocalTransactionObject txObject = (CciLocalTransactionObject) transaction;
- return txObject.getConnectionHolder().isRollbackOnly();
- }
-
- @Override
- protected void doCommit(DefaultTransactionStatus status) {
- CciLocalTransactionObject txObject = (CciLocalTransactionObject) status.getTransaction();
- Connection con = txObject.getConnectionHolder().getConnection();
- if (status.isDebug()) {
- logger.debug("Committing CCI local transaction on Connection [" + con + "]");
- }
- try {
- con.getLocalTransaction().commit();
- }
- catch (LocalTransactionException ex) {
- throw new TransactionSystemException("Could not commit CCI local transaction", ex);
- }
- catch (ResourceException ex) {
- throw new TransactionSystemException("Unexpected failure on commit of CCI local transaction", ex);
- }
- }
-
- @Override
- protected void doRollback(DefaultTransactionStatus status) {
- CciLocalTransactionObject txObject = (CciLocalTransactionObject) status.getTransaction();
- Connection con = txObject.getConnectionHolder().getConnection();
- if (status.isDebug()) {
- logger.debug("Rolling back CCI local transaction on Connection [" + con + "]");
- }
- try {
- con.getLocalTransaction().rollback();
- }
- catch (LocalTransactionException ex) {
- throw new TransactionSystemException("Could not roll back CCI local transaction", ex);
- }
- catch (ResourceException ex) {
- throw new TransactionSystemException("Unexpected failure on rollback of CCI local transaction", ex);
- }
- }
-
- @Override
- protected void doSetRollbackOnly(DefaultTransactionStatus status) {
- CciLocalTransactionObject txObject = (CciLocalTransactionObject) status.getTransaction();
- if (status.isDebug()) {
- logger.debug("Setting CCI local transaction [" + txObject.getConnectionHolder().getConnection() +
- "] rollback-only");
- }
- txObject.getConnectionHolder().setRollbackOnly();
- }
-
- @Override
- protected void doCleanupAfterCompletion(Object transaction) {
- CciLocalTransactionObject txObject = (CciLocalTransactionObject) transaction;
- ConnectionFactory connectionFactory = obtainConnectionFactory();
-
- // Remove the connection holder from the thread.
- TransactionSynchronizationManager.unbindResource(connectionFactory);
- txObject.getConnectionHolder().clear();
-
- Connection con = txObject.getConnectionHolder().getConnection();
- if (logger.isDebugEnabled()) {
- logger.debug("Releasing CCI Connection [" + con + "] after transaction");
- }
- ConnectionFactoryUtils.releaseConnection(con, connectionFactory);
- }
-
-
- /**
- * CCI local transaction object, representing a ConnectionHolder.
- * Used as transaction object by CciLocalTransactionManager.
- * @see ConnectionHolder
- */
- private static class CciLocalTransactionObject {
-
- @Nullable
- private ConnectionHolder connectionHolder;
-
- public void setConnectionHolder(@Nullable ConnectionHolder connectionHolder) {
- this.connectionHolder = connectionHolder;
- }
-
- public ConnectionHolder getConnectionHolder() {
- Assert.state(this.connectionHolder != null, "No ConnectionHolder available");
- return this.connectionHolder;
- }
-
- public boolean hasConnectionHolder() {
- return (this.connectionHolder != null);
- }
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionFactoryUtils.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionFactoryUtils.java
deleted file mode 100644
index 2f690e35cb6..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionFactoryUtils.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.connection;
-
-import javax.resource.ResourceException;
-import javax.resource.cci.Connection;
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.cci.ConnectionSpec;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.springframework.lang.Nullable;
-import org.springframework.transaction.support.ResourceHolderSynchronization;
-import org.springframework.transaction.support.TransactionSynchronizationManager;
-import org.springframework.util.Assert;
-
-/**
- * Helper class that provides static methods for obtaining CCI Connections
- * from a {@link javax.resource.cci.ConnectionFactory}. Includes special
- * support for Spring-managed transactional Connections, e.g. managed
- * by {@link CciLocalTransactionManager} or
- * {@link org.springframework.transaction.jta.JtaTransactionManager}.
- *
- *
Used internally by {@link org.springframework.jca.cci.core.CciTemplate},
- * Spring's CCI operation objects and the {@link CciLocalTransactionManager}.
- * Can also be used directly in application code.
- *
- * @author Thierry Templier
- * @author Juergen Hoeller
- * @since 1.2
- * @see #getConnection
- * @see #releaseConnection
- * @see CciLocalTransactionManager
- * @see org.springframework.transaction.jta.JtaTransactionManager
- * @see org.springframework.transaction.support.TransactionSynchronizationManager
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-public abstract class ConnectionFactoryUtils {
-
- private static final Log logger = LogFactory.getLog(ConnectionFactoryUtils.class);
-
-
- /**
- * Obtain a Connection from the given ConnectionFactory. Translates ResourceExceptions
- * into the Spring hierarchy of unchecked generic data access exceptions, simplifying
- * calling code and making any exception that is thrown more meaningful.
- *
Is aware of a corresponding Connection bound to the current thread, for example
- * when using {@link CciLocalTransactionManager}. Will bind a Connection to the thread
- * if transaction synchronization is active (e.g. if in a JTA transaction).
- * @param cf the ConnectionFactory to obtain Connection from
- * @return a CCI Connection from the given ConnectionFactory
- * @throws org.springframework.jca.cci.CannotGetCciConnectionException
- * if the attempt to get a Connection failed
- * @see #releaseConnection
- */
- public static Connection getConnection(ConnectionFactory cf)
- throws org.springframework.jca.cci.CannotGetCciConnectionException {
-
- return getConnection(cf, null);
- }
-
- /**
- * Obtain a Connection from the given ConnectionFactory. Translates ResourceExceptions
- * into the Spring hierarchy of unchecked generic data access exceptions, simplifying
- * calling code and making any exception that is thrown more meaningful.
- *
Is aware of a corresponding Connection bound to the current thread, for example
- * when using {@link CciLocalTransactionManager}. Will bind a Connection to the thread
- * if transaction synchronization is active (e.g. if in a JTA transaction).
- * @param cf the ConnectionFactory to obtain Connection from
- * @param spec the ConnectionSpec for the desired Connection (may be {@code null}).
- * Note: If this is specified, a new Connection will be obtained for every call,
- * without participating in a shared transactional Connection.
- * @return a CCI Connection from the given ConnectionFactory
- * @throws org.springframework.jca.cci.CannotGetCciConnectionException
- * if the attempt to get a Connection failed
- * @see #releaseConnection
- */
- public static Connection getConnection(ConnectionFactory cf, @Nullable ConnectionSpec spec)
- throws org.springframework.jca.cci.CannotGetCciConnectionException {
- try {
- if (spec != null) {
- Assert.notNull(cf, "No ConnectionFactory specified");
- return cf.getConnection(spec);
- }
- else {
- return doGetConnection(cf);
- }
- }
- catch (ResourceException ex) {
- throw new org.springframework.jca.cci.CannotGetCciConnectionException("Could not get CCI Connection", ex);
- }
- }
-
- /**
- * Actually obtain a CCI Connection from the given ConnectionFactory.
- * Same as {@link #getConnection}, but throwing the original ResourceException.
- *
Is aware of a corresponding Connection bound to the current thread, for example
- * when using {@link CciLocalTransactionManager}. Will bind a Connection to the thread
- * if transaction synchronization is active (e.g. if in a JTA transaction).
- *
Directly accessed by {@link TransactionAwareConnectionFactoryProxy}.
- * @param cf the ConnectionFactory to obtain Connection from
- * @return a CCI Connection from the given ConnectionFactory
- * @throws ResourceException if thrown by CCI API methods
- * @see #doReleaseConnection
- */
- public static Connection doGetConnection(ConnectionFactory cf) throws ResourceException {
- Assert.notNull(cf, "No ConnectionFactory specified");
-
- ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(cf);
- if (conHolder != null) {
- return conHolder.getConnection();
- }
-
- logger.debug("Opening CCI Connection");
- Connection con = cf.getConnection();
-
- if (TransactionSynchronizationManager.isSynchronizationActive()) {
- conHolder = new ConnectionHolder(con);
- conHolder.setSynchronizedWithTransaction(true);
- TransactionSynchronizationManager.registerSynchronization(new ConnectionSynchronization(conHolder, cf));
- TransactionSynchronizationManager.bindResource(cf, conHolder);
- }
-
- return con;
- }
-
- /**
- * Determine whether the given JCA CCI Connection is transactional, that is,
- * bound to the current thread by Spring's transaction facilities.
- * @param con the Connection to check
- * @param cf the ConnectionFactory that the Connection was obtained from
- * (may be {@code null})
- * @return whether the Connection is transactional
- */
- public static boolean isConnectionTransactional(Connection con, @Nullable ConnectionFactory cf) {
- if (cf == null) {
- return false;
- }
- ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(cf);
- return (conHolder != null && conHolder.getConnection() == con);
- }
-
- /**
- * Close the given Connection, obtained from the given ConnectionFactory,
- * if it is not managed externally (that is, not bound to the thread).
- * @param con the Connection to close if necessary
- * (if this is {@code null}, the call will be ignored)
- * @param cf the ConnectionFactory that the Connection was obtained from
- * (can be {@code null})
- * @see #getConnection
- */
- public static void releaseConnection(@Nullable Connection con, @Nullable ConnectionFactory cf) {
- try {
- doReleaseConnection(con, cf);
- }
- catch (ResourceException ex) {
- logger.debug("Could not close CCI Connection", ex);
- }
- catch (Throwable ex) {
- // We don't trust the CCI driver: It might throw RuntimeException or Error.
- logger.debug("Unexpected exception on closing CCI Connection", ex);
- }
- }
-
- /**
- * Actually close the given Connection, obtained from the given ConnectionFactory.
- * Same as {@link #releaseConnection}, but throwing the original ResourceException.
- *
Directly accessed by {@link TransactionAwareConnectionFactoryProxy}.
- * @param con the Connection to close if necessary
- * (if this is {@code null}, the call will be ignored)
- * @param cf the ConnectionFactory that the Connection was obtained from
- * (can be {@code null})
- * @throws ResourceException if thrown by JCA CCI methods
- * @see #doGetConnection
- */
- public static void doReleaseConnection(@Nullable Connection con, @Nullable ConnectionFactory cf)
- throws ResourceException {
-
- if (con == null || isConnectionTransactional(con, cf)) {
- return;
- }
- con.close();
- }
-
-
- /**
- * Callback for resource cleanup at the end of a non-native CCI transaction
- * (e.g. when participating in a JTA transaction).
- */
- private static class ConnectionSynchronization
- extends ResourceHolderSynchronization {
-
- public ConnectionSynchronization(ConnectionHolder connectionHolder, ConnectionFactory connectionFactory) {
- super(connectionHolder, connectionFactory);
- }
-
- @Override
- protected void releaseResource(ConnectionHolder resourceHolder, ConnectionFactory resourceKey) {
- releaseConnection(resourceHolder.getConnection(), resourceKey);
- }
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionHolder.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionHolder.java
deleted file mode 100644
index 35e5afcf4d0..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionHolder.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.connection;
-
-import javax.resource.cci.Connection;
-
-import org.springframework.transaction.support.ResourceHolderSupport;
-
-/**
- * Resource holder wrapping a CCI {@link Connection}.
- * {@link CciLocalTransactionManager} binds instances of this class to the thread,
- * for a given {@link javax.resource.cci.ConnectionFactory}.
- *
- * Note: This is an SPI class, not intended to be used by applications.
- *
- * @author Thierry Templier
- * @author Juergen Hoeller
- * @since 1.2
- * @see CciLocalTransactionManager
- * @see ConnectionFactoryUtils
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-public class ConnectionHolder extends ResourceHolderSupport {
-
- private final Connection connection;
-
-
- public ConnectionHolder(Connection connection) {
- this.connection = connection;
- }
-
-
- public Connection getConnection() {
- return this.connection;
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionSpecConnectionFactoryAdapter.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionSpecConnectionFactoryAdapter.java
deleted file mode 100644
index 2f80f0cefe5..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/ConnectionSpecConnectionFactoryAdapter.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.connection;
-
-import javax.resource.ResourceException;
-import javax.resource.cci.Connection;
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.cci.ConnectionSpec;
-
-import org.springframework.core.NamedThreadLocal;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-
-/**
- * An adapter for a target CCI {@link javax.resource.cci.ConnectionFactory},
- * applying the given ConnectionSpec to every standard {@code getConnection()}
- * call, that is, implicitly invoking {@code getConnection(ConnectionSpec)}
- * on the target. All other methods simply delegate to the corresponding methods
- * of the target ConnectionFactory.
- *
- *
Can be used to proxy a target JNDI ConnectionFactory that does not have a
- * ConnectionSpec configured. Client code can work with the ConnectionFactory
- * without passing in a ConnectionSpec on every {@code getConnection()} call.
- *
- *
In the following example, client code can simply transparently work with
- * the preconfigured "myConnectionFactory", implicitly accessing
- * "myTargetConnectionFactory" with the specified user credentials.
- *
- *
- * <bean id="myTargetConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
- * <property name="jndiName" value="java:comp/env/cci/mycf"/>
- * </bean>
- *
- * <bean id="myConnectionFactory" class="org.springframework.jca.cci.connection.ConnectionSpecConnectionFactoryAdapter">
- * <property name="targetConnectionFactory" ref="myTargetConnectionFactory"/>
- * <property name="connectionSpec">
- * <bean class="your.resource.adapter.ConnectionSpecImpl">
- * <property name="username" value="myusername"/>
- * <property name="password" value="mypassword"/>
- * </bean>
- * </property>
- * </bean>
- *
- * If the "connectionSpec" is empty, this proxy will simply delegate to the
- * standard {@code getConnection()} method of the target ConnectionFactory.
- * This can be used to keep a UserCredentialsConnectionFactoryAdapter bean definition
- * just for the option of implicitly passing in a ConnectionSpec if the
- * particular target ConnectionFactory requires it.
- *
- * @author Juergen Hoeller
- * @since 1.2
- * @see #getConnection
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@SuppressWarnings("serial")
-public class ConnectionSpecConnectionFactoryAdapter extends DelegatingConnectionFactory {
-
- @Nullable
- private ConnectionSpec connectionSpec;
-
- private final ThreadLocal threadBoundSpec =
- new NamedThreadLocal<>("Current CCI ConnectionSpec");
-
-
- /**
- * Set the ConnectionSpec that this adapter should use for retrieving Connections.
- * Default is none.
- */
- public void setConnectionSpec(ConnectionSpec connectionSpec) {
- this.connectionSpec = connectionSpec;
- }
-
- /**
- * Set a ConnectionSpec for this proxy and the current thread.
- * The given ConnectionSpec will be applied to all subsequent
- * {@code getConnection()} calls on this ConnectionFactory proxy.
- * This will override any statically specified "connectionSpec" property.
- * @param spec the ConnectionSpec to apply
- * @see #removeConnectionSpecFromCurrentThread
- */
- public void setConnectionSpecForCurrentThread(ConnectionSpec spec) {
- this.threadBoundSpec.set(spec);
- }
-
- /**
- * Remove any ConnectionSpec for this proxy from the current thread.
- * A statically specified ConnectionSpec applies again afterwards.
- * @see #setConnectionSpecForCurrentThread
- */
- public void removeConnectionSpecFromCurrentThread() {
- this.threadBoundSpec.remove();
- }
-
-
- /**
- * Determine whether there is currently a thread-bound ConnectionSpec,
- * using it if available, falling back to the statically specified
- * "connectionSpec" property else.
- * @see #doGetConnection
- */
- @Override
- public final Connection getConnection() throws ResourceException {
- ConnectionSpec threadSpec = this.threadBoundSpec.get();
- if (threadSpec != null) {
- return doGetConnection(threadSpec);
- }
- else {
- return doGetConnection(this.connectionSpec);
- }
- }
-
- /**
- * This implementation delegates to the {@code getConnection(ConnectionSpec)}
- * method of the target ConnectionFactory, passing in the specified user credentials.
- * If the specified username is empty, it will simply delegate to the standard
- * {@code getConnection()} method of the target ConnectionFactory.
- * @param spec the ConnectionSpec to apply
- * @return the Connection
- * @see javax.resource.cci.ConnectionFactory#getConnection(javax.resource.cci.ConnectionSpec)
- * @see javax.resource.cci.ConnectionFactory#getConnection()
- */
- protected Connection doGetConnection(@Nullable ConnectionSpec spec) throws ResourceException {
- ConnectionFactory connectionFactory = getTargetConnectionFactory();
- Assert.state(connectionFactory != null, "No 'targetConnectionFactory' set");
- return (spec != null ? connectionFactory.getConnection(spec) : connectionFactory.getConnection());
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/DelegatingConnectionFactory.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/DelegatingConnectionFactory.java
deleted file mode 100644
index 08c9ac20722..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/DelegatingConnectionFactory.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.connection;
-
-import javax.naming.NamingException;
-import javax.naming.Reference;
-import javax.resource.ResourceException;
-import javax.resource.cci.Connection;
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.cci.ConnectionSpec;
-import javax.resource.cci.RecordFactory;
-import javax.resource.cci.ResourceAdapterMetaData;
-
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-
-/**
- * CCI {@link ConnectionFactory} implementation that delegates all calls
- * to a given target {@link ConnectionFactory}.
- *
- *
This class is meant to be subclassed, with subclasses overriding only
- * those methods (such as {@link #getConnection()}) that should not simply
- * delegate to the target {@link ConnectionFactory}.
- *
- * @author Juergen Hoeller
- * @since 1.2
- * @see #getConnection
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@SuppressWarnings("serial")
-public class DelegatingConnectionFactory implements ConnectionFactory, InitializingBean {
-
- @Nullable
- private ConnectionFactory targetConnectionFactory;
-
-
- /**
- * Set the target ConnectionFactory that this ConnectionFactory should delegate to.
- */
- public void setTargetConnectionFactory(@Nullable ConnectionFactory targetConnectionFactory) {
- this.targetConnectionFactory = targetConnectionFactory;
- }
-
- /**
- * Return the target ConnectionFactory that this ConnectionFactory should delegate to.
- */
- @Nullable
- public ConnectionFactory getTargetConnectionFactory() {
- return this.targetConnectionFactory;
- }
-
- /**
- * Obtain the target {@code ConnectionFactory} for actual use (never {@code null}).
- * @since 5.0
- */
- protected ConnectionFactory obtainTargetConnectionFactory() {
- ConnectionFactory connectionFactory = getTargetConnectionFactory();
- Assert.state(connectionFactory != null, "No 'targetConnectionFactory' set");
- return connectionFactory;
- }
-
-
- @Override
- public void afterPropertiesSet() {
- if (getTargetConnectionFactory() == null) {
- throw new IllegalArgumentException("Property 'targetConnectionFactory' is required");
- }
- }
-
-
- @Override
- public Connection getConnection() throws ResourceException {
- return obtainTargetConnectionFactory().getConnection();
- }
-
- @Override
- public Connection getConnection(ConnectionSpec connectionSpec) throws ResourceException {
- return obtainTargetConnectionFactory().getConnection(connectionSpec);
- }
-
- @Override
- public RecordFactory getRecordFactory() throws ResourceException {
- return obtainTargetConnectionFactory().getRecordFactory();
- }
-
- @Override
- public ResourceAdapterMetaData getMetaData() throws ResourceException {
- return obtainTargetConnectionFactory().getMetaData();
- }
-
- @Override
- public Reference getReference() throws NamingException {
- return obtainTargetConnectionFactory().getReference();
- }
-
- @Override
- public void setReference(Reference reference) {
- obtainTargetConnectionFactory().setReference(reference);
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/NotSupportedRecordFactory.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/NotSupportedRecordFactory.java
deleted file mode 100644
index dc613f6d4c5..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/NotSupportedRecordFactory.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2002-2012 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.connection;
-
-import javax.resource.NotSupportedException;
-import javax.resource.ResourceException;
-import javax.resource.cci.IndexedRecord;
-import javax.resource.cci.MappedRecord;
-import javax.resource.cci.RecordFactory;
-
-/**
- * Implementation of the CCI RecordFactory interface that always throws
- * NotSupportedException.
- *
- *
Useful as a placeholder for a RecordFactory argument (for example as
- * defined by the RecordCreator callback), in particular when the connector's
- * {@code ConnectionFactory.getRecordFactory()} implementation happens to
- * throw NotSupportedException early rather than throwing the exception from
- * RecordFactory's methods.
- *
- * @author Juergen Hoeller
- * @since 1.2.4
- * @see org.springframework.jca.cci.core.RecordCreator#createRecord(javax.resource.cci.RecordFactory)
- * @see org.springframework.jca.cci.core.CciTemplate#getRecordFactory(javax.resource.cci.ConnectionFactory)
- * @see javax.resource.cci.ConnectionFactory#getRecordFactory()
- * @see javax.resource.NotSupportedException
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-public class NotSupportedRecordFactory implements RecordFactory {
-
- @Override
- public MappedRecord createMappedRecord(String name) throws ResourceException {
- throw new NotSupportedException("The RecordFactory facility is not supported by the connector");
- }
-
- @Override
- public IndexedRecord createIndexedRecord(String name) throws ResourceException {
- throw new NotSupportedException("The RecordFactory facility is not supported by the connector");
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/SingleConnectionFactory.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/SingleConnectionFactory.java
deleted file mode 100644
index 312fed4d4fa..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/SingleConnectionFactory.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.connection;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-
-import javax.resource.NotSupportedException;
-import javax.resource.ResourceException;
-import javax.resource.cci.Connection;
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.cci.ConnectionSpec;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-
-/**
- * A CCI ConnectionFactory adapter that returns the same Connection on all
- * {@code getConnection} calls, and ignores calls to
- * {@code Connection.close()}.
- *
- *
Useful for testing and standalone environments, to keep using the same
- * Connection for multiple CciTemplate calls, without having a pooling
- * ConnectionFactory, also spanning any number of transactions.
- *
- *
You can either pass in a CCI Connection directly, or let this
- * factory lazily create a Connection via a given target ConnectionFactory.
- *
- * @author Juergen Hoeller
- * @since 1.2
- * @see #getConnection()
- * @see javax.resource.cci.Connection#close()
- * @see org.springframework.jca.cci.core.CciTemplate
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@SuppressWarnings("serial")
-public class SingleConnectionFactory extends DelegatingConnectionFactory implements DisposableBean {
-
- protected final Log logger = LogFactory.getLog(getClass());
-
- /** Wrapped Connection. */
- @Nullable
- private Connection target;
-
- /** Proxy Connection. */
- @Nullable
- private Connection connection;
-
- /** Synchronization monitor for the shared Connection. */
- private final Object connectionMonitor = new Object();
-
-
- /**
- * Create a new SingleConnectionFactory for bean-style usage.
- * @see #setTargetConnectionFactory
- */
- public SingleConnectionFactory() {
- }
-
- /**
- * Create a new SingleConnectionFactory that always returns the
- * given Connection.
- * @param target the single Connection
- */
- public SingleConnectionFactory(Connection target) {
- Assert.notNull(target, "Target Connection must not be null");
- this.target = target;
- this.connection = getCloseSuppressingConnectionProxy(target);
- }
-
- /**
- * Create a new SingleConnectionFactory that always returns a single
- * Connection which it will lazily create via the given target
- * ConnectionFactory.
- * @param targetConnectionFactory the target ConnectionFactory
- */
- public SingleConnectionFactory(ConnectionFactory targetConnectionFactory) {
- Assert.notNull(targetConnectionFactory, "Target ConnectionFactory must not be null");
- setTargetConnectionFactory(targetConnectionFactory);
- }
-
-
- /**
- * Make sure a Connection or ConnectionFactory has been set.
- */
- @Override
- public void afterPropertiesSet() {
- if (this.connection == null && getTargetConnectionFactory() == null) {
- throw new IllegalArgumentException("Connection or 'targetConnectionFactory' is required");
- }
- }
-
-
- @Override
- public Connection getConnection() throws ResourceException {
- synchronized (this.connectionMonitor) {
- if (this.connection == null) {
- initConnection();
- }
- return this.connection;
- }
- }
-
- @Override
- public Connection getConnection(ConnectionSpec connectionSpec) throws ResourceException {
- throw new NotSupportedException(
- "SingleConnectionFactory does not support custom ConnectionSpec");
- }
-
- /**
- * Close the underlying Connection.
- * The provider of this ConnectionFactory needs to care for proper shutdown.
- *
As this bean implements DisposableBean, a bean factory will
- * automatically invoke this on destruction of its cached singletons.
- */
- @Override
- public void destroy() {
- resetConnection();
- }
-
-
- /**
- * Initialize the single underlying Connection.
- *
Closes and reinitializes the Connection if an underlying
- * Connection is present already.
- * @throws javax.resource.ResourceException if thrown by CCI API methods
- */
- public void initConnection() throws ResourceException {
- if (getTargetConnectionFactory() == null) {
- throw new IllegalStateException(
- "'targetConnectionFactory' is required for lazily initializing a Connection");
- }
- synchronized (this.connectionMonitor) {
- if (this.target != null) {
- closeConnection(this.target);
- }
- this.target = doCreateConnection();
- prepareConnection(this.target);
- if (logger.isDebugEnabled()) {
- logger.debug("Established shared CCI Connection: " + this.target);
- }
- this.connection = getCloseSuppressingConnectionProxy(this.target);
- }
- }
-
- /**
- * Reset the underlying shared Connection, to be reinitialized on next access.
- */
- public void resetConnection() {
- synchronized (this.connectionMonitor) {
- if (this.target != null) {
- closeConnection(this.target);
- }
- this.target = null;
- this.connection = null;
- }
- }
-
- /**
- * Create a CCI Connection via this template's ConnectionFactory.
- * @return the new CCI Connection
- * @throws javax.resource.ResourceException if thrown by CCI API methods
- */
- protected Connection doCreateConnection() throws ResourceException {
- ConnectionFactory connectionFactory = getTargetConnectionFactory();
- Assert.state(connectionFactory != null, "No 'targetConnectionFactory' set");
- return connectionFactory.getConnection();
- }
-
- /**
- * Prepare the given Connection before it is exposed.
- *
The default implementation is empty. Can be overridden in subclasses.
- * @param con the Connection to prepare
- */
- protected void prepareConnection(Connection con) throws ResourceException {
- }
-
- /**
- * Close the given Connection.
- * @param con the Connection to close
- */
- protected void closeConnection(Connection con) {
- try {
- con.close();
- }
- catch (Throwable ex) {
- logger.warn("Could not close shared CCI Connection", ex);
- }
- }
-
- /**
- * Wrap the given Connection with a proxy that delegates every method call to it
- * but suppresses close calls. This is useful for allowing application code to
- * handle a special framework Connection just like an ordinary Connection from a
- * CCI ConnectionFactory.
- * @param target the original Connection to wrap
- * @return the wrapped Connection
- */
- protected Connection getCloseSuppressingConnectionProxy(Connection target) {
- return (Connection) Proxy.newProxyInstance(
- Connection.class.getClassLoader(),
- new Class>[] {Connection.class},
- new CloseSuppressingInvocationHandler(target));
- }
-
-
- /**
- * Invocation handler that suppresses close calls on CCI Connections.
- */
- private static final class CloseSuppressingInvocationHandler implements InvocationHandler {
-
- private final Connection target;
-
- private CloseSuppressingInvocationHandler(Connection target) {
- this.target = target;
- }
-
- @Override
- @Nullable
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- switch (method.getName()) {
- case "equals":
- // Only consider equal when proxies are identical.
- return (proxy == args[0]);
- case "hashCode":
- // Use hashCode of Connection proxy.
- return System.identityHashCode(proxy);
- case "close":
- // Handle close method: don't pass the call on.
- return null;
- }
-
- try {
- return method.invoke(this.target, args);
- }
- catch (InvocationTargetException ex) {
- throw ex.getTargetException();
- }
- }
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/TransactionAwareConnectionFactoryProxy.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/TransactionAwareConnectionFactoryProxy.java
deleted file mode 100644
index e8fe835594b..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/TransactionAwareConnectionFactoryProxy.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.connection;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-
-import javax.resource.ResourceException;
-import javax.resource.cci.Connection;
-import javax.resource.cci.ConnectionFactory;
-
-import org.springframework.lang.Nullable;
-
-/**
- * Proxy for a target CCI {@link javax.resource.cci.ConnectionFactory}, adding
- * awareness of Spring-managed transactions. Similar to a transactional JNDI
- * ConnectionFactory as provided by a Java EE server.
- *
- *
Data access code that should remain unaware of Spring's data access support
- * can work with this proxy to seamlessly participate in Spring-managed transactions.
- * Note that the transaction manager, for example the {@link CciLocalTransactionManager},
- * still needs to work with underlying ConnectionFactory, not with this proxy.
- *
- *
Make sure that TransactionAwareConnectionFactoryProxy is the outermost
- * ConnectionFactory of a chain of ConnectionFactory proxies/adapters.
- * TransactionAwareConnectionFactoryProxy can delegate either directly to the
- * target connection pool or to some intermediate proxy/adapter like
- * {@link ConnectionSpecConnectionFactoryAdapter}.
- *
- *
Delegates to {@link ConnectionFactoryUtils} for automatically participating in
- * thread-bound transactions, for example managed by {@link CciLocalTransactionManager}.
- * {@code getConnection} calls and {@code close} calls on returned Connections
- * will behave properly within a transaction, i.e. always operate on the transactional
- * Connection. If not within a transaction, normal ConnectionFactory behavior applies.
- *
- *
This proxy allows data access code to work with the plain JCA CCI API and still
- * participate in Spring-managed transactions, similar to CCI code in a Java EE/JTA
- * environment. However, if possible, use Spring's ConnectionFactoryUtils, CciTemplate or
- * CCI operation objects to get transaction participation even without a proxy for
- * the target ConnectionFactory, avoiding the need to define such a proxy in the first place.
- *
- *
NOTE: This ConnectionFactory proxy needs to return wrapped Connections
- * in order to handle close calls properly. Therefore, the returned Connections cannot
- * be cast to a native CCI Connection type or to a connection pool implementation type.
- *
- * @author Juergen Hoeller
- * @since 1.2
- * @see javax.resource.cci.ConnectionFactory#getConnection
- * @see javax.resource.cci.Connection#close
- * @see ConnectionFactoryUtils#doGetConnection
- * @see ConnectionFactoryUtils#doReleaseConnection
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@SuppressWarnings("serial")
-public class TransactionAwareConnectionFactoryProxy extends DelegatingConnectionFactory {
-
- /**
- * Create a new TransactionAwareConnectionFactoryProxy.
- * @see #setTargetConnectionFactory
- */
- public TransactionAwareConnectionFactoryProxy() {
- }
-
- /**
- * Create a new TransactionAwareConnectionFactoryProxy.
- * @param targetConnectionFactory the target ConnectionFactory
- */
- public TransactionAwareConnectionFactoryProxy(ConnectionFactory targetConnectionFactory) {
- setTargetConnectionFactory(targetConnectionFactory);
- afterPropertiesSet();
- }
-
-
- /**
- * Delegate to ConnectionFactoryUtils for automatically participating in Spring-managed
- * transactions. Throws the original ResourceException, if any.
- * @return a transactional Connection if any, a new one else
- * @see org.springframework.jca.cci.connection.ConnectionFactoryUtils#doGetConnection
- */
- @Override
- public Connection getConnection() throws ResourceException {
- ConnectionFactory targetConnectionFactory = obtainTargetConnectionFactory();
- Connection con = ConnectionFactoryUtils.doGetConnection(targetConnectionFactory);
- return getTransactionAwareConnectionProxy(con, targetConnectionFactory);
- }
-
- /**
- * Wrap the given Connection with a proxy that delegates every method call to it
- * but delegates {@code close} calls to ConnectionFactoryUtils.
- * @param target the original Connection to wrap
- * @param cf the ConnectionFactory that the Connection came from
- * @return the wrapped Connection
- * @see javax.resource.cci.Connection#close()
- * @see ConnectionFactoryUtils#doReleaseConnection
- */
- protected Connection getTransactionAwareConnectionProxy(Connection target, ConnectionFactory cf) {
- return (Connection) Proxy.newProxyInstance(
- Connection.class.getClassLoader(),
- new Class>[] {Connection.class},
- new TransactionAwareInvocationHandler(target, cf));
- }
-
-
- /**
- * Invocation handler that delegates close calls on CCI Connections
- * to ConnectionFactoryUtils for being aware of thread-bound transactions.
- */
- private static class TransactionAwareInvocationHandler implements InvocationHandler {
-
- private final Connection target;
-
- private final ConnectionFactory connectionFactory;
-
- public TransactionAwareInvocationHandler(Connection target, ConnectionFactory cf) {
- this.target = target;
- this.connectionFactory = cf;
- }
-
- @Override
- @Nullable
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- // Invocation on Connection interface coming in...
-
- switch (method.getName()) {
- case "equals":
- // Only consider equal when proxies are identical.
- return (proxy == args[0]);
- case "hashCode":
- // Use hashCode of Connection proxy.
- return System.identityHashCode(proxy);
- case "getLocalTransaction":
- if (ConnectionFactoryUtils.isConnectionTransactional(this.target, this.connectionFactory)) {
- throw new javax.resource.spi.IllegalStateException(
- "Local transaction handling not allowed within a managed transaction");
- }
- return this.target.getLocalTransaction();
- case "close":
- // Handle close method: only close if not within a transaction.
- ConnectionFactoryUtils.doReleaseConnection(this.target, this.connectionFactory);
- return null;
- }
-
- // Invoke method on target Connection.
- try {
- return method.invoke(this.target, args);
- }
- catch (InvocationTargetException ex) {
- throw ex.getTargetException();
- }
- }
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/package-info.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/package-info.java
deleted file mode 100644
index b90d61e6211..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/package-info.java
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * Provides a utility class for easy ConnectionFactory access,
- * a PlatformTransactionManager for local CCI transactions,
- * and various simple ConnectionFactory proxies/adapters.
- */
-@NonNullApi
-@NonNullFields
-package org.springframework.jca.cci.connection;
-
-import org.springframework.lang.NonNullApi;
-import org.springframework.lang.NonNullFields;
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/CciOperations.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/CciOperations.java
deleted file mode 100644
index 313d16f24a4..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/core/CciOperations.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.core;
-
-import javax.resource.cci.InteractionSpec;
-import javax.resource.cci.Record;
-
-import org.springframework.dao.DataAccessException;
-import org.springframework.lang.Nullable;
-
-/**
- * Interface that specifies a basic set of CCI operations on an EIS.
- * Implemented by CciTemplate. Not often used, but a useful option
- * to enhance testability, as it can easily be mocked or stubbed.
- *
- *
Alternatively, the standard CCI infrastructure can be mocked.
- * However, mocking this interface constitutes significantly less work.
- *
- * @author Juergen Hoeller
- * @since 1.2
- * @see CciTemplate
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-public interface CciOperations {
-
- /**
- * Execute a request on an EIS with CCI, implemented as callback action
- * working on a CCI Connection. This allows for implementing arbitrary
- * data access operations, within Spring's managed CCI environment:
- * that is, participating in Spring-managed transactions and converting
- * JCA ResourceExceptions into Spring's DataAccessException hierarchy.
- *
The callback action can return a result object, for example a
- * domain object or a collection of domain objects.
- * @param action the callback object that specifies the action
- * @return the result object returned by the action, if any
- * @throws DataAccessException if there is any problem
- */
- @Nullable
- T execute(ConnectionCallback action) throws DataAccessException;
-
- /**
- * Execute a request on an EIS with CCI, implemented as callback action
- * working on a CCI Interaction. This allows for implementing arbitrary
- * data access operations on a single Interaction, within Spring's managed
- * CCI environment: that is, participating in Spring-managed transactions
- * and converting JCA ResourceExceptions into Spring's DataAccessException
- * hierarchy.
- * The callback action can return a result object, for example a
- * domain object or a collection of domain objects.
- * @param action the callback object that specifies the action
- * @return the result object returned by the action, if any
- * @throws DataAccessException if there is any problem
- */
- @Nullable
- T execute(InteractionCallback action) throws DataAccessException;
-
- /**
- * Execute the specified interaction on an EIS with CCI.
- * @param spec the CCI InteractionSpec instance that defines
- * the interaction (connector-specific)
- * @param inputRecord the input record
- * @return the output record
- * @throws DataAccessException if there is any problem
- */
- @Nullable
- Record execute(InteractionSpec spec, Record inputRecord) throws DataAccessException;
-
- /**
- * Execute the specified interaction on an EIS with CCI.
- * @param spec the CCI InteractionSpec instance that defines
- * the interaction (connector-specific)
- * @param inputRecord the input record
- * @param outputRecord the output record
- * @throws DataAccessException if there is any problem
- */
- void execute(InteractionSpec spec, Record inputRecord, Record outputRecord) throws DataAccessException;
-
- /**
- * Execute the specified interaction on an EIS with CCI.
- * @param spec the CCI InteractionSpec instance that defines
- * the interaction (connector-specific)
- * @param inputCreator object that creates the input record to use
- * @return the output record
- * @throws DataAccessException if there is any problem
- */
- Record execute(InteractionSpec spec, RecordCreator inputCreator) throws DataAccessException;
-
- /**
- * Execute the specified interaction on an EIS with CCI.
- * @param spec the CCI InteractionSpec instance that defines
- * the interaction (connector-specific)
- * @param inputRecord the input record
- * @param outputExtractor object to convert the output record to a result object
- * @return the output data extracted with the RecordExtractor object
- * @throws DataAccessException if there is any problem
- */
- @Nullable
- T execute(InteractionSpec spec, Record inputRecord, RecordExtractor outputExtractor)
- throws DataAccessException;
-
- /**
- * Execute the specified interaction on an EIS with CCI.
- * @param spec the CCI InteractionSpec instance that defines
- * the interaction (connector-specific)
- * @param inputCreator object that creates the input record to use
- * @param outputExtractor object to convert the output record to a result object
- * @return the output data extracted with the RecordExtractor object
- * @throws DataAccessException if there is any problem
- */
- @Nullable
- T execute(InteractionSpec spec, RecordCreator inputCreator, RecordExtractor outputExtractor)
- throws DataAccessException;
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/CciTemplate.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/CciTemplate.java
deleted file mode 100644
index 181321e888a..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/core/CciTemplate.java
+++ /dev/null
@@ -1,461 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.core;
-
-import java.sql.SQLException;
-
-import javax.resource.NotSupportedException;
-import javax.resource.ResourceException;
-import javax.resource.cci.Connection;
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.cci.ConnectionSpec;
-import javax.resource.cci.IndexedRecord;
-import javax.resource.cci.Interaction;
-import javax.resource.cci.InteractionSpec;
-import javax.resource.cci.MappedRecord;
-import javax.resource.cci.Record;
-import javax.resource.cci.RecordFactory;
-import javax.resource.cci.ResultSet;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.springframework.dao.DataAccessException;
-import org.springframework.dao.DataAccessResourceFailureException;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-
-/**
- * This is the central class in the CCI core package.
- * It simplifies the use of CCI and helps to avoid common errors.
- * It executes core CCI workflow, leaving application code to provide parameters
- * to CCI and extract results. This class executes EIS queries or updates,
- * catching ResourceExceptions and translating them to the generic exception
- * hierarchy defined in the {@code org.springframework.dao} package.
- *
- * Code using this class can pass in and receive {@link javax.resource.cci.Record}
- * instances, or alternatively implement callback interfaces for creating input
- * Records and extracting result objects from output Records (or CCI ResultSets).
- *
- *
Can be used within a service implementation via direct instantiation
- * with a ConnectionFactory reference, or get prepared in an application context
- * and given to services as bean reference. Note: The ConnectionFactory should
- * always be configured as a bean in the application context, in the first case
- * given to the service directly, in the second case to the prepared template.
- *
- * @author Thierry Templier
- * @author Juergen Hoeller
- * @since 1.2
- * @see RecordCreator
- * @see RecordExtractor
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-public class CciTemplate implements CciOperations {
-
- private final Log logger = LogFactory.getLog(getClass());
-
- @Nullable
- private ConnectionFactory connectionFactory;
-
- @Nullable
- private ConnectionSpec connectionSpec;
-
- @Nullable
- private RecordCreator outputRecordCreator;
-
-
- /**
- * Construct a new CciTemplate for bean usage.
- *
Note: The ConnectionFactory has to be set before using the instance.
- * @see #setConnectionFactory
- */
- public CciTemplate() {
- }
-
- /**
- * Construct a new CciTemplate, given a ConnectionFactory to obtain Connections from.
- * Note: This will trigger eager initialization of the exception translator.
- * @param connectionFactory the JCA ConnectionFactory to obtain Connections from
- */
- public CciTemplate(ConnectionFactory connectionFactory) {
- setConnectionFactory(connectionFactory);
- afterPropertiesSet();
- }
-
- /**
- * Construct a new CciTemplate, given a ConnectionFactory to obtain Connections from.
- * Note: This will trigger eager initialization of the exception translator.
- * @param connectionFactory the JCA ConnectionFactory to obtain Connections from
- * @param connectionSpec the CCI ConnectionSpec to obtain Connections for
- * (may be {@code null})
- */
- public CciTemplate(ConnectionFactory connectionFactory, @Nullable ConnectionSpec connectionSpec) {
- setConnectionFactory(connectionFactory);
- if (connectionSpec != null) {
- setConnectionSpec(connectionSpec);
- }
- afterPropertiesSet();
- }
-
-
- /**
- * Set the CCI ConnectionFactory to obtain Connections from.
- */
- public void setConnectionFactory(@Nullable ConnectionFactory connectionFactory) {
- this.connectionFactory = connectionFactory;
- }
-
- /**
- * Return the CCI ConnectionFactory used by this template.
- */
- @Nullable
- public ConnectionFactory getConnectionFactory() {
- return this.connectionFactory;
- }
-
- private ConnectionFactory obtainConnectionFactory() {
- ConnectionFactory connectionFactory = getConnectionFactory();
- Assert.state(connectionFactory != null, "No ConnectionFactory set");
- return connectionFactory;
- }
-
- /**
- * Set the CCI ConnectionSpec that this template instance is
- * supposed to obtain Connections for.
- */
- public void setConnectionSpec(@Nullable ConnectionSpec connectionSpec) {
- this.connectionSpec = connectionSpec;
- }
-
- /**
- * Return the CCI ConnectionSpec used by this template, if any.
- */
- @Nullable
- public ConnectionSpec getConnectionSpec() {
- return this.connectionSpec;
- }
-
- /**
- * Set a RecordCreator that should be used for creating default output Records.
- *
Default is none: When no explicit output Record gets passed into an
- * {@code execute} method, CCI's {@code Interaction.execute} variant
- * that returns an output Record will be called.
- *
Specify a RecordCreator here if you always need to call CCI's
- * {@code Interaction.execute} variant with a passed-in output Record.
- * Unless there is an explicitly specified output Record, CciTemplate will
- * then invoke this RecordCreator to create a default output Record instance.
- * @see javax.resource.cci.Interaction#execute(javax.resource.cci.InteractionSpec, Record)
- * @see javax.resource.cci.Interaction#execute(javax.resource.cci.InteractionSpec, Record, Record)
- */
- public void setOutputRecordCreator(@Nullable RecordCreator creator) {
- this.outputRecordCreator = creator;
- }
-
- /**
- * Return a RecordCreator that should be used for creating default output Records.
- */
- @Nullable
- public RecordCreator getOutputRecordCreator() {
- return this.outputRecordCreator;
- }
-
- public void afterPropertiesSet() {
- if (getConnectionFactory() == null) {
- throw new IllegalArgumentException("Property 'connectionFactory' is required");
- }
- }
-
-
- /**
- * Create a template derived from this template instance,
- * inheriting the ConnectionFactory and other settings but
- * overriding the ConnectionSpec used for obtaining Connections.
- * @param connectionSpec the CCI ConnectionSpec that the derived template
- * instance is supposed to obtain Connections for
- * @return the derived template instance
- * @see #setConnectionSpec
- */
- public CciTemplate getDerivedTemplate(ConnectionSpec connectionSpec) {
- CciTemplate derived = new CciTemplate(obtainConnectionFactory(), connectionSpec);
- RecordCreator recordCreator = getOutputRecordCreator();
- if (recordCreator != null) {
- derived.setOutputRecordCreator(recordCreator);
- }
- return derived;
- }
-
-
- @Override
- @Nullable
- public T execute(ConnectionCallback action) throws DataAccessException {
- Assert.notNull(action, "Callback object must not be null");
- ConnectionFactory connectionFactory = obtainConnectionFactory();
- Connection con = org.springframework.jca.cci.connection.ConnectionFactoryUtils.getConnection(
- connectionFactory, getConnectionSpec());
- try {
- return action.doInConnection(con, connectionFactory);
- }
- catch (NotSupportedException ex) {
- throw new org.springframework.jca.cci.CciOperationNotSupportedException(
- "CCI operation not supported by connector", ex);
- }
- catch (ResourceException ex) {
- throw new DataAccessResourceFailureException("CCI operation failed", ex);
- }
- catch (SQLException ex) {
- throw new org.springframework.jca.cci.InvalidResultSetAccessException(
- "Parsing of CCI ResultSet failed", ex);
- }
- finally {
- org.springframework.jca.cci.connection.ConnectionFactoryUtils.releaseConnection(
- con, getConnectionFactory());
- }
- }
-
- @Override
- @Nullable
- public T execute(final InteractionCallback action) throws DataAccessException {
- Assert.notNull(action, "Callback object must not be null");
- return execute((ConnectionCallback) (connection, connectionFactory) -> {
- Interaction interaction = connection.createInteraction();
- try {
- return action.doInInteraction(interaction, connectionFactory);
- }
- finally {
- closeInteraction(interaction);
- }
- });
- }
-
- @Override
- @Nullable
- public Record execute(InteractionSpec spec, Record inputRecord) throws DataAccessException {
- return doExecute(spec, inputRecord, null, new SimpleRecordExtractor());
- }
-
- @Override
- public void execute(InteractionSpec spec, Record inputRecord, Record outputRecord) throws DataAccessException {
- doExecute(spec, inputRecord, outputRecord, null);
- }
-
- @Override
- public Record execute(InteractionSpec spec, RecordCreator inputCreator) throws DataAccessException {
- Record output = doExecute(spec, createRecord(inputCreator), null, new SimpleRecordExtractor());
- Assert.state(output != null, "Invalid output record");
- return output;
- }
-
- @Override
- public T execute(InteractionSpec spec, Record inputRecord, RecordExtractor outputExtractor)
- throws DataAccessException {
-
- return doExecute(spec, inputRecord, null, outputExtractor);
- }
-
- @Override
- public T execute(InteractionSpec spec, RecordCreator inputCreator, RecordExtractor outputExtractor)
- throws DataAccessException {
-
- return doExecute(spec, createRecord(inputCreator), null, outputExtractor);
- }
-
- /**
- * Execute the specified interaction on an EIS with CCI.
- * All other interaction execution methods go through this.
- * @param spec the CCI InteractionSpec instance that defines
- * the interaction (connector-specific)
- * @param inputRecord the input record
- * @param outputRecord output record (can be {@code null})
- * @param outputExtractor object to convert the output record to a result object
- * @return the output data extracted with the RecordExtractor object
- * @throws DataAccessException if there is any problem
- */
- @Nullable
- protected T doExecute(
- final InteractionSpec spec, final Record inputRecord, @Nullable final Record outputRecord,
- @Nullable final RecordExtractor outputExtractor) throws DataAccessException {
-
- return execute((InteractionCallback) (interaction, connectionFactory) -> {
- Record outputRecordToUse = outputRecord;
- try {
- if (outputRecord != null || getOutputRecordCreator() != null) {
- // Use the CCI execute method with output record as parameter.
- if (outputRecord == null) {
- RecordFactory recordFactory = getRecordFactory(connectionFactory);
- outputRecordToUse = getOutputRecordCreator().createRecord(recordFactory);
- }
- interaction.execute(spec, inputRecord, outputRecordToUse);
- }
- else {
- outputRecordToUse = interaction.execute(spec, inputRecord);
- }
- return (outputExtractor != null ? outputExtractor.extractData(outputRecordToUse) : null);
- }
- finally {
- if (outputRecordToUse instanceof ResultSet) {
- closeResultSet((ResultSet) outputRecordToUse);
- }
- }
- });
- }
-
-
- /**
- * Create an indexed Record through the ConnectionFactory's RecordFactory.
- * @param name the name of the record
- * @return the Record
- * @throws DataAccessException if creation of the Record failed
- * @see #getRecordFactory(javax.resource.cci.ConnectionFactory)
- * @see javax.resource.cci.RecordFactory#createIndexedRecord(String)
- */
- public IndexedRecord createIndexedRecord(String name) throws DataAccessException {
- try {
- RecordFactory recordFactory = getRecordFactory(obtainConnectionFactory());
- return recordFactory.createIndexedRecord(name);
- }
- catch (NotSupportedException ex) {
- throw new org.springframework.jca.cci.RecordTypeNotSupportedException(
- "Creation of indexed Record not supported by connector", ex);
- }
- catch (ResourceException ex) {
- throw new org.springframework.jca.cci.CannotCreateRecordException(
- "Creation of indexed Record failed", ex);
- }
- }
-
- /**
- * Create a mapped Record from the ConnectionFactory's RecordFactory.
- * @param name record name
- * @return the Record
- * @throws DataAccessException if creation of the Record failed
- * @see #getRecordFactory(javax.resource.cci.ConnectionFactory)
- * @see javax.resource.cci.RecordFactory#createMappedRecord(String)
- */
- public MappedRecord createMappedRecord(String name) throws DataAccessException {
- try {
- RecordFactory recordFactory = getRecordFactory(obtainConnectionFactory());
- return recordFactory.createMappedRecord(name);
- }
- catch (NotSupportedException ex) {
- throw new org.springframework.jca.cci.RecordTypeNotSupportedException(
- "Creation of mapped Record not supported by connector", ex);
- }
- catch (ResourceException ex) {
- throw new org.springframework.jca.cci.CannotCreateRecordException(
- "Creation of mapped Record failed", ex);
- }
- }
-
- /**
- * Invoke the given RecordCreator, converting JCA ResourceExceptions
- * to Spring's DataAccessException hierarchy.
- * @param recordCreator the RecordCreator to invoke
- * @return the created Record
- * @throws DataAccessException if creation of the Record failed
- * @see #getRecordFactory(javax.resource.cci.ConnectionFactory)
- * @see RecordCreator#createRecord(javax.resource.cci.RecordFactory)
- */
- protected Record createRecord(RecordCreator recordCreator) throws DataAccessException {
- try {
- RecordFactory recordFactory = getRecordFactory(obtainConnectionFactory());
- return recordCreator.createRecord(recordFactory);
- }
- catch (NotSupportedException ex) {
- throw new org.springframework.jca.cci.RecordTypeNotSupportedException(
- "Creation of the desired Record type not supported by connector", ex);
- }
- catch (ResourceException ex) {
- throw new org.springframework.jca.cci.CannotCreateRecordException(
- "Creation of the desired Record failed", ex);
- }
- }
-
- /**
- * Return a RecordFactory for the given ConnectionFactory.
- * Default implementation returns the connector's RecordFactory if
- * available, falling back to a NotSupportedRecordFactory placeholder.
- * This allows to invoke a RecordCreator callback with a non-null
- * RecordFactory reference in any case.
- * @param connectionFactory the CCI ConnectionFactory
- * @return the CCI RecordFactory for the ConnectionFactory
- * @throws ResourceException if thrown by CCI methods
- * @see org.springframework.jca.cci.connection.NotSupportedRecordFactory
- */
- protected RecordFactory getRecordFactory(ConnectionFactory connectionFactory) throws ResourceException {
- try {
- return connectionFactory.getRecordFactory();
- }
- catch (NotSupportedException ex) {
- return new org.springframework.jca.cci.connection.NotSupportedRecordFactory();
- }
- }
-
-
- /**
- * Close the given CCI Interaction and ignore any thrown exception.
- * This is useful for typical finally blocks in manual CCI code.
- * @param interaction the CCI Interaction to close
- * @see javax.resource.cci.Interaction#close()
- */
- private void closeInteraction(@Nullable Interaction interaction) {
- if (interaction != null) {
- try {
- interaction.close();
- }
- catch (ResourceException ex) {
- logger.trace("Could not close CCI Interaction", ex);
- }
- catch (Throwable ex) {
- // We don't trust the CCI driver: It might throw RuntimeException or Error.
- logger.trace("Unexpected exception on closing CCI Interaction", ex);
- }
- }
- }
-
- /**
- * Close the given CCI ResultSet and ignore any thrown exception.
- * This is useful for typical finally blocks in manual CCI code.
- * @param resultSet the CCI ResultSet to close
- * @see javax.resource.cci.ResultSet#close()
- */
- private void closeResultSet(@Nullable ResultSet resultSet) {
- if (resultSet != null) {
- try {
- resultSet.close();
- }
- catch (SQLException ex) {
- logger.trace("Could not close CCI ResultSet", ex);
- }
- catch (Throwable ex) {
- // We don't trust the CCI driver: It might throw RuntimeException or Error.
- logger.trace("Unexpected exception on closing CCI ResultSet", ex);
- }
- }
- }
-
-
- private static class SimpleRecordExtractor implements RecordExtractor {
-
- @Override
- public Record extractData(Record record) {
- return record;
- }
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/ConnectionCallback.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/ConnectionCallback.java
deleted file mode 100644
index a573f3583e6..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/core/ConnectionCallback.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.core;
-
-import java.sql.SQLException;
-
-import javax.resource.ResourceException;
-import javax.resource.cci.Connection;
-import javax.resource.cci.ConnectionFactory;
-
-import org.springframework.dao.DataAccessException;
-import org.springframework.lang.Nullable;
-
-/**
- * Generic callback interface for code that operates on a CCI Connection.
- * Allows to execute any number of operations on a single Connection,
- * using any type and number of Interaction.
- *
- * This is particularly useful for delegating to existing data access code
- * that expects a Connection to work on and throws ResourceException. For newly
- * written code, it is strongly recommended to use CciTemplate's more specific
- * {@code execute} variants.
- *
- * @author Thierry Templier
- * @author Juergen Hoeller
- * @since 1.2
- * @param the result type
- * @see CciTemplate#execute(ConnectionCallback)
- * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, javax.resource.cci.Record)
- * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, RecordCreator, RecordExtractor)
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@FunctionalInterface
-public interface ConnectionCallback {
-
- /**
- * Gets called by {@code CciTemplate.execute} with an active CCI Connection.
- * Does not need to care about activating or closing the Connection, or handling
- * transactions.
- * If called without a thread-bound CCI transaction (initiated by
- * CciLocalTransactionManager), the code will simply get executed on the CCI
- * Connection with its transactional semantics. If CciTemplate is configured
- * to use a JTA-aware ConnectionFactory, the CCI Connection and thus the callback
- * code will be transactional if a JTA transaction is active.
- *
Allows for returning a result object created within the callback, i.e.
- * a domain object or a collection of domain objects. Note that there's special
- * support for single step actions: see the {@code CciTemplate.execute}
- * variants. A thrown RuntimeException is treated as application exception:
- * it gets propagated to the caller of the template.
- * @param connection active CCI Connection
- * @param connectionFactory the CCI ConnectionFactory that the Connection was
- * created with (gives access to RecordFactory and ResourceAdapterMetaData)
- * @return a result object, or {@code null} if none
- * @throws ResourceException if thrown by a CCI method, to be auto-converted
- * to a DataAccessException
- * @throws SQLException if thrown by a ResultSet method, to be auto-converted
- * to a DataAccessException
- * @throws DataAccessException in case of custom exceptions
- * @see javax.resource.cci.ConnectionFactory#getRecordFactory()
- * @see javax.resource.cci.ConnectionFactory#getMetaData()
- * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, RecordCreator, RecordExtractor)
- */
- @Nullable
- T doInConnection(Connection connection, ConnectionFactory connectionFactory)
- throws ResourceException, SQLException, DataAccessException;
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/InteractionCallback.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/InteractionCallback.java
deleted file mode 100644
index 447a1432eb9..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/core/InteractionCallback.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.core;
-
-import java.sql.SQLException;
-
-import javax.resource.ResourceException;
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.cci.Interaction;
-
-import org.springframework.dao.DataAccessException;
-import org.springframework.lang.Nullable;
-
-/**
- * Generic callback interface for code that operates on a CCI Interaction.
- * Allows to execute any number of operations on a single Interaction, for
- * example a single execute call or repeated execute calls with varying
- * parameters.
- *
- *
This is particularly useful for delegating to existing data access code
- * that expects an Interaction to work on and throws ResourceException. For newly
- * written code, it is strongly recommended to use CciTemplate's more specific
- * {@code execute} variants.
- *
- * @author Thierry Templier
- * @author Juergen Hoeller
- * @since 1.2
- * @param the result type
- * @see CciTemplate#execute(InteractionCallback)
- * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, javax.resource.cci.Record)
- * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, RecordCreator, RecordExtractor)
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@FunctionalInterface
-public interface InteractionCallback {
-
- /**
- * Gets called by {@code CciTemplate.execute} with an active CCI Interaction.
- * Does not need to care about activating or closing the Interaction, or
- * handling transactions.
- * If called without a thread-bound CCI transaction (initiated by
- * CciLocalTransactionManager), the code will simply get executed on the CCI
- * Interaction with its transactional semantics. If CciTemplate is configured
- * to use a JTA-aware ConnectionFactory, the CCI Interaction and thus the callback
- * code will be transactional if a JTA transaction is active.
- *
Allows for returning a result object created within the callback, i.e.
- * a domain object or a collection of domain objects. Note that there's special
- * support for single step actions: see the {@code CciTemplate.execute}
- * variants. A thrown RuntimeException is treated as application exception:
- * it gets propagated to the caller of the template.
- * @param interaction active CCI Interaction
- * @param connectionFactory the CCI ConnectionFactory that the Connection was
- * created with (gives access to RecordFactory and ResourceAdapterMetaData)
- * @return a result object, or {@code null} if none
- * @throws ResourceException if thrown by a CCI method, to be auto-converted
- * to a DataAccessException
- * @throws SQLException if thrown by a ResultSet method, to be auto-converted
- * to a DataAccessException
- * @throws DataAccessException in case of custom exceptions
- * @see javax.resource.cci.ConnectionFactory#getRecordFactory()
- * @see javax.resource.cci.ConnectionFactory#getMetaData()
- * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, RecordCreator, RecordExtractor)
- */
- @Nullable
- T doInInteraction(Interaction interaction, ConnectionFactory connectionFactory)
- throws ResourceException, SQLException, DataAccessException;
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/RecordCreator.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/RecordCreator.java
deleted file mode 100644
index 18836887e03..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/core/RecordCreator.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2002-2016 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.core;
-
-import javax.resource.ResourceException;
-import javax.resource.cci.Record;
-import javax.resource.cci.RecordFactory;
-
-import org.springframework.dao.DataAccessException;
-
-/**
- * Callback interface for creating a CCI Record instance,
- * usually based on the passed-in CCI RecordFactory.
- *
- *
Used for input Record creation in CciTemplate. Alternatively,
- * Record instances can be passed into CciTemplate's corresponding
- * {@code execute} methods directly, either instantiated manually
- * or created through CciTemplate's Record factory methods.
- *
- *
Also used for creating default output Records in CciTemplate.
- * This is useful when the JCA connector needs an explicit output Record
- * instance, but no output Records should be passed into CciTemplate's
- * {@code execute} methods.
- *
- * @author Thierry Templier
- * @author Juergen Hoeller
- * @since 1.2
- * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, RecordCreator)
- * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, RecordCreator, RecordExtractor)
- * @see CciTemplate#createIndexedRecord(String)
- * @see CciTemplate#createMappedRecord(String)
- * @see CciTemplate#setOutputRecordCreator(RecordCreator)
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@FunctionalInterface
-public interface RecordCreator {
-
- /**
- * Create a CCI Record instance, usually based on the passed-in CCI RecordFactory.
- *
For use as input creator with CciTemplate's {@code execute} methods,
- * this method should create a populated Record instance. For use as
- * output Record creator, it should return an empty Record instance.
- * @param recordFactory the CCI RecordFactory (never {@code null}, but not guaranteed to be
- * supported by the connector: its create methods might throw NotSupportedException)
- * @return the Record instance
- * @throws ResourceException if thrown by a CCI method, to be auto-converted
- * to a DataAccessException
- * @throws DataAccessException in case of custom exceptions
- */
- Record createRecord(RecordFactory recordFactory) throws ResourceException, DataAccessException;
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/RecordExtractor.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/RecordExtractor.java
deleted file mode 100644
index 8c5e9e2b666..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/core/RecordExtractor.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.core;
-
-import java.sql.SQLException;
-
-import javax.resource.ResourceException;
-import javax.resource.cci.Record;
-
-import org.springframework.dao.DataAccessException;
-import org.springframework.lang.Nullable;
-
-/**
- * Callback interface for extracting a result object from a CCI Record instance.
- *
- *
Used for output object creation in CciTemplate. Alternatively, output
- * Records can also be returned to client code as-is. In case of a CCI ResultSet
- * as execution result, you will almost always want to implement a RecordExtractor,
- * to be able to read the ResultSet in a managed fashion, with the CCI Connection
- * still open while reading the ResultSet.
- *
- *
Implementations of this interface perform the actual work of extracting
- * results, but don't need to worry about exception handling. ResourceExceptions
- * will be caught and handled correctly by the CciTemplate class.
- *
- * @author Thierry Templier
- * @author Juergen Hoeller
- * @since 1.2
- * @param the result type
- * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, Record, RecordExtractor)
- * @see CciTemplate#execute(javax.resource.cci.InteractionSpec, RecordCreator, RecordExtractor)
- * @see javax.resource.cci.ResultSet
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@FunctionalInterface
-public interface RecordExtractor {
-
- /**
- * Process the data in the given Record, creating a corresponding result object.
- * @param record the Record to extract data from
- * (possibly a CCI ResultSet)
- * @return an arbitrary result object, or {@code null} if none
- * (the extractor will typically be stateful in the latter case)
- * @throws ResourceException if thrown by a CCI method, to be auto-converted
- * to a DataAccessException
- * @throws SQLException if thrown by a ResultSet method, to be auto-converted
- * to a DataAccessException
- * @throws DataAccessException in case of custom exceptions
- * @see javax.resource.cci.ResultSet
- */
- @Nullable
- T extractData(Record record) throws ResourceException, SQLException, DataAccessException;
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/package-info.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/package-info.java
deleted file mode 100644
index 33d36edf29d..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/core/package-info.java
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Provides the core JCA CCI support, based on CciTemplate
- * and its associated callback interfaces.
- */
-@NonNullApi
-@NonNullFields
-package org.springframework.jca.cci.core;
-
-import org.springframework.lang.NonNullApi;
-import org.springframework.lang.NonNullFields;
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/support/CciDaoSupport.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/support/CciDaoSupport.java
deleted file mode 100644
index e650bae6051..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/core/support/CciDaoSupport.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.core.support;
-
-import javax.resource.cci.Connection;
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.cci.ConnectionSpec;
-
-import org.springframework.dao.support.DaoSupport;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-
-/**
- * Convenient super class for CCI-based data access objects.
- *
- * Requires a {@link javax.resource.cci.ConnectionFactory} to be set,
- * providing a {@link org.springframework.jca.cci.core.CciTemplate} based
- * on it to subclasses through the {@link #getCciTemplate()} method.
- *
- *
This base class is mainly intended for CciTemplate usage but can
- * also be used when working with a Connection directly or when using
- * {@code org.springframework.jca.cci.object} classes.
- *
- * @author Thierry Templier
- * @author Juergen Hoeller
- * @since 1.2
- * @see #setConnectionFactory
- * @see #getCciTemplate
- * @see org.springframework.jca.cci.core.CciTemplate
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-public abstract class CciDaoSupport extends DaoSupport {
-
- @Nullable
- private org.springframework.jca.cci.core.CciTemplate cciTemplate;
-
-
- /**
- * Set the ConnectionFactory to be used by this DAO.
- */
- public final void setConnectionFactory(ConnectionFactory connectionFactory) {
- if (this.cciTemplate == null || connectionFactory != this.cciTemplate.getConnectionFactory()) {
- this.cciTemplate = createCciTemplate(connectionFactory);
- }
- }
-
- /**
- * Create a CciTemplate for the given ConnectionFactory.
- * Only invoked if populating the DAO with a ConnectionFactory reference!
- *
Can be overridden in subclasses to provide a CciTemplate instance
- * with different configuration, or a custom CciTemplate subclass.
- * @param connectionFactory the CCI ConnectionFactory to create a CciTemplate for
- * @return the new CciTemplate instance
- * @see #setConnectionFactory(javax.resource.cci.ConnectionFactory)
- */
- protected org.springframework.jca.cci.core.CciTemplate createCciTemplate(ConnectionFactory connectionFactory) {
- return new org.springframework.jca.cci.core.CciTemplate(connectionFactory);
- }
-
- /**
- * Return the ConnectionFactory used by this DAO.
- */
- @Nullable
- public final ConnectionFactory getConnectionFactory() {
- return (this.cciTemplate != null ? this.cciTemplate.getConnectionFactory() : null);
- }
-
- /**
- * Set the CciTemplate for this DAO explicitly,
- * as an alternative to specifying a ConnectionFactory.
- */
- public final void setCciTemplate(org.springframework.jca.cci.core.CciTemplate cciTemplate) {
- this.cciTemplate = cciTemplate;
- }
-
- /**
- * Return the CciTemplate for this DAO,
- * pre-initialized with the ConnectionFactory or set explicitly.
- */
- @Nullable
- public final org.springframework.jca.cci.core.CciTemplate getCciTemplate() {
- return this.cciTemplate;
- }
-
- @Override
- protected final void checkDaoConfig() {
- if (this.cciTemplate == null) {
- throw new IllegalArgumentException("'connectionFactory' or 'cciTemplate' is required");
- }
- }
-
-
- /**
- * Obtain a CciTemplate derived from the main template instance,
- * inheriting the ConnectionFactory and other settings but
- * overriding the ConnectionSpec used for obtaining Connections.
- * @param connectionSpec the CCI ConnectionSpec that the returned
- * template instance is supposed to obtain Connections for
- * @return the derived template instance
- * @see org.springframework.jca.cci.core.CciTemplate#getDerivedTemplate(javax.resource.cci.ConnectionSpec)
- */
- protected final org.springframework.jca.cci.core.CciTemplate getCciTemplate(ConnectionSpec connectionSpec) {
- org.springframework.jca.cci.core.CciTemplate cciTemplate = getCciTemplate();
- Assert.state(cciTemplate != null, "No CciTemplate set");
- return cciTemplate.getDerivedTemplate(connectionSpec);
- }
-
- /**
- * Get a CCI Connection, either from the current transaction or a new one.
- * @return the CCI Connection
- * @throws org.springframework.jca.cci.CannotGetCciConnectionException
- * if the attempt to get a Connection failed
- * @see org.springframework.jca.cci.connection.ConnectionFactoryUtils#getConnection(javax.resource.cci.ConnectionFactory)
- */
- protected final Connection getConnection() throws org.springframework.jca.cci.CannotGetCciConnectionException {
- ConnectionFactory connectionFactory = getConnectionFactory();
- Assert.state(connectionFactory != null, "No ConnectionFactory set");
- return org.springframework.jca.cci.connection.ConnectionFactoryUtils.getConnection(connectionFactory);
- }
-
- /**
- * Close the given CCI Connection, created via this bean's ConnectionFactory,
- * if it isn't bound to the thread.
- * @param con the Connection to close
- * @see org.springframework.jca.cci.connection.ConnectionFactoryUtils#releaseConnection
- */
- protected final void releaseConnection(Connection con) {
- org.springframework.jca.cci.connection.ConnectionFactoryUtils.releaseConnection(con, getConnectionFactory());
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/support/CommAreaRecord.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/support/CommAreaRecord.java
deleted file mode 100644
index 6f54b8b03ce..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/core/support/CommAreaRecord.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.core.support;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import javax.resource.cci.Record;
-import javax.resource.cci.Streamable;
-
-import org.springframework.util.FileCopyUtils;
-
-/**
- * CCI Record implementation for a COMMAREA, holding a byte array.
- *
- * @author Thierry Templier
- * @author Juergen Hoeller
- * @since 1.2
- * @see org.springframework.jca.cci.object.MappingCommAreaOperation
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-@SuppressWarnings("serial")
-public class CommAreaRecord implements Record, Streamable {
-
- private byte[] bytes = new byte[0];
-
- private String recordName = "";
-
- private String recordShortDescription = "";
-
-
- /**
- * Create a new CommAreaRecord.
- * @see #read(java.io.InputStream)
- */
- public CommAreaRecord() {
- }
-
- /**
- * Create a new CommAreaRecord.
- * @param bytes the bytes to fill the record with
- */
- public CommAreaRecord(byte[] bytes) {
- this.bytes = bytes;
- }
-
-
- @Override
- public void setRecordName(String recordName) {
- this.recordName = recordName;
- }
-
- @Override
- public String getRecordName() {
- return this.recordName;
- }
-
- @Override
- public void setRecordShortDescription(String recordShortDescription) {
- this.recordShortDescription = recordShortDescription;
- }
-
- @Override
- public String getRecordShortDescription() {
- return this.recordShortDescription;
- }
-
-
- @Override
- public void read(InputStream in) throws IOException {
- this.bytes = FileCopyUtils.copyToByteArray(in);
- }
-
- @Override
- public void write(OutputStream out) throws IOException {
- out.write(this.bytes);
- out.flush();
- }
-
- public byte[] toByteArray() {
- return this.bytes;
- }
-
-
- @Override
- public Object clone() {
- return new CommAreaRecord(this.bytes);
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/support/package-info.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/support/package-info.java
deleted file mode 100644
index d7bfd6bc0f2..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/core/support/package-info.java
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Classes supporting the {@code org.springframework.jca.cci.core} package.
- * Contains a DAO base class for CciTemplate usage.
- */
-@NonNullApi
-@NonNullFields
-package org.springframework.jca.cci.core.support;
-
-import org.springframework.lang.NonNullApi;
-import org.springframework.lang.NonNullFields;
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/object/EisOperation.java b/spring-tx/src/main/java/org/springframework/jca/cci/object/EisOperation.java
deleted file mode 100644
index 7cbe685ef03..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/object/EisOperation.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.object;
-
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.cci.InteractionSpec;
-
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-
-/**
- * Base class for EIS operation objects that work with the CCI API.
- * Encapsulates a CCI ConnectionFactory and a CCI InteractionSpec.
- *
- *
Works with a CciTemplate instance underneath. EIS operation objects
- * are an alternative to working with a CciTemplate directly.
- *
- * @author Juergen Hoeller
- * @since 1.2
- * @see #setConnectionFactory
- * @see #setInteractionSpec
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-public abstract class EisOperation implements InitializingBean {
-
- private org.springframework.jca.cci.core.CciTemplate cciTemplate =
- new org.springframework.jca.cci.core.CciTemplate();
-
- @Nullable
- private InteractionSpec interactionSpec;
-
-
- /**
- * Set the CciTemplate to be used by this operation.
- * Alternatively, specify a CCI ConnectionFactory.
- * @see #setConnectionFactory
- */
- public void setCciTemplate(org.springframework.jca.cci.core.CciTemplate cciTemplate) {
- Assert.notNull(cciTemplate, "CciTemplate must not be null");
- this.cciTemplate = cciTemplate;
- }
-
- /**
- * Return the CciTemplate used by this operation.
- */
- public org.springframework.jca.cci.core.CciTemplate getCciTemplate() {
- return this.cciTemplate;
- }
-
- /**
- * Set the CCI ConnectionFactory to be used by this operation.
- */
- public void setConnectionFactory(ConnectionFactory connectionFactory) {
- this.cciTemplate.setConnectionFactory(connectionFactory);
- }
-
- /**
- * Set the CCI InteractionSpec for this operation.
- */
- public void setInteractionSpec(@Nullable InteractionSpec interactionSpec) {
- this.interactionSpec = interactionSpec;
- }
-
- /**
- * Return the CCI InteractionSpec for this operation.
- */
- @Nullable
- public InteractionSpec getInteractionSpec() {
- return this.interactionSpec;
- }
-
-
- @Override
- public void afterPropertiesSet() {
- this.cciTemplate.afterPropertiesSet();
-
- if (this.interactionSpec == null) {
- throw new IllegalArgumentException("InteractionSpec is required");
- }
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/object/MappingCommAreaOperation.java b/spring-tx/src/main/java/org/springframework/jca/cci/object/MappingCommAreaOperation.java
deleted file mode 100644
index 25db832ae20..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/object/MappingCommAreaOperation.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.object;
-
-import java.io.IOException;
-
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.cci.InteractionSpec;
-import javax.resource.cci.Record;
-import javax.resource.cci.RecordFactory;
-
-import org.springframework.dao.DataAccessException;
-import org.springframework.dao.DataRetrievalFailureException;
-
-/**
- * EIS operation object for access to COMMAREA records.
- * Subclass of the generic MappingRecordOperation class.
- *
- * @author Thierry Templier
- * @since 1.2
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-public abstract class MappingCommAreaOperation extends MappingRecordOperation {
-
- /**
- * Create a new MappingCommAreaQuery.
- * @see #setConnectionFactory
- * @see #setInteractionSpec
- */
- public MappingCommAreaOperation() {
- }
-
- /**
- * Create a new MappingCommAreaQuery.
- * @param connectionFactory the ConnectionFactory to use to obtain connections
- * @param interactionSpec specification to configure the interaction
- */
- public MappingCommAreaOperation(ConnectionFactory connectionFactory, InteractionSpec interactionSpec) {
- super(connectionFactory, interactionSpec);
- }
-
-
- @Override
- protected final Record createInputRecord(RecordFactory recordFactory, Object inObject) {
- try {
- return new org.springframework.jca.cci.core.support.CommAreaRecord(objectToBytes(inObject));
- }
- catch (IOException ex) {
- throw new DataRetrievalFailureException("I/O exception during bytes conversion", ex);
- }
- }
-
- @Override
- protected final Object extractOutputData(Record record) throws DataAccessException {
- org.springframework.jca.cci.core.support.CommAreaRecord commAreaRecord =
- (org.springframework.jca.cci.core.support.CommAreaRecord) record;
- try {
- return bytesToObject(commAreaRecord.toByteArray());
- }
- catch (IOException ex) {
- throw new DataRetrievalFailureException("I/O exception during bytes conversion", ex);
- }
- }
-
-
- /**
- * Method used to convert an object into COMMAREA bytes.
- * @param inObject the input data
- * @return the COMMAREA's bytes
- * @throws IOException if thrown by I/O methods
- * @throws DataAccessException if conversion failed
- */
- protected abstract byte[] objectToBytes(Object inObject) throws IOException, DataAccessException;
-
- /**
- * Method used to convert the COMMAREA's bytes to an object.
- * @param bytes the COMMAREA's bytes
- * @return the output data
- * @throws IOException if thrown by I/O methods
- * @throws DataAccessException if conversion failed
- */
- protected abstract Object bytesToObject(byte[] bytes) throws IOException, DataAccessException;
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/object/MappingRecordOperation.java b/spring-tx/src/main/java/org/springframework/jca/cci/object/MappingRecordOperation.java
deleted file mode 100644
index 148c181a44d..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/object/MappingRecordOperation.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.object;
-
-import java.sql.SQLException;
-
-import javax.resource.ResourceException;
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.cci.InteractionSpec;
-import javax.resource.cci.Record;
-import javax.resource.cci.RecordFactory;
-
-import org.springframework.dao.DataAccessException;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-
-/**
- * EIS operation object that expects mapped input and output objects,
- * converting to and from CCI Records.
- *
- *
Concrete subclasses must implement the abstract
- * {@code createInputRecord(RecordFactory, Object)} and
- * {@code extractOutputData(Record)} methods, to create an input
- * Record from an object and to convert an output Record into an object,
- * respectively.
- *
- * @author Thierry Templier
- * @author Juergen Hoeller
- * @since 1.2
- * @see #createInputRecord(javax.resource.cci.RecordFactory, Object)
- * @see #extractOutputData(javax.resource.cci.Record)
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-public abstract class MappingRecordOperation extends EisOperation {
-
- /**
- * Constructor that allows use as a JavaBean.
- */
- public MappingRecordOperation() {
- }
-
- /**
- * Convenient constructor with ConnectionFactory and specifications
- * (connection and interaction).
- * @param connectionFactory the ConnectionFactory to use to obtain connections
- */
- public MappingRecordOperation(ConnectionFactory connectionFactory, InteractionSpec interactionSpec) {
- getCciTemplate().setConnectionFactory(connectionFactory);
- setInteractionSpec(interactionSpec);
- }
-
- /**
- * Set a RecordCreator that should be used for creating default output Records.
- *
Default is none: CCI's {@code Interaction.execute} variant
- * that returns an output Record will be called.
- *
Specify a RecordCreator here if you always need to call CCI's
- * {@code Interaction.execute} variant with a passed-in output Record.
- * This RecordCreator will then be invoked to create a default output Record instance.
- * @see javax.resource.cci.Interaction#execute(javax.resource.cci.InteractionSpec, Record)
- * @see javax.resource.cci.Interaction#execute(javax.resource.cci.InteractionSpec, Record, Record)
- * @see org.springframework.jca.cci.core.CciTemplate#setOutputRecordCreator
- */
- public void setOutputRecordCreator(org.springframework.jca.cci.core.RecordCreator creator) {
- getCciTemplate().setOutputRecordCreator(creator);
- }
-
- /**
- * Execute the interaction encapsulated by this operation object.
- * @param inputObject the input data, to be converted to a Record
- * by the {@code createInputRecord} method
- * @return the output data extracted with the {@code extractOutputData} method
- * @throws DataAccessException if there is any problem
- * @see #createInputRecord
- * @see #extractOutputData
- */
- @Nullable
- public Object execute(Object inputObject) throws DataAccessException {
- InteractionSpec interactionSpec = getInteractionSpec();
- Assert.state(interactionSpec != null, "No InteractionSpec set");
- return getCciTemplate().execute(
- interactionSpec, new RecordCreatorImpl(inputObject), new RecordExtractorImpl());
- }
-
-
- /**
- * Subclasses must implement this method to generate an input Record
- * from an input object passed into the {@code execute} method.
- * @param inputObject the passed-in input object
- * @return the CCI input Record
- * @throws ResourceException if thrown by a CCI method, to be auto-converted
- * to a DataAccessException
- * @see #execute(Object)
- */
- protected abstract Record createInputRecord(RecordFactory recordFactory, Object inputObject)
- throws ResourceException, DataAccessException;
-
- /**
- * Subclasses must implement this method to convert the Record returned
- * by CCI execution into a result object for the {@code execute} method.
- * @param outputRecord the Record returned by CCI execution
- * @return the result object
- * @throws ResourceException if thrown by a CCI method, to be auto-converted
- * to a DataAccessException
- * @see #execute(Object)
- */
- protected abstract Object extractOutputData(Record outputRecord)
- throws ResourceException, SQLException, DataAccessException;
-
-
- /**
- * Implementation of RecordCreator that calls the enclosing
- * class's {@code createInputRecord} method.
- */
- protected class RecordCreatorImpl implements org.springframework.jca.cci.core.RecordCreator {
-
- private final Object inputObject;
-
- public RecordCreatorImpl(Object inObject) {
- this.inputObject = inObject;
- }
-
- @Override
- public Record createRecord(RecordFactory recordFactory) throws ResourceException, DataAccessException {
- return createInputRecord(recordFactory, this.inputObject);
- }
- }
-
-
- /**
- * Implementation of RecordExtractor that calls the enclosing
- * class's {@code extractOutputData} method.
- */
- protected class RecordExtractorImpl implements org.springframework.jca.cci.core.RecordExtractor {
-
- @Override
- public Object extractData(Record record) throws ResourceException, SQLException, DataAccessException {
- return extractOutputData(record);
- }
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/object/SimpleRecordOperation.java b/spring-tx/src/main/java/org/springframework/jca/cci/object/SimpleRecordOperation.java
deleted file mode 100644
index 5799ca935a8..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/object/SimpleRecordOperation.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci.object;
-
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.cci.InteractionSpec;
-import javax.resource.cci.Record;
-
-import org.springframework.dao.DataAccessException;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-
-/**
- * EIS operation object that accepts a passed-in CCI input Record
- * and returns a corresponding CCI output Record.
- *
- * @author Juergen Hoeller
- * @since 1.2
- * @deprecated as of 5.3, in favor of specific data access APIs
- * (or native CCI usage if there is no alternative)
- */
-@Deprecated
-public class SimpleRecordOperation extends EisOperation {
-
- /**
- * Constructor that allows use as a JavaBean.
- */
- public SimpleRecordOperation() {
- }
-
- /**
- * Convenient constructor with ConnectionFactory and specifications
- * (connection and interaction).
- * @param connectionFactory the ConnectionFactory to use to obtain connections
- */
- public SimpleRecordOperation(ConnectionFactory connectionFactory, InteractionSpec interactionSpec) {
- getCciTemplate().setConnectionFactory(connectionFactory);
- setInteractionSpec(interactionSpec);
- }
-
-
- /**
- * Execute the CCI interaction encapsulated by this operation object.
- * This method will call CCI's {@code Interaction.execute} variant
- * that returns an output Record.
- * @param inputRecord the input record
- * @return the output record
- * @throws DataAccessException if there is any problem
- * @see javax.resource.cci.Interaction#execute(javax.resource.cci.InteractionSpec, Record)
- */
- @Nullable
- public Record execute(Record inputRecord) throws DataAccessException {
- InteractionSpec interactionSpec = getInteractionSpec();
- Assert.state(interactionSpec != null, "No InteractionSpec set");
- return getCciTemplate().execute(interactionSpec, inputRecord);
- }
-
- /**
- * Execute the CCI interaction encapsulated by this operation object.
- *
This method will call CCI's {@code Interaction.execute} variant
- * with a passed-in output Record.
- * @param inputRecord the input record
- * @param outputRecord the output record
- * @throws DataAccessException if there is any problem
- * @see javax.resource.cci.Interaction#execute(javax.resource.cci.InteractionSpec, Record, Record)
- */
- public void execute(Record inputRecord, Record outputRecord) throws DataAccessException {
- InteractionSpec interactionSpec = getInteractionSpec();
- Assert.state(interactionSpec != null, "No InteractionSpec set");
- getCciTemplate().execute(interactionSpec, inputRecord, outputRecord);
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/object/package-info.java b/spring-tx/src/main/java/org/springframework/jca/cci/object/package-info.java
deleted file mode 100644
index 2c51b175d10..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/object/package-info.java
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * The classes in this package represent EIS operations as threadsafe,
- * reusable objects. This higher level of CCI abstraction depends on the
- * lower-level abstraction in the {@code org.springframework.jca.cci.core} package.
- * Exceptions thrown are as in the {@code org.springframework.dao} package,
- * meaning that code using this package does not need to worry about error handling.
- */
-@NonNullApi
-@NonNullFields
-package org.springframework.jca.cci.object;
-
-import org.springframework.lang.NonNullApi;
-import org.springframework.lang.NonNullFields;
diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/package-info.java b/spring-tx/src/main/java/org/springframework/jca/cci/package-info.java
deleted file mode 100644
index 469cdc926b3..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/cci/package-info.java
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * This package contains Spring's support for the Common Client Interface (CCI),
- * as defined by the J2EE Connector Architecture. It is conceptually similar
- * to the {@code org.springframework.jdbc} package, providing the same
- * levels of data access abstraction.
- */
-@NonNullApi
-@NonNullFields
-package org.springframework.jca.cci;
-
-import org.springframework.lang.NonNullApi;
-import org.springframework.lang.NonNullFields;
diff --git a/spring-tx/src/main/java/org/springframework/jca/context/BootstrapContextAware.java b/spring-tx/src/main/java/org/springframework/jca/context/BootstrapContextAware.java
deleted file mode 100644
index 66c6b65c1d3..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/context/BootstrapContextAware.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.context;
-
-import javax.resource.spi.BootstrapContext;
-
-import org.springframework.beans.factory.Aware;
-
-/**
- * Interface to be implemented by any object that wishes to be
- * notified of the BootstrapContext (typically determined by the
- * {@link ResourceAdapterApplicationContext}) that it runs in.
- *
- * @author Juergen Hoeller
- * @author Chris Beams
- * @since 2.5
- * @see javax.resource.spi.BootstrapContext
- */
-public interface BootstrapContextAware extends Aware {
-
- /**
- * Set the BootstrapContext that this object runs in.
- *
Invoked after population of normal bean properties but before an init
- * callback like InitializingBean's {@code afterPropertiesSet} or a
- * custom init-method. Invoked after ApplicationContextAware's
- * {@code setApplicationContext}.
- * @param bootstrapContext the BootstrapContext object to be used by this object
- * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet
- * @see org.springframework.context.ApplicationContextAware#setApplicationContext
- */
- void setBootstrapContext(BootstrapContext bootstrapContext);
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/context/BootstrapContextAwareProcessor.java b/spring-tx/src/main/java/org/springframework/jca/context/BootstrapContextAwareProcessor.java
deleted file mode 100644
index 1efb9d9a691..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/context/BootstrapContextAwareProcessor.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.context;
-
-import javax.resource.spi.BootstrapContext;
-
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanPostProcessor;
-import org.springframework.lang.Nullable;
-
-/**
- * {@link org.springframework.beans.factory.config.BeanPostProcessor}
- * implementation that passes the BootstrapContext to beans that implement
- * the {@link BootstrapContextAware} interface.
- *
- *
{@link ResourceAdapterApplicationContext} automatically registers
- * this processor with its underlying bean factory.
- *
- * @author Juergen Hoeller
- * @since 2.5
- * @see BootstrapContextAware
- */
-class BootstrapContextAwareProcessor implements BeanPostProcessor {
-
- @Nullable
- private final BootstrapContext bootstrapContext;
-
-
- /**
- * Create a new BootstrapContextAwareProcessor for the given context.
- */
- public BootstrapContextAwareProcessor(@Nullable BootstrapContext bootstrapContext) {
- this.bootstrapContext = bootstrapContext;
- }
-
-
- @Override
- public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
- if (this.bootstrapContext != null && bean instanceof BootstrapContextAware) {
- ((BootstrapContextAware) bean).setBootstrapContext(this.bootstrapContext);
- }
- return bean;
- }
-
- @Override
- public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
- return bean;
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/context/ResourceAdapterApplicationContext.java b/spring-tx/src/main/java/org/springframework/jca/context/ResourceAdapterApplicationContext.java
deleted file mode 100644
index 4154e223046..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/context/ResourceAdapterApplicationContext.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2002-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.context;
-
-import javax.resource.spi.BootstrapContext;
-import javax.resource.spi.work.WorkManager;
-
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.ObjectFactory;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.context.support.GenericApplicationContext;
-import org.springframework.util.Assert;
-
-/**
- * {@link org.springframework.context.ApplicationContext} implementation
- * for a JCA ResourceAdapter. Needs to be initialized with the JCA
- * {@link javax.resource.spi.BootstrapContext}, passing it on to
- * Spring-managed beans that implement {@link BootstrapContextAware}.
- *
- * @author Juergen Hoeller
- * @since 2.5
- * @see SpringContextResourceAdapter
- * @see BootstrapContextAware
- */
-public class ResourceAdapterApplicationContext extends GenericApplicationContext {
-
- private final BootstrapContext bootstrapContext;
-
-
- /**
- * Create a new ResourceAdapterApplicationContext for the given BootstrapContext.
- * @param bootstrapContext the JCA BootstrapContext that the ResourceAdapter
- * has been started with
- */
- public ResourceAdapterApplicationContext(BootstrapContext bootstrapContext) {
- Assert.notNull(bootstrapContext, "BootstrapContext must not be null");
- this.bootstrapContext = bootstrapContext;
- }
-
-
- @Override
- protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
- beanFactory.addBeanPostProcessor(new BootstrapContextAwareProcessor(this.bootstrapContext));
- beanFactory.ignoreDependencyInterface(BootstrapContextAware.class);
- beanFactory.registerResolvableDependency(BootstrapContext.class, this.bootstrapContext);
-
- // JCA WorkManager resolved lazily - may not be available.
- beanFactory.registerResolvableDependency(WorkManager.class,
- (ObjectFactory) this.bootstrapContext::getWorkManager);
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/context/SpringContextResourceAdapter.java b/spring-tx/src/main/java/org/springframework/jca/context/SpringContextResourceAdapter.java
deleted file mode 100644
index 3c99117f645..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/context/SpringContextResourceAdapter.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.context;
-
-import javax.resource.NotSupportedException;
-import javax.resource.ResourceException;
-import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.BootstrapContext;
-import javax.resource.spi.ResourceAdapter;
-import javax.resource.spi.ResourceAdapterInternalException;
-import javax.resource.spi.endpoint.MessageEndpointFactory;
-import javax.transaction.xa.XAResource;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.springframework.beans.factory.support.BeanDefinitionRegistry;
-import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.core.env.ConfigurableEnvironment;
-import org.springframework.core.env.StandardEnvironment;
-import org.springframework.lang.Nullable;
-import org.springframework.util.ObjectUtils;
-import org.springframework.util.StringUtils;
-
-/**
- * JCA 1.7 {@link javax.resource.spi.ResourceAdapter} implementation
- * that loads a Spring {@link org.springframework.context.ApplicationContext},
- * starting and stopping Spring-managed beans as part of the ResourceAdapter's
- * lifecycle.
- *
- * Ideal for application contexts that do not need any HTTP entry points
- * but rather just consist of message endpoints and scheduled jobs etc.
- * Beans in such a context may use application server resources such as the
- * JTA transaction manager and JNDI-bound JDBC DataSources and JMS
- * ConnectionFactory instances, and may also register with the platform's
- * JMX server - all through Spring's standard transaction management and
- * JNDI and JMX support facilities.
- *
- *
If the need for scheduling asynchronous work arises, consider using
- * Spring's {@link org.springframework.jca.work.WorkManagerTaskExecutor}
- * as a standard bean definition, to be injected into application beans
- * through dependency injection. This WorkManagerTaskExecutor will automatically
- * use the JCA WorkManager from the BootstrapContext that has been provided
- * to this ResourceAdapter.
- *
- *
The JCA {@link javax.resource.spi.BootstrapContext} may also be
- * accessed directly, through application components that implement the
- * {@link BootstrapContextAware} interface. When deployed using this
- * ResourceAdapter, the BootstrapContext is guaranteed to be passed on
- * to such components.
- *
- *
This ResourceAdapter is to be defined in a "META-INF/ra.xml" file
- * within a Java EE ".rar" deployment unit like as follows:
- *
- *
- * <?xml version="1.0" encoding="UTF-8"?>
- * <connector xmlns="http://java.sun.com/xml/ns/j2ee"
- * xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- * xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee https://java.sun.com/xml/ns/j2ee/connector_1_5.xsd"
- * version="1.5">
- * <vendor-name>Spring Framework</vendor-name>
- * <eis-type>Spring Connector</eis-type>
- * <resourceadapter-version>1.0</resourceadapter-version>
- * <resourceadapter>
- * <resourceadapter-class>org.springframework.jca.context.SpringContextResourceAdapter</resourceadapter-class>
- * <config-property>
- * <config-property-name>ContextConfigLocation</config-property-name>
- * <config-property-type>java.lang.String</config-property-type>
- * <config-property-value>META-INF/applicationContext.xml</config-property-value>
- * </config-property>
- * </resourceadapter>
- * </connector>
- *
- * Note that "META-INF/applicationContext.xml" is the default context config
- * location, so it doesn't have to specified unless you intend to specify
- * different/additional config files. So in the default case, you may remove
- * the entire {@code config-property} section above.
- *
- * For simple deployment needs, all you need to do is the following:
- * Package all application classes into a RAR file (which is just a standard
- * JAR file with a different file extension), add all required library jars
- * into the root of the RAR archive, add a "META-INF/ra.xml" deployment
- * descriptor as shown above as well as the corresponding Spring XML bean
- * definition file(s) (typically "META-INF/applicationContext.xml"),
- * and drop the resulting RAR file into your application server's
- * deployment directory!
- *
- * @author Juergen Hoeller
- * @since 2.5
- * @see #setContextConfigLocation
- * @see #loadBeanDefinitions
- * @see ResourceAdapterApplicationContext
- */
-public class SpringContextResourceAdapter implements ResourceAdapter {
-
- /**
- * Any number of these characters are considered delimiters between
- * multiple context config paths in a single String value.
- * @see #setContextConfigLocation
- */
- public static final String CONFIG_LOCATION_DELIMITERS = ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS;
-
- /**
- * The default {@code applicationContext.xml} location.
- */
- public static final String DEFAULT_CONTEXT_CONFIG_LOCATION = "META-INF/applicationContext.xml";
-
-
- protected final Log logger = LogFactory.getLog(getClass());
-
- private String contextConfigLocation = DEFAULT_CONTEXT_CONFIG_LOCATION;
-
- @Nullable
- private ConfigurableApplicationContext applicationContext;
-
-
- /**
- * Set the location of the context configuration files, within the
- * resource adapter's deployment unit. This can be a delimited
- * String that consists of multiple resource location, separated
- * by commas, semicolons, whitespace, or line breaks.
- *
This can be specified as "ContextConfigLocation" config
- * property in the {@code ra.xml} deployment descriptor.
- *
The default is "classpath:META-INF/applicationContext.xml".
- */
- public void setContextConfigLocation(String contextConfigLocation) {
- this.contextConfigLocation = contextConfigLocation;
- }
-
- /**
- * Return the specified context configuration files.
- */
- protected String getContextConfigLocation() {
- return this.contextConfigLocation;
- }
-
- /**
- * Return a new {@link StandardEnvironment}.
- *
Subclasses may override this method in order to supply
- * a custom {@link ConfigurableEnvironment} implementation.
- */
- protected ConfigurableEnvironment createEnvironment() {
- return new StandardEnvironment();
- }
-
- /**
- * This implementation loads a Spring ApplicationContext through the
- * {@link #createApplicationContext} template method.
- */
- @Override
- public void start(BootstrapContext bootstrapContext) throws ResourceAdapterInternalException {
- if (logger.isDebugEnabled()) {
- logger.debug("Starting SpringContextResourceAdapter with BootstrapContext: " + bootstrapContext);
- }
- this.applicationContext = createApplicationContext(bootstrapContext);
- }
-
- /**
- * Build a Spring ApplicationContext for the given JCA BootstrapContext.
- *
The default implementation builds a {@link ResourceAdapterApplicationContext}
- * and delegates to {@link #loadBeanDefinitions} for actually parsing the
- * specified configuration files.
- * @param bootstrapContext this ResourceAdapter's BootstrapContext
- * @return the Spring ApplicationContext instance
- */
- protected ConfigurableApplicationContext createApplicationContext(BootstrapContext bootstrapContext) {
- ResourceAdapterApplicationContext applicationContext =
- new ResourceAdapterApplicationContext(bootstrapContext);
-
- // Set ResourceAdapter's ClassLoader as bean class loader.
- applicationContext.setClassLoader(getClass().getClassLoader());
-
- // Extract individual config locations.
- String[] configLocations =
- StringUtils.tokenizeToStringArray(getContextConfigLocation(), CONFIG_LOCATION_DELIMITERS);
-
- loadBeanDefinitions(applicationContext, configLocations);
- applicationContext.refresh();
-
- return applicationContext;
- }
-
- /**
- * Load the bean definitions into the given registry,
- * based on the specified configuration files.
- * @param registry the registry to load into
- * @param configLocations the parsed config locations
- * @see #setContextConfigLocation
- */
- protected void loadBeanDefinitions(BeanDefinitionRegistry registry, String[] configLocations) {
- new XmlBeanDefinitionReader(registry).loadBeanDefinitions(configLocations);
- }
-
- /**
- * This implementation closes the Spring ApplicationContext.
- */
- @Override
- public void stop() {
- logger.debug("Stopping SpringContextResourceAdapter");
- if (this.applicationContext != null) {
- this.applicationContext.close();
- }
- }
-
-
- /**
- * This implementation always throws a NotSupportedException.
- */
- @Override
- public void endpointActivation(MessageEndpointFactory messageEndpointFactory, ActivationSpec activationSpec)
- throws ResourceException {
-
- throw new NotSupportedException("SpringContextResourceAdapter does not support message endpoints");
- }
-
- /**
- * This implementation does nothing.
- */
- @Override
- public void endpointDeactivation(MessageEndpointFactory messageEndpointFactory, ActivationSpec activationSpec) {
- }
-
- /**
- * This implementation always returns {@code null}.
- */
- @Override
- @Nullable
- public XAResource[] getXAResources(ActivationSpec[] activationSpecs) throws ResourceException {
- return null;
- }
-
-
- @Override
- public boolean equals(@Nullable Object other) {
- return (this == other || (other instanceof SpringContextResourceAdapter &&
- ObjectUtils.nullSafeEquals(getContextConfigLocation(),
- ((SpringContextResourceAdapter) other).getContextConfigLocation())));
- }
-
- @Override
- public int hashCode() {
- return ObjectUtils.nullSafeHashCode(getContextConfigLocation());
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/context/package-info.java b/spring-tx/src/main/java/org/springframework/jca/context/package-info.java
deleted file mode 100644
index 172bca88efe..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/context/package-info.java
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Integration package that allows for deploying a Spring application context
- * as a JCA 1.7 compliant RAR file.
- */
-@NonNullApi
-@NonNullFields
-package org.springframework.jca.context;
-
-import org.springframework.lang.NonNullApi;
-import org.springframework.lang.NonNullFields;
diff --git a/spring-tx/src/main/java/org/springframework/jca/endpoint/AbstractMessageEndpointFactory.java b/spring-tx/src/main/java/org/springframework/jca/endpoint/AbstractMessageEndpointFactory.java
index 46ee354a773..bada813d61e 100644
--- a/spring-tx/src/main/java/org/springframework/jca/endpoint/AbstractMessageEndpointFactory.java
+++ b/spring-tx/src/main/java/org/springframework/jca/endpoint/AbstractMessageEndpointFactory.java
@@ -18,15 +18,15 @@ package org.springframework.jca.endpoint;
import java.lang.reflect.Method;
-import javax.resource.ResourceException;
-import javax.resource.spi.ApplicationServerInternalException;
-import javax.resource.spi.UnavailableException;
-import javax.resource.spi.endpoint.MessageEndpoint;
-import javax.resource.spi.endpoint.MessageEndpointFactory;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
import javax.transaction.xa.XAResource;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ApplicationServerInternalException;
+import jakarta.resource.spi.UnavailableException;
+import jakarta.resource.spi.endpoint.MessageEndpoint;
+import jakarta.resource.spi.endpoint.MessageEndpointFactory;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -38,7 +38,7 @@ import org.springframework.util.Assert;
/**
* Abstract base implementation of the JCA 1.7
- * {@link javax.resource.spi.endpoint.MessageEndpointFactory} interface,
+ * {@link jakarta.resource.spi.endpoint.MessageEndpointFactory} interface,
* providing transaction management capabilities as well as ClassLoader
* exposure for endpoint invocations.
*
@@ -68,7 +68,7 @@ public abstract class AbstractMessageEndpointFactory implements MessageEndpointF
* invocations, enlisting the endpoint resource in each such transaction.
*
The passed-in object may be a transaction manager which implements
* Spring's {@link org.springframework.transaction.jta.TransactionFactory}
- * interface, or a plain {@link javax.transaction.TransactionManager}.
+ * interface, or a plain {@link jakarta.transaction.TransactionManager}.
*
If no transaction manager is specified, the endpoint invocation
* will simply not be wrapped in an XA transaction. Check out your
* resource provider's ActivationSpec documentation for local
@@ -86,7 +86,7 @@ public abstract class AbstractMessageEndpointFactory implements MessageEndpointF
else {
throw new IllegalArgumentException("Transaction manager [" + transactionManager +
"] is neither a [org.springframework.transaction.jta.TransactionFactory} nor a " +
- "[javax.transaction.TransactionManager]");
+ "[jakarta.transaction.TransactionManager]");
}
}
diff --git a/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointFactory.java b/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointFactory.java
index 15cb289dce3..996f366ee6c 100644
--- a/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointFactory.java
+++ b/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointFactory.java
@@ -16,11 +16,11 @@
package org.springframework.jca.endpoint;
-import javax.resource.ResourceException;
-import javax.resource.spi.UnavailableException;
-import javax.resource.spi.endpoint.MessageEndpoint;
import javax.transaction.xa.XAResource;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.UnavailableException;
+import jakarta.resource.spi.endpoint.MessageEndpoint;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
@@ -32,10 +32,10 @@ import org.springframework.util.ReflectionUtils;
/**
* Generic implementation of the JCA 1.7
- * {@link javax.resource.spi.endpoint.MessageEndpointFactory} interface,
+ * {@link jakarta.resource.spi.endpoint.MessageEndpointFactory} interface,
* providing transaction management capabilities for any kind of message
- * listener object (e.g. {@link javax.jms.MessageListener} objects or
- * {@link javax.resource.cci.MessageListener} objects.
+ * listener object (e.g. {@link jakarta.jms.MessageListener} objects or
+ * {@link jakarta.resource.cci.MessageListener} objects.
*
*
Uses AOP proxies for concrete endpoint instances, simply wrapping
* the specified message listener object and exposing all of its implemented
@@ -44,7 +44,7 @@ import org.springframework.util.ReflectionUtils;
*
Typically used with Spring's {@link GenericMessageEndpointManager},
* but not tied to it. As a consequence, this endpoint factory could
* also be used with programmatic endpoint management on a native
- * {@link javax.resource.spi.ResourceAdapter} instance.
+ * {@link jakarta.resource.spi.ResourceAdapter} instance.
*
* @author Juergen Hoeller
* @since 2.5
@@ -60,8 +60,8 @@ public class GenericMessageEndpointFactory extends AbstractMessageEndpointFactor
/**
* Specify the message listener object that the endpoint should expose
- * (e.g. a {@link javax.jms.MessageListener} objects or
- * {@link javax.resource.cci.MessageListener} implementation).
+ * (e.g. a {@link jakarta.jms.MessageListener} objects or
+ * {@link jakarta.resource.cci.MessageListener} implementation).
*/
public void setMessageListener(Object messageListener) {
this.messageListener = messageListener;
diff --git a/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointManager.java b/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointManager.java
index f97dcc9bc90..090c2a20a52 100644
--- a/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointManager.java
+++ b/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointManager.java
@@ -16,10 +16,10 @@
package org.springframework.jca.endpoint;
-import javax.resource.ResourceException;
-import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.ResourceAdapter;
-import javax.resource.spi.endpoint.MessageEndpointFactory;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ActivationSpec;
+import jakarta.resource.spi.ResourceAdapter;
+import jakarta.resource.spi.endpoint.MessageEndpointFactory;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
@@ -48,7 +48,7 @@ import org.springframework.util.Assert;
* <property name="activationSpec">
* <bean class="org.apache.activemq.ra.ActiveMQActivationSpec">
* <property name="destination" value="myQueue"/>
- * <property name="destinationType" value="javax.jms.Queue"/>
+ * <property name="destinationType" value="jakarta.jms.Queue"/>
* </bean>
* </property>
* </bean>
@@ -56,7 +56,7 @@ import org.springframework.util.Assert;
* In this example, Spring's own {@link GenericMessageEndpointFactory} is used
* to point to a standard message listener object that happens to be supported
* by the specified target ResourceAdapter: in this case, a JMS
- * {@link javax.jms.MessageListener} object as supported by the ActiveMQ
+ * {@link jakarta.jms.MessageListener} object as supported by the ActiveMQ
* message broker, defined as a Spring bean:
*
*
@@ -84,7 +84,7 @@ import org.springframework.util.Assert;
* For a different target resource, the configuration would simply point to a
* different ResourceAdapter and a different ActivationSpec object (which are
* both specific to the resource provider), and possibly a different message
- * listener (e.g. a CCI {@link javax.resource.cci.MessageListener} for a
+ * listener (e.g. a CCI {@link jakarta.resource.cci.MessageListener} for a
* resource adapter which is based on the JCA Common Client Interface).
*
* The asynchronous execution strategy can be customized through the
@@ -97,7 +97,7 @@ import org.springframework.util.Assert;
* as built by the specified MessageEndpointFactory. {@link GenericMessageEndpointFactory}
* supports XA transaction participation through its "transactionManager" property,
* typically with a Spring {@link org.springframework.transaction.jta.JtaTransactionManager}
- * or a plain {@link javax.transaction.TransactionManager} implementation specified there.
+ * or a plain {@link jakarta.transaction.TransactionManager} implementation specified there.
*
*
* <bean class="org.springframework.jca.endpoint.GenericMessageEndpointManager">
@@ -111,7 +111,7 @@ import org.springframework.util.Assert;
* <property name="activationSpec">
* <bean class="org.apache.activemq.ra.ActiveMQActivationSpec">
* <property name="destination" value="myQueue"/>
- * <property name="destinationType" value="javax.jms.Queue"/>
+ * <property name="destinationType" value="jakarta.jms.Queue"/>
* </bean>
* </property>
* </bean>
@@ -133,7 +133,7 @@ import org.springframework.util.Assert;
* <property name="activationSpec">
* <bean class="org.apache.activemq.ra.ActiveMQActivationSpec">
* <property name="destination" value="myQueue"/>
- * <property name="destinationType" value="javax.jms.Queue"/>
+ * <property name="destinationType" value="jakarta.jms.Queue"/>
* <property name="useRAManagedTransaction" value="true"/>
* </bean>
* </property>
@@ -141,10 +141,10 @@ import org.springframework.util.Assert;
*
* @author Juergen Hoeller
* @since 2.5
- * @see javax.resource.spi.ResourceAdapter#endpointActivation
- * @see javax.resource.spi.ResourceAdapter#endpointDeactivation
- * @see javax.resource.spi.endpoint.MessageEndpointFactory
- * @see javax.resource.spi.ActivationSpec
+ * @see jakarta.resource.spi.ResourceAdapter#endpointActivation
+ * @see jakarta.resource.spi.ResourceAdapter#endpointDeactivation
+ * @see jakarta.resource.spi.endpoint.MessageEndpointFactory
+ * @see jakarta.resource.spi.ActivationSpec
*/
public class GenericMessageEndpointManager implements SmartLifecycle, InitializingBean, DisposableBean {
diff --git a/spring-tx/src/main/java/org/springframework/jca/support/LocalConnectionFactoryBean.java b/spring-tx/src/main/java/org/springframework/jca/support/LocalConnectionFactoryBean.java
index fd7d1bd0541..fe49bafdf5e 100644
--- a/spring-tx/src/main/java/org/springframework/jca/support/LocalConnectionFactoryBean.java
+++ b/spring-tx/src/main/java/org/springframework/jca/support/LocalConnectionFactoryBean.java
@@ -16,9 +16,9 @@
package org.springframework.jca.support;
-import javax.resource.ResourceException;
-import javax.resource.spi.ConnectionManager;
-import javax.resource.spi.ManagedConnectionFactory;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ConnectionManager;
+import jakarta.resource.spi.ManagedConnectionFactory;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
@@ -29,13 +29,13 @@ import org.springframework.lang.Nullable;
* a local JCA connection factory in "non-managed" mode (as defined by the
* Java Connector Architecture specification). This is a direct alternative
* to a {@link org.springframework.jndi.JndiObjectFactoryBean} definition that
- * obtains a connection factory handle from a Java EE server's naming environment.
+ * obtains a connection factory handle from a Jakarta EE server's naming environment.
*
* The type of the connection factory is dependent on the actual connector:
* the connector can either expose its native API (such as a JDBC
- * {@link javax.sql.DataSource} or a JMS {@link javax.jms.ConnectionFactory})
+ * {@link javax.sql.DataSource} or a JMS {@link jakarta.jms.ConnectionFactory})
* or follow the standard Common Client Interface (CCI), as defined by the JCA spec.
- * The exposed interface in the CCI case is {@link javax.resource.cci.ConnectionFactory}.
+ * The exposed interface in the CCI case is {@link jakarta.resource.cci.ConnectionFactory}.
*
*
In order to use this FactoryBean, you must specify the connector's
* {@link #setManagedConnectionFactory "managedConnectionFactory"} (usually
@@ -46,7 +46,7 @@ import org.springframework.lang.Nullable;
*
*
NOTE: In non-managed mode, a connector is not deployed on an
* application server, or more specifically not interacting with an application
- * server. Consequently, it cannot use a Java EE server's system contracts:
+ * server. Consequently, it cannot use a Jakarta EE server's system contracts:
* connection management, transaction management, and security management.
* A custom ConnectionManager implementation has to be used for applying those
* services in conjunction with a standalone transaction coordinator etc.
@@ -65,8 +65,8 @@ import org.springframework.lang.Nullable;
* @since 1.2
* @see #setManagedConnectionFactory
* @see #setConnectionManager
- * @see javax.resource.cci.ConnectionFactory
- * @see javax.resource.cci.Connection#getLocalTransaction
+ * @see jakarta.resource.cci.ConnectionFactory
+ * @see jakarta.resource.cci.Connection#getLocalTransaction
* @see org.springframework.jca.cci.connection.CciLocalTransactionManager
*/
public class LocalConnectionFactoryBean implements FactoryBean, InitializingBean {
@@ -91,11 +91,11 @@ public class LocalConnectionFactoryBean implements FactoryBean, Initiali
* EntityManagerFactory.
* Note that the ManagerConnectionFactory implementation might expect
* a reference to its JCA 1.7 ResourceAdapter, expressed through the
- * {@link javax.resource.spi.ResourceAdapterAssociation} interface.
+ * {@link jakarta.resource.spi.ResourceAdapterAssociation} interface.
* Simply inject the corresponding ResourceAdapter instance into its
* "resourceAdapter" bean property in this case, before passing the
* ManagerConnectionFactory into this LocalConnectionFactoryBean.
- * @see javax.resource.spi.ManagedConnectionFactory#createConnectionFactory()
+ * @see jakarta.resource.spi.ManagedConnectionFactory#createConnectionFactory()
*/
public void setManagedConnectionFactory(ManagedConnectionFactory managedConnectionFactory) {
this.managedConnectionFactory = managedConnectionFactory;
@@ -107,7 +107,7 @@ public class LocalConnectionFactoryBean implements FactoryBean, Initiali
* A ConnectionManager implementation for local usage is often
* included with a JCA connector. Such an included ConnectionManager
* might be set as default, with no need to explicitly specify one.
- * @see javax.resource.spi.ManagedConnectionFactory#createConnectionFactory(javax.resource.spi.ConnectionManager)
+ * @see jakarta.resource.spi.ManagedConnectionFactory#createConnectionFactory(jakarta.resource.spi.ConnectionManager)
*/
public void setConnectionManager(ConnectionManager connectionManager) {
this.connectionManager = connectionManager;
diff --git a/spring-tx/src/main/java/org/springframework/jca/support/ResourceAdapterFactoryBean.java b/spring-tx/src/main/java/org/springframework/jca/support/ResourceAdapterFactoryBean.java
index 7904e0bc614..9969c97d571 100644
--- a/spring-tx/src/main/java/org/springframework/jca/support/ResourceAdapterFactoryBean.java
+++ b/spring-tx/src/main/java/org/springframework/jca/support/ResourceAdapterFactoryBean.java
@@ -16,11 +16,11 @@
package org.springframework.jca.support;
-import javax.resource.ResourceException;
-import javax.resource.spi.BootstrapContext;
-import javax.resource.spi.ResourceAdapter;
-import javax.resource.spi.XATerminator;
-import javax.resource.spi.work.WorkManager;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.BootstrapContext;
+import jakarta.resource.spi.ResourceAdapter;
+import jakarta.resource.spi.XATerminator;
+import jakarta.resource.spi.work.WorkManager;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.DisposableBean;
@@ -30,8 +30,8 @@ import org.springframework.lang.Nullable;
/**
* {@link org.springframework.beans.factory.FactoryBean} that bootstraps
- * the specified JCA 1.7 {@link javax.resource.spi.ResourceAdapter},
- * starting it with a local {@link javax.resource.spi.BootstrapContext}
+ * the specified JCA 1.7 {@link jakarta.resource.spi.ResourceAdapter},
+ * starting it with a local {@link jakarta.resource.spi.BootstrapContext}
* and exposing it for bean references. It will also stop the ResourceAdapter
* on context shutdown. This corresponds to 'non-managed' bootstrap in a
* local environment, according to the JCA 1.7 specification.
@@ -45,8 +45,8 @@ import org.springframework.lang.Nullable;
* @see #setResourceAdapter
* @see #setBootstrapContext
* @see #setWorkManager
- * @see javax.resource.spi.ResourceAdapter#start(javax.resource.spi.BootstrapContext)
- * @see javax.resource.spi.ResourceAdapter#stop()
+ * @see jakarta.resource.spi.ResourceAdapter#start(jakarta.resource.spi.BootstrapContext)
+ * @see jakarta.resource.spi.ResourceAdapter#stop()
*/
public class ResourceAdapterFactoryBean implements FactoryBean, InitializingBean, DisposableBean {
@@ -114,7 +114,7 @@ public class ResourceAdapterFactoryBean implements FactoryBean,
/**
* Builds the BootstrapContext and starts the ResourceAdapter with it.
- * @see javax.resource.spi.ResourceAdapter#start(javax.resource.spi.BootstrapContext)
+ * @see jakarta.resource.spi.ResourceAdapter#start(jakarta.resource.spi.BootstrapContext)
*/
@Override
public void afterPropertiesSet() throws ResourceException {
@@ -147,7 +147,7 @@ public class ResourceAdapterFactoryBean implements FactoryBean,
/**
* Stops the ResourceAdapter.
- * @see javax.resource.spi.ResourceAdapter#stop()
+ * @see jakarta.resource.spi.ResourceAdapter#stop()
*/
@Override
public void destroy() {
diff --git a/spring-tx/src/main/java/org/springframework/jca/support/SimpleBootstrapContext.java b/spring-tx/src/main/java/org/springframework/jca/support/SimpleBootstrapContext.java
index 8ca15b9d901..c607a6f2660 100644
--- a/spring-tx/src/main/java/org/springframework/jca/support/SimpleBootstrapContext.java
+++ b/spring-tx/src/main/java/org/springframework/jca/support/SimpleBootstrapContext.java
@@ -18,18 +18,18 @@ package org.springframework.jca.support;
import java.util.Timer;
-import javax.resource.spi.BootstrapContext;
-import javax.resource.spi.UnavailableException;
-import javax.resource.spi.XATerminator;
-import javax.resource.spi.work.WorkContext;
-import javax.resource.spi.work.WorkManager;
-import javax.transaction.TransactionSynchronizationRegistry;
+import jakarta.resource.spi.BootstrapContext;
+import jakarta.resource.spi.UnavailableException;
+import jakarta.resource.spi.XATerminator;
+import jakarta.resource.spi.work.WorkContext;
+import jakarta.resource.spi.work.WorkManager;
+import jakarta.transaction.TransactionSynchronizationRegistry;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
- * Simple implementation of the JCA 1.7 {@link javax.resource.spi.BootstrapContext}
+ * Simple implementation of the JCA 1.7 {@link jakarta.resource.spi.BootstrapContext}
* interface, used for bootstrapping a JCA ResourceAdapter in a local environment.
*
* Delegates to the given WorkManager and XATerminator, if any. Creates simple
@@ -37,7 +37,7 @@ import org.springframework.util.Assert;
*
* @author Juergen Hoeller
* @since 2.0.3
- * @see javax.resource.spi.ResourceAdapter#start(javax.resource.spi.BootstrapContext)
+ * @see jakarta.resource.spi.ResourceAdapter#start(jakarta.resource.spi.BootstrapContext)
* @see ResourceAdapterFactoryBean
*/
public class SimpleBootstrapContext implements BootstrapContext {
diff --git a/spring-tx/src/main/java/org/springframework/jca/work/DelegatingWork.java b/spring-tx/src/main/java/org/springframework/jca/work/DelegatingWork.java
deleted file mode 100644
index da52a853650..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/work/DelegatingWork.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2002-2012 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.work;
-
-import javax.resource.spi.work.Work;
-
-import org.springframework.util.Assert;
-
-/**
- * Simple Work adapter that delegates to a given Runnable.
- *
- * @author Juergen Hoeller
- * @since 2.0.3
- * @see javax.resource.spi.work.Work
- * @see Runnable
- */
-public class DelegatingWork implements Work {
-
- private final Runnable delegate;
-
-
- /**
- * Create a new DelegatingWork.
- * @param delegate the Runnable implementation to delegate to
- */
- public DelegatingWork(Runnable delegate) {
- Assert.notNull(delegate, "Delegate must not be null");
- this.delegate = delegate;
- }
-
- /**
- * Return the wrapped Runnable implementation.
- */
- public final Runnable getDelegate() {
- return this.delegate;
- }
-
-
- /**
- * Delegates execution to the underlying Runnable.
- */
- @Override
- public void run() {
- this.delegate.run();
- }
-
- /**
- * This implementation is empty, since we expect the Runnable
- * to terminate based on some specific shutdown signal.
- */
- @Override
- public void release() {
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/work/SimpleTaskWorkManager.java b/spring-tx/src/main/java/org/springframework/jca/work/SimpleTaskWorkManager.java
deleted file mode 100644
index 90b8214df34..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/work/SimpleTaskWorkManager.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.work;
-
-import javax.resource.spi.work.ExecutionContext;
-import javax.resource.spi.work.Work;
-import javax.resource.spi.work.WorkAdapter;
-import javax.resource.spi.work.WorkCompletedException;
-import javax.resource.spi.work.WorkEvent;
-import javax.resource.spi.work.WorkException;
-import javax.resource.spi.work.WorkListener;
-import javax.resource.spi.work.WorkManager;
-import javax.resource.spi.work.WorkRejectedException;
-
-import org.springframework.core.task.AsyncTaskExecutor;
-import org.springframework.core.task.SimpleAsyncTaskExecutor;
-import org.springframework.core.task.SyncTaskExecutor;
-import org.springframework.core.task.TaskExecutor;
-import org.springframework.core.task.TaskRejectedException;
-import org.springframework.core.task.TaskTimeoutException;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-
-/**
- * Simple JCA 1.7 {@link javax.resource.spi.work.WorkManager} implementation that
- * delegates to a Spring {@link org.springframework.core.task.TaskExecutor}.
- * Provides simple task execution including start timeouts, but without support
- * for a JCA ExecutionContext (i.e. without support for imported transactions).
- *
- *
Uses a {@link org.springframework.core.task.SyncTaskExecutor} for {@link #doWork}
- * calls and a {@link org.springframework.core.task.SimpleAsyncTaskExecutor}
- * for {@link #startWork} and {@link #scheduleWork} calls, by default.
- * These default task executors can be overridden through configuration.
- *
- *
NOTE: This WorkManager does not provide thread pooling by default!
- * Specify a {@link org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor}
- * (or any other thread-pooling TaskExecutor) as "asyncTaskExecutor" in order to
- * achieve actual thread pooling.
- *
- *
This WorkManager automatically detects a specified
- * {@link org.springframework.core.task.AsyncTaskExecutor} implementation
- * and uses its extended timeout functionality where appropriate.
- * JCA WorkListeners are fully supported in any case.
- *
- * @author Juergen Hoeller
- * @since 2.0.3
- * @see #setSyncTaskExecutor
- * @see #setAsyncTaskExecutor
- */
-public class SimpleTaskWorkManager implements WorkManager {
-
- @Nullable
- private TaskExecutor syncTaskExecutor = new SyncTaskExecutor();
-
- @Nullable
- private AsyncTaskExecutor asyncTaskExecutor = new SimpleAsyncTaskExecutor();
-
-
- /**
- * Specify the TaskExecutor to use for synchronous work execution
- * (i.e. {@link #doWork} calls).
- *
Default is a {@link org.springframework.core.task.SyncTaskExecutor}.
- */
- public void setSyncTaskExecutor(TaskExecutor syncTaskExecutor) {
- this.syncTaskExecutor = syncTaskExecutor;
- }
-
- /**
- * Specify the TaskExecutor to use for asynchronous work execution
- * (i.e. {@link #startWork} and {@link #scheduleWork} calls).
- *
This will typically (but not necessarily) be an
- * {@link org.springframework.core.task.AsyncTaskExecutor} implementation.
- * Default is a {@link org.springframework.core.task.SimpleAsyncTaskExecutor}.
- */
- public void setAsyncTaskExecutor(AsyncTaskExecutor asyncTaskExecutor) {
- this.asyncTaskExecutor = asyncTaskExecutor;
- }
-
-
- @Override
- public void doWork(Work work) throws WorkException {
- doWork(work, WorkManager.INDEFINITE, null, null);
- }
-
- @Override
- public void doWork(Work work, long startTimeout, @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener)
- throws WorkException {
-
- Assert.state(this.syncTaskExecutor != null, "No 'syncTaskExecutor' set");
- executeWork(this.syncTaskExecutor, work, startTimeout, false, executionContext, workListener);
- }
-
- @Override
- public long startWork(Work work) throws WorkException {
- return startWork(work, WorkManager.INDEFINITE, null, null);
- }
-
- @Override
- public long startWork(Work work, long startTimeout, @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener)
- throws WorkException {
-
- Assert.state(this.asyncTaskExecutor != null, "No 'asyncTaskExecutor' set");
- return executeWork(this.asyncTaskExecutor, work, startTimeout, true, executionContext, workListener);
- }
-
- @Override
- public void scheduleWork(Work work) throws WorkException {
- scheduleWork(work, WorkManager.INDEFINITE, null, null);
- }
-
- @Override
- public void scheduleWork(Work work, long startTimeout, @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener)
- throws WorkException {
-
- Assert.state(this.asyncTaskExecutor != null, "No 'asyncTaskExecutor' set");
- executeWork(this.asyncTaskExecutor, work, startTimeout, false, executionContext, workListener);
- }
-
-
- /**
- * Execute the given Work on the specified TaskExecutor.
- * @param taskExecutor the TaskExecutor to use
- * @param work the Work to execute
- * @param startTimeout the time duration within which the Work is supposed to start
- * @param blockUntilStarted whether to block until the Work has started
- * @param executionContext the JCA ExecutionContext for the given Work
- * @param workListener the WorkListener to clal for the given Work
- * @return the time elapsed from Work acceptance until start of execution
- * (or -1 if not applicable or not known)
- * @throws WorkException if the TaskExecutor did not accept the Work
- */
- protected long executeWork(TaskExecutor taskExecutor, Work work, long startTimeout, boolean blockUntilStarted,
- @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener) throws WorkException {
-
- if (executionContext != null && executionContext.getXid() != null) {
- throw new WorkException("SimpleTaskWorkManager does not supported imported XIDs: " + executionContext.getXid());
- }
- WorkListener workListenerToUse = workListener;
- if (workListenerToUse == null) {
- workListenerToUse = new WorkAdapter();
- }
-
- boolean isAsync = (taskExecutor instanceof AsyncTaskExecutor);
- DelegatingWorkAdapter workHandle = new DelegatingWorkAdapter(work, workListenerToUse, !isAsync);
- try {
- if (isAsync) {
- ((AsyncTaskExecutor) taskExecutor).execute(workHandle, startTimeout);
- }
- else {
- taskExecutor.execute(workHandle);
- }
- }
- catch (TaskTimeoutException ex) {
- WorkException wex = new WorkRejectedException("TaskExecutor rejected Work because of timeout: " + work, ex);
- wex.setErrorCode(WorkException.START_TIMED_OUT);
- workListenerToUse.workRejected(new WorkEvent(this, WorkEvent.WORK_REJECTED, work, wex));
- throw wex;
- }
- catch (TaskRejectedException ex) {
- WorkException wex = new WorkRejectedException("TaskExecutor rejected Work: " + work, ex);
- wex.setErrorCode(WorkException.INTERNAL);
- workListenerToUse.workRejected(new WorkEvent(this, WorkEvent.WORK_REJECTED, work, wex));
- throw wex;
- }
- catch (Throwable ex) {
- WorkException wex = new WorkException("TaskExecutor failed to execute Work: " + work, ex);
- wex.setErrorCode(WorkException.INTERNAL);
- throw wex;
- }
- if (isAsync) {
- workListenerToUse.workAccepted(new WorkEvent(this, WorkEvent.WORK_ACCEPTED, work, null));
- }
-
- if (blockUntilStarted) {
- long acceptanceTime = System.currentTimeMillis();
- synchronized (workHandle.monitor) {
- try {
- while (!workHandle.started) {
- workHandle.monitor.wait();
- }
- }
- catch (InterruptedException ex) {
- Thread.currentThread().interrupt();
- }
- }
- return (System.currentTimeMillis() - acceptanceTime);
- }
- else {
- return WorkManager.UNKNOWN;
- }
- }
-
-
- /**
- * Work adapter that supports start timeouts and WorkListener callbacks
- * for a given Work that it delegates to.
- */
- private static class DelegatingWorkAdapter implements Work {
-
- private final Work work;
-
- private final WorkListener workListener;
-
- private final boolean acceptOnExecution;
-
- public final Object monitor = new Object();
-
- public boolean started = false;
-
- public DelegatingWorkAdapter(Work work, WorkListener workListener, boolean acceptOnExecution) {
- this.work = work;
- this.workListener = workListener;
- this.acceptOnExecution = acceptOnExecution;
- }
-
- @Override
- public void run() {
- if (this.acceptOnExecution) {
- this.workListener.workAccepted(new WorkEvent(this, WorkEvent.WORK_ACCEPTED, this.work, null));
- }
- synchronized (this.monitor) {
- this.started = true;
- this.monitor.notify();
- }
- this.workListener.workStarted(new WorkEvent(this, WorkEvent.WORK_STARTED, this.work, null));
- try {
- this.work.run();
- }
- catch (RuntimeException | Error ex) {
- this.workListener.workCompleted(
- new WorkEvent(this, WorkEvent.WORK_COMPLETED, this.work, new WorkCompletedException(ex)));
- throw ex;
- }
- this.workListener.workCompleted(new WorkEvent(this, WorkEvent.WORK_COMPLETED, this.work, null));
- }
-
- @Override
- public void release() {
- this.work.release();
- }
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/work/WorkManagerTaskExecutor.java b/spring-tx/src/main/java/org/springframework/jca/work/WorkManagerTaskExecutor.java
deleted file mode 100644
index e4fe06bfeb3..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/work/WorkManagerTaskExecutor.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.work;
-
-import java.util.concurrent.Callable;
-import java.util.concurrent.Future;
-import java.util.concurrent.FutureTask;
-
-import javax.naming.NamingException;
-import javax.resource.spi.BootstrapContext;
-import javax.resource.spi.work.ExecutionContext;
-import javax.resource.spi.work.Work;
-import javax.resource.spi.work.WorkException;
-import javax.resource.spi.work.WorkListener;
-import javax.resource.spi.work.WorkManager;
-import javax.resource.spi.work.WorkRejectedException;
-
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.core.task.AsyncListenableTaskExecutor;
-import org.springframework.core.task.TaskDecorator;
-import org.springframework.core.task.TaskRejectedException;
-import org.springframework.core.task.TaskTimeoutException;
-import org.springframework.jca.context.BootstrapContextAware;
-import org.springframework.jndi.JndiLocatorSupport;
-import org.springframework.lang.Nullable;
-import org.springframework.scheduling.SchedulingException;
-import org.springframework.scheduling.SchedulingTaskExecutor;
-import org.springframework.util.Assert;
-import org.springframework.util.concurrent.ListenableFuture;
-import org.springframework.util.concurrent.ListenableFutureTask;
-
-/**
- * {@link org.springframework.core.task.TaskExecutor} implementation
- * that delegates to a JCA 1.7 WorkManager, implementing the
- * {@link javax.resource.spi.work.WorkManager} interface.
- *
- *
This is mainly intended for use within a JCA ResourceAdapter implementation,
- * but may also be used in a standalone environment, delegating to a locally
- * embedded WorkManager implementation (such as Geronimo's).
- *
- *
Also implements the JCA 1.7 WorkManager interface itself, delegating all
- * calls to the target WorkManager. Hence, a caller can choose whether it wants
- * to talk to this executor through the Spring TaskExecutor interface or the
- * WorkManager interface.
- *
- *
This adapter is also capable of obtaining a JCA WorkManager from JNDI.
- * This is for example appropriate on the Geronimo application server, where
- * WorkManager GBeans (e.g. Geronimo's default "DefaultWorkManager" GBean)
- * can be linked into the Java EE environment through "gbean-ref" entries
- * in the {@code geronimo-web.xml} deployment descriptor.
- *
- * @author Juergen Hoeller
- * @since 2.0.3
- * @see #setWorkManager
- * @see javax.resource.spi.work.WorkManager#scheduleWork
- */
-public class WorkManagerTaskExecutor extends JndiLocatorSupport
- implements AsyncListenableTaskExecutor, SchedulingTaskExecutor, WorkManager, BootstrapContextAware, InitializingBean {
-
- @Nullable
- private WorkManager workManager;
-
- @Nullable
- private String workManagerName;
-
- private boolean blockUntilStarted = false;
-
- private boolean blockUntilCompleted = false;
-
- @Nullable
- private WorkListener workListener;
-
- @Nullable
- private TaskDecorator taskDecorator;
-
-
- /**
- * Create a new WorkManagerTaskExecutor, expecting bean-style configuration.
- * @see #setWorkManager
- */
- public WorkManagerTaskExecutor() {
- }
-
- /**
- * Create a new WorkManagerTaskExecutor for the given WorkManager.
- * @param workManager the JCA WorkManager to delegate to
- */
- public WorkManagerTaskExecutor(WorkManager workManager) {
- setWorkManager(workManager);
- }
-
-
- /**
- * Specify the JCA WorkManager instance to delegate to.
- */
- public void setWorkManager(WorkManager workManager) {
- Assert.notNull(workManager, "WorkManager must not be null");
- this.workManager = workManager;
- }
-
- /**
- * Set the JNDI name of the JCA WorkManager.
- *
This can either be a fully qualified JNDI name,
- * or the JNDI name relative to the current environment
- * naming context if "resourceRef" is set to "true".
- * @see #setWorkManager
- * @see #setResourceRef
- */
- public void setWorkManagerName(String workManagerName) {
- this.workManagerName = workManagerName;
- }
-
- /**
- * Specify the JCA BootstrapContext that contains the
- * WorkManager to delegate to.
- */
- @Override
- public void setBootstrapContext(BootstrapContext bootstrapContext) {
- Assert.notNull(bootstrapContext, "BootstrapContext must not be null");
- this.workManager = bootstrapContext.getWorkManager();
- }
-
- /**
- * Set whether to let {@link #execute} block until the work
- * has been actually started.
- *
Uses the JCA {@code startWork} operation underneath,
- * instead of the default {@code scheduleWork}.
- * @see javax.resource.spi.work.WorkManager#startWork
- * @see javax.resource.spi.work.WorkManager#scheduleWork
- */
- public void setBlockUntilStarted(boolean blockUntilStarted) {
- this.blockUntilStarted = blockUntilStarted;
- }
-
- /**
- * Set whether to let {@link #execute} block until the work
- * has been completed.
- *
Uses the JCA {@code doWork} operation underneath,
- * instead of the default {@code scheduleWork}.
- * @see javax.resource.spi.work.WorkManager#doWork
- * @see javax.resource.spi.work.WorkManager#scheduleWork
- */
- public void setBlockUntilCompleted(boolean blockUntilCompleted) {
- this.blockUntilCompleted = blockUntilCompleted;
- }
-
- /**
- * Specify a JCA WorkListener to apply, if any.
- *
This shared WorkListener instance will be passed on to the
- * WorkManager by all {@link #execute} calls on this TaskExecutor.
- */
- public void setWorkListener(@Nullable WorkListener workListener) {
- this.workListener = workListener;
- }
-
- /**
- * Specify a custom {@link TaskDecorator} to be applied to any {@link Runnable}
- * about to be executed.
- *
Note that such a decorator is not necessarily being applied to the
- * user-supplied {@code Runnable}/{@code Callable} but rather to the actual
- * execution callback (which may be a wrapper around the user-supplied task).
- *
The primary use case is to set some execution context around the task's
- * invocation, or to provide some monitoring/statistics for task execution.
- *
NOTE: Exception handling in {@code TaskDecorator} implementations
- * is limited to plain {@code Runnable} execution via {@code execute} calls.
- * In case of {@code #submit} calls, the exposed {@code Runnable} will be a
- * {@code FutureTask} which does not propagate any exceptions; you might
- * have to cast it and call {@code Future#get} to evaluate exceptions.
- * @since 4.3
- */
- public void setTaskDecorator(TaskDecorator taskDecorator) {
- this.taskDecorator = taskDecorator;
- }
-
- @Override
- public void afterPropertiesSet() throws NamingException {
- if (this.workManager == null) {
- if (this.workManagerName != null) {
- this.workManager = lookup(this.workManagerName, WorkManager.class);
- }
- else {
- this.workManager = getDefaultWorkManager();
- }
- }
- }
-
- /**
- * Obtain a default WorkManager to delegate to.
- * Called if no explicit WorkManager or WorkManager JNDI name has been specified.
- *
The default implementation returns a {@link SimpleTaskWorkManager}.
- * Can be overridden in subclasses.
- */
- protected WorkManager getDefaultWorkManager() {
- return new SimpleTaskWorkManager();
- }
-
- private WorkManager obtainWorkManager() {
- Assert.state(this.workManager != null, "No WorkManager specified");
- return this.workManager;
- }
-
-
- //-------------------------------------------------------------------------
- // Implementation of the Spring SchedulingTaskExecutor interface
- //-------------------------------------------------------------------------
-
- @Override
- public void execute(Runnable task) {
- execute(task, TIMEOUT_INDEFINITE);
- }
-
- @Override
- public void execute(Runnable task, long startTimeout) {
- Work work = new DelegatingWork(this.taskDecorator != null ? this.taskDecorator.decorate(task) : task);
- try {
- if (this.blockUntilCompleted) {
- if (startTimeout != TIMEOUT_INDEFINITE || this.workListener != null) {
- obtainWorkManager().doWork(work, startTimeout, null, this.workListener);
- }
- else {
- obtainWorkManager().doWork(work);
- }
- }
- else if (this.blockUntilStarted) {
- if (startTimeout != TIMEOUT_INDEFINITE || this.workListener != null) {
- obtainWorkManager().startWork(work, startTimeout, null, this.workListener);
- }
- else {
- obtainWorkManager().startWork(work);
- }
- }
- else {
- if (startTimeout != TIMEOUT_INDEFINITE || this.workListener != null) {
- obtainWorkManager().scheduleWork(work, startTimeout, null, this.workListener);
- }
- else {
- obtainWorkManager().scheduleWork(work);
- }
- }
- }
- catch (WorkRejectedException ex) {
- if (WorkException.START_TIMED_OUT.equals(ex.getErrorCode())) {
- throw new TaskTimeoutException("JCA WorkManager rejected task because of timeout: " + task, ex);
- }
- else {
- throw new TaskRejectedException("JCA WorkManager rejected task: " + task, ex);
- }
- }
- catch (WorkException ex) {
- throw new SchedulingException("Could not schedule task on JCA WorkManager", ex);
- }
- }
-
- @Override
- public Future> submit(Runnable task) {
- FutureTask future = new FutureTask<>(task, null);
- execute(future, TIMEOUT_INDEFINITE);
- return future;
- }
-
- @Override
- public Future submit(Callable task) {
- FutureTask future = new FutureTask<>(task);
- execute(future, TIMEOUT_INDEFINITE);
- return future;
- }
-
- @Override
- public ListenableFuture> submitListenable(Runnable task) {
- ListenableFutureTask future = new ListenableFutureTask<>(task, null);
- execute(future, TIMEOUT_INDEFINITE);
- return future;
- }
-
- @Override
- public ListenableFuture submitListenable(Callable task) {
- ListenableFutureTask future = new ListenableFutureTask<>(task);
- execute(future, TIMEOUT_INDEFINITE);
- return future;
- }
-
-
- //-------------------------------------------------------------------------
- // Implementation of the JCA WorkManager interface
- //-------------------------------------------------------------------------
-
- @Override
- public void doWork(Work work) throws WorkException {
- obtainWorkManager().doWork(work);
- }
-
- @Override
- public void doWork(Work work, long delay, ExecutionContext executionContext, WorkListener workListener)
- throws WorkException {
-
- obtainWorkManager().doWork(work, delay, executionContext, workListener);
- }
-
- @Override
- public long startWork(Work work) throws WorkException {
- return obtainWorkManager().startWork(work);
- }
-
- @Override
- public long startWork(Work work, long delay, ExecutionContext executionContext, WorkListener workListener)
- throws WorkException {
-
- return obtainWorkManager().startWork(work, delay, executionContext, workListener);
- }
-
- @Override
- public void scheduleWork(Work work) throws WorkException {
- obtainWorkManager().scheduleWork(work);
- }
-
- @Override
- public void scheduleWork(Work work, long delay, ExecutionContext executionContext, WorkListener workListener)
- throws WorkException {
-
- obtainWorkManager().scheduleWork(work, delay, executionContext, workListener);
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/jca/work/package-info.java b/spring-tx/src/main/java/org/springframework/jca/work/package-info.java
deleted file mode 100644
index a797e721507..00000000000
--- a/spring-tx/src/main/java/org/springframework/jca/work/package-info.java
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Convenience classes for scheduling based on the JCA WorkManager facility,
- * as supported within ResourceAdapters.
- */
-@NonNullApi
-@NonNullFields
-package org.springframework.jca.work;
-
-import org.springframework.lang.NonNullApi;
-import org.springframework.lang.NonNullFields;
diff --git a/spring-tx/src/main/java/org/springframework/transaction/TransactionDefinition.java b/spring-tx/src/main/java/org/springframework/transaction/TransactionDefinition.java
index 1e2a44e8fe1..1aa8901f3f7 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/TransactionDefinition.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/TransactionDefinition.java
@@ -86,8 +86,8 @@ public interface TransactionDefinition {
* NOTE: Actual transaction suspension will not work out-of-the-box
* on all transaction managers. This in particular applies to
* {@link org.springframework.transaction.jta.JtaTransactionManager},
- * which requires the {@code javax.transaction.TransactionManager} to be
- * made available it to it (which is server-specific in standard Java EE).
+ * which requires the {@code jakarta.transaction.TransactionManager} to be
+ * made available it to it (which is server-specific in standard Jakarta EE).
*
A {@code PROPAGATION_REQUIRES_NEW} scope always defines its own
* transaction synchronizations. Existing synchronizations will be suspended
* and resumed appropriately.
@@ -101,8 +101,8 @@ public interface TransactionDefinition {
*
NOTE: Actual transaction suspension will not work out-of-the-box
* on all transaction managers. This in particular applies to
* {@link org.springframework.transaction.jta.JtaTransactionManager},
- * which requires the {@code javax.transaction.TransactionManager} to be
- * made available it to it (which is server-specific in standard Java EE).
+ * which requires the {@code jakarta.transaction.TransactionManager} to be
+ * made available it to it (which is server-specific in standard Jakarta EE).
*
Note that transaction synchronization is not available within a
* {@code PROPAGATION_NOT_SUPPORTED} scope. Existing synchronizations
* will be suspended and resumed appropriately.
diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSource.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSource.java
index 4f8e46f6e96..13f16a20e93 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSource.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSource.java
@@ -37,8 +37,8 @@ import org.springframework.util.ClassUtils;
*
*
This class reads Spring's JDK 1.5+ {@link Transactional} annotation and
* exposes corresponding transaction attributes to Spring's transaction infrastructure.
- * Also supports JTA 1.2's {@link javax.transaction.Transactional} and EJB3's
- * {@link javax.ejb.TransactionAttribute} annotation (if present).
+ * Also supports JTA 1.2's {@link jakarta.transaction.Transactional} and EJB3's
+ * {@link jakarta.ejb.TransactionAttribute} annotation (if present).
* This class may also serve as base class for a custom TransactionAttributeSource,
* or get customized through {@link TransactionAnnotationParser} strategies.
*
@@ -62,8 +62,8 @@ public class AnnotationTransactionAttributeSource extends AbstractFallbackTransa
static {
ClassLoader classLoader = AnnotationTransactionAttributeSource.class.getClassLoader();
- jta12Present = ClassUtils.isPresent("javax.transaction.Transactional", classLoader);
- ejb3Present = ClassUtils.isPresent("javax.ejb.TransactionAttribute", classLoader);
+ jta12Present = ClassUtils.isPresent("jakarta.transaction.Transactional", classLoader);
+ ejb3Present = ClassUtils.isPresent("jakarta.ejb.TransactionAttribute", classLoader);
}
private final boolean publicMethodsOnly;
@@ -74,7 +74,7 @@ public class AnnotationTransactionAttributeSource extends AbstractFallbackTransa
/**
* Create a default AnnotationTransactionAttributeSource, supporting
* public methods that carry the {@code Transactional} annotation
- * or the EJB3 {@link javax.ejb.TransactionAttribute} annotation.
+ * or the EJB3 {@link jakarta.ejb.TransactionAttribute} annotation.
*/
public AnnotationTransactionAttributeSource() {
this(true);
@@ -83,7 +83,7 @@ public class AnnotationTransactionAttributeSource extends AbstractFallbackTransa
/**
* Create a custom AnnotationTransactionAttributeSource, supporting
* public methods that carry the {@code Transactional} annotation
- * or the EJB3 {@link javax.ejb.TransactionAttribute} annotation.
+ * or the EJB3 {@link jakarta.ejb.TransactionAttribute} annotation.
* @param publicMethodsOnly whether to support public methods that carry
* the {@code Transactional} annotation only (typically for use
* with proxy-based AOP), or protected/private methods as well
diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/Ejb3TransactionAnnotationParser.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/Ejb3TransactionAnnotationParser.java
index 8fd2db23d51..ae8e5d23742 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/annotation/Ejb3TransactionAnnotationParser.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/Ejb3TransactionAnnotationParser.java
@@ -19,8 +19,8 @@ package org.springframework.transaction.annotation;
import java.io.Serializable;
import java.lang.reflect.AnnotatedElement;
-import javax.ejb.ApplicationException;
-import javax.ejb.TransactionAttributeType;
+import jakarta.ejb.ApplicationException;
+import jakarta.ejb.TransactionAttributeType;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.lang.Nullable;
@@ -28,7 +28,7 @@ import org.springframework.transaction.interceptor.DefaultTransactionAttribute;
import org.springframework.transaction.interceptor.TransactionAttribute;
/**
- * Strategy implementation for parsing EJB3's {@link javax.ejb.TransactionAttribute}
+ * Strategy implementation for parsing EJB3's {@link jakarta.ejb.TransactionAttribute}
* annotation.
*
* @author Juergen Hoeller
@@ -39,13 +39,13 @@ public class Ejb3TransactionAnnotationParser implements TransactionAnnotationPar
@Override
public boolean isCandidateClass(Class> targetClass) {
- return AnnotationUtils.isCandidateClass(targetClass, javax.ejb.TransactionAttribute.class);
+ return AnnotationUtils.isCandidateClass(targetClass, jakarta.ejb.TransactionAttribute.class);
}
@Override
@Nullable
public TransactionAttribute parseTransactionAnnotation(AnnotatedElement element) {
- javax.ejb.TransactionAttribute ann = element.getAnnotation(javax.ejb.TransactionAttribute.class);
+ jakarta.ejb.TransactionAttribute ann = element.getAnnotation(jakarta.ejb.TransactionAttribute.class);
if (ann != null) {
return parseTransactionAnnotation(ann);
}
@@ -54,7 +54,7 @@ public class Ejb3TransactionAnnotationParser implements TransactionAnnotationPar
}
}
- public TransactionAttribute parseTransactionAnnotation(javax.ejb.TransactionAttribute ann) {
+ public TransactionAttribute parseTransactionAnnotation(jakarta.ejb.TransactionAttribute ann) {
return new Ejb3TransactionAttribute(ann.value());
}
diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/JtaTransactionAnnotationParser.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/JtaTransactionAnnotationParser.java
index ccc018f6be6..9e3b956848d 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/annotation/JtaTransactionAnnotationParser.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/JtaTransactionAnnotationParser.java
@@ -31,7 +31,7 @@ import org.springframework.transaction.interceptor.RuleBasedTransactionAttribute
import org.springframework.transaction.interceptor.TransactionAttribute;
/**
- * Strategy implementation for parsing JTA 1.2's {@link javax.transaction.Transactional} annotation.
+ * Strategy implementation for parsing JTA 1.2's {@link jakarta.transaction.Transactional} annotation.
*
* @author Juergen Hoeller
* @since 4.0
@@ -41,14 +41,14 @@ public class JtaTransactionAnnotationParser implements TransactionAnnotationPars
@Override
public boolean isCandidateClass(Class> targetClass) {
- return AnnotationUtils.isCandidateClass(targetClass, javax.transaction.Transactional.class);
+ return AnnotationUtils.isCandidateClass(targetClass, jakarta.transaction.Transactional.class);
}
@Override
@Nullable
public TransactionAttribute parseTransactionAnnotation(AnnotatedElement element) {
AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(
- element, javax.transaction.Transactional.class);
+ element, jakarta.transaction.Transactional.class);
if (attributes != null) {
return parseTransactionAnnotation(attributes);
}
@@ -57,7 +57,7 @@ public class JtaTransactionAnnotationParser implements TransactionAnnotationPars
}
}
- public TransactionAttribute parseTransactionAnnotation(javax.transaction.Transactional ann) {
+ public TransactionAttribute parseTransactionAnnotation(jakarta.transaction.Transactional ann) {
return parseTransactionAnnotation(AnnotationUtils.getAnnotationAttributes(ann, false, false));
}
diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/Propagation.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/Propagation.java
index 1e235ce8770..18e43cf16e8 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/annotation/Propagation.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/Propagation.java
@@ -61,8 +61,8 @@ public enum Propagation {
*
NOTE: Actual transaction suspension will not work out-of-the-box
* on all transaction managers. This in particular applies to
* {@link org.springframework.transaction.jta.JtaTransactionManager},
- * which requires the {@code javax.transaction.TransactionManager} to be
- * made available to it (which is server-specific in standard Java EE).
+ * which requires the {@code jakarta.transaction.TransactionManager} to be
+ * made available to it (which is server-specific in standard Jakarta EE).
* @see org.springframework.transaction.jta.JtaTransactionManager#setTransactionManager
*/
REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),
@@ -73,8 +73,8 @@ public enum Propagation {
*
NOTE: Actual transaction suspension will not work out-of-the-box
* on all transaction managers. This in particular applies to
* {@link org.springframework.transaction.jta.JtaTransactionManager},
- * which requires the {@code javax.transaction.TransactionManager} to be
- * made available to it (which is server-specific in standard Java EE).
+ * which requires the {@code jakarta.transaction.TransactionManager} to be
+ * made available to it (which is server-specific in standard Jakarta EE).
* @see org.springframework.transaction.jta.JtaTransactionManager#setTransactionManager
*/
NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),
diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionAnnotationParser.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionAnnotationParser.java
index e486fbbdaaf..0e9ee83a568 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionAnnotationParser.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionAnnotationParser.java
@@ -25,8 +25,8 @@ import org.springframework.transaction.interceptor.TransactionAttribute;
* Strategy interface for parsing known transaction annotation types.
* {@link AnnotationTransactionAttributeSource} delegates to such
* parsers for supporting specific annotation types such as Spring's own
- * {@link Transactional}, JTA 1.2's {@link javax.transaction.Transactional}
- * or EJB3's {@link javax.ejb.TransactionAttribute}.
+ * {@link Transactional}, JTA 1.2's {@link jakarta.transaction.Transactional}
+ * or EJB3's {@link jakarta.ejb.TransactionAttribute}.
*
* @author Juergen Hoeller
* @since 2.5
diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionManagementConfigurationSelector.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionManagementConfigurationSelector.java
index 5e16f915f81..22551ceed15 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionManagementConfigurationSelector.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionManagementConfigurationSelector.java
@@ -57,7 +57,7 @@ public class TransactionManagementConfigurationSelector extends AdviceModeImport
}
private String determineTransactionAspectClass() {
- return (ClassUtils.isPresent("javax.transaction.Transactional", getClass().getClassLoader()) ?
+ return (ClassUtils.isPresent("jakarta.transaction.Transactional", getClass().getClassLoader()) ?
TransactionManagementConfigUtils.JTA_TRANSACTION_ASPECT_CONFIGURATION_CLASS_NAME :
TransactionManagementConfigUtils.TRANSACTION_ASPECT_CONFIGURATION_CLASS_NAME);
}
diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/Transactional.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/Transactional.java
index 42537572223..d399e8b04eb 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/annotation/Transactional.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/Transactional.java
@@ -188,7 +188,7 @@ public @interface Transactional {
* a transaction rollback.
*
This can be a substring of a fully qualified class name, with no wildcard
* support at present. For example, a value of {@code "ServletException"} would
- * match {@code javax.servlet.ServletException} and its subclasses.
+ * match {@code jakarta.servlet.ServletException} and its subclasses.
*
NB: Consider carefully how specific the pattern is and whether
* to include package information (which isn't mandatory). For example,
* {@code "Exception"} will match nearly anything and will probably hide other
diff --git a/spring-tx/src/main/java/org/springframework/transaction/config/AnnotationDrivenBeanDefinitionParser.java b/spring-tx/src/main/java/org/springframework/transaction/config/AnnotationDrivenBeanDefinitionParser.java
index 8d6ba603deb..d7dca39ef5d 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/config/AnnotationDrivenBeanDefinitionParser.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/config/AnnotationDrivenBeanDefinitionParser.java
@@ -65,7 +65,7 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
if ("aspectj".equals(mode)) {
// mode="aspectj"
registerTransactionAspect(element, parserContext);
- if (ClassUtils.isPresent("javax.transaction.Transactional", getClass().getClassLoader())) {
+ if (ClassUtils.isPresent("jakarta.transaction.Transactional", getClass().getClassLoader())) {
registerJtaTransactionAspect(element, parserContext);
}
}
diff --git a/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerBeanDefinitionParser.java b/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerBeanDefinitionParser.java
index cae08558e4a..055b127e662 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerBeanDefinitionParser.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerBeanDefinitionParser.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2014 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,23 +21,20 @@ import org.w3c.dom.Element;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
+import org.springframework.transaction.jta.JtaTransactionManager;
/**
- * Parser for the <tx:jta-transaction-manager/> XML configuration element,
- * autodetecting WebLogic and WebSphere servers and exposing the corresponding
- * {@link org.springframework.transaction.jta.JtaTransactionManager} subclass.
+ * Parser for the <tx:jta-transaction-manager/> XML configuration element.
*
* @author Juergen Hoeller
* @author Christian Dupuis
* @since 2.5
- * @see org.springframework.transaction.jta.WebLogicJtaTransactionManager
- * @see org.springframework.transaction.jta.WebSphereUowTransactionManager
*/
public class JtaTransactionManagerBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
@Override
- protected String getBeanClassName(Element element) {
- return JtaTransactionManagerFactoryBean.resolveJtaTransactionManagerClassName();
+ protected Class> getBeanClass(Element element) {
+ return JtaTransactionManager.class;
}
@Override
diff --git a/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerFactoryBean.java b/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerFactoryBean.java
index 09fe5062f3f..a1cc1b87c6e 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerFactoryBean.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/config/JtaTransactionManagerFactoryBean.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,62 +16,23 @@
package org.springframework.transaction.config;
-import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.lang.Nullable;
import org.springframework.transaction.TransactionSystemException;
import org.springframework.transaction.jta.JtaTransactionManager;
-import org.springframework.util.ClassUtils;
/**
- * A {@link FactoryBean} equivalent to the <tx:jta-transaction-manager/> XML element,
- * autodetecting WebLogic and WebSphere servers and exposing the corresponding
- * {@link org.springframework.transaction.jta.JtaTransactionManager} subclass.
+ * A {@link FactoryBean} equivalent to the <tx:jta-transaction-manager/> XML element.
*
* @author Juergen Hoeller
* @since 4.1.1
- * @see org.springframework.transaction.jta.WebLogicJtaTransactionManager
- * @see org.springframework.transaction.jta.WebSphereUowTransactionManager
+ * @deprecated as of 6.0, in favor of a straight {@link JtaTransactionManager} definition
*/
+@Deprecated
public class JtaTransactionManagerFactoryBean implements FactoryBean, InitializingBean {
- private static final String WEBLOGIC_JTA_TRANSACTION_MANAGER_CLASS_NAME =
- "org.springframework.transaction.jta.WebLogicJtaTransactionManager";
-
- private static final String WEBSPHERE_TRANSACTION_MANAGER_CLASS_NAME =
- "org.springframework.transaction.jta.WebSphereUowTransactionManager";
-
- private static final String JTA_TRANSACTION_MANAGER_CLASS_NAME =
- "org.springframework.transaction.jta.JtaTransactionManager";
-
-
- private static final boolean weblogicPresent;
-
- private static final boolean webspherePresent;
-
- static {
- ClassLoader classLoader = JtaTransactionManagerFactoryBean.class.getClassLoader();
- weblogicPresent = ClassUtils.isPresent("weblogic.transaction.UserTransaction", classLoader);
- webspherePresent = ClassUtils.isPresent("com.ibm.wsspi.uow.UOWManager", classLoader);
- }
-
-
- private final JtaTransactionManager transactionManager;
-
-
- @SuppressWarnings("unchecked")
- public JtaTransactionManagerFactoryBean() {
- String className = resolveJtaTransactionManagerClassName();
- try {
- Class extends JtaTransactionManager> clazz = (Class extends JtaTransactionManager>)
- ClassUtils.forName(className, JtaTransactionManagerFactoryBean.class.getClassLoader());
- this.transactionManager = BeanUtils.instantiateClass(clazz);
- }
- catch (ClassNotFoundException ex) {
- throw new IllegalStateException("Failed to load JtaTransactionManager class: " + className, ex);
- }
- }
+ private final JtaTransactionManager transactionManager = new JtaTransactionManager();
@Override
@@ -95,17 +56,4 @@ public class JtaTransactionManagerFactoryBean implements FactoryBeanThis can be a substring, with no wildcard support at present. A value
* of "ServletException" would match
- * {@code javax.servlet.ServletException} and subclasses, for example.
+ * {@code jakarta.servlet.ServletException} and subclasses, for example.
* NB: Consider carefully how specific the pattern is, and
* whether to include package information (which is not mandatory). For
* example, "Exception" will match nearly anything, and will probably hide
diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/JtaAfterCompletionSynchronization.java b/spring-tx/src/main/java/org/springframework/transaction/jta/JtaAfterCompletionSynchronization.java
index 807a19fcf71..15eb93ce505 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/jta/JtaAfterCompletionSynchronization.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/jta/JtaAfterCompletionSynchronization.java
@@ -18,8 +18,8 @@ package org.springframework.transaction.jta;
import java.util.List;
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
+import jakarta.transaction.Status;
+import jakarta.transaction.Synchronization;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationUtils;
diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java b/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java
index c993fbf31fe..6488332e75a 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2018 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -23,17 +23,18 @@ import java.util.List;
import java.util.Properties;
import javax.naming.NamingException;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.Status;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-import javax.transaction.TransactionSynchronizationRegistry;
-import javax.transaction.UserTransaction;
+
+import jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
+import jakarta.transaction.InvalidTransactionException;
+import jakarta.transaction.NotSupportedException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.Status;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.TransactionSynchronizationRegistry;
+import jakarta.transaction.UserTransaction;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.jndi.JndiTemplate;
@@ -56,7 +57,7 @@ import org.springframework.util.StringUtils;
/**
* {@link org.springframework.transaction.PlatformTransactionManager} implementation
* for JTA, delegating to a backend JTA provider. This is typically used to delegate
- * to a Java EE server's transaction coordinator, but may also be configured with a
+ * to a Jakarta EE server's transaction coordinator, but may also be configured with a
* local JTA provider which is embedded within the application.
*
*
This transaction manager is appropriate for handling distributed transactions,
@@ -67,8 +68,8 @@ import org.springframework.util.StringUtils;
* HibernateTransactionManager is appropriate, for example.
*
*
For typical JTA transactions (REQUIRED, SUPPORTS, MANDATORY, NEVER), a plain
- * JtaTransactionManager definition is all you need, portable across all Java EE servers.
- * This corresponds to the functionality of the JTA UserTransaction, for which Java EE
+ * JtaTransactionManager definition is all you need, portable across all Jakarta EE servers.
+ * This corresponds to the functionality of the JTA UserTransaction, for which Jakarta EE
* specifies a standard JNDI name ("java:comp/UserTransaction"). There is no need to
* configure a server-specific TransactionManager lookup for this kind of JTA usage.
*
@@ -77,26 +78,17 @@ import org.springframework.util.StringUtils;
* autodetected by JtaTransactionManager, provided that the "autodetectTransactionManager"
* flag is set to "true" (which it is by default).
*
- *
Note: Support for the JTA TransactionManager interface is not required by Java EE.
- * Almost all Java EE servers expose it, but do so as extension to EE. There might be some
+ *
Note: Support for the JTA TransactionManager interface is not required by Jakarta EE.
+ * Almost all Jakarta EE servers expose it, but do so as extension to EE. There might be some
* issues with compatibility, despite the TransactionManager interface being part of JTA.
- * As a consequence, Spring provides various vendor-specific PlatformTransactionManagers,
- * which are recommended to be used if appropriate: {@link WebLogicJtaTransactionManager}
- * and {@link WebSphereUowTransactionManager}. For all other Java EE servers, the
- * standard JtaTransactionManager is sufficient.
*
*
This pure JtaTransactionManager class supports timeouts but not per-transaction
* isolation levels. Custom subclasses may override the {@link #doJtaBegin} method for
- * specific JTA extensions in order to provide this functionality; Spring includes a
- * corresponding {@link WebLogicJtaTransactionManager} class for WebLogic Server. Such
- * adapters for specific Java EE transaction coordinators may also expose transaction
- * names for monitoring; with standard JTA, transaction names will simply be ignored.
- *
- *
Consider using Spring's {@code tx:jta-transaction-manager} configuration
- * element for automatically picking the appropriate JTA platform transaction manager
- * (automatically detecting WebLogic and WebSphere).
+ * specific JTA extensions in order to provide this functionality. Such adapters for
+ * specific Jakarta EE transaction coordinators may also expose transaction names for
+ * monitoring; with standard JTA, transaction names will simply be ignored.
*
- *
JTA 1.1 adds the TransactionSynchronizationRegistry facility, as public Java EE 5
+ *
JTA 1.1 adds the TransactionSynchronizationRegistry facility, as public Jakarta EE
* API in addition to the standard JTA UserTransaction handle. As of Spring 2.5, this
* JtaTransactionManager autodetects the TransactionSynchronizationRegistry and uses
* it for registering Spring-managed synchronizations when participating in an existing
@@ -108,21 +100,20 @@ import org.springframework.util.StringUtils;
*
* @author Juergen Hoeller
* @since 24.03.2003
- * @see javax.transaction.UserTransaction
- * @see javax.transaction.TransactionManager
- * @see javax.transaction.TransactionSynchronizationRegistry
+ * @see jakarta.transaction.UserTransaction
+ * @see jakarta.transaction.TransactionManager
+ * @see jakarta.transaction.TransactionSynchronizationRegistry
* @see #setUserTransactionName
* @see #setUserTransaction
* @see #setTransactionManagerName
* @see #setTransactionManager
- * @see WebLogicJtaTransactionManager
*/
@SuppressWarnings("serial")
public class JtaTransactionManager extends AbstractPlatformTransactionManager
implements TransactionFactory, InitializingBean, Serializable {
/**
- * Default JNDI location for the JTA UserTransaction. Many Java EE servers
+ * Default JNDI location for the JTA UserTransaction. Many Jakarta EE servers
* also provide support for the JTA TransactionManager interface there.
* @see #setUserTransactionName
* @see #setAutodetectTransactionManager
@@ -141,7 +132,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager
"java:pm/TransactionManager", "java:/TransactionManager"};
/**
- * Standard Java EE 5 JNDI location for the JTA TransactionSynchronizationRegistry.
+ * Standard Jakarta EE JNDI location for the JTA TransactionSynchronizationRegistry.
* Autodetected when available.
*/
public static final String DEFAULT_TRANSACTION_SYNCHRONIZATION_REGISTRY_NAME =
@@ -265,7 +256,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager
/**
* Set the JTA UserTransaction to use as direct reference.
- *
Typically just used for local JTA setups; in a Java EE environment,
+ *
Typically just used for local JTA setups; in a Jakarta EE environment,
* the UserTransaction will always be fetched from JNDI.
* @see #setUserTransactionName
* @see #setAutodetectUserTransaction
@@ -284,7 +275,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager
/**
* Set the JNDI name of the JTA UserTransaction.
- *
Note that the UserTransaction will be autodetected at the Java EE
+ *
Note that the UserTransaction will be autodetected at the Jakarta EE
* default location "java:comp/UserTransaction" if not specified explicitly.
* @see #DEFAULT_USER_TRANSACTION_NAME
* @see #setUserTransaction
@@ -296,7 +287,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager
/**
* Set whether to autodetect the JTA UserTransaction at its default
- * JNDI location "java:comp/UserTransaction", as specified by Java EE.
+ * JNDI location "java:comp/UserTransaction", as specified by Jakarta EE.
* Will proceed without UserTransaction if none found.
*
Default is "true", autodetecting the UserTransaction unless
* it has been specified explicitly. Turn this flag off to allow for
@@ -381,7 +372,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager
*
A TransactionSynchronizationRegistry allows for interposed registration
* of transaction synchronizations, as an alternative to the regular registration
* methods on the JTA TransactionManager API. Also, it is an official part of the
- * Java EE 5 platform, in contrast to the JTA TransactionManager itself.
+ * Jakarta EE platform, in contrast to the JTA TransactionManager itself.
*
Note that the TransactionSynchronizationRegistry will be autodetected in JNDI and
* also from the UserTransaction/TransactionManager object if implemented there as well.
* @see #setTransactionSynchronizationRegistryName
@@ -402,7 +393,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager
/**
* Set the JNDI name of the JTA 1.1 TransactionSynchronizationRegistry.
*
Note that the TransactionSynchronizationRegistry will be autodetected
- * at the Java EE 5 default location "java:comp/TransactionSynchronizationRegistry"
+ * at the Jakarta EE default location "java:comp/TransactionSynchronizationRegistry"
* if not specified explicitly.
* @see #DEFAULT_TRANSACTION_SYNCHRONIZATION_REGISTRY_NAME
*/
@@ -741,7 +732,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager
/**
* Find the JTA 1.1 TransactionSynchronizationRegistry through autodetection:
* checking whether the UserTransaction object or TransactionManager object
- * implements it, and checking Java EE 5's standard JNDI location.
+ * implements it, and checking Jakarta EE's standard JNDI location.
*
The default implementation simply returns {@code null}.
* @param ut the JTA UserTransaction object
* @param tm the JTA TransactionManager object
@@ -834,7 +825,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager
*
JTA implementations might support nested transactions via further
* {@code UserTransaction.begin()} invocations, but never support savepoints.
* @see #doBegin
- * @see javax.transaction.UserTransaction#begin()
+ * @see jakarta.transaction.UserTransaction#begin()
*/
@Override
protected boolean useSavepointForNestedTransaction() {
@@ -874,8 +865,8 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager
* @see #applyIsolationLevel
* @see #applyTimeout
* @see JtaTransactionObject#getUserTransaction()
- * @see javax.transaction.UserTransaction#setTransactionTimeout
- * @see javax.transaction.UserTransaction#begin
+ * @see jakarta.transaction.UserTransaction#setTransactionTimeout
+ * @see jakarta.transaction.UserTransaction#begin
*/
protected void doJtaBegin(JtaTransactionObject txObject, TransactionDefinition definition)
throws NotSupportedException, SystemException {
@@ -918,7 +909,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager
* @throws SystemException if thrown by the JTA implementation
* @see #doJtaBegin
* @see JtaTransactionObject#getUserTransaction()
- * @see javax.transaction.UserTransaction#setTransactionTimeout(int)
+ * @see jakarta.transaction.UserTransaction#setTransactionTimeout(int)
*/
protected void applyTimeout(JtaTransactionObject txObject, int timeout) throws SystemException {
if (timeout > TransactionDefinition.TIMEOUT_DEFAULT) {
@@ -948,7 +939,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager
* @return the suspended JTA Transaction object
* @throws SystemException if thrown by JTA methods
* @see #getTransactionManager()
- * @see javax.transaction.TransactionManager#suspend()
+ * @see jakarta.transaction.TransactionManager#suspend()
*/
protected Object doJtaSuspend(JtaTransactionObject txObject) throws SystemException {
if (getTransactionManager() == null) {
@@ -984,7 +975,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager
* @throws InvalidTransactionException if thrown by JTA methods
* @throws SystemException if thrown by JTA methods
* @see #getTransactionManager()
- * @see javax.transaction.TransactionManager#resume(javax.transaction.Transaction)
+ * @see jakarta.transaction.TransactionManager#resume(jakarta.transaction.Transaction)
*/
protected void doJtaResume(@Nullable JtaTransactionObject txObject, Object suspendedTransaction)
throws InvalidTransactionException, SystemException {
@@ -1144,8 +1135,8 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager
* @throws RollbackException if thrown by JTA methods
* @throws SystemException if thrown by JTA methods
* @see #getTransactionManager()
- * @see javax.transaction.Transaction#registerSynchronization
- * @see javax.transaction.TransactionSynchronizationRegistry#registerInterposedSynchronization
+ * @see jakarta.transaction.Transaction#registerSynchronization
+ * @see jakarta.transaction.TransactionSynchronizationRegistry#registerInterposedSynchronization
*/
protected void doRegisterAfterCompletionWithJtaTransaction(
JtaTransactionObject txObject, List synchronizations)
diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionObject.java b/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionObject.java
index 4bbc8ff46ac..b92453fa92a 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionObject.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionObject.java
@@ -16,16 +16,16 @@
package org.springframework.transaction.jta;
-import javax.transaction.Status;
-import javax.transaction.SystemException;
-import javax.transaction.UserTransaction;
+import jakarta.transaction.Status;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.UserTransaction;
import org.springframework.transaction.TransactionSystemException;
import org.springframework.transaction.support.SmartTransactionObject;
import org.springframework.transaction.support.TransactionSynchronizationUtils;
/**
- * JTA transaction object, representing a {@link javax.transaction.UserTransaction}.
+ * JTA transaction object, representing a {@link jakarta.transaction.UserTransaction}.
* Used as transaction object by Spring's {@link JtaTransactionManager}.
*
* Note: This is an SPI class, not intended to be used by applications.
@@ -33,7 +33,7 @@ import org.springframework.transaction.support.TransactionSynchronizationUtils;
* @author Juergen Hoeller
* @since 1.1
* @see JtaTransactionManager
- * @see javax.transaction.UserTransaction
+ * @see jakarta.transaction.UserTransaction
*/
public class JtaTransactionObject implements SmartTransactionObject {
diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/ManagedTransactionAdapter.java b/spring-tx/src/main/java/org/springframework/transaction/jta/ManagedTransactionAdapter.java
index 47a804abc84..6d5542b14d8 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/jta/ManagedTransactionAdapter.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/jta/ManagedTransactionAdapter.java
@@ -16,21 +16,22 @@
package org.springframework.transaction.jta;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-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 jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.Synchronization;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
+
import org.springframework.util.Assert;
/**
* Adapter for a managed JTA Transaction handle, taking a JTA
- * {@link javax.transaction.TransactionManager} reference and creating
- * a JTA {@link javax.transaction.Transaction} handle for it.
+ * {@link jakarta.transaction.TransactionManager} reference and creating
+ * a JTA {@link jakarta.transaction.Transaction} handle for it.
*
* @author Juergen Hoeller
* @since 3.0.2
diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/SimpleTransactionFactory.java b/spring-tx/src/main/java/org/springframework/transaction/jta/SimpleTransactionFactory.java
index bd0828a9c37..f0977ac25e3 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/jta/SimpleTransactionFactory.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/jta/SimpleTransactionFactory.java
@@ -16,25 +16,25 @@
package org.springframework.transaction.jta;
-import javax.transaction.NotSupportedException;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
+import jakarta.transaction.NotSupportedException;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
* Default implementation of the {@link TransactionFactory} strategy interface,
- * simply wrapping a standard JTA {@link javax.transaction.TransactionManager}.
+ * simply wrapping a standard JTA {@link jakarta.transaction.TransactionManager}.
*
*
Does not support transaction names; simply ignores any specified name.
*
* @author Juergen Hoeller
* @since 2.5
- * @see javax.transaction.TransactionManager#setTransactionTimeout(int)
- * @see javax.transaction.TransactionManager#begin()
- * @see javax.transaction.TransactionManager#getTransaction()
+ * @see jakarta.transaction.TransactionManager#setTransactionTimeout(int)
+ * @see jakarta.transaction.TransactionManager#begin()
+ * @see jakarta.transaction.TransactionManager#getTransaction()
*/
public class SimpleTransactionFactory implements TransactionFactory {
diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/SpringJtaSynchronizationAdapter.java b/spring-tx/src/main/java/org/springframework/transaction/jta/SpringJtaSynchronizationAdapter.java
index d2f8282ef15..aa718d7aed6 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/jta/SpringJtaSynchronizationAdapter.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/jta/SpringJtaSynchronizationAdapter.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2018 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,11 +16,10 @@
package org.springframework.transaction.jta;
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-import javax.transaction.TransactionManager;
-import javax.transaction.UserTransaction;
-
+import jakarta.transaction.Status;
+import jakarta.transaction.Synchronization;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.UserTransaction;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -30,7 +29,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
import org.springframework.util.Assert;
/**
- * Adapter that implements the JTA {@link javax.transaction.Synchronization}
+ * Adapter that implements the JTA {@link jakarta.transaction.Synchronization}
* interface delegating to an underlying Spring
* {@link org.springframework.transaction.support.TransactionSynchronization}.
*
@@ -40,7 +39,7 @@ import org.springframework.util.Assert;
*
* @author Juergen Hoeller
* @since 2.0
- * @see javax.transaction.Transaction#registerSynchronization
+ * @see jakarta.transaction.Transaction#registerSynchronization
* @see org.springframework.transaction.support.TransactionSynchronization
*/
public class SpringJtaSynchronizationAdapter implements Synchronization {
@@ -82,9 +81,7 @@ public class SpringJtaSynchronizationAdapter implements Synchronization {
@Nullable UserTransaction jtaUserTransaction) {
this(springSynchronization);
- if (jtaUserTransaction != null && !jtaUserTransaction.getClass().getName().startsWith("weblogic.")) {
- this.jtaTransaction = jtaUserTransaction;
- }
+ this.jtaTransaction = jtaUserTransaction;
}
/**
@@ -104,9 +101,7 @@ public class SpringJtaSynchronizationAdapter implements Synchronization {
TransactionSynchronization springSynchronization, @Nullable TransactionManager jtaTransactionManager) {
this(springSynchronization);
- if (jtaTransactionManager != null && !jtaTransactionManager.getClass().getName().startsWith("weblogic.")) {
- this.jtaTransaction = new UserTransactionAdapter(jtaTransactionManager);
- }
+ this.jtaTransaction = new UserTransactionAdapter(jtaTransactionManager);
}
diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/TransactionFactory.java b/spring-tx/src/main/java/org/springframework/transaction/jta/TransactionFactory.java
index 9317e9bb8eb..b0ac3142083 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/jta/TransactionFactory.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/jta/TransactionFactory.java
@@ -16,24 +16,24 @@
package org.springframework.transaction.jta;
-import javax.transaction.NotSupportedException;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
+import jakarta.transaction.NotSupportedException;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
import org.springframework.lang.Nullable;
/**
- * Strategy interface for creating JTA {@link javax.transaction.Transaction}
+ * Strategy interface for creating JTA {@link jakarta.transaction.Transaction}
* objects based on specified transactional characteristics.
*
*
The default implementation, {@link SimpleTransactionFactory}, simply
- * wraps a standard JTA {@link javax.transaction.TransactionManager}.
+ * wraps a standard JTA {@link jakarta.transaction.TransactionManager}.
* This strategy interface allows for more sophisticated implementations
* that adapt to vendor-specific JTA extensions.
*
* @author Juergen Hoeller
* @since 2.5
- * @see javax.transaction.TransactionManager#getTransaction()
+ * @see jakarta.transaction.TransactionManager#getTransaction()
* @see SimpleTransactionFactory
* @see JtaTransactionManager
*/
@@ -58,8 +58,8 @@ public interface TransactionFactory {
* {@link org.springframework.jca.endpoint.AbstractMessageEndpointFactory}
* in order to differentiate between invalid configuration and valid
* ResourceAdapter-managed transactions.
- * @see javax.resource.spi.ResourceAdapter#endpointActivation
- * @see javax.resource.spi.endpoint.MessageEndpointFactory#isDeliveryTransacted
+ * @see jakarta.resource.spi.ResourceAdapter#endpointActivation
+ * @see jakarta.resource.spi.endpoint.MessageEndpointFactory#isDeliveryTransacted
*/
boolean supportsResourceAdapterManagedTransactions();
diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/UserTransactionAdapter.java b/spring-tx/src/main/java/org/springframework/transaction/jta/UserTransactionAdapter.java
index 8302071f0e3..faf610fcced 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/jta/UserTransactionAdapter.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/jta/UserTransactionAdapter.java
@@ -16,20 +16,20 @@
package org.springframework.transaction.jta;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.SystemException;
-import javax.transaction.TransactionManager;
-import javax.transaction.UserTransaction;
+import jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
+import jakarta.transaction.NotSupportedException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.UserTransaction;
import org.springframework.util.Assert;
/**
* Adapter for a JTA UserTransaction handle, taking a JTA
- * {@link javax.transaction.TransactionManager} reference and creating
- * a JTA {@link javax.transaction.UserTransaction} handle for it.
+ * {@link jakarta.transaction.TransactionManager} reference and creating
+ * a JTA {@link jakarta.transaction.UserTransaction} handle for it.
*
*
The JTA UserTransaction interface is an exact subset of the JTA
* TransactionManager interface. Unfortunately, it does not serve as
diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java b/spring-tx/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java
deleted file mode 100644
index 9d2cc38a723..00000000000
--- a/spring-tx/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * Copyright 2002-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.transaction.jta;
-
-import java.io.Serializable;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-import javax.transaction.UserTransaction;
-
-import org.springframework.lang.Nullable;
-import org.springframework.transaction.TransactionDefinition;
-import org.springframework.transaction.TransactionSystemException;
-import org.springframework.util.Assert;
-
-/**
- * Special {@link JtaTransactionManager} variant for BEA WebLogic (9.0 and higher).
- * Supports the full power of Spring's transaction definitions on WebLogic's
- * transaction coordinator, beyond standard JTA : transaction names,
- * per-transaction isolation levels, and proper resuming of transactions in all cases.
- *
- *
Uses WebLogic's special {@code begin(name)} method to start a JTA transaction,
- * in order to make Spring-driven transactions visible in WebLogic's transaction
- * monitor . In case of Spring's declarative transactions, the exposed name will
- * (by default) be the fully-qualified class name + "." + method name.
- *
- *
Supports a per-transaction isolation level through WebLogic's corresponding
- * JTA transaction property "ISOLATION LEVEL". This will apply the specified isolation
- * level (e.g. ISOLATION_SERIALIZABLE) to all JDBC Connections that participate in the
- * given transaction.
- *
- *
Invokes WebLogic's special {@code forceResume} method if standard JTA resume
- * failed, to also resume if the target transaction was marked rollback-only .
- * If you're not relying on this feature of transaction suspension in the first
- * place, Spring's standard JtaTransactionManager will behave properly too.
- *
- *
By default, the JTA UserTransaction and TransactionManager handles are
- * fetched directly from WebLogic's {@code TransactionHelper}. This can be
- * overridden by specifying "userTransaction"/"userTransactionName" and
- * "transactionManager"/"transactionManagerName", passing in existing handles
- * or specifying corresponding JNDI locations to look up.
- *
- *
NOTE: This JtaTransactionManager is intended to refine specific transaction
- * demarcation behavior on Spring's side. It will happily co-exist with independently
- * configured WebLogic transaction strategies in your persistence provider, with no
- * need to specifically connect those setups in any way.
- *
- * @author Juergen Hoeller
- * @since 1.1
- * @see org.springframework.transaction.TransactionDefinition#getName
- * @see org.springframework.transaction.TransactionDefinition#getIsolationLevel
- * @see weblogic.transaction.UserTransaction#begin(String)
- * @see weblogic.transaction.Transaction#setProperty
- * @see weblogic.transaction.TransactionManager#forceResume
- * @see weblogic.transaction.TransactionHelper
- */
-@SuppressWarnings("serial")
-public class WebLogicJtaTransactionManager extends JtaTransactionManager {
-
- private static final String USER_TRANSACTION_CLASS_NAME = "weblogic.transaction.UserTransaction";
-
- private static final String CLIENT_TRANSACTION_MANAGER_CLASS_NAME = "weblogic.transaction.ClientTransactionManager";
-
- private static final String TRANSACTION_CLASS_NAME = "weblogic.transaction.Transaction";
-
- private static final String TRANSACTION_HELPER_CLASS_NAME = "weblogic.transaction.TransactionHelper";
-
- private static final String ISOLATION_LEVEL_KEY = "ISOLATION LEVEL";
-
-
- private boolean weblogicUserTransactionAvailable;
-
- @Nullable
- private Method beginWithNameMethod;
-
- @Nullable
- private Method beginWithNameAndTimeoutMethod;
-
- private boolean weblogicTransactionManagerAvailable;
-
- @Nullable
- private Method forceResumeMethod;
-
- @Nullable
- private Method setPropertyMethod;
-
- @Nullable
- private Object transactionHelper;
-
-
- @Override
- public void afterPropertiesSet() throws TransactionSystemException {
- super.afterPropertiesSet();
- loadWebLogicTransactionClasses();
- }
-
- @Override
- @Nullable
- protected UserTransaction retrieveUserTransaction() throws TransactionSystemException {
- Object helper = loadWebLogicTransactionHelper();
- try {
- logger.trace("Retrieving JTA UserTransaction from WebLogic TransactionHelper");
- Method getUserTransactionMethod = helper.getClass().getMethod("getUserTransaction");
- return (UserTransaction) getUserTransactionMethod.invoke(this.transactionHelper);
- }
- catch (InvocationTargetException ex) {
- throw new TransactionSystemException(
- "WebLogic's TransactionHelper.getUserTransaction() method failed", ex.getTargetException());
- }
- catch (Exception ex) {
- throw new TransactionSystemException(
- "Could not invoke WebLogic's TransactionHelper.getUserTransaction() method", ex);
- }
- }
-
- @Override
- @Nullable
- protected TransactionManager retrieveTransactionManager() throws TransactionSystemException {
- Object helper = loadWebLogicTransactionHelper();
- try {
- logger.trace("Retrieving JTA TransactionManager from WebLogic TransactionHelper");
- Method getTransactionManagerMethod = helper.getClass().getMethod("getTransactionManager");
- return (TransactionManager) getTransactionManagerMethod.invoke(this.transactionHelper);
- }
- catch (InvocationTargetException ex) {
- throw new TransactionSystemException(
- "WebLogic's TransactionHelper.getTransactionManager() method failed", ex.getTargetException());
- }
- catch (Exception ex) {
- throw new TransactionSystemException(
- "Could not invoke WebLogic's TransactionHelper.getTransactionManager() method", ex);
- }
- }
-
- private Object loadWebLogicTransactionHelper() throws TransactionSystemException {
- Object helper = this.transactionHelper;
- if (helper == null) {
- try {
- Class> transactionHelperClass = getClass().getClassLoader().loadClass(TRANSACTION_HELPER_CLASS_NAME);
- Method getTransactionHelperMethod = transactionHelperClass.getMethod("getTransactionHelper");
- helper = getTransactionHelperMethod.invoke(null);
- this.transactionHelper = helper;
- logger.trace("WebLogic TransactionHelper found");
- }
- catch (InvocationTargetException ex) {
- throw new TransactionSystemException(
- "WebLogic's TransactionHelper.getTransactionHelper() method failed", ex.getTargetException());
- }
- catch (Exception ex) {
- throw new TransactionSystemException(
- "Could not initialize WebLogicJtaTransactionManager because WebLogic API classes are not available",
- ex);
- }
- }
- return helper;
- }
-
- private void loadWebLogicTransactionClasses() throws TransactionSystemException {
- try {
- Class> userTransactionClass = getClass().getClassLoader().loadClass(USER_TRANSACTION_CLASS_NAME);
- this.weblogicUserTransactionAvailable = userTransactionClass.isInstance(getUserTransaction());
- if (this.weblogicUserTransactionAvailable) {
- this.beginWithNameMethod = userTransactionClass.getMethod("begin", String.class);
- this.beginWithNameAndTimeoutMethod = userTransactionClass.getMethod("begin", String.class, int.class);
- logger.debug("Support for WebLogic transaction names available");
- }
- else {
- logger.debug("Support for WebLogic transaction names not available");
- }
-
- // Obtain WebLogic ClientTransactionManager interface.
- Class> transactionManagerClass =
- getClass().getClassLoader().loadClass(CLIENT_TRANSACTION_MANAGER_CLASS_NAME);
- logger.trace("WebLogic ClientTransactionManager found");
-
- this.weblogicTransactionManagerAvailable = transactionManagerClass.isInstance(getTransactionManager());
- if (this.weblogicTransactionManagerAvailable) {
- Class> transactionClass = getClass().getClassLoader().loadClass(TRANSACTION_CLASS_NAME);
- this.forceResumeMethod = transactionManagerClass.getMethod("forceResume", Transaction.class);
- this.setPropertyMethod = transactionClass.getMethod("setProperty", String.class, Serializable.class);
- logger.debug("Support for WebLogic forceResume available");
- }
- else {
- logger.debug("Support for WebLogic forceResume not available");
- }
- }
- catch (Exception ex) {
- throw new TransactionSystemException(
- "Could not initialize WebLogicJtaTransactionManager because WebLogic API classes are not available",
- ex);
- }
- }
-
- private TransactionManager obtainTransactionManager() {
- TransactionManager tm = getTransactionManager();
- Assert.state(tm != null, "No TransactionManager set");
- return tm;
- }
-
-
- @Override
- protected void doJtaBegin(JtaTransactionObject txObject, TransactionDefinition definition)
- throws NotSupportedException, SystemException {
-
- int timeout = determineTimeout(definition);
-
- // Apply transaction name (if any) to WebLogic transaction.
- if (this.weblogicUserTransactionAvailable && definition.getName() != null) {
- try {
- if (timeout > TransactionDefinition.TIMEOUT_DEFAULT) {
- /*
- weblogic.transaction.UserTransaction wut = (weblogic.transaction.UserTransaction) ut;
- wut.begin(definition.getName(), timeout);
- */
- Assert.state(this.beginWithNameAndTimeoutMethod != null, "WebLogic JTA API not initialized");
- this.beginWithNameAndTimeoutMethod.invoke(txObject.getUserTransaction(), definition.getName(), timeout);
- }
- else {
- /*
- weblogic.transaction.UserTransaction wut = (weblogic.transaction.UserTransaction) ut;
- wut.begin(definition.getName());
- */
- Assert.state(this.beginWithNameMethod != null, "WebLogic JTA API not initialized");
- this.beginWithNameMethod.invoke(txObject.getUserTransaction(), definition.getName());
- }
- }
- catch (InvocationTargetException ex) {
- throw new TransactionSystemException(
- "WebLogic's UserTransaction.begin() method failed", ex.getTargetException());
- }
- catch (Exception ex) {
- throw new TransactionSystemException(
- "Could not invoke WebLogic's UserTransaction.begin() method", ex);
- }
- }
- else {
- // No WebLogic UserTransaction available or no transaction name specified
- // -> standard JTA begin call.
- applyTimeout(txObject, timeout);
- txObject.getUserTransaction().begin();
- }
-
- // Specify isolation level, if any, through corresponding WebLogic transaction property.
- if (this.weblogicTransactionManagerAvailable) {
- if (definition.getIsolationLevel() != TransactionDefinition.ISOLATION_DEFAULT) {
- try {
- Transaction tx = obtainTransactionManager().getTransaction();
- Integer isolationLevel = definition.getIsolationLevel();
- /*
- weblogic.transaction.Transaction wtx = (weblogic.transaction.Transaction) tx;
- wtx.setProperty(ISOLATION_LEVEL_KEY, isolationLevel);
- */
- Assert.state(this.setPropertyMethod != null, "WebLogic JTA API not initialized");
- this.setPropertyMethod.invoke(tx, ISOLATION_LEVEL_KEY, isolationLevel);
- }
- catch (InvocationTargetException ex) {
- throw new TransactionSystemException(
- "WebLogic's Transaction.setProperty(String, Serializable) method failed", ex.getTargetException());
- }
- catch (Exception ex) {
- throw new TransactionSystemException(
- "Could not invoke WebLogic's Transaction.setProperty(String, Serializable) method", ex);
- }
- }
- }
- else {
- applyIsolationLevel(txObject, definition.getIsolationLevel());
- }
- }
-
- @Override
- protected void doJtaResume(@Nullable JtaTransactionObject txObject, Object suspendedTransaction)
- throws InvalidTransactionException, SystemException {
-
- try {
- obtainTransactionManager().resume((Transaction) suspendedTransaction);
- }
- catch (InvalidTransactionException ex) {
- if (!this.weblogicTransactionManagerAvailable) {
- throw ex;
- }
-
- if (logger.isDebugEnabled()) {
- logger.debug("Standard JTA resume threw InvalidTransactionException: " + ex.getMessage() +
- " - trying WebLogic JTA forceResume");
- }
- /*
- weblogic.transaction.TransactionManager wtm =
- (weblogic.transaction.TransactionManager) getTransactionManager();
- wtm.forceResume(suspendedTransaction);
- */
- try {
- Assert.state(this.forceResumeMethod != null, "WebLogic JTA API not initialized");
- this.forceResumeMethod.invoke(getTransactionManager(), suspendedTransaction);
- }
- catch (InvocationTargetException ex2) {
- throw new TransactionSystemException(
- "WebLogic's TransactionManager.forceResume(Transaction) method failed", ex2.getTargetException());
- }
- catch (Exception ex2) {
- throw new TransactionSystemException(
- "Could not access WebLogic's TransactionManager.forceResume(Transaction) method", ex2);
- }
- }
- }
-
- @Override
- public Transaction createTransaction(@Nullable String name, int timeout) throws NotSupportedException, SystemException {
- if (this.weblogicUserTransactionAvailable && name != null) {
- try {
- if (timeout >= 0) {
- Assert.state(this.beginWithNameAndTimeoutMethod != null, "WebLogic JTA API not initialized");
- this.beginWithNameAndTimeoutMethod.invoke(getUserTransaction(), name, timeout);
- }
- else {
- Assert.state(this.beginWithNameMethod != null, "WebLogic JTA API not initialized");
- this.beginWithNameMethod.invoke(getUserTransaction(), name);
- }
- }
- catch (InvocationTargetException ex) {
- if (ex.getTargetException() instanceof NotSupportedException) {
- throw (NotSupportedException) ex.getTargetException();
- }
- else if (ex.getTargetException() instanceof SystemException) {
- throw (SystemException) ex.getTargetException();
- }
- else if (ex.getTargetException() instanceof RuntimeException) {
- throw (RuntimeException) ex.getTargetException();
- }
- else {
- throw new SystemException(
- "WebLogic's begin() method failed with an unexpected error: " + ex.getTargetException());
- }
- }
- catch (Exception ex) {
- throw new SystemException("Could not invoke WebLogic's UserTransaction.begin() method: " + ex);
- }
- return new ManagedTransactionAdapter(obtainTransactionManager());
- }
-
- else {
- // No name specified - standard JTA is sufficient.
- return super.createTransaction(name, timeout);
- }
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/WebSphereUowTransactionManager.java b/spring-tx/src/main/java/org/springframework/transaction/jta/WebSphereUowTransactionManager.java
deleted file mode 100644
index 256cc965295..00000000000
--- a/spring-tx/src/main/java/org/springframework/transaction/jta/WebSphereUowTransactionManager.java
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.transaction.jta;
-
-import java.util.List;
-
-import javax.naming.NamingException;
-
-import com.ibm.websphere.uow.UOWSynchronizationRegistry;
-import com.ibm.wsspi.uow.UOWAction;
-import com.ibm.wsspi.uow.UOWActionException;
-import com.ibm.wsspi.uow.UOWException;
-import com.ibm.wsspi.uow.UOWManager;
-import com.ibm.wsspi.uow.UOWManagerFactory;
-
-import org.springframework.lang.Nullable;
-import org.springframework.transaction.IllegalTransactionStateException;
-import org.springframework.transaction.InvalidTimeoutException;
-import org.springframework.transaction.NestedTransactionNotSupportedException;
-import org.springframework.transaction.TransactionDefinition;
-import org.springframework.transaction.TransactionException;
-import org.springframework.transaction.TransactionSystemException;
-import org.springframework.transaction.support.CallbackPreferringPlatformTransactionManager;
-import org.springframework.transaction.support.DefaultTransactionStatus;
-import org.springframework.transaction.support.SmartTransactionObject;
-import org.springframework.transaction.support.TransactionCallback;
-import org.springframework.transaction.support.TransactionSynchronization;
-import org.springframework.transaction.support.TransactionSynchronizationManager;
-import org.springframework.transaction.support.TransactionSynchronizationUtils;
-import org.springframework.util.Assert;
-import org.springframework.util.ReflectionUtils;
-
-/**
- * WebSphere-specific PlatformTransactionManager implementation that delegates
- * to a {@link com.ibm.wsspi.uow.UOWManager} instance, obtained from WebSphere's
- * JNDI environment. This allows Spring to leverage the full power of the WebSphere
- * transaction coordinator, including transaction suspension, in a manner that is
- * perfectly compliant with officially supported WebSphere API.
- *
- *
The {@link CallbackPreferringPlatformTransactionManager} interface
- * implemented by this class indicates that callers should preferably pass in
- * a {@link TransactionCallback} through the {@link #execute} method, which
- * will be handled through the callback-based WebSphere UOWManager API instead
- * of through standard JTA API (UserTransaction / TransactionManager). This avoids
- * the use of the non-public {@code javax.transaction.TransactionManager}
- * API on WebSphere, staying within supported WebSphere API boundaries.
- *
- *
This transaction manager implementation derives from Spring's standard
- * {@link JtaTransactionManager}, inheriting the capability to support programmatic
- * transaction demarcation via {@code getTransaction} / {@code commit} /
- * {@code rollback} calls through a JTA UserTransaction handle, for callers
- * that do not use the TransactionCallback-based {@link #execute} method. However,
- * transaction suspension is not supported in this {@code getTransaction}
- * style (unless you explicitly specify a {@link #setTransactionManager} reference,
- * despite the official WebSphere recommendations). Use the {@link #execute} style
- * for any code that might require transaction suspension.
- *
- *
This transaction manager is compatible with WebSphere 6.1.0.9 and above.
- * The default JNDI location for the UOWManager is "java:comp/websphere/UOWManager".
- * If the location happens to differ according to your WebSphere documentation,
- * simply specify the actual location through this transaction manager's
- * "uowManagerName" bean property.
- *
- *
NOTE: This JtaTransactionManager is intended to refine specific transaction
- * demarcation behavior on Spring's side. It will happily co-exist with independently
- * configured WebSphere transaction strategies in your persistence provider, with no
- * need to specifically connect those setups in any way.
- *
- * @author Juergen Hoeller
- * @since 2.5
- * @see #setUowManager
- * @see #setUowManagerName
- * @see com.ibm.wsspi.uow.UOWManager
- */
-@SuppressWarnings("serial")
-public class WebSphereUowTransactionManager extends JtaTransactionManager
- implements CallbackPreferringPlatformTransactionManager {
-
- /**
- * Default JNDI location for the WebSphere UOWManager.
- * @see #setUowManagerName
- */
- public static final String DEFAULT_UOW_MANAGER_NAME = "java:comp/websphere/UOWManager";
-
-
- @Nullable
- private UOWManager uowManager;
-
- @Nullable
- private String uowManagerName;
-
-
- /**
- * Create a new WebSphereUowTransactionManager.
- */
- public WebSphereUowTransactionManager() {
- setAutodetectTransactionManager(false);
- }
-
- /**
- * Create a new WebSphereUowTransactionManager for the given UOWManager.
- * @param uowManager the WebSphere UOWManager to use as direct reference
- */
- public WebSphereUowTransactionManager(UOWManager uowManager) {
- this();
- this.uowManager = uowManager;
- }
-
-
- /**
- * Set the WebSphere UOWManager to use as direct reference.
- *
Typically just used for test setups; in a Java EE environment,
- * the UOWManager will always be fetched from JNDI.
- * @see #setUserTransactionName
- */
- public void setUowManager(UOWManager uowManager) {
- this.uowManager = uowManager;
- }
-
- /**
- * Set the JNDI name of the WebSphere UOWManager.
- * The default "java:comp/websphere/UOWManager" is used if not set.
- * @see #DEFAULT_USER_TRANSACTION_NAME
- * @see #setUowManager
- */
- public void setUowManagerName(String uowManagerName) {
- this.uowManagerName = uowManagerName;
- }
-
-
- @Override
- public void afterPropertiesSet() throws TransactionSystemException {
- initUserTransactionAndTransactionManager();
-
- // Fetch UOWManager handle from JNDI, if necessary.
- if (this.uowManager == null) {
- if (this.uowManagerName != null) {
- this.uowManager = lookupUowManager(this.uowManagerName);
- }
- else {
- this.uowManager = lookupDefaultUowManager();
- }
- }
- }
-
- /**
- * Look up the WebSphere UOWManager in JNDI via the configured name.
- * @param uowManagerName the JNDI name of the UOWManager
- * @return the UOWManager object
- * @throws TransactionSystemException if the JNDI lookup failed
- * @see #setJndiTemplate
- * @see #setUowManagerName
- */
- protected UOWManager lookupUowManager(String uowManagerName) throws TransactionSystemException {
- try {
- if (logger.isDebugEnabled()) {
- logger.debug("Retrieving WebSphere UOWManager from JNDI location [" + uowManagerName + "]");
- }
- return getJndiTemplate().lookup(uowManagerName, UOWManager.class);
- }
- catch (NamingException ex) {
- throw new TransactionSystemException(
- "WebSphere UOWManager is not available at JNDI location [" + uowManagerName + "]", ex);
- }
- }
-
- /**
- * Obtain the WebSphere UOWManager from the default JNDI location
- * "java:comp/websphere/UOWManager".
- * @return the UOWManager object
- * @throws TransactionSystemException if the JNDI lookup failed
- * @see #setJndiTemplate
- */
- protected UOWManager lookupDefaultUowManager() throws TransactionSystemException {
- try {
- logger.debug("Retrieving WebSphere UOWManager from default JNDI location [" + DEFAULT_UOW_MANAGER_NAME + "]");
- return getJndiTemplate().lookup(DEFAULT_UOW_MANAGER_NAME, UOWManager.class);
- }
- catch (NamingException ex) {
- logger.debug("WebSphere UOWManager is not available at default JNDI location [" +
- DEFAULT_UOW_MANAGER_NAME + "] - falling back to UOWManagerFactory lookup");
- return UOWManagerFactory.getUOWManager();
- }
- }
-
- private UOWManager obtainUOWManager() {
- Assert.state(this.uowManager != null, "No UOWManager set");
- return this.uowManager;
- }
-
-
- /**
- * Registers the synchronizations as interposed JTA Synchronization on the UOWManager.
- */
- @Override
- protected void doRegisterAfterCompletionWithJtaTransaction(
- JtaTransactionObject txObject, List synchronizations) {
-
- obtainUOWManager().registerInterposedSynchronization(new JtaAfterCompletionSynchronization(synchronizations));
- }
-
- /**
- * Returns {@code true} since WebSphere ResourceAdapters (as exposed in JNDI)
- * implicitly perform transaction enlistment if the MessageEndpointFactory's
- * {@code isDeliveryTransacted} method returns {@code true}.
- * In that case we'll simply skip the {@link #createTransaction} call.
- * @see javax.resource.spi.endpoint.MessageEndpointFactory#isDeliveryTransacted
- * @see org.springframework.jca.endpoint.AbstractMessageEndpointFactory
- * @see TransactionFactory#createTransaction
- */
- @Override
- public boolean supportsResourceAdapterManagedTransactions() {
- return true;
- }
-
-
- @Override
- @Nullable
- public T execute(@Nullable TransactionDefinition definition, TransactionCallback callback)
- throws TransactionException {
-
- // Use defaults if no transaction definition given.
- TransactionDefinition def = (definition != null ? definition : TransactionDefinition.withDefaults());
-
- if (def.getTimeout() < TransactionDefinition.TIMEOUT_DEFAULT) {
- throw new InvalidTimeoutException("Invalid transaction timeout", def.getTimeout());
- }
-
- UOWManager uowManager = obtainUOWManager();
- int pb = def.getPropagationBehavior();
- boolean existingTx = (uowManager.getUOWStatus() != UOWSynchronizationRegistry.UOW_STATUS_NONE &&
- uowManager.getUOWType() != UOWSynchronizationRegistry.UOW_TYPE_LOCAL_TRANSACTION);
-
- int uowType = UOWSynchronizationRegistry.UOW_TYPE_GLOBAL_TRANSACTION;
- boolean joinTx = false;
- boolean newSynch = false;
-
- if (existingTx) {
- if (pb == TransactionDefinition.PROPAGATION_NEVER) {
- throw new IllegalTransactionStateException(
- "Transaction propagation 'never' but existing transaction found");
- }
- if (pb == TransactionDefinition.PROPAGATION_NESTED) {
- throw new NestedTransactionNotSupportedException(
- "Transaction propagation 'nested' not supported for WebSphere UOW transactions");
- }
- if (pb == TransactionDefinition.PROPAGATION_SUPPORTS ||
- pb == TransactionDefinition.PROPAGATION_REQUIRED ||
- pb == TransactionDefinition.PROPAGATION_MANDATORY) {
- joinTx = true;
- newSynch = (getTransactionSynchronization() != SYNCHRONIZATION_NEVER);
- }
- else if (pb == TransactionDefinition.PROPAGATION_NOT_SUPPORTED) {
- uowType = UOWSynchronizationRegistry.UOW_TYPE_LOCAL_TRANSACTION;
- newSynch = (getTransactionSynchronization() == SYNCHRONIZATION_ALWAYS);
- }
- else {
- newSynch = (getTransactionSynchronization() != SYNCHRONIZATION_NEVER);
- }
- }
- else {
- if (pb == TransactionDefinition.PROPAGATION_MANDATORY) {
- throw new IllegalTransactionStateException(
- "Transaction propagation 'mandatory' but no existing transaction found");
- }
- if (pb == TransactionDefinition.PROPAGATION_SUPPORTS ||
- pb == TransactionDefinition.PROPAGATION_NOT_SUPPORTED ||
- pb == TransactionDefinition.PROPAGATION_NEVER) {
- uowType = UOWSynchronizationRegistry.UOW_TYPE_LOCAL_TRANSACTION;
- newSynch = (getTransactionSynchronization() == SYNCHRONIZATION_ALWAYS);
- }
- else {
- newSynch = (getTransactionSynchronization() != SYNCHRONIZATION_NEVER);
- }
- }
-
- boolean debug = logger.isDebugEnabled();
- if (debug) {
- logger.debug("Creating new transaction with name [" + def.getName() + "]: " + def);
- }
- SuspendedResourcesHolder suspendedResources = (!joinTx ? suspend(null) : null);
- UOWActionAdapter action = null;
- try {
- boolean actualTransaction = (uowType == UOWManager.UOW_TYPE_GLOBAL_TRANSACTION);
- if (actualTransaction && def.getTimeout() > TransactionDefinition.TIMEOUT_DEFAULT) {
- uowManager.setUOWTimeout(uowType, def.getTimeout());
- }
- if (debug) {
- logger.debug("Invoking WebSphere UOW action: type=" + uowType + ", join=" + joinTx);
- }
- action = new UOWActionAdapter<>(def, callback, actualTransaction, !joinTx, newSynch, debug);
- uowManager.runUnderUOW(uowType, joinTx, action);
- if (debug) {
- logger.debug("Returned from WebSphere UOW action: type=" + uowType + ", join=" + joinTx);
- }
- return action.getResult();
- }
- catch (UOWException | UOWActionException ex) {
- TransactionSystemException tse =
- new TransactionSystemException("UOWManager transaction processing failed", ex);
- Throwable appEx = action.getException();
- if (appEx != null) {
- logger.error("Application exception overridden by rollback exception", appEx);
- tse.initApplicationException(appEx);
- }
- throw tse;
- }
- finally {
- if (suspendedResources != null) {
- resume(null, suspendedResources);
- }
- }
- }
-
-
- /**
- * Adapter that executes the given Spring transaction within the WebSphere UOWAction shape.
- */
- private class UOWActionAdapter implements UOWAction, SmartTransactionObject {
-
- private final TransactionDefinition definition;
-
- private final TransactionCallback callback;
-
- private final boolean actualTransaction;
-
- private final boolean newTransaction;
-
- private final boolean newSynchronization;
-
- private boolean debug;
-
- @Nullable
- private T result;
-
- @Nullable
- private Throwable exception;
-
- public UOWActionAdapter(TransactionDefinition definition, TransactionCallback callback,
- boolean actualTransaction, boolean newTransaction, boolean newSynchronization, boolean debug) {
-
- this.definition = definition;
- this.callback = callback;
- this.actualTransaction = actualTransaction;
- this.newTransaction = newTransaction;
- this.newSynchronization = newSynchronization;
- this.debug = debug;
- }
-
- @Override
- public void run() {
- UOWManager uowManager = obtainUOWManager();
- DefaultTransactionStatus status = prepareTransactionStatus(
- this.definition, (this.actualTransaction ? this : null),
- this.newTransaction, this.newSynchronization, this.debug, null);
- try {
- this.result = this.callback.doInTransaction(status);
- triggerBeforeCommit(status);
- }
- catch (Throwable ex) {
- this.exception = ex;
- if (status.isDebug()) {
- logger.debug("Rolling back on application exception from transaction callback", ex);
- }
- uowManager.setRollbackOnly();
- }
- finally {
- if (status.isLocalRollbackOnly()) {
- if (status.isDebug()) {
- logger.debug("Transaction callback has explicitly requested rollback");
- }
- uowManager.setRollbackOnly();
- }
- triggerBeforeCompletion(status);
- if (status.isNewSynchronization()) {
- List synchronizations = TransactionSynchronizationManager.getSynchronizations();
- TransactionSynchronizationManager.clear();
- if (!synchronizations.isEmpty()) {
- uowManager.registerInterposedSynchronization(new JtaAfterCompletionSynchronization(synchronizations));
- }
- }
- }
- }
-
- @Nullable
- public T getResult() {
- if (this.exception != null) {
- ReflectionUtils.rethrowRuntimeException(this.exception);
- }
- return this.result;
- }
-
- @Nullable
- public Throwable getException() {
- return this.exception;
- }
-
- @Override
- public boolean isRollbackOnly() {
- return obtainUOWManager().getRollbackOnly();
- }
-
- @Override
- public void flush() {
- TransactionSynchronizationUtils.triggerFlush();
- }
- }
-
-}
diff --git a/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java b/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java
index 74dc7a3d5a1..0d21f4c8939 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java
@@ -1152,8 +1152,8 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran
* @see DefaultTransactionStatus#isLocalRollbackOnly()
* @see org.springframework.transaction.TransactionStatus#setRollbackOnly()
* @see org.springframework.transaction.UnexpectedRollbackException
- * @see javax.transaction.UserTransaction#commit()
- * @see javax.transaction.RollbackException
+ * @see jakarta.transaction.UserTransaction#commit()
+ * @see jakarta.transaction.RollbackException
*/
protected boolean shouldCommitOnGlobalRollbackOnly() {
return false;
diff --git a/spring-tx/src/main/java/org/springframework/transaction/support/SmartTransactionObject.java b/spring-tx/src/main/java/org/springframework/transaction/support/SmartTransactionObject.java
index 923e0048045..90d0662c10d 100644
--- a/spring-tx/src/main/java/org/springframework/transaction/support/SmartTransactionObject.java
+++ b/spring-tx/src/main/java/org/springframework/transaction/support/SmartTransactionObject.java
@@ -36,8 +36,8 @@ public interface SmartTransactionObject extends Flushable {
/**
* Return whether the transaction is internally marked as rollback-only.
* Can, for example, check the JTA UserTransaction.
- * @see javax.transaction.UserTransaction#getStatus
- * @see javax.transaction.Status#STATUS_MARKED_ROLLBACK
+ * @see jakarta.transaction.UserTransaction#getStatus
+ * @see jakarta.transaction.Status#STATUS_MARKED_ROLLBACK
*/
boolean isRollbackOnly();
diff --git a/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationAdvisorTests.java b/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationAdvisorTests.java
index dff65b71ed1..c052cea1463 100644
--- a/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationAdvisorTests.java
+++ b/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationAdvisorTests.java
@@ -21,8 +21,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import javax.persistence.PersistenceException;
-
+import jakarta.persistence.PersistenceException;
import org.junit.jupiter.api.Test;
import org.springframework.aop.framework.ProxyFactory;
diff --git a/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationPostProcessorTests.java b/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationPostProcessorTests.java
index a0955948113..46e125464da 100644
--- a/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationPostProcessorTests.java
+++ b/spring-tx/src/test/java/org/springframework/dao/annotation/PersistenceExceptionTranslationPostProcessorTests.java
@@ -16,8 +16,7 @@
package org.springframework.dao.annotation;
-import javax.persistence.PersistenceException;
-
+import jakarta.persistence.PersistenceException;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
diff --git a/spring-tx/src/test/java/org/springframework/jca/cci/CciLocalTransactionTests.java b/spring-tx/src/test/java/org/springframework/jca/cci/CciLocalTransactionTests.java
deleted file mode 100644
index d45b326c090..00000000000
--- a/spring-tx/src/test/java/org/springframework/jca/cci/CciLocalTransactionTests.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2002-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci;
-
-import javax.resource.ResourceException;
-import javax.resource.cci.Connection;
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.cci.Interaction;
-import javax.resource.cci.InteractionSpec;
-import javax.resource.cci.LocalTransaction;
-import javax.resource.cci.Record;
-
-import org.junit.jupiter.api.Test;
-
-import org.springframework.dao.DataRetrievalFailureException;
-import org.springframework.jca.cci.connection.CciLocalTransactionManager;
-import org.springframework.jca.cci.core.CciTemplate;
-import org.springframework.transaction.TransactionStatus;
-import org.springframework.transaction.support.TransactionCallback;
-import org.springframework.transaction.support.TransactionCallbackWithoutResult;
-import org.springframework.transaction.support.TransactionSynchronizationManager;
-import org.springframework.transaction.support.TransactionTemplate;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.BDDMockito.given;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-/**
- * @author Thierry Templier
- * @author Chris Beams
- */
-@Deprecated
-public class CciLocalTransactionTests {
-
- /**
- * Test if a transaction ( begin / commit ) is executed on the
- * LocalTransaction when CciLocalTransactionManager is specified as
- * transaction manager.
- */
- @Test
- public void testLocalTransactionCommit() throws ResourceException {
- final ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- LocalTransaction localTransaction = mock(LocalTransaction.class);
- final Record record = mock(Record.class);
- final InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.getLocalTransaction()).willReturn(localTransaction);
- given(connection.createInteraction()).willReturn(interaction);
- given(interaction.execute(interactionSpec, record, record)).willReturn(true);
- given(connection.getLocalTransaction()).willReturn(localTransaction);
-
- CciLocalTransactionManager tm = new CciLocalTransactionManager();
- tm.setConnectionFactory(connectionFactory);
- TransactionTemplate tt = new TransactionTemplate(tm);
-
- tt.execute(new TransactionCallbackWithoutResult() {
- @Override
- protected void doInTransactionWithoutResult(TransactionStatus status) {
- assertThat(TransactionSynchronizationManager.hasResource(connectionFactory)).as("Has thread connection").isTrue();
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.execute(interactionSpec, record, record);
- }
- });
-
- verify(localTransaction).begin();
- verify(interaction).close();
- verify(localTransaction).commit();
- verify(connection).close();
- }
-
- /**
- * Test if a transaction ( begin / rollback ) is executed on the
- * LocalTransaction when CciLocalTransactionManager is specified as
- * transaction manager and a non-checked exception is thrown.
- */
- @Test
- public void testLocalTransactionRollback() throws ResourceException {
- final ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- LocalTransaction localTransaction = mock(LocalTransaction.class);
- final Record record = mock(Record.class);
- final InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.getLocalTransaction()).willReturn(localTransaction);
- given(connection.createInteraction()).willReturn(interaction);
- given(interaction.execute(interactionSpec, record, record)).willReturn(true);
- given(connection.getLocalTransaction()).willReturn(localTransaction);
-
- CciLocalTransactionManager tm = new CciLocalTransactionManager();
- tm.setConnectionFactory(connectionFactory);
- TransactionTemplate tt = new TransactionTemplate(tm);
-
- try {
- tt.execute(new TransactionCallback() {
- @Override
- public Void doInTransaction(TransactionStatus status) {
- assertThat(TransactionSynchronizationManager.hasResource(connectionFactory)).as("Has thread connection").isTrue();
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.execute(interactionSpec, record, record);
- throw new DataRetrievalFailureException("error");
- }
- });
- }
- catch (Exception ex) {
- }
-
- verify(localTransaction).begin();
- verify(interaction).close();
- verify(localTransaction).rollback();
- verify(connection).close();
- }
-}
diff --git a/spring-tx/src/test/java/org/springframework/jca/cci/CciTemplateTests.java b/spring-tx/src/test/java/org/springframework/jca/cci/CciTemplateTests.java
deleted file mode 100644
index a67028f162a..00000000000
--- a/spring-tx/src/test/java/org/springframework/jca/cci/CciTemplateTests.java
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
- * Copyright 2002-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci;
-
-import java.sql.SQLException;
-
-import javax.resource.NotSupportedException;
-import javax.resource.ResourceException;
-import javax.resource.cci.Connection;
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.cci.ConnectionSpec;
-import javax.resource.cci.IndexedRecord;
-import javax.resource.cci.Interaction;
-import javax.resource.cci.InteractionSpec;
-import javax.resource.cci.MappedRecord;
-import javax.resource.cci.Record;
-import javax.resource.cci.RecordFactory;
-import javax.resource.cci.ResultSet;
-
-import org.junit.jupiter.api.Test;
-
-import org.springframework.jca.cci.connection.ConnectionSpecConnectionFactoryAdapter;
-import org.springframework.jca.cci.connection.NotSupportedRecordFactory;
-import org.springframework.jca.cci.core.CciTemplate;
-import org.springframework.jca.cci.core.ConnectionCallback;
-import org.springframework.jca.cci.core.InteractionCallback;
-import org.springframework.jca.cci.core.RecordCreator;
-import org.springframework.jca.cci.core.RecordExtractor;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.BDDMockito.given;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-/**
- * @author Thierry Templier
- * @author Juergen Hoeller
- * @author Chris Beams
- */
-@Deprecated
-public class CciTemplateTests {
-
- @Test
- public void testCreateIndexedRecord() throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- RecordFactory recordFactory = mock(RecordFactory.class);
- IndexedRecord indexedRecord = mock(IndexedRecord.class);
- given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
- given(recordFactory.createIndexedRecord("name")).willReturn(indexedRecord);
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.createIndexedRecord("name");
-
- verify(recordFactory).createIndexedRecord("name");
- }
-
- @Test
- public void testCreateMappedRecord() throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- RecordFactory recordFactory = mock(RecordFactory.class);
- MappedRecord mappedRecord = mock(MappedRecord.class);
-
- given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
- given(recordFactory.createMappedRecord("name")).willReturn(mappedRecord);
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.createMappedRecord("name");
-
- verify(recordFactory).createMappedRecord("name");
- }
-
- @Test
- public void testTemplateExecuteInputOutput() throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
-
- Record inputRecord = mock(Record.class);
- Record outputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);
-
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.execute(interactionSpec, inputRecord, outputRecord);
-
- verify(interaction).execute(interactionSpec, inputRecord, outputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @Test
- public void testTemplateExecuteWithCreatorAndRecordFactoryNotSupported()
- throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
-
- Record inputRecord = mock(Record.class);
- final Record outputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connectionFactory.getRecordFactory()).willThrow(new NotSupportedException("not supported"));
- given(connection.createInteraction()).willReturn(interaction);
- given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.setOutputRecordCreator(new RecordCreator() {
- @Override
- public Record createRecord(RecordFactory recordFactory) {
- boolean condition = recordFactory instanceof NotSupportedRecordFactory;
- assertThat(condition).isTrue();
- return outputRecord;
- }
- });
- ct.execute(interactionSpec, inputRecord);
-
- verify(interaction).execute(interactionSpec, inputRecord, outputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @Test
- public void testTemplateExecuteInputTrueWithCreator2()
- throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- RecordFactory recordFactory = mock(RecordFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- RecordCreator creator = mock(RecordCreator.class);
-
- Record inputRecord = mock(Record.class);
- final Record outputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
- given(connection.createInteraction()).willReturn(interaction);
- given(creator.createRecord(recordFactory)).willReturn(outputRecord);
- given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.setOutputRecordCreator(creator);
- ct.execute(interactionSpec, inputRecord);
-
- verify(interaction).execute(interactionSpec, inputRecord, outputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @Test
- public void testTemplateExecuteInputFalse() throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
-
- Record inputRecord = mock(Record.class);
- Record outputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord);
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.execute(interactionSpec, inputRecord);
-
- verify(interaction).execute(interactionSpec, inputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @SuppressWarnings("unchecked")
- @Test
- public void testTemplateExecuteInputExtractorTrueWithCreator()
- throws ResourceException, SQLException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- RecordFactory recordFactory = mock(RecordFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- RecordExtractor extractor = mock(RecordExtractor.class);
- RecordCreator creator = mock(RecordCreator.class);
-
- Record inputRecord = mock(Record.class);
- Record outputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
- given(creator.createRecord(recordFactory)).willReturn(outputRecord);
- given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);
- given(extractor.extractData(outputRecord)).willReturn(new Object());
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.setOutputRecordCreator(creator);
- ct.execute(interactionSpec, inputRecord, extractor);
-
- verify(extractor).extractData(outputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @SuppressWarnings("unchecked")
- @Test
- public void testTemplateExecuteInputExtractorFalse()
- throws ResourceException, SQLException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- RecordExtractor extractor = mock(RecordExtractor.class);
-
- Record inputRecord = mock(Record.class);
- Record outputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord);
- given(extractor.extractData(outputRecord)).willReturn(new Object());
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.execute(interactionSpec, inputRecord, extractor);
-
- verify(extractor).extractData(outputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @Test
- public void testTemplateExecuteInputGeneratorTrueWithCreator()
- throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- RecordFactory recordFactory = mock(RecordFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- RecordCreator generator = mock(RecordCreator.class);
- RecordCreator creator = mock(RecordCreator.class);
-
- Record inputRecord = mock(Record.class);
- Record outputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
- given(generator.createRecord(recordFactory)).willReturn(inputRecord);
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(creator.createRecord(recordFactory)).willReturn(outputRecord);
- given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
- given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);
-
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.setOutputRecordCreator(creator);
- ct.execute(interactionSpec, generator);
-
- verify(interaction).execute(interactionSpec, inputRecord, outputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @Test
- public void testTemplateExecuteInputGeneratorFalse()
- throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- RecordFactory recordFactory = mock(RecordFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- RecordCreator generator = mock(RecordCreator.class);
-
- Record inputRecord = mock(Record.class);
- Record outputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(generator.createRecord(recordFactory)).willReturn(inputRecord);
- given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord);
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.execute(interactionSpec, generator);
-
- verify(interaction).execute(interactionSpec, inputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @SuppressWarnings("unchecked")
- @Test
- public void testTemplateExecuteInputGeneratorExtractorTrueWithCreator()
- throws ResourceException, SQLException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- RecordFactory recordFactory = mock(RecordFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- RecordCreator generator = mock(RecordCreator.class);
- RecordExtractor extractor = mock(RecordExtractor.class);
- RecordCreator creator = mock(RecordCreator.class);
-
- Record inputRecord = mock(Record.class);
- Record outputRecord = mock(Record.class);
-
- Object obj = new Object();
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(creator.createRecord(recordFactory)).willReturn(outputRecord);
- given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
- given(generator.createRecord(recordFactory)).willReturn(inputRecord);
- given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);
- given(extractor.extractData(outputRecord)).willReturn(obj);
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.setOutputRecordCreator(creator);
- assertThat(ct.execute(interactionSpec, generator, extractor)).isEqualTo(obj);
-
- verify(interaction).close();
- verify(connection).close();
- }
-
- @SuppressWarnings("unchecked")
- @Test
- public void testTemplateExecuteInputGeneratorExtractorFalse()
- throws ResourceException, SQLException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- RecordFactory recordFactory = mock(RecordFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- RecordCreator generator = mock(RecordCreator.class);
- RecordExtractor extractor = mock(RecordExtractor.class);
-
- Record inputRecord = mock(Record.class);
- Record outputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(generator.createRecord(recordFactory)).willReturn(inputRecord);
- given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord);
- given(extractor.extractData(outputRecord)).willReturn(new Object());
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.execute(interactionSpec, generator, extractor);
-
- verify(extractor).extractData(outputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @Test
- public void testTemplateExecuteInputOutputConnectionSpec() throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- ConnectionSpec connectionSpec = mock(ConnectionSpec.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
-
- Record inputRecord = mock(Record.class);
- Record outputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getConnection(connectionSpec)).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);
-
- ConnectionSpecConnectionFactoryAdapter adapter = new ConnectionSpecConnectionFactoryAdapter();
- adapter.setTargetConnectionFactory(connectionFactory);
- adapter.setConnectionSpec(connectionSpec);
- CciTemplate ct = new CciTemplate(adapter);
- ct.execute(interactionSpec, inputRecord, outputRecord);
-
- verify(interaction).execute(interactionSpec, inputRecord, outputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @SuppressWarnings("unchecked")
- @Test
- public void testTemplateExecuteInputOutputResultsSetFalse()
- throws ResourceException, SQLException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- RecordFactory recordFactory = mock(RecordFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- Record record = mock(Record.class);
- ResultSet resultset = mock(ResultSet.class);
- RecordCreator generator = mock(RecordCreator.class);
- RecordExtractor extractor = mock(RecordExtractor.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(generator.createRecord(recordFactory)).willReturn(record);
- given(interaction.execute(interactionSpec, record)).willReturn(resultset);
- given(extractor.extractData(resultset)).willReturn(new Object());
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.execute(interactionSpec, generator, extractor);
-
- verify(extractor).extractData(resultset);
- verify(resultset).close();
- verify(interaction).close();
- verify(connection).close();
- }
-
- @SuppressWarnings("unchecked")
- @Test
- public void testTemplateExecuteConnectionCallback()
- throws ResourceException, SQLException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- ConnectionCallback connectionCallback = mock(ConnectionCallback.class);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connectionCallback.doInConnection(connection, connectionFactory)).willReturn(new Object());
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.execute(connectionCallback);
-
- verify(connectionCallback).doInConnection(connection, connectionFactory);
- verify(connection).close();
- }
-
- @SuppressWarnings("unchecked")
- @Test
- public void testTemplateExecuteInteractionCallback()
- throws ResourceException, SQLException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- InteractionCallback interactionCallback = mock(InteractionCallback.class);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(interactionCallback.doInInteraction(interaction,connectionFactory)).willReturn(new Object());
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.execute(interactionCallback);
-
- verify(interactionCallback).doInInteraction(interaction,connectionFactory);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @Test
- public void testTemplateExecuteInputTrueTrueWithCreator()
- throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- RecordCreator creator = mock(RecordCreator.class);
-
- Record inputOutputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(interaction.execute(interactionSpec, inputOutputRecord, inputOutputRecord)).willReturn(true);
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.setOutputRecordCreator(creator);
- ct.execute(interactionSpec, inputOutputRecord, inputOutputRecord);
-
- verify(interaction).execute(interactionSpec, inputOutputRecord, inputOutputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @Test
- public void testTemplateExecuteInputTrueTrue() throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- Record inputOutputRecord = mock(Record.class);
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(interaction.execute(interactionSpec, inputOutputRecord, inputOutputRecord)).willReturn(true);
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- ct.execute(interactionSpec, inputOutputRecord, inputOutputRecord);
-
- verify(interaction).execute(interactionSpec, inputOutputRecord, inputOutputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @Test
- public void testTemplateExecuteInputFalseTrue() throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- Record inputOutputRecord = mock(Record.class);
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(interaction.execute(interactionSpec, inputOutputRecord)).willReturn(null);
-
- CciTemplate ct = new CciTemplate(connectionFactory);
- Record tmpOutputRecord = ct.execute(interactionSpec, inputOutputRecord);
- assertThat(tmpOutputRecord).isNull();
-
- verify(interaction).execute(interactionSpec, inputOutputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
-}
diff --git a/spring-tx/src/test/java/org/springframework/jca/cci/EisOperationTests.java b/spring-tx/src/test/java/org/springframework/jca/cci/EisOperationTests.java
deleted file mode 100644
index 30f6febbda2..00000000000
--- a/spring-tx/src/test/java/org/springframework/jca/cci/EisOperationTests.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright 2002-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.jca.cci;
-
-import javax.resource.ResourceException;
-import javax.resource.cci.Connection;
-import javax.resource.cci.ConnectionFactory;
-import javax.resource.cci.Interaction;
-import javax.resource.cci.InteractionSpec;
-import javax.resource.cci.Record;
-import javax.resource.cci.RecordFactory;
-
-import org.junit.jupiter.api.Test;
-
-import org.springframework.jca.cci.core.RecordCreator;
-import org.springframework.jca.cci.object.MappingRecordOperation;
-import org.springframework.jca.cci.object.SimpleRecordOperation;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.BDDMockito.given;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-/**
- * @author Thierry Templier
- * @author Chris Beams
- */
-@Deprecated
-public class EisOperationTests {
-
- @Test
- public void testSimpleRecordOperation() throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
-
- Record inputRecord = mock(Record.class);
- Record outputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- SimpleRecordOperation query = new SimpleRecordOperation(connectionFactory, interactionSpec);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord);
-
- query.execute(inputRecord);
-
- verify(interaction).execute(interactionSpec, inputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @Test
- public void testSimpleRecordOperationWithExplicitOutputRecord() throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
-
- Record inputRecord = mock(Record.class);
- Record outputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- SimpleRecordOperation operation = new SimpleRecordOperation(connectionFactory, interactionSpec);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);
-
- operation.execute(inputRecord, outputRecord);
-
- verify(interaction).execute(interactionSpec, inputRecord, outputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @Test
- public void testSimpleRecordOperationWithInputOutputRecord() throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
-
- Record inputOutputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- SimpleRecordOperation query = new SimpleRecordOperation(connectionFactory, interactionSpec);
-
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(interaction.execute(interactionSpec, inputOutputRecord, inputOutputRecord)).willReturn(true);
-
- query.execute(inputOutputRecord, inputOutputRecord);
-
- verify(interaction).execute(interactionSpec, inputOutputRecord, inputOutputRecord);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @Test
- public void testMappingRecordOperation() throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- RecordFactory recordFactory = mock(RecordFactory.class);
-
- Record inputRecord = mock(Record.class);
- Record outputRecord = mock(Record.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- QueryCallDetector callDetector = mock(QueryCallDetector.class);
-
- MappingRecordOperationImpl query = new MappingRecordOperationImpl(connectionFactory, interactionSpec);
- query.setCallDetector(callDetector);
-
- Object inObj = new Object();
- Object outObj = new Object();
-
- given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
- given(callDetector.callCreateInputRecord(recordFactory, inObj)).willReturn(inputRecord);
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord);
- given(callDetector.callExtractOutputData(outputRecord)).willReturn(outObj);
-
- assertThat(query.execute(inObj)).isSameAs(outObj);
- verify(interaction).close();
- verify(connection).close();
- }
-
- @Test
- public void testMappingRecordOperationWithOutputRecordCreator() throws ResourceException {
- ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
- Connection connection = mock(Connection.class);
- Interaction interaction = mock(Interaction.class);
- RecordFactory recordFactory = mock(RecordFactory.class);
-
- Record inputRecord = mock(Record.class);
- Record outputRecord = mock(Record.class);
-
- RecordCreator outputCreator = mock(RecordCreator.class);
-
- InteractionSpec interactionSpec = mock(InteractionSpec.class);
-
- QueryCallDetector callDetector = mock(QueryCallDetector.class);
-
- MappingRecordOperationImpl query = new MappingRecordOperationImpl(connectionFactory, interactionSpec);
- query.setOutputRecordCreator(outputCreator);
- query.setCallDetector(callDetector);
-
- Object inObj = new Object();
- Object outObj = new Object();
-
- given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
- given(callDetector.callCreateInputRecord(recordFactory, inObj)).willReturn(inputRecord);
- given(connectionFactory.getConnection()).willReturn(connection);
- given(connection.createInteraction()).willReturn(interaction);
- given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
- given(outputCreator.createRecord(recordFactory)).willReturn(outputRecord);
- given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);
- given(callDetector.callExtractOutputData(outputRecord)).willReturn(outObj);
-
- assertThat(query.execute(inObj)).isSameAs(outObj);
- verify(interaction).close();
- verify(connection).close();
- }
-
-
- private class MappingRecordOperationImpl extends MappingRecordOperation {
-
- private QueryCallDetector callDetector;
-
- public MappingRecordOperationImpl(ConnectionFactory connectionFactory, InteractionSpec interactionSpec) {
- super(connectionFactory, interactionSpec);
- }
-
- public void setCallDetector(QueryCallDetector callDetector) {
- this.callDetector = callDetector;
- }
-
- @Override
- protected Record createInputRecord(RecordFactory recordFactory, Object inputObject) {
- return this.callDetector.callCreateInputRecord(recordFactory, inputObject);
- }
-
- @Override
- protected Object extractOutputData(Record outputRecord) throws ResourceException {
- return this.callDetector.callExtractOutputData(outputRecord);
- }
- }
-
-
- private interface QueryCallDetector {
-
- Record callCreateInputRecord(RecordFactory recordFactory, Object inputObject);
-
- Object callExtractOutputData(Record outputRecord);
- }
-
-}
diff --git a/spring-tx/src/test/java/org/springframework/jca/support/LocalConnectionFactoryBeanTests.java b/spring-tx/src/test/java/org/springframework/jca/support/LocalConnectionFactoryBeanTests.java
index 37511b7dfaa..0ab4b95edda 100644
--- a/spring-tx/src/test/java/org/springframework/jca/support/LocalConnectionFactoryBeanTests.java
+++ b/spring-tx/src/test/java/org/springframework/jca/support/LocalConnectionFactoryBeanTests.java
@@ -16,9 +16,8 @@
package org.springframework.jca.support;
-import javax.resource.spi.ConnectionManager;
-import javax.resource.spi.ManagedConnectionFactory;
-
+import jakarta.resource.spi.ConnectionManager;
+import jakarta.resource.spi.ManagedConnectionFactory;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/spring-tx/src/test/java/org/springframework/transaction/JndiJtaTransactionManagerTests.java b/spring-tx/src/test/java/org/springframework/transaction/JndiJtaTransactionManagerTests.java
index 2319d34261f..611792ba826 100644
--- a/spring-tx/src/test/java/org/springframework/transaction/JndiJtaTransactionManagerTests.java
+++ b/spring-tx/src/test/java/org/springframework/transaction/JndiJtaTransactionManagerTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,10 +16,9 @@
package org.springframework.transaction;
-import javax.transaction.Status;
-import javax.transaction.TransactionManager;
-import javax.transaction.UserTransaction;
-
+import jakarta.transaction.Status;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.UserTransaction;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-tx/src/test/java/org/springframework/transaction/JtaTransactionManagerTests.java b/spring-tx/src/test/java/org/springframework/transaction/JtaTransactionManagerTests.java
index 8666e6155bf..84955e4cdea 100644
--- a/spring-tx/src/test/java/org/springframework/transaction/JtaTransactionManagerTests.java
+++ b/spring-tx/src/test/java/org/springframework/transaction/JtaTransactionManagerTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,16 +16,15 @@
package org.springframework.transaction;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.Status;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-import javax.transaction.UserTransaction;
-
+import jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
+import jakarta.transaction.NotSupportedException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.Status;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.UserTransaction;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
diff --git a/spring-tx/src/test/java/org/springframework/transaction/MockJtaTransaction.java b/spring-tx/src/test/java/org/springframework/transaction/MockJtaTransaction.java
index 2adbfa549bc..0b45ade6c55 100644
--- a/spring-tx/src/test/java/org/springframework/transaction/MockJtaTransaction.java
+++ b/spring-tx/src/test/java/org/springframework/transaction/MockJtaTransaction.java
@@ -16,15 +16,16 @@
package org.springframework.transaction;
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
import javax.transaction.xa.XAResource;
+import jakarta.transaction.Status;
+import jakarta.transaction.Synchronization;
+
/**
* @author Juergen Hoeller
* @since 31.08.2004
*/
-public class MockJtaTransaction implements javax.transaction.Transaction {
+public class MockJtaTransaction implements jakarta.transaction.Transaction {
private Synchronization synchronization;
diff --git a/spring-tx/src/test/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSourceTests.java b/spring-tx/src/test/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSourceTests.java
index d94dc4bf495..aa02845750a 100644
--- a/spring-tx/src/test/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSourceTests.java
+++ b/spring-tx/src/test/java/org/springframework/transaction/annotation/AnnotationTransactionAttributeSourceTests.java
@@ -22,10 +22,9 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
-import javax.ejb.TransactionAttributeType;
-
import groovy.lang.GroovyObject;
import groovy.lang.MetaClass;
+import jakarta.ejb.TransactionAttributeType;
import org.junit.jupiter.api.Test;
import org.springframework.aop.framework.Advised;
@@ -745,7 +744,7 @@ public class AnnotationTransactionAttributeSourceTests {
private int age;
@Override
- @javax.ejb.TransactionAttribute(TransactionAttributeType.SUPPORTS)
+ @jakarta.ejb.TransactionAttribute(TransactionAttributeType.SUPPORTS)
public String getName() {
return name;
}
@@ -756,7 +755,7 @@ public class AnnotationTransactionAttributeSourceTests {
}
@Override
- @javax.ejb.TransactionAttribute
+ @jakarta.ejb.TransactionAttribute
public int getAge() {
return age;
}
@@ -768,7 +767,7 @@ public class AnnotationTransactionAttributeSourceTests {
}
- @javax.ejb.TransactionAttribute(TransactionAttributeType.SUPPORTS)
+ @jakarta.ejb.TransactionAttribute(TransactionAttributeType.SUPPORTS)
static class Ejb3AnnotatedBean2 implements ITestBean1 {
private String name;
@@ -786,7 +785,7 @@ public class AnnotationTransactionAttributeSourceTests {
}
@Override
- @javax.ejb.TransactionAttribute
+ @jakarta.ejb.TransactionAttribute
public int getAge() {
return age;
}
@@ -798,10 +797,10 @@ public class AnnotationTransactionAttributeSourceTests {
}
- @javax.ejb.TransactionAttribute(TransactionAttributeType.SUPPORTS)
+ @jakarta.ejb.TransactionAttribute(TransactionAttributeType.SUPPORTS)
interface ITestEjb {
- @javax.ejb.TransactionAttribute
+ @jakarta.ejb.TransactionAttribute
int getAge();
void setAge(int age);
@@ -847,7 +846,7 @@ public class AnnotationTransactionAttributeSourceTests {
private int age;
@Override
- @javax.transaction.Transactional(javax.transaction.Transactional.TxType.SUPPORTS)
+ @jakarta.transaction.Transactional(jakarta.transaction.Transactional.TxType.SUPPORTS)
public String getName() {
return name;
}
@@ -858,7 +857,7 @@ public class AnnotationTransactionAttributeSourceTests {
}
@Override
- @javax.transaction.Transactional
+ @jakarta.transaction.Transactional
public int getAge() {
return age;
}
@@ -870,7 +869,7 @@ public class AnnotationTransactionAttributeSourceTests {
}
- @javax.transaction.Transactional(javax.transaction.Transactional.TxType.SUPPORTS)
+ @jakarta.transaction.Transactional(jakarta.transaction.Transactional.TxType.SUPPORTS)
static class JtaAnnotatedBean2 implements ITestBean1 {
private String name;
@@ -888,7 +887,7 @@ public class AnnotationTransactionAttributeSourceTests {
}
@Override
- @javax.transaction.Transactional
+ @jakarta.transaction.Transactional
public int getAge() {
return age;
}
@@ -900,10 +899,10 @@ public class AnnotationTransactionAttributeSourceTests {
}
- @javax.transaction.Transactional(javax.transaction.Transactional.TxType.SUPPORTS)
+ @jakarta.transaction.Transactional(jakarta.transaction.Transactional.TxType.SUPPORTS)
interface ITestJta {
- @javax.transaction.Transactional
+ @jakarta.transaction.Transactional
int getAge();
void setAge(int age);
diff --git a/spring-tx/src/test/java/org/springframework/transaction/jta/MockUOWManager.java b/spring-tx/src/test/java/org/springframework/transaction/jta/MockUOWManager.java
deleted file mode 100644
index 05c80273d3b..00000000000
--- a/spring-tx/src/test/java/org/springframework/transaction/jta/MockUOWManager.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2002-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.transaction.jta;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.transaction.Synchronization;
-
-import com.ibm.wsspi.uow.UOWAction;
-import com.ibm.wsspi.uow.UOWActionException;
-import com.ibm.wsspi.uow.UOWException;
-import com.ibm.wsspi.uow.UOWManager;
-
-/**
- * @author Juergen Hoeller
- */
-public class MockUOWManager implements UOWManager {
-
- private int type = UOW_TYPE_GLOBAL_TRANSACTION;
-
- private boolean joined;
-
- private int timeout;
-
- private boolean rollbackOnly;
-
- private int status = UOW_STATUS_NONE;
-
- private final Map resources = new HashMap<>();
-
- private final List synchronizations = new ArrayList<>();
-
-
- @Override
- public void runUnderUOW(int type, boolean join, UOWAction action) throws UOWActionException, UOWException {
- this.type = type;
- this.joined = join;
- try {
- this.status = UOW_STATUS_ACTIVE;
- action.run();
- this.status = (this.rollbackOnly ? UOW_STATUS_ROLLEDBACK : UOW_STATUS_COMMITTED);
- }
- catch (Error | RuntimeException ex) {
- this.status = UOW_STATUS_ROLLEDBACK;
- throw ex;
- }
- catch (Exception ex) {
- this.status = UOW_STATUS_ROLLEDBACK;
- throw new UOWActionException(ex);
- }
- }
-
- @Override
- public int getUOWType() {
- return this.type;
- }
-
- public boolean getJoined() {
- return this.joined;
- }
-
- @Override
- public long getLocalUOWId() {
- return 0;
- }
-
- @Override
- public void setUOWTimeout(int uowType, int timeout) {
- this.timeout = timeout;
- }
-
- @Override
- public int getUOWTimeout() {
- return this.timeout;
- }
-
- @Override
- public void setRollbackOnly() {
- this.rollbackOnly = true;
- }
-
- @Override
- public boolean getRollbackOnly() {
- return this.rollbackOnly;
- }
-
- public void setUOWStatus(int status) {
- this.status = status;
- }
-
- @Override
- public int getUOWStatus() {
- return this.status;
- }
-
- @Override
- public void putResource(Object key, Object value) {
- this.resources.put(key, value);
- }
-
- @Override
- public Object getResource(Object key) throws NullPointerException {
- return this.resources.get(key);
- }
-
- @Override
- public void registerInterposedSynchronization(Synchronization sync) {
- this.synchronizations.add(sync);
- }
-
- public List getSynchronizations() {
- return this.synchronizations;
- }
-
-}
diff --git a/spring-tx/src/test/java/org/springframework/transaction/jta/WebSphereUowTransactionManagerTests.java b/spring-tx/src/test/java/org/springframework/transaction/jta/WebSphereUowTransactionManagerTests.java
deleted file mode 100644
index 06b4675f3a5..00000000000
--- a/spring-tx/src/test/java/org/springframework/transaction/jta/WebSphereUowTransactionManagerTests.java
+++ /dev/null
@@ -1,656 +0,0 @@
-/*
- * Copyright 2002-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.transaction.jta;
-
-import javax.transaction.RollbackException;
-import javax.transaction.Status;
-import javax.transaction.UserTransaction;
-
-import com.ibm.wsspi.uow.UOWAction;
-import com.ibm.wsspi.uow.UOWException;
-import com.ibm.wsspi.uow.UOWManager;
-import org.junit.jupiter.api.Test;
-
-import org.springframework.context.testfixture.jndi.ExpectedLookupTemplate;
-import org.springframework.dao.OptimisticLockingFailureException;
-import org.springframework.transaction.IllegalTransactionStateException;
-import org.springframework.transaction.NestedTransactionNotSupportedException;
-import org.springframework.transaction.TransactionDefinition;
-import org.springframework.transaction.TransactionStatus;
-import org.springframework.transaction.TransactionSystemException;
-import org.springframework.transaction.support.DefaultTransactionDefinition;
-import org.springframework.transaction.support.TransactionCallback;
-import org.springframework.transaction.support.TransactionSynchronizationManager;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
-import static org.mockito.BDDMockito.given;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-/**
- * @author Juergen Hoeller
- */
-public class WebSphereUowTransactionManagerTests {
-
- @Test
- public void uowManagerFoundInJndi() {
- MockUOWManager manager = new MockUOWManager();
- ExpectedLookupTemplate jndiTemplate =
- new ExpectedLookupTemplate(WebSphereUowTransactionManager.DEFAULT_UOW_MANAGER_NAME, manager);
- WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager();
- ptm.setJndiTemplate(jndiTemplate);
- ptm.afterPropertiesSet();
-
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
- assertThat(ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- return "result";
- }
- })).isEqualTo("result");
-
- assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION);
- assertThat(manager.getJoined()).isFalse();
- assertThat(manager.getRollbackOnly()).isFalse();
- }
-
- @Test
- public void uowManagerAndUserTransactionFoundInJndi() throws Exception {
- UserTransaction ut = mock(UserTransaction.class);
- given(ut.getStatus()).willReturn( Status.STATUS_NO_TRANSACTION, Status.STATUS_ACTIVE, Status.STATUS_ACTIVE);
-
- MockUOWManager manager = new MockUOWManager();
- ExpectedLookupTemplate jndiTemplate = new ExpectedLookupTemplate();
- jndiTemplate.addObject(WebSphereUowTransactionManager.DEFAULT_USER_TRANSACTION_NAME, ut);
- jndiTemplate.addObject(WebSphereUowTransactionManager.DEFAULT_UOW_MANAGER_NAME, manager);
- WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager();
- ptm.setJndiTemplate(jndiTemplate);
- ptm.afterPropertiesSet();
-
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
- TransactionStatus ts = ptm.getTransaction(definition);
- ptm.commit(ts);
- assertThat(ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- return "result";
- }
- })).isEqualTo("result");
-
- assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION);
- assertThat(manager.getJoined()).isFalse();
- assertThat(manager.getRollbackOnly()).isFalse();
- verify(ut).begin();
- verify(ut).commit();
- }
-
- @Test
- public void propagationMandatoryFailsInCaseOfNoExistingTransaction() {
- MockUOWManager manager = new MockUOWManager();
- WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager);
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
- definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_MANDATORY);
-
- assertThatExceptionOfType(IllegalTransactionStateException.class).isThrownBy(() ->
- ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- return "result";
- }
- }));
- }
-
- @Test
- public void newTransactionSynchronizationUsingPropagationSupports() {
- doTestNewTransactionSynchronization(
- TransactionDefinition.PROPAGATION_SUPPORTS, WebSphereUowTransactionManager.SYNCHRONIZATION_ALWAYS);
- }
-
- @Test
- public void newTransactionSynchronizationUsingPropagationNotSupported() {
- doTestNewTransactionSynchronization(
- TransactionDefinition.PROPAGATION_NOT_SUPPORTED, WebSphereUowTransactionManager.SYNCHRONIZATION_ALWAYS);
- }
-
- @Test
- public void newTransactionSynchronizationUsingPropagationNever() {
- doTestNewTransactionSynchronization(
- TransactionDefinition.PROPAGATION_NEVER, WebSphereUowTransactionManager.SYNCHRONIZATION_ALWAYS);
- }
-
- @Test
- public void newTransactionSynchronizationUsingPropagationSupportsAndSynchOnActual() {
- doTestNewTransactionSynchronization(
- TransactionDefinition.PROPAGATION_SUPPORTS, WebSphereUowTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION);
- }
-
- @Test
- public void newTransactionSynchronizationUsingPropagationNotSupportedAndSynchOnActual() {
- doTestNewTransactionSynchronization(
- TransactionDefinition.PROPAGATION_NOT_SUPPORTED, WebSphereUowTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION);
- }
-
- @Test
- public void newTransactionSynchronizationUsingPropagationNeverAndSynchOnActual() {
- doTestNewTransactionSynchronization(
- TransactionDefinition.PROPAGATION_NEVER, WebSphereUowTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION);
- }
-
- @Test
- public void newTransactionSynchronizationUsingPropagationSupportsAndSynchNever() {
- doTestNewTransactionSynchronization(
- TransactionDefinition.PROPAGATION_SUPPORTS, WebSphereUowTransactionManager.SYNCHRONIZATION_NEVER);
- }
-
- @Test
- public void newTransactionSynchronizationUsingPropagationNotSupportedAndSynchNever() {
- doTestNewTransactionSynchronization(
- TransactionDefinition.PROPAGATION_NOT_SUPPORTED, WebSphereUowTransactionManager.SYNCHRONIZATION_NEVER);
- }
-
- @Test
- public void newTransactionSynchronizationUsingPropagationNeverAndSynchNever() {
- doTestNewTransactionSynchronization(
- TransactionDefinition.PROPAGATION_NEVER, WebSphereUowTransactionManager.SYNCHRONIZATION_NEVER);
- }
-
- private void doTestNewTransactionSynchronization(int propagationBehavior, final int synchMode) {
- MockUOWManager manager = new MockUOWManager();
- WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager);
- ptm.setTransactionSynchronization(synchMode);
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
- definition.setPropagationBehavior(propagationBehavior);
- definition.setReadOnly(true);
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- if (synchMode == WebSphereUowTransactionManager.SYNCHRONIZATION_ALWAYS) {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isTrue();
- }
- else {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
- }
- return "result";
- }
- })).isEqualTo("result");
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(manager.getUOWTimeout()).isEqualTo(0);
- assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_LOCAL_TRANSACTION);
- assertThat(manager.getJoined()).isFalse();
- assertThat(manager.getRollbackOnly()).isFalse();
- }
-
- @Test
- public void newTransactionWithCommitUsingPropagationRequired() {
- doTestNewTransactionWithCommit(
- TransactionDefinition.PROPAGATION_REQUIRED, WebSphereUowTransactionManager.SYNCHRONIZATION_ALWAYS);
- }
-
- @Test
- public void newTransactionWithCommitUsingPropagationRequiresNew() {
- doTestNewTransactionWithCommit(
- TransactionDefinition.PROPAGATION_REQUIRES_NEW, WebSphereUowTransactionManager.SYNCHRONIZATION_ALWAYS);
- }
-
- @Test
- public void newTransactionWithCommitUsingPropagationNested() {
- doTestNewTransactionWithCommit(
- TransactionDefinition.PROPAGATION_NESTED, WebSphereUowTransactionManager.SYNCHRONIZATION_ALWAYS);
- }
-
- @Test
- public void newTransactionWithCommitUsingPropagationRequiredAndSynchOnActual() {
- doTestNewTransactionWithCommit(
- TransactionDefinition.PROPAGATION_REQUIRED, WebSphereUowTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION);
- }
-
- @Test
- public void newTransactionWithCommitUsingPropagationRequiresNewAndSynchOnActual() {
- doTestNewTransactionWithCommit(
- TransactionDefinition.PROPAGATION_REQUIRES_NEW, WebSphereUowTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION);
- }
-
- @Test
- public void newTransactionWithCommitUsingPropagationNestedAndSynchOnActual() {
- doTestNewTransactionWithCommit(
- TransactionDefinition.PROPAGATION_NESTED, WebSphereUowTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION);
- }
-
- @Test
- public void newTransactionWithCommitUsingPropagationRequiredAndSynchNever() {
- doTestNewTransactionWithCommit(
- TransactionDefinition.PROPAGATION_REQUIRED, WebSphereUowTransactionManager.SYNCHRONIZATION_NEVER);
- }
-
- @Test
- public void newTransactionWithCommitUsingPropagationRequiresNewAndSynchNever() {
- doTestNewTransactionWithCommit(
- TransactionDefinition.PROPAGATION_REQUIRES_NEW, WebSphereUowTransactionManager.SYNCHRONIZATION_NEVER);
- }
-
- @Test
- public void newTransactionWithCommitUsingPropagationNestedAndSynchNever() {
- doTestNewTransactionWithCommit(
- TransactionDefinition.PROPAGATION_NESTED, WebSphereUowTransactionManager.SYNCHRONIZATION_NEVER);
- }
-
- private void doTestNewTransactionWithCommit(int propagationBehavior, final int synchMode) {
- MockUOWManager manager = new MockUOWManager();
- WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager);
- ptm.setTransactionSynchronization(synchMode);
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
- definition.setPropagationBehavior(propagationBehavior);
- definition.setReadOnly(true);
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- if (synchMode != WebSphereUowTransactionManager.SYNCHRONIZATION_NEVER) {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isTrue();
- }
- else {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
- }
- return "result";
- }
- })).isEqualTo("result");
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(manager.getUOWTimeout()).isEqualTo(0);
- assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION);
- assertThat(manager.getJoined()).isFalse();
- assertThat(manager.getRollbackOnly()).isFalse();
- }
-
- @Test
- public void newTransactionWithCommitAndTimeout() {
- MockUOWManager manager = new MockUOWManager();
- WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager);
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
- definition.setTimeout(10);
- definition.setReadOnly(true);
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isTrue();
- return "result";
- }
- })).isEqualTo("result");
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(manager.getUOWTimeout()).isEqualTo(10);
- assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION);
- assertThat(manager.getJoined()).isFalse();
- assertThat(manager.getRollbackOnly()).isFalse();
- }
-
- @Test
- public void newTransactionWithCommitException() {
- final RollbackException rex = new RollbackException();
- MockUOWManager manager = new MockUOWManager() {
- @Override
- public void runUnderUOW(int type, boolean join, UOWAction action) throws UOWException {
- throw new UOWException(rex);
- }
- };
- WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager);
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThatExceptionOfType(TransactionSystemException.class).isThrownBy(() ->
- ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
- return "result";
- }
- }))
- .withCauseInstanceOf(UOWException.class)
- .satisfies(ex -> {
- assertThat(ex.getRootCause()).isSameAs(rex);
- assertThat(ex.getMostSpecificCause()).isSameAs(rex);
- });
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(manager.getUOWTimeout()).isEqualTo(0);
- }
-
- @Test
- public void newTransactionWithRollback() {
- MockUOWManager manager = new MockUOWManager();
- WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager);
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThatExceptionOfType(OptimisticLockingFailureException.class).isThrownBy(() ->
- ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
- throw new OptimisticLockingFailureException("");
- }
- }));
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(manager.getUOWTimeout()).isEqualTo(0);
- assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION);
- assertThat(manager.getJoined()).isFalse();
- assertThat(manager.getRollbackOnly()).isTrue();
- }
-
- @Test
- public void newTransactionWithRollbackOnly() {
- MockUOWManager manager = new MockUOWManager();
- WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager);
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
- status.setRollbackOnly();
- return "result";
- }
- })).isEqualTo("result");
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(manager.getUOWTimeout()).isEqualTo(0);
- assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION);
- assertThat(manager.getJoined()).isFalse();
- assertThat(manager.getRollbackOnly()).isTrue();
- }
-
- @Test
- public void existingNonSpringTransaction() {
- MockUOWManager manager = new MockUOWManager();
- manager.setUOWStatus(UOWManager.UOW_STATUS_ACTIVE);
- WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager);
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
- return "result";
- }
- })).isEqualTo("result");
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(manager.getUOWTimeout()).isEqualTo(0);
- assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION);
- assertThat(manager.getJoined()).isTrue();
- assertThat(manager.getRollbackOnly()).isFalse();
- }
-
- @Test
- public void propagationNeverFailsInCaseOfExistingTransaction() {
- MockUOWManager manager = new MockUOWManager();
- manager.setUOWStatus(UOWManager.UOW_STATUS_ACTIVE);
- WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager);
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
- definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_NEVER);
-
- assertThatExceptionOfType(IllegalTransactionStateException.class).isThrownBy(() ->
- ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- return "result";
- }
- }));
- }
-
- @Test
- public void propagationNestedFailsInCaseOfExistingTransaction() {
- MockUOWManager manager = new MockUOWManager();
- manager.setUOWStatus(UOWManager.UOW_STATUS_ACTIVE);
- WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager);
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
- definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_NESTED);
-
- assertThatExceptionOfType(NestedTransactionNotSupportedException.class).isThrownBy(() ->
- ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- return "result";
- }
- }));
- }
-
- @Test
- public void existingTransactionWithParticipationUsingPropagationRequired() {
- doTestExistingTransactionWithParticipation(TransactionDefinition.PROPAGATION_REQUIRED);
- }
-
- @Test
- public void existingTransactionWithParticipationUsingPropagationSupports() {
- doTestExistingTransactionWithParticipation(TransactionDefinition.PROPAGATION_SUPPORTS);
- }
-
- @Test
- public void existingTransactionWithParticipationUsingPropagationMandatory() {
- doTestExistingTransactionWithParticipation(TransactionDefinition.PROPAGATION_MANDATORY);
- }
-
- private void doTestExistingTransactionWithParticipation(int propagationBehavior) {
- MockUOWManager manager = new MockUOWManager();
- final WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager);
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
- final DefaultTransactionDefinition definition2 = new DefaultTransactionDefinition();
- definition2.setPropagationBehavior(propagationBehavior);
- definition2.setReadOnly(true);
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
- assertThat(ptm.execute(definition2, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status1) {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
- return "result2";
- }
- })).isEqualTo("result2");
- return "result";
- }
- })).isEqualTo("result");
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(manager.getUOWTimeout()).isEqualTo(0);
- assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION);
- assertThat(manager.getJoined()).isTrue();
- assertThat(manager.getRollbackOnly()).isFalse();
- }
-
- @Test
- public void existingTransactionWithSuspensionUsingPropagationRequiresNew() {
- doTestExistingTransactionWithSuspension(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
- }
-
- @Test
- public void existingTransactionWithSuspensionUsingPropagationNotSupported() {
- doTestExistingTransactionWithSuspension(TransactionDefinition.PROPAGATION_NOT_SUPPORTED);
- }
-
- private void doTestExistingTransactionWithSuspension(final int propagationBehavior) {
- MockUOWManager manager = new MockUOWManager();
- final WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager);
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
- final DefaultTransactionDefinition definition2 = new DefaultTransactionDefinition();
- definition2.setPropagationBehavior(propagationBehavior);
- definition2.setReadOnly(true);
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
- assertThat(ptm.execute(definition2, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status1) {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isEqualTo((propagationBehavior == TransactionDefinition.PROPAGATION_REQUIRES_NEW));
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isTrue();
- return "result2";
- }
- })).isEqualTo("result2");
- return "result";
- }
- })).isEqualTo("result");
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(manager.getUOWTimeout()).isEqualTo(0);
- if (propagationBehavior == TransactionDefinition.PROPAGATION_REQUIRES_NEW) {
- assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_GLOBAL_TRANSACTION);
- }
- else {
- assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_LOCAL_TRANSACTION);
- }
- assertThat(manager.getJoined()).isFalse();
- assertThat(manager.getRollbackOnly()).isFalse();
- }
-
- @Test
- public void existingTransactionUsingPropagationNotSupported() {
- MockUOWManager manager = new MockUOWManager();
- final WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager);
- DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
- final DefaultTransactionDefinition definition2 = new DefaultTransactionDefinition();
- definition2.setPropagationBehavior(TransactionDefinition.PROPAGATION_NOT_SUPPORTED);
- definition2.setReadOnly(true);
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(ptm.execute(definition, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status) {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
- assertThat(ptm.execute(definition2, new TransactionCallback() {
- @Override
- public String doInTransaction(TransactionStatus status1) {
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isTrue();
- return "result2";
- }
- })).isEqualTo("result2");
- return "result";
- }
- })).isEqualTo("result");
-
- assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isActualTransactionActive()).isFalse();
- assertThat(TransactionSynchronizationManager.isCurrentTransactionReadOnly()).isFalse();
-
- assertThat(manager.getUOWTimeout()).isEqualTo(0);
- assertThat(manager.getUOWType()).isEqualTo(UOWManager.UOW_TYPE_LOCAL_TRANSACTION);
- assertThat(manager.getJoined()).isFalse();
- assertThat(manager.getRollbackOnly()).isFalse();
- }
-
-}
diff --git a/spring-tx/src/test/java/org/springframework/transaction/support/JtaTransactionManagerSerializationTests.java b/spring-tx/src/test/java/org/springframework/transaction/support/JtaTransactionManagerSerializationTests.java
index d5390e33cb0..296e08a6cac 100644
--- a/spring-tx/src/test/java/org/springframework/transaction/support/JtaTransactionManagerSerializationTests.java
+++ b/spring-tx/src/test/java/org/springframework/transaction/support/JtaTransactionManagerSerializationTests.java
@@ -16,9 +16,8 @@
package org.springframework.transaction.support;
-import javax.transaction.TransactionManager;
-import javax.transaction.UserTransaction;
-
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.UserTransaction;
import org.junit.jupiter.api.Test;
import org.springframework.context.testfixture.jndi.SimpleNamingContextBuilder;
diff --git a/spring-web/spring-web.gradle b/spring-web/spring-web.gradle
index 716ecb4cecf..f0e341db5d0 100644
--- a/spring-web/spring-web.gradle
+++ b/spring-web/spring-web.gradle
@@ -10,16 +10,14 @@ dependencies {
optional(project(":spring-aop"))
optional(project(":spring-context"))
optional(project(":spring-oxm"))
- optional("javax.servlet:javax.servlet-api") // Servlet 4 for mapping type
- optional("javax.servlet.jsp:javax.servlet.jsp-api")
- optional("javax.el:javax.el-api")
- optional("javax.faces:javax.faces-api")
- optional("javax.json.bind:javax.json.bind-api")
- optional("javax.mail:javax.mail-api")
- optional("javax.validation:validation-api")
- optional("javax.xml.bind:jaxb-api")
- optional("javax.xml.ws:jaxws-api")
- optional("org.glassfish.main:javax.jws")
+ optional("jakarta.servlet:jakarta.servlet-api")
+ optional("jakarta.servlet.jsp:jakarta.servlet.jsp-api")
+ optional("jakarta.el:jakarta.el-api")
+ optional("jakarta.faces:jakarta.faces-api")
+ optional("jakarta.json.bind:jakarta.json.bind-api")
+ optional("jakarta.mail:jakarta.mail-api")
+ optional("jakarta.validation:jakarta.validation-api")
+ optional("jakarta.xml.bind:jakarta.xml.bind-api")
optional("io.reactivex.rxjava3:rxjava")
optional("io.netty:netty-buffer")
optional("io.netty:netty-handler")
@@ -29,10 +27,10 @@ dependencies {
optional("io.undertow:undertow-core")
optional("org.apache.tomcat.embed:tomcat-embed-core")
optional("org.eclipse.jetty:jetty-server") {
- exclude group: "javax.servlet", module: "javax.servlet-api"
+ exclude group: "jakarta.servlet", module: "jakarta.servlet-api"
}
optional("org.eclipse.jetty:jetty-servlet") {
- exclude group: "javax.servlet", module: "javax.servlet-api"
+ exclude group: "jakarta.servlet", module: "jakarta.servlet-api"
}
optional("org.eclipse.jetty:jetty-reactive-httpclient")
optional('org.apache.httpcomponents.client5:httpclient5')
@@ -40,8 +38,6 @@ dependencies {
optional("com.squareup.okhttp3:okhttp")
optional("org.apache.httpcomponents:httpclient")
optional("org.apache.httpcomponents:httpasyncclient")
- optional("commons-fileupload:commons-fileupload")
- optional("org.synchronoss.cloud:nio-multipart-parser")
optional("com.fasterxml.woodstox:woodstox-core")
optional("com.fasterxml:aalto-xml")
optional("com.fasterxml.jackson.core:jackson-databind")
@@ -52,7 +48,6 @@ dependencies {
optional("com.google.protobuf:protobuf-java-util")
optional("com.googlecode.protobuf-java-format:protobuf-java-format")
optional("com.rometools:rome")
- optional("com.caucho:hessian")
optional("org.codehaus.groovy:groovy")
optional("org.jetbrains.kotlin:kotlin-reflect")
optional("org.jetbrains.kotlin:kotlin-stdlib")
@@ -61,9 +56,7 @@ dependencies {
testImplementation(testFixtures(project(":spring-context")))
testImplementation(testFixtures(project(":spring-core")))
testImplementation("io.projectreactor:reactor-test")
- testImplementation("org.apache.taglibs:taglibs-standard-jstlel")
testImplementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8")
- testImplementation("com.fasterxml.jackson.datatype:jackson-datatype-joda")
testImplementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
testImplementation("com.fasterxml.jackson.module:jackson-module-kotlin")
testImplementation("org.apache.tomcat:tomcat-util")
@@ -76,16 +69,15 @@ dependencies {
testImplementation("org.xmlunit:xmlunit-assertj")
testImplementation("org.xmlunit:xmlunit-matchers")
testImplementation("io.projectreactor.tools:blockhound")
- testRuntimeOnly("com.sun.mail:javax.mail")
+ testRuntimeOnly("com.sun.mail:jakarta.mail")
testRuntimeOnly("com.sun.xml.bind:jaxb-core")
testRuntimeOnly("com.sun.xml.bind:jaxb-impl")
- testRuntimeOnly("javax.json:javax.json-api")
- testRuntimeOnly("org.apache.johnzon:johnzon-jsonb")
- testFixturesApi("javax.servlet:javax.servlet-api")
+ testRuntimeOnly("jakarta.json:jakarta.json-api")
+ testRuntimeOnly("org.eclipse:yasson")
+ testFixturesApi("jakarta.servlet:jakarta.servlet-api")
testFixturesApi("org.junit.jupiter:junit-jupiter-api")
testFixturesApi("org.junit.jupiter:junit-jupiter-params")
testFixturesImplementation("io.projectreactor:reactor-test")
- testFixturesImplementation("org.apache.taglibs:taglibs-standard-jstlel")
testFixturesImplementation("org.assertj:assertj-core")
testFixturesImplementation("org.bouncycastle:bcpkix-jdk15on") {
because("needed by Netty's SelfSignedCertificate on JDK 15+")
diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpRequest.java b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpRequest.java
index 8aabf895792..80ad419ef49 100644
--- a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpRequest.java
+++ b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpRequest.java
@@ -54,7 +54,6 @@ class JettyClientHttpRequest extends AbstractClientHttpRequest {
private final ReactiveRequest.Builder builder;
-
public JettyClientHttpRequest(Request jettyRequest, DataBufferFactory bufferFactory) {
this.jettyRequest = jettyRequest;
this.bufferFactory = bufferFactory;
@@ -137,10 +136,12 @@ class JettyClientHttpRequest extends AbstractClientHttpRequest {
@Override
protected void applyHeaders() {
HttpHeaders headers = getHeaders();
- headers.forEach((key, value) -> value.forEach(v -> this.jettyRequest.header(key, v)));
- if (!headers.containsKey(HttpHeaders.ACCEPT)) {
- this.jettyRequest.header(HttpHeaders.ACCEPT, "*/*");
- }
+ this.jettyRequest.headers(fields -> {
+ headers.forEach((key, value) -> value.forEach(v -> fields.add(key, v)));
+ if (!headers.containsKey(HttpHeaders.ACCEPT)) {
+ fields.add(HttpHeaders.ACCEPT, "*/*");
+ }
+ });
}
public ReactiveRequest toReactiveRequest() {
diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpResponse.java b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpResponse.java
index 5d88c83ddf6..22cde72ac28 100644
--- a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpResponse.java
+++ b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpResponse.java
@@ -16,13 +16,11 @@
package org.springframework.http.client.reactive;
-import java.lang.reflect.Method;
import java.net.HttpCookie;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.eclipse.jetty.client.api.Response;
import org.eclipse.jetty.reactive.client.ReactiveResponse;
import org.reactivestreams.Publisher;
import reactor.core.publisher.Flux;
@@ -32,11 +30,9 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseCookie;
import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
-import org.springframework.util.ReflectionUtils;
/**
* {@link ClientHttpResponse} implementation for the Jetty ReactiveStreams HTTP client.
@@ -50,10 +46,6 @@ class JettyClientHttpResponse implements ClientHttpResponse {
private static final Pattern SAMESITE_PATTERN = Pattern.compile("(?i).*SameSite=(Strict|Lax|None).*");
- private static final ClassLoader classLoader = JettyClientHttpResponse.class.getClassLoader();
-
- private static final boolean jetty10Present;
-
private final ReactiveResponse reactiveResponse;
@@ -62,25 +54,11 @@ class JettyClientHttpResponse implements ClientHttpResponse {
private final HttpHeaders headers;
- static {
- try {
- Class> httpFieldsClass = classLoader.loadClass("org.eclipse.jetty.http.HttpFields");
- jetty10Present = httpFieldsClass.isInterface();
- }
- catch (ClassNotFoundException ex) {
- throw new IllegalStateException("No compatible Jetty version found", ex);
- }
- }
-
-
public JettyClientHttpResponse(ReactiveResponse reactiveResponse, Publisher content) {
this.reactiveResponse = reactiveResponse;
this.content = Flux.from(content);
- MultiValueMap headers = (jetty10Present ?
- Jetty10HttpFieldsHelper.getHttpHeaders(reactiveResponse) :
- new JettyHeadersAdapter(reactiveResponse.getHeaders()));
-
+ MultiValueMap headers = new JettyHeadersAdapter(reactiveResponse.getHeaders());
this.headers = HttpHeaders.readOnlyHttpHeaders(headers);
}
@@ -132,40 +110,4 @@ class JettyClientHttpResponse implements ClientHttpResponse {
return this.headers;
}
-
- private static class Jetty10HttpFieldsHelper {
-
- private static final Method getHeadersMethod;
-
- private static final Method getNameMethod;
-
- private static final Method getValueMethod;
-
- static {
- try {
- getHeadersMethod = Response.class.getMethod("getHeaders");
- Class> type = classLoader.loadClass("org.eclipse.jetty.http.HttpField");
- getNameMethod = type.getMethod("getName");
- getValueMethod = type.getMethod("getValue");
- }
- catch (ClassNotFoundException | NoSuchMethodException ex) {
- throw new IllegalStateException("No compatible Jetty version found", ex);
- }
- }
-
- public static HttpHeaders getHttpHeaders(ReactiveResponse response) {
- HttpHeaders headers = new HttpHeaders();
- Iterable> iterator = (Iterable>)
- ReflectionUtils.invokeMethod(getHeadersMethod, response.getResponse());
- Assert.notNull(iterator, "Iterator must not be null");
- for (Object field : iterator) {
- String name = (String) ReflectionUtils.invokeMethod(getNameMethod, field);
- Assert.notNull(name, "Header name must not be null");
- String value = (String) ReflectionUtils.invokeMethod(getValueMethod, field);
- headers.add(name, value);
- }
- return headers;
- }
- }
-
}
diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyHeadersAdapter.java b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyHeadersAdapter.java
index f44362c9c3a..6d42dc76204 100644
--- a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyHeadersAdapter.java
+++ b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyHeadersAdapter.java
@@ -39,6 +39,7 @@ import org.springframework.util.MultiValueMap;
* There is a duplicate of this class in the server package!
*
* @author Rossen Stoyanchev
+ * @author Juergen Hoeller
* @since 5.3
*/
class JettyHeadersAdapter implements MultiValueMap {
@@ -58,7 +59,10 @@ class JettyHeadersAdapter implements MultiValueMap {
@Override
public void add(String key, @Nullable String value) {
- this.headers.add(key, value);
+ if (!(this.headers instanceof HttpFields.Mutable)) {
+ throw new IllegalStateException("Immutable headers");
+ }
+ ((HttpFields.Mutable) this.headers).add(key, value);
}
@Override
@@ -73,7 +77,10 @@ class JettyHeadersAdapter implements MultiValueMap {
@Override
public void set(String key, @Nullable String value) {
- this.headers.put(key, value);
+ if (!(this.headers instanceof HttpFields.Mutable)) {
+ throw new IllegalStateException("Immutable headers");
+ }
+ ((HttpFields.Mutable) this.headers).put(key, value);
}
@Override
@@ -105,7 +112,7 @@ class JettyHeadersAdapter implements MultiValueMap {
@Override
public boolean containsKey(Object key) {
- return (key instanceof String && this.headers.containsKey((String) key));
+ return (key instanceof String && this.headers.contains((String) key));
}
@Override
@@ -126,17 +133,23 @@ class JettyHeadersAdapter implements MultiValueMap {
@Nullable
@Override
public List put(String key, List value) {
+ if (!(this.headers instanceof HttpFields.Mutable)) {
+ throw new IllegalStateException("Immutable headers");
+ }
List oldValues = get(key);
- this.headers.put(key, value);
+ ((HttpFields.Mutable) this.headers).put(key, value);
return oldValues;
}
@Nullable
@Override
public List remove(Object key) {
+ if (!(this.headers instanceof HttpFields.Mutable)) {
+ throw new IllegalStateException("Immutable headers");
+ }
if (key instanceof String) {
List oldValues = get(key);
- this.headers.remove((String) key);
+ ((HttpFields.Mutable) this.headers).remove((String) key);
return oldValues;
}
return null;
@@ -149,7 +162,10 @@ class JettyHeadersAdapter implements MultiValueMap {
@Override
public void clear() {
- this.headers.clear();
+ if (!(this.headers instanceof HttpFields.Mutable)) {
+ throw new IllegalStateException("Immutable headers");
+ }
+ ((HttpFields.Mutable) this.headers).clear();
}
@Override
@@ -221,8 +237,11 @@ class JettyHeadersAdapter implements MultiValueMap {
@Override
public List setValue(List value) {
+ if (!(headers instanceof HttpFields.Mutable)) {
+ throw new IllegalStateException("Immutable headers");
+ }
List previousValues = headers.getValuesList(this.key);
- headers.put(this.key, value);
+ ((HttpFields.Mutable) headers).put(this.key, value);
return previousValues;
}
}
@@ -266,13 +285,16 @@ class JettyHeadersAdapter implements MultiValueMap {
@Override
public void remove() {
+ if (!(headers instanceof HttpFields.Mutable)) {
+ throw new IllegalStateException("Immutable headers");
+ }
if (this.currentName == null) {
throw new IllegalStateException("No current Header in iterator");
}
- if (!headers.containsKey(this.currentName)) {
+ if (!headers.contains(this.currentName)) {
throw new IllegalStateException("Header not present: " + this.currentName);
}
- headers.remove(this.currentName);
+ ((HttpFields.Mutable) headers).remove(this.currentName);
}
}
diff --git a/spring-web/src/main/java/org/springframework/http/codec/ServerCodecConfigurer.java b/spring-web/src/main/java/org/springframework/http/codec/ServerCodecConfigurer.java
index 4bbefc8c939..c6f9222a19c 100644
--- a/spring-web/src/main/java/org/springframework/http/codec/ServerCodecConfigurer.java
+++ b/spring-web/src/main/java/org/springframework/http/codec/ServerCodecConfigurer.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -84,13 +84,6 @@ public interface ServerCodecConfigurer extends CodecConfigurer {
/**
* Configure the {@code HttpMessageReader} to use for multipart requests.
- * By default, if
- * Synchronoss NIO Multipart
- * is present, this is set to
- * {@link org.springframework.http.codec.multipart.MultipartHttpMessageReader
- * MultipartHttpMessageReader} created with an instance of
- * {@link org.springframework.http.codec.multipart.SynchronossPartHttpMessageReader
- * SynchronossPartHttpMessageReader}.
*
Note that {@link #maxInMemorySize(int)} and/or
* {@link #enableLoggingRequestDetails(boolean)}, if configured, will be
* applied to the given reader, if applicable.
diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java
deleted file mode 100644
index 032b787d887..00000000000
--- a/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java
+++ /dev/null
@@ -1,597 +0,0 @@
-/*
- * Copyright 2002-2021 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.http.codec.multipart;
-
-import java.io.IOException;
-import java.nio.channels.Channels;
-import java.nio.channels.FileChannel;
-import java.nio.channels.ReadableByteChannel;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.OpenOption;
-import java.nio.file.Path;
-import java.nio.file.StandardOpenOption;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.function.Consumer;
-
-import org.synchronoss.cloud.nio.multipart.DefaultPartBodyStreamStorageFactory;
-import org.synchronoss.cloud.nio.multipart.Multipart;
-import org.synchronoss.cloud.nio.multipart.MultipartContext;
-import org.synchronoss.cloud.nio.multipart.MultipartUtils;
-import org.synchronoss.cloud.nio.multipart.NioMultipartParser;
-import org.synchronoss.cloud.nio.multipart.NioMultipartParserListener;
-import org.synchronoss.cloud.nio.multipart.PartBodyStreamStorageFactory;
-import org.synchronoss.cloud.nio.stream.storage.StreamStorage;
-import reactor.core.publisher.BaseSubscriber;
-import reactor.core.publisher.Flux;
-import reactor.core.publisher.FluxSink;
-import reactor.core.publisher.Mono;
-import reactor.core.publisher.SignalType;
-import reactor.core.scheduler.Schedulers;
-
-import org.springframework.core.ResolvableType;
-import org.springframework.core.codec.DecodingException;
-import org.springframework.core.codec.Hints;
-import org.springframework.core.io.buffer.DataBuffer;
-import org.springframework.core.io.buffer.DataBufferLimitException;
-import org.springframework.core.io.buffer.DataBufferUtils;
-import org.springframework.core.io.buffer.DefaultDataBufferFactory;
-import org.springframework.core.log.LogFormatUtils;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.ReactiveHttpInputMessage;
-import org.springframework.http.codec.HttpMessageReader;
-import org.springframework.http.codec.LoggingCodecSupport;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-
-/**
- * {@code HttpMessageReader} for parsing {@code "multipart/form-data"} requests
- * to a stream of {@link Part}'s using the Synchronoss NIO Multipart library.
- *
- *
This reader can be provided to {@link MultipartHttpMessageReader} in order
- * to aggregate all parts into a Map.
- *
- * @author Sebastien Deleuze
- * @author Rossen Stoyanchev
- * @author Arjen Poutsma
- * @author Brian Clozel
- * @since 5.0
- * @see Synchronoss NIO Multipart
- * @see MultipartHttpMessageReader
- */
-public class SynchronossPartHttpMessageReader extends LoggingCodecSupport implements HttpMessageReader {
-
- private static final String FILE_STORAGE_DIRECTORY_PREFIX = "synchronoss-file-upload-";
-
- private int maxInMemorySize = 256 * 1024;
-
- private long maxDiskUsagePerPart = -1;
-
- private int maxParts = -1;
-
- private final AtomicReference fileStorageDirectory = new AtomicReference<>();
-
-
- /**
- * Configure the maximum amount of memory that is allowed to use per part.
- * When the limit is exceeded:
- *
- * file parts are written to a temporary file.
- * non-file parts are rejected with {@link DataBufferLimitException}.
- *
- * By default this is set to 256K.
- * @param byteCount the in-memory limit in bytes; if set to -1 this limit is
- * not enforced, and all parts may be written to disk and are limited only
- * by the {@link #setMaxDiskUsagePerPart(long) maxDiskUsagePerPart} property.
- * @since 5.1.11
- */
- public void setMaxInMemorySize(int byteCount) {
- this.maxInMemorySize = byteCount;
- }
-
- /**
- * Get the {@link #setMaxInMemorySize configured} maximum in-memory size.
- * @since 5.1.11
- */
- public int getMaxInMemorySize() {
- return this.maxInMemorySize;
- }
-
- /**
- * Configure the maximum amount of disk space allowed for file parts.
- *
By default this is set to -1.
- * @param maxDiskUsagePerPart the disk limit in bytes, or -1 for unlimited
- * @since 5.1.11
- */
- public void setMaxDiskUsagePerPart(long maxDiskUsagePerPart) {
- this.maxDiskUsagePerPart = maxDiskUsagePerPart;
- }
-
- /**
- * Get the {@link #setMaxDiskUsagePerPart configured} maximum disk usage.
- * @since 5.1.11
- */
- public long getMaxDiskUsagePerPart() {
- return this.maxDiskUsagePerPart;
- }
-
- /**
- * Specify the maximum number of parts allowed in a given multipart request.
- * @since 5.1.11
- */
- public void setMaxParts(int maxParts) {
- this.maxParts = maxParts;
- }
-
- /**
- * Return the {@link #setMaxParts configured} limit on the number of parts.
- * @since 5.1.11
- */
- public int getMaxParts() {
- return this.maxParts;
- }
-
- /**
- * Set the directory used to store parts larger than
- * {@link #setMaxInMemorySize(int) maxInMemorySize}. By default, a new
- * temporary directory is created.
- * @throws IOException if an I/O error occurs, or the parent directory
- * does not exist
- * @since 5.3.7
- */
- public void setFileStorageDirectory(Path fileStorageDirectory) throws IOException {
- Assert.notNull(fileStorageDirectory, "FileStorageDirectory must not be null");
- if (!Files.exists(fileStorageDirectory)) {
- Files.createDirectory(fileStorageDirectory);
- }
- this.fileStorageDirectory.set(fileStorageDirectory);
- }
-
-
- @Override
- public List getReadableMediaTypes() {
- return MultipartHttpMessageReader.MIME_TYPES;
- }
-
- @Override
- public boolean canRead(ResolvableType elementType, @Nullable MediaType mediaType) {
- if (Part.class.equals(elementType.toClass())) {
- if (mediaType == null) {
- return true;
- }
- for (MediaType supportedMediaType : getReadableMediaTypes()) {
- if (supportedMediaType.isCompatibleWith(mediaType)) {
- return true;
- }
- }
- }
- return false;
- }
-
- @Override
- public Flux read(ResolvableType elementType, ReactiveHttpInputMessage message, Map hints) {
- return getFileStorageDirectory().flatMapMany(directory ->
- Flux.create(new SynchronossPartGenerator(message, directory))
- .doOnNext(part -> {
- if (!Hints.isLoggingSuppressed(hints)) {
- LogFormatUtils.traceDebug(logger, traceOn -> Hints.getLogPrefix(hints) + "Parsed " +
- (isEnableLoggingRequestDetails() ?
- LogFormatUtils.formatValue(part, !traceOn) :
- "parts '" + part.name() + "' (content masked)"));
- }
- }));
- }
-
- @Override
- public Mono readMono(ResolvableType elementType, ReactiveHttpInputMessage message, Map hints) {
- return Mono.error(new UnsupportedOperationException("Cannot read multipart request body into single Part"));
- }
-
- private Mono getFileStorageDirectory() {
- return Mono.defer(() -> {
- Path directory = this.fileStorageDirectory.get();
- if (directory != null) {
- return Mono.just(directory);
- }
- else {
- return Mono.fromCallable(() -> {
- Path tempDirectory = Files.createTempDirectory(FILE_STORAGE_DIRECTORY_PREFIX);
- if (this.fileStorageDirectory.compareAndSet(null, tempDirectory)) {
- return tempDirectory;
- }
- else {
- try {
- Files.delete(tempDirectory);
- }
- catch (IOException ignored) {
- }
- return this.fileStorageDirectory.get();
- }
- }).subscribeOn(Schedulers.boundedElastic());
- }
- });
- }
-
-
- /**
- * Subscribe to the input stream and feed the Synchronoss parser. Then listen
- * for parser output, creating parts, and pushing them into the FluxSink.
- */
- private class SynchronossPartGenerator extends BaseSubscriber implements Consumer> {
-
- private final ReactiveHttpInputMessage inputMessage;
-
- private final LimitedPartBodyStreamStorageFactory storageFactory = new LimitedPartBodyStreamStorageFactory();
-
- private final Path fileStorageDirectory;
-
- @Nullable
- private NioMultipartParserListener listener;
-
- @Nullable
- private NioMultipartParser parser;
-
- public SynchronossPartGenerator(ReactiveHttpInputMessage inputMessage, Path fileStorageDirectory) {
- this.inputMessage = inputMessage;
- this.fileStorageDirectory = fileStorageDirectory;
- }
-
- @Override
- public void accept(FluxSink sink) {
- HttpHeaders headers = this.inputMessage.getHeaders();
- MediaType mediaType = headers.getContentType();
- Assert.state(mediaType != null, "No content type set");
-
- int length = getContentLength(headers);
- Charset charset = Optional.ofNullable(mediaType.getCharset()).orElse(StandardCharsets.UTF_8);
- MultipartContext context = new MultipartContext(mediaType.toString(), length, charset.name());
-
- this.listener = new FluxSinkAdapterListener(sink, context, this.storageFactory);
-
- this.parser = Multipart
- .multipart(context)
- .saveTemporaryFilesTo(this.fileStorageDirectory.toString())
- .usePartBodyStreamStorageFactory(this.storageFactory)
- .forNIO(this.listener);
-
- this.inputMessage.getBody().subscribe(this);
- }
-
- @Override
- protected void hookOnNext(DataBuffer buffer) {
- Assert.state(this.parser != null && this.listener != null, "Not initialized yet");
-
- int size = buffer.readableByteCount();
- this.storageFactory.increaseByteCount(size);
- byte[] resultBytes = new byte[size];
- buffer.read(resultBytes);
-
- try {
- this.parser.write(resultBytes);
- }
- catch (IOException ex) {
- cancel();
- int index = this.storageFactory.getCurrentPartIndex();
- this.listener.onError("Parser error for part [" + index + "]", ex);
- }
- finally {
- DataBufferUtils.release(buffer);
- }
- }
-
- @Override
- protected void hookOnError(Throwable ex) {
- if (this.listener != null) {
- int index = this.storageFactory.getCurrentPartIndex();
- this.listener.onError("Failure while parsing part[" + index + "]", ex);
- }
- }
-
- @Override
- protected void hookOnComplete() {
- if (this.listener != null) {
- this.listener.onAllPartsFinished();
- }
- }
-
- @Override
- protected void hookFinally(SignalType type) {
- try {
- if (this.parser != null) {
- this.parser.close();
- }
- }
- catch (IOException ex) {
- // ignore
- }
- }
-
- private int getContentLength(HttpHeaders headers) {
- // Until this is fixed https://github.com/synchronoss/nio-multipart/issues/10
- long length = headers.getContentLength();
- return (int) length == length ? (int) length : -1;
- }
- }
-
-
- private class LimitedPartBodyStreamStorageFactory implements PartBodyStreamStorageFactory {
-
- private final PartBodyStreamStorageFactory storageFactory = (maxInMemorySize > 0 ?
- new DefaultPartBodyStreamStorageFactory(maxInMemorySize) :
- new DefaultPartBodyStreamStorageFactory());
-
- private int index = 1;
-
- private boolean isFilePart;
-
- private long partSize;
-
- public int getCurrentPartIndex() {
- return this.index;
- }
-
- @Override
- public StreamStorage newStreamStorageForPartBody(Map> headers, int index) {
- this.index = index;
- this.isFilePart = (MultipartUtils.getFileName(headers) != null);
- this.partSize = 0;
- if (maxParts > 0 && index > maxParts) {
- throw new DecodingException("Too many parts: Part[" + index + "] but maxParts=" + maxParts);
- }
- return this.storageFactory.newStreamStorageForPartBody(headers, index);
- }
-
- public void increaseByteCount(long byteCount) {
- this.partSize += byteCount;
- if (maxInMemorySize > 0 && !this.isFilePart && this.partSize >= maxInMemorySize) {
- throw new DataBufferLimitException("Part[" + this.index + "] " +
- "exceeded the in-memory limit of " + maxInMemorySize + " bytes");
- }
- if (maxDiskUsagePerPart > 0 && this.isFilePart && this.partSize > maxDiskUsagePerPart) {
- throw new DecodingException("Part[" + this.index + "] " +
- "exceeded the disk usage limit of " + maxDiskUsagePerPart + " bytes");
- }
- }
-
- public void partFinished() {
- this.index++;
- this.isFilePart = false;
- this.partSize = 0;
- }
- }
-
-
- /**
- * Listen for parser output and adapt to {@code Flux>}.
- */
- private static class FluxSinkAdapterListener implements NioMultipartParserListener {
-
- private final FluxSink sink;
-
- private final MultipartContext context;
-
- private final LimitedPartBodyStreamStorageFactory storageFactory;
-
- private final AtomicInteger terminated = new AtomicInteger();
-
- FluxSinkAdapterListener(
- FluxSink sink, MultipartContext context, LimitedPartBodyStreamStorageFactory factory) {
-
- this.sink = sink;
- this.context = context;
- this.storageFactory = factory;
- }
-
- @Override
- public void onPartFinished(StreamStorage storage, Map> headers) {
- HttpHeaders httpHeaders = new HttpHeaders();
- httpHeaders.putAll(headers);
- this.storageFactory.partFinished();
- this.sink.next(createPart(storage, httpHeaders));
- }
-
- private Part createPart(StreamStorage storage, HttpHeaders httpHeaders) {
- String filename = MultipartUtils.getFileName(httpHeaders);
- if (filename != null) {
- return new SynchronossFilePart(httpHeaders, filename, storage);
- }
- else if (MultipartUtils.isFormField(httpHeaders, this.context)) {
- String value = MultipartUtils.readFormParameterValue(storage, httpHeaders);
- return new SynchronossFormFieldPart(httpHeaders, value);
- }
- else {
- return new SynchronossPart(httpHeaders, storage);
- }
- }
-
- @Override
- public void onError(String message, Throwable cause) {
- if (this.terminated.getAndIncrement() == 0) {
- this.sink.error(new DecodingException(message, cause));
- }
- }
-
- @Override
- public void onAllPartsFinished() {
- if (this.terminated.getAndIncrement() == 0) {
- this.sink.complete();
- }
- }
-
- @Override
- public void onNestedPartStarted(Map> headersFromParentPart) {
- }
-
- @Override
- public void onNestedPartFinished() {
- }
- }
-
-
- private abstract static class AbstractSynchronossPart implements Part {
-
- private final String name;
-
- private final HttpHeaders headers;
-
- AbstractSynchronossPart(HttpHeaders headers) {
- Assert.notNull(headers, "HttpHeaders is required");
- this.name = MultipartUtils.getFieldName(headers);
- this.headers = headers;
- }
-
- @Override
- public String name() {
- return this.name;
- }
-
- @Override
- public HttpHeaders headers() {
- return this.headers;
- }
-
- @Override
- public String toString() {
- return "Part '" + this.name + "', headers=" + this.headers;
- }
- }
-
-
- private static class SynchronossPart extends AbstractSynchronossPart {
-
- private final StreamStorage storage;
-
- SynchronossPart(HttpHeaders headers, StreamStorage storage) {
- super(headers);
- Assert.notNull(storage, "StreamStorage is required");
- this.storage = storage;
- }
-
- @Override
- @SuppressWarnings("resource")
- public Flux content() {
- return DataBufferUtils.readInputStream(
- getStorage()::getInputStream, DefaultDataBufferFactory.sharedInstance, 4096);
- }
-
- protected StreamStorage getStorage() {
- return this.storage;
- }
- }
-
-
- private static class SynchronossFilePart extends SynchronossPart implements FilePart {
-
- private static final OpenOption[] FILE_CHANNEL_OPTIONS =
- {StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE};
-
- private final String filename;
-
- SynchronossFilePart(HttpHeaders headers, String filename, StreamStorage storage) {
- super(headers, storage);
- this.filename = filename;
- }
-
- @Override
- public String filename() {
- return this.filename;
- }
-
- @Override
- public Mono transferTo(Path dest) {
- ReadableByteChannel input = null;
- FileChannel output = null;
- try {
- input = Channels.newChannel(getStorage().getInputStream());
- output = FileChannel.open(dest, FILE_CHANNEL_OPTIONS);
- long size = (input instanceof FileChannel ? ((FileChannel) input).size() : Long.MAX_VALUE);
- long totalWritten = 0;
- while (totalWritten < size) {
- long written = output.transferFrom(input, totalWritten, size - totalWritten);
- if (written <= 0) {
- break;
- }
- totalWritten += written;
- }
- }
- catch (IOException ex) {
- return Mono.error(ex);
- }
- finally {
- if (input != null) {
- try {
- input.close();
- }
- catch (IOException ignored) {
- }
- }
- if (output != null) {
- try {
- output.close();
- }
- catch (IOException ignored) {
- }
- }
- }
- return Mono.empty();
- }
-
- @Override
- public String toString() {
- return "Part '" + name() + "', filename='" + this.filename + "'";
- }
- }
-
-
- private static class SynchronossFormFieldPart extends AbstractSynchronossPart implements FormFieldPart {
-
- private final String content;
-
- SynchronossFormFieldPart(HttpHeaders headers, String content) {
- super(headers);
- this.content = content;
- }
-
- @Override
- public String value() {
- return this.content;
- }
-
- @Override
- public Flux content() {
- byte[] bytes = this.content.getBytes(getCharset());
- return Flux.just(DefaultDataBufferFactory.sharedInstance.wrap(bytes));
- }
-
- private Charset getCharset() {
- String name = MultipartUtils.getCharEncoding(headers());
- return (name != null ? Charset.forName(name) : StandardCharsets.UTF_8);
- }
-
- @Override
- public String toString() {
- return "Part '" + name() + "=" + this.content + "'";
- }
- }
-
-}
diff --git a/spring-web/src/main/java/org/springframework/http/codec/support/BaseDefaultCodecs.java b/spring-web/src/main/java/org/springframework/http/codec/support/BaseDefaultCodecs.java
index f23b17428d5..02055814b2e 100644
--- a/spring-web/src/main/java/org/springframework/http/codec/support/BaseDefaultCodecs.java
+++ b/spring-web/src/main/java/org/springframework/http/codec/support/BaseDefaultCodecs.java
@@ -58,7 +58,6 @@ import org.springframework.http.codec.json.KotlinSerializationJsonEncoder;
import org.springframework.http.codec.multipart.DefaultPartHttpMessageReader;
import org.springframework.http.codec.multipart.MultipartHttpMessageReader;
import org.springframework.http.codec.multipart.MultipartHttpMessageWriter;
-import org.springframework.http.codec.multipart.SynchronossPartHttpMessageReader;
import org.springframework.http.codec.protobuf.ProtobufDecoder;
import org.springframework.http.codec.protobuf.ProtobufEncoder;
import org.springframework.http.codec.protobuf.ProtobufHttpMessageWriter;
@@ -103,7 +102,7 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) &&
ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader);
jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader);
- jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", classLoader);
+ jaxb2Present = ClassUtils.isPresent("jakarta.xml.bind.Binder", classLoader);
protobufPresent = ClassUtils.isPresent("com.google.protobuf.Message", classLoader);
synchronossMultipartPresent = ClassUtils.isPresent("org.synchronoss.cloud.nio.multipart.NioMultipartParser", classLoader);
nettyByteBufPresent = ClassUtils.isPresent("io.netty.buffer.ByteBuf", classLoader);
@@ -417,11 +416,6 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
if (codec instanceof DefaultPartHttpMessageReader) {
((DefaultPartHttpMessageReader) codec).setMaxInMemorySize(size);
}
- if (synchronossMultipartPresent) {
- if (codec instanceof SynchronossPartHttpMessageReader) {
- ((SynchronossPartHttpMessageReader) codec).setMaxInMemorySize(size);
- }
- }
}
Boolean enable = this.enableLoggingRequestDetails;
@@ -435,11 +429,6 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
if (codec instanceof DefaultPartHttpMessageReader) {
((DefaultPartHttpMessageReader) codec).setEnableLoggingRequestDetails(enable);
}
- if (synchronossMultipartPresent) {
- if (codec instanceof SynchronossPartHttpMessageReader) {
- ((SynchronossPartHttpMessageReader) codec).setEnableLoggingRequestDetails(enable);
- }
- }
if (codec instanceof FormHttpMessageWriter) {
((FormHttpMessageWriter) codec).setEnableLoggingRequestDetails(enable);
}
diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java
index 2221880c49f..f30d0a5289f 100644
--- a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java
+++ b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,19 +24,19 @@ import java.util.function.BiConsumer;
import java.util.function.Function;
import javax.xml.XMLConstants;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.UnmarshalException;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSchema;
-import javax.xml.bind.annotation.XmlType;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.XMLEvent;
+import jakarta.xml.bind.JAXBElement;
+import jakarta.xml.bind.JAXBException;
+import jakarta.xml.bind.UnmarshalException;
+import jakarta.xml.bind.Unmarshaller;
+import jakarta.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlSchema;
+import jakarta.xml.bind.annotation.XmlType;
import org.reactivestreams.Publisher;
import reactor.core.Exceptions;
import reactor.core.publisher.Flux;
@@ -175,7 +175,6 @@ public class Jaxb2XmlDecoder extends AbstractDecoder {
}
@Override
- @SuppressWarnings({"rawtypes", "unchecked", "cast"}) // XMLEventReader is Iterator on JDK 9
public Mono decodeToMono(Publisher input, ResolvableType elementType,
@Nullable MimeType mimeType, @Nullable Map hints) {
@@ -184,12 +183,11 @@ public class Jaxb2XmlDecoder extends AbstractDecoder {
}
@Override
- @SuppressWarnings({"rawtypes", "unchecked", "cast"}) // XMLEventReader is Iterator on JDK 9
public Object decode(DataBuffer dataBuffer, ResolvableType targetType,
@Nullable MimeType mimeType, @Nullable Map hints) throws DecodingException {
try {
- Iterator eventReader = inputFactory.createXMLEventReader(dataBuffer.asInputStream());
+ Iterator eventReader = inputFactory.createXMLEventReader(dataBuffer.asInputStream());
List events = new ArrayList<>();
eventReader.forEachRemaining(event -> events.add((XMLEvent) event));
return unmarshal(events, targetType.toClass());
diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java
index b29b610bb51..678e6c64ae7 100644
--- a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java
+++ b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java
@@ -21,12 +21,11 @@ import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.function.Function;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.MarshalException;
-import javax.xml.bind.Marshaller;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
-
+import jakarta.xml.bind.JAXBException;
+import jakarta.xml.bind.MarshalException;
+import jakarta.xml.bind.Marshaller;
+import jakarta.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlType;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@@ -48,8 +47,8 @@ import org.springframework.util.MimeTypeUtils;
/**
* Encode from single value to a byte stream containing XML elements.
*
- * {@link javax.xml.bind.annotation.XmlElements @XmlElements} and
- * {@link javax.xml.bind.annotation.XmlElement @XmlElement} can be used
+ *
{@link jakarta.xml.bind.annotation.XmlElements @XmlElements} and
+ * {@link jakarta.xml.bind.annotation.XmlElement @XmlElement} can be used
* to specify how collections should be marshalled.
*
* @author Sebastien Deleuze
diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/JaxbContextContainer.java b/spring-web/src/main/java/org/springframework/http/codec/xml/JaxbContextContainer.java
index 49441c498c3..f5eee44d743 100644
--- a/spring-web/src/main/java/org/springframework/http/codec/xml/JaxbContextContainer.java
+++ b/spring-web/src/main/java/org/springframework/http/codec/xml/JaxbContextContainer.java
@@ -19,10 +19,10 @@ package org.springframework.http.codec.xml;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import javax.xml.bind.Unmarshaller;
+import jakarta.xml.bind.JAXBContext;
+import jakarta.xml.bind.JAXBException;
+import jakarta.xml.bind.Marshaller;
+import jakarta.xml.bind.Unmarshaller;
import org.springframework.core.codec.CodecException;
diff --git a/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java
index 8458ba1d651..c113194183e 100644
--- a/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java
+++ b/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java
@@ -29,7 +29,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import javax.mail.internet.MimeUtility;
+import jakarta.mail.internet.MimeUtility;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpEntity;
@@ -287,7 +287,7 @@ public class FormHttpMessageConverter implements HttpMessageConverterAs of 5.0 by default part headers, including {@code Content-Disposition}
* (and its filename parameter) will be encoded based on the setting of
* {@link #setCharset(Charset)} or {@code UTF-8} by default.
diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/JsonbHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/json/JsonbHttpMessageConverter.java
index bdbc7221cfd..95c82678355 100644
--- a/spring-web/src/main/java/org/springframework/http/converter/json/JsonbHttpMessageConverter.java
+++ b/spring-web/src/main/java/org/springframework/http/converter/json/JsonbHttpMessageConverter.java
@@ -21,9 +21,9 @@ import java.io.Writer;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
-import javax.json.bind.Jsonb;
-import javax.json.bind.JsonbBuilder;
-import javax.json.bind.JsonbConfig;
+import jakarta.json.bind.Jsonb;
+import jakarta.json.bind.JsonbBuilder;
+import jakarta.json.bind.JsonbConfig;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
@@ -39,8 +39,8 @@ import org.springframework.util.Assert;
*
* @author Juergen Hoeller
* @since 5.0
- * @see javax.json.bind.Jsonb
- * @see javax.json.bind.JsonbBuilder
+ * @see jakarta.json.bind.Jsonb
+ * @see jakarta.json.bind.JsonbBuilder
* @see #setJsonb
*/
public class JsonbHttpMessageConverter extends AbstractJsonHttpMessageConverter {
diff --git a/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java
index 78d64e5da47..850f6e88a73 100644
--- a/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java
+++ b/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java
@@ -62,13 +62,13 @@ public class AllEncompassingFormHttpMessageConverter extends FormHttpMessageConv
static {
ClassLoader classLoader = AllEncompassingFormHttpMessageConverter.class.getClassLoader();
- jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", classLoader);
+ jaxb2Present = ClassUtils.isPresent("jakarta.xml.bind.Binder", classLoader);
jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) &&
ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader);
jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader);
jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader);
gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", classLoader);
- jsonbPresent = ClassUtils.isPresent("javax.json.bind.Jsonb", classLoader);
+ jsonbPresent = ClassUtils.isPresent("jakarta.json.bind.Jsonb", classLoader);
kotlinSerializationJsonPresent = ClassUtils.isPresent("kotlinx.serialization.json.Json", classLoader);
}
diff --git a/spring-web/src/main/java/org/springframework/http/converter/xml/AbstractJaxb2HttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/xml/AbstractJaxb2HttpMessageConverter.java
index 811536c3165..11890fa419b 100644
--- a/spring-web/src/main/java/org/springframework/http/converter/xml/AbstractJaxb2HttpMessageConverter.java
+++ b/spring-web/src/main/java/org/springframework/http/converter/xml/AbstractJaxb2HttpMessageConverter.java
@@ -19,10 +19,10 @@ package org.springframework.http.converter.xml;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import javax.xml.bind.Unmarshaller;
+import jakarta.xml.bind.JAXBContext;
+import jakarta.xml.bind.JAXBException;
+import jakarta.xml.bind.Marshaller;
+import jakarta.xml.bind.Unmarshaller;
import org.springframework.http.converter.HttpMessageConversionException;
diff --git a/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverter.java
index ab3850c42bf..c2e3bfdc10a 100644
--- a/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverter.java
+++ b/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverter.java
@@ -26,17 +26,18 @@ import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.UnmarshalException;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
+import jakarta.xml.bind.JAXBException;
+import jakarta.xml.bind.UnmarshalException;
+import jakarta.xml.bind.Unmarshaller;
+import jakarta.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlType;
+
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
diff --git a/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverter.java
index ae4dbd9b699..c41fb18b854 100644
--- a/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverter.java
+++ b/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverter.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,20 +18,20 @@ package org.springframework.http.converter.xml;
import java.io.StringReader;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.MarshalException;
-import javax.xml.bind.Marshaller;
-import javax.xml.bind.PropertyException;
-import javax.xml.bind.UnmarshalException;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamSource;
+import jakarta.xml.bind.JAXBElement;
+import jakarta.xml.bind.JAXBException;
+import jakarta.xml.bind.MarshalException;
+import jakarta.xml.bind.Marshaller;
+import jakarta.xml.bind.PropertyException;
+import jakarta.xml.bind.UnmarshalException;
+import jakarta.xml.bind.Unmarshaller;
+import jakarta.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlType;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -149,7 +149,7 @@ public class Jaxb2RootElementHttpMessageConverter extends AbstractJaxb2HttpMessa
}
}
- @SuppressWarnings("deprecation") // on JDK 9
+ @SuppressWarnings("deprecation")
protected Source processSource(Source source) {
if (source instanceof StreamSource) {
StreamSource streamSource = (StreamSource) source;
diff --git a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpAsyncRequestControl.java b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpAsyncRequestControl.java
index 866b2422456..0a0d1b4fa39 100644
--- a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpAsyncRequestControl.java
+++ b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpAsyncRequestControl.java
@@ -19,11 +19,11 @@ package org.springframework.http.server;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicBoolean;
-import javax.servlet.AsyncContext;
-import javax.servlet.AsyncEvent;
-import javax.servlet.AsyncListener;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.AsyncEvent;
+import jakarta.servlet.AsyncListener;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
diff --git a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java
index b136e3fbcf2..f7b3e9e99f0 100644
--- a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java
+++ b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpRequest.java
@@ -35,7 +35,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
@@ -234,7 +234,7 @@ public class ServletServerHttpRequest implements ServerHttpRequest {
}
/**
- * Use {@link javax.servlet.ServletRequest#getParameterMap()} to reconstruct the
+ * Use {@link jakarta.servlet.ServletRequest#getParameterMap()} to reconstruct the
* body of a form 'POST' providing a predictable outcome as opposed to reading
* from the body, which can fail if any other code has used the ServletRequest
* to access a parameter, thus causing the input stream to be "consumed".
diff --git a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java
index 64436ffb1d8..1822b10f2be 100644
--- a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java
+++ b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java
@@ -23,7 +23,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHeadersAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHeadersAdapter.java
index 35766287286..b8d73163cea 100644
--- a/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHeadersAdapter.java
+++ b/spring-web/src/main/java/org/springframework/http/server/reactive/JettyHeadersAdapter.java
@@ -39,6 +39,7 @@ import org.springframework.util.MultiValueMap;
* There is a duplicate of this class in the client package!
*
* @author Brian Clozel
+ * @author Juergen Hoeller
* @since 5.1.1
*/
class JettyHeadersAdapter implements MultiValueMap {
@@ -58,7 +59,10 @@ class JettyHeadersAdapter implements MultiValueMap