Skip to content

Commit d84ca2b

Browse files
committed
Jakarta EE 9 migration
Upgrades many dependency declarations; removes old EJB 2.x support and outdated Servlet-based integrations (Commons FileUpload, FreeMarker JSP support, Tiles). Closes gh-22093 Closes gh-25354 Closes gh-26185 Closes gh-27423 See gh-27424
1 parent 5822f1b commit d84ca2b

File tree

1,291 files changed

+4988
-25318
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,291 files changed

+4988
-25318
lines changed

build.gradle

Lines changed: 43 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ configure(allprojects) { project ->
3232
mavenBom "io.projectreactor:reactor-bom:2020.0.11"
3333
mavenBom "io.r2dbc:r2dbc-bom:Arabba-SR10"
3434
mavenBom "io.rsocket:rsocket-bom:1.1.1"
35-
mavenBom "org.eclipse.jetty:jetty-bom:9.4.43.v20210629"
35+
mavenBom "org.eclipse.jetty:jetty-bom:11.0.6"
3636
mavenBom "org.jetbrains.kotlin:kotlin-bom:1.5.30"
3737
mavenBom "org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.5.2"
3838
mavenBom "org.jetbrains.kotlinx:kotlinx-serialization-bom:1.2.2"
@@ -83,14 +83,10 @@ configure(allprojects) { project ->
8383
exclude group: "xpp3", name: "xpp3_min"
8484
exclude group: "xmlpull", name: "xmlpull"
8585
}
86-
dependency "org.apache.johnzon:johnzon-jsonb:1.2.10"
86+
dependency "org.eclipse:yasson:2.0.2"
8787
dependency("org.codehaus.jettison:jettison:1.3.8") {
8888
exclude group: "stax", name: "stax-api"
8989
}
90-
dependencySet(group: 'org.jibx', version: '1.3.3') {
91-
entry 'jibx-bind'
92-
entry 'jibx-run'
93-
}
9490
dependency "org.ogce:xpp3:1.1.6"
9591
dependency "org.yaml:snakeyaml:1.29"
9692

@@ -108,7 +104,6 @@ configure(allprojects) { project ->
108104
}
109105
entry 'activemq-stomp'
110106
}
111-
dependency "org.apache.bcel:bcel:6.0"
112107
dependency "org.apache.commons:commons-pool2:2.9.0"
113108
dependencySet(group: 'org.apache.derby', version: '10.14.2.0') {
114109
entry 'derby'
@@ -119,35 +114,28 @@ configure(allprojects) { project ->
119114
dependency "org.freemarker:freemarker:2.3.31"
120115
dependency "org.hsqldb:hsqldb:2.5.2"
121116
dependency "org.quartz-scheduler:quartz:2.3.2"
122-
dependency "org.codehaus.fabric3.api:commonj:1.1.0"
123-
dependency "net.sf.ehcache:ehcache:2.10.6"
124117
dependency "org.ehcache:jcache:1.0.1"
125118
dependency "org.ehcache:ehcache:3.4.0"
126-
dependency "org.hibernate:hibernate-core:5.5.7.Final"
127-
dependency "org.hibernate:hibernate-validator:6.2.0.Final"
119+
dependency "org.hibernate:hibernate-core-jakarta:5.5.7.Final"
120+
dependency "org.hibernate:hibernate-validator:7.0.1.Final"
128121
dependency "org.webjars:webjars-locator-core:0.47"
129122
dependency "org.webjars:underscorejs:1.8.3"
130123

131-
dependencySet(group: 'org.apache.tomcat', version: '9.0.52') {
124+
dependencySet(group: 'org.apache.tomcat', version: '10.0.11') {
132125
entry 'tomcat-util'
133126
entry('tomcat-websocket') {
134127
exclude group: "org.apache.tomcat", name: "tomcat-websocket-api"
135128
exclude group: "org.apache.tomcat", name: "tomcat-servlet-api"
136129
}
137130
}
138-
dependencySet(group: 'org.apache.tomcat.embed', version: '9.0.52') {
131+
dependencySet(group: 'org.apache.tomcat.embed', version: '10.0.11') {
139132
entry 'tomcat-embed-core'
140133
entry 'tomcat-embed-websocket'
141134
}
142135
dependencySet(group: 'io.undertow', version: '2.2.10.Final') {
143136
entry 'undertow-core'
144-
entry('undertow-websockets-jsr') {
145-
exclude group: "org.jboss.spec.javax.websocket", name: "jboss-websocket-api_1.1_spec"
146-
}
147-
entry('undertow-servlet') {
148-
exclude group: "org.jboss.spec.javax.servlet", name: "jboss-servlet-api_3.1_spec"
149-
exclude group: "org.jboss.spec.javax.annotation", name: "jboss-annotations-api_1.2_spec"
150-
}
137+
entry('undertow-servlet-jakartaee9')
138+
entry('undertow-websockets-jsr-jakartaee9')
151139
}
152140

153141
dependencySet(group: 'com.squareup.okhttp3', version: '3.14.9') {
@@ -162,15 +150,12 @@ configure(allprojects) { project ->
162150
}
163151
dependency 'org.apache.httpcomponents.client5:httpclient5:5.1'
164152
dependency 'org.apache.httpcomponents.core5:httpcore5-reactive:5.1.1'
165-
dependency "org.eclipse.jetty:jetty-reactive-httpclient:1.1.9"
153+
dependency "org.eclipse.jetty:jetty-reactive-httpclient:3.0.4"
166154

167155
dependency "org.jruby:jruby:9.2.19.0"
168156
dependency "org.python:jython-standalone:2.7.1"
169157
dependency "org.mozilla:rhino:1.7.11"
170158

171-
dependency "commons-fileupload:commons-fileupload:1.4"
172-
dependency "org.synchronoss.cloud:nio-multipart-parser:1.1.0"
173-
174159
dependency("org.dom4j:dom4j:2.1.3") {
175160
exclude group: "jaxen", name: "jaxen"
176161
exclude group: "net.java.dev.msv", name: "xsdlib"
@@ -218,69 +203,50 @@ configure(allprojects) { project ->
218203
dependency "org.skyscreamer:jsonassert:1.5.0"
219204
dependency "com.jayway.jsonpath:json-path:2.6.0"
220205
dependency "org.bouncycastle:bcpkix-jdk15on:1.66"
221-
222-
dependencySet(group: 'org.apache.tiles', version: '3.0.8') {
223-
entry 'tiles-api'
224-
entry('tiles-core', withoutJclOverSlf4j)
225-
entry('tiles-servlet', withoutJclOverSlf4j)
226-
entry('tiles-jsp', withoutJclOverSlf4j)
227-
entry('tiles-el', withoutJclOverSlf4j)
228-
entry('tiles-extras') {
229-
exclude group: "org.springframework", name: "spring-web"
230-
exclude group: "org.slf4j", name: "jcl-over-slf4j"
231-
}
232-
}
233-
dependency("org.apache.taglibs:taglibs-standard-jstlel:1.2.5") {
234-
exclude group: "org.apache.taglibs", name: "taglibs-standard-spec"
235-
}
236-
237-
dependency "com.ibm.websphere:uow:6.0.2.17"
238206
dependency "com.jamonapi:jamon:2.82"
239-
dependency "joda-time:joda-time:2.10.10"
240-
dependency "org.eclipse.persistence:org.eclipse.persistence.jpa:2.7.9"
241-
dependency "org.javamoney:moneta:1.3"
242207

243-
dependency "com.sun.activation:javax.activation:1.2.0"
244-
dependency "com.sun.mail:javax.mail:1.6.2"
245-
dependencySet(group: 'com.sun.xml.bind', version: '2.3.0.1') {
208+
dependency "javax.cache:cache-api:1.1.1"
209+
dependency "javax.money:money-api:1.1"
210+
dependency "org.javamoney:moneta:1.4.2"
211+
212+
dependency "jakarta.activation:jakarta.activation-api:2.0.1"
213+
dependency "jakarta.annotation:jakarta.annotation-api:2.0.0"
214+
dependency "jakarta.ejb:jakarta.ejb-api:4.0.0"
215+
dependency "jakarta.el:jakarta.el-api:4.0.0"
216+
dependency "jakarta.enterprise.concurrent:jakarta.enterprise.concurrent-api:2.0.0"
217+
dependency "jakarta.faces:jakarta.faces-api:3.0.0"
218+
dependency "jakarta.inject:jakarta.inject-api:2.0.0"
219+
dependency "jakarta.inject:jakarta.inject-tck:2.0.1"
220+
dependency "jakarta.interceptor:jakarta.interceptor-api:2.0.0"
221+
dependency "jakarta.jms:jakarta.jms-api:3.0.0"
222+
dependency "jakarta.json:jakarta.json-api:2.0.1"
223+
dependency "jakarta.json.bind:jakarta.json.bind-api:2.0.0"
224+
dependency "jakarta.mail:jakarta.mail-api:2.0.1"
225+
dependency "jakarta.persistence:jakarta.persistence-api:3.0.0"
226+
dependency "jakarta.resource:jakarta.resource-api:2.0.0"
227+
dependency "jakarta.servlet:jakarta.servlet-api:5.0.0"
228+
dependency "jakarta.servlet.jsp:jakarta.servlet.jsp-api:3.0.0"
229+
dependency "jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:2.0.0"
230+
dependency "jakarta.transaction:jakarta.transaction-api:2.0.0"
231+
dependency "jakarta.validation:jakarta.validation-api:3.0.0"
232+
dependency "jakarta.websocket:jakarta.websocket-api:2.0.0"
233+
dependency "jakarta.xml.bind:jakarta.xml.bind-api:3.0.1"
234+
dependency "jakarta.xml.ws:jakarta.xml.ws-api:3.0.1"
235+
236+
dependency "com.sun.activation:jakarta.activation:2.0.1"
237+
dependency "com.sun.mail:jakarta.mail:2.0.1"
238+
dependencySet(group: 'com.sun.xml.bind', version: '3.0.2') {
246239
entry 'jaxb-core'
247240
entry 'jaxb-impl'
248241
entry 'jaxb-xjc'
249242
}
250243

251-
dependency "javax.activation:javax.activation-api:1.2.0"
252-
dependency "javax.annotation:javax.annotation-api:1.3.2"
253-
dependency "javax.cache:cache-api:1.1.0"
254-
dependency "javax.ejb:javax.ejb-api:3.2"
255-
dependency "javax.el:javax.el-api:3.0.1-b04"
256-
dependency "javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0"
257-
dependency "javax.faces:javax.faces-api:2.2"
258-
dependency "javax.inject:javax.inject:1"
259-
dependency "javax.inject:javax.inject-tck:1"
260-
dependency "javax.interceptor:javax.interceptor-api:1.2.2"
261-
dependency "javax.jms:javax.jms-api:2.0.1"
262-
dependency "javax.json:javax.json-api:1.1.4"
263-
dependency "javax.json.bind:javax.json.bind-api:1.0"
264-
dependency "javax.mail:javax.mail-api:1.6.2"
265-
dependency "javax.money:money-api:1.0.3"
266-
dependency "javax.resource:javax.resource-api:1.7.1"
267-
dependency "javax.servlet:javax.servlet-api:4.0.1"
268-
dependency "javax.servlet.jsp:javax.servlet.jsp-api:2.3.2-b02"
269-
dependency "javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1"
270-
dependency "javax.transaction:javax.transaction-api:1.3"
271-
dependency "javax.validation:validation-api:2.0.1.Final"
272-
dependency "javax.websocket:javax.websocket-api:1.1"
273-
dependency "javax.xml.bind:jaxb-api:2.3.1"
274-
dependency "javax.xml.ws:jaxws-api:2.3.1"
275-
276-
dependency "org.eclipse.persistence:javax.persistence:2.2.0"
277-
278244
// Substitute for "javax.management:jmxremote_optional:1.0.1_04" which
279245
// is not available on Maven Central
280246
dependency "org.glassfish.external:opendmk_jmxremote_optional_jar:1.0-b01-ea"
281-
dependency "org.glassfish:javax.el:3.0.1-b08"
282-
dependency "org.glassfish.main:javax.jws:4.0-b33"
283-
dependency "org.glassfish.tyrus:tyrus-container-servlet:1.13.1"
247+
dependency "org.glassfish:jakarta.el:4.0.2"
248+
dependency "org.glassfish.tyrus:tyrus-container-servlet:2.0.1"
249+
dependency "org.eclipse.persistence:org.eclipse.persistence.jpa:3.0.2"
284250
}
285251
generatedPomCustomization {
286252
enabled = false

integration-tests/integration-tests.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ dependencies {
1515
testImplementation(project(":spring-test"))
1616
testImplementation(project(":spring-tx"))
1717
testImplementation(project(":spring-web"))
18-
testImplementation("javax.inject:javax.inject")
19-
testImplementation("javax.resource:javax.resource-api")
20-
testImplementation("javax.servlet:javax.servlet-api")
18+
testImplementation("jakarta.inject:jakarta.inject-api")
19+
testImplementation("jakarta.resource:jakarta.resource-api")
20+
testImplementation("jakarta.servlet:jakarta.servlet-api")
2121
testImplementation("org.aspectj:aspectjweaver")
2222
testImplementation("org.hsqldb:hsqldb")
23-
testImplementation("org.hibernate:hibernate-core")
23+
testImplementation("org.hibernate:hibernate-core-jakarta")
2424
}
2525

2626
normalization {

integration-tests/src/test/java/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
import java.lang.reflect.Method;
2121
import java.util.List;
2222

23-
import javax.servlet.ServletException;
24-
23+
import jakarta.servlet.ServletException;
2524
import org.junit.jupiter.api.Test;
2625

2726
import org.springframework.aop.support.AopUtils;

integration-tests/src/test/java/org/springframework/context/annotation/jsr330/ClassPathBeanDefinitionScannerJsr330ScopeIntegrationTests.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@
2121
import java.lang.annotation.RetentionPolicy;
2222
import java.lang.annotation.Target;
2323

24-
import javax.inject.Named;
25-
import javax.inject.Singleton;
26-
24+
import jakarta.inject.Named;
25+
import jakarta.inject.Singleton;
2726
import org.junit.jupiter.api.AfterEach;
2827
import org.junit.jupiter.api.BeforeEach;
2928
import org.junit.jupiter.api.Test;
@@ -314,16 +313,16 @@ public ScopeMetadata resolveScopeMetadata(BeanDefinition definition) {
314313
if (definition instanceof AnnotatedBeanDefinition) {
315314
AnnotatedBeanDefinition annDef = (AnnotatedBeanDefinition) definition;
316315
for (String type : annDef.getMetadata().getAnnotationTypes()) {
317-
if (type.equals(javax.inject.Singleton.class.getName())) {
316+
if (type.equals(jakarta.inject.Singleton.class.getName())) {
318317
metadata.setScopeName(BeanDefinition.SCOPE_SINGLETON);
319318
break;
320319
}
321-
else if (annDef.getMetadata().getMetaAnnotationTypes(type).contains(javax.inject.Scope.class.getName())) {
320+
else if (annDef.getMetadata().getMetaAnnotationTypes(type).contains(jakarta.inject.Scope.class.getName())) {
322321
metadata.setScopeName(type.substring(type.length() - 13, type.length() - 6).toLowerCase());
323322
metadata.setScopedProxyMode(scopedProxyMode);
324323
break;
325324
}
326-
else if (type.startsWith("javax.inject")) {
325+
else if (type.startsWith("jakarta.inject")) {
327326
metadata.setScopeName(BeanDefinition.SCOPE_PROTOTYPE);
328327
}
329328
}
@@ -391,14 +390,14 @@ public static class SessionScopedTestBean extends ScopedTestBean implements Anot
391390

392391
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
393392
@Retention(RetentionPolicy.RUNTIME)
394-
@javax.inject.Scope
393+
@jakarta.inject.Scope
395394
public @interface RequestScoped {
396395
}
397396

398397

399398
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
400399
@Retention(RetentionPolicy.RUNTIME)
401-
@javax.inject.Scope
400+
@jakarta.inject.Scope
402401
public @interface SessionScoped {
403402
}
404403

integration-tests/src/test/java/org/springframework/core/env/EnvironmentSystemIntegrationTests.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,6 @@
4141
import org.springframework.context.support.GenericXmlApplicationContext;
4242
import org.springframework.context.support.StaticApplicationContext;
4343
import org.springframework.core.io.ClassPathResource;
44-
import org.springframework.jca.context.ResourceAdapterApplicationContext;
45-
import org.springframework.jca.support.SimpleBootstrapContext;
46-
import org.springframework.jca.work.SimpleTaskWorkManager;
4744
import org.springframework.mock.env.MockEnvironment;
4845
import org.springframework.mock.env.MockPropertySource;
4946
import org.springframework.mock.web.MockServletConfig;
@@ -535,22 +532,6 @@ void registerServletParamPropertySources_StaticWebApplicationContext() {
535532
assertThat(environment.getProperty("pSysProps1")).isEqualTo("pSysProps1Value");
536533
}
537534

538-
@Test
539-
void resourceAdapterApplicationContext() {
540-
ResourceAdapterApplicationContext ctx = new ResourceAdapterApplicationContext(new SimpleBootstrapContext(new SimpleTaskWorkManager()));
541-
542-
assertHasStandardEnvironment(ctx);
543-
544-
registerEnvironmentBeanDefinition(ctx);
545-
546-
ctx.setEnvironment(prodEnv);
547-
ctx.refresh();
548-
549-
assertHasEnvironment(ctx, prodEnv);
550-
assertEnvironmentBeanRegistered(ctx);
551-
assertEnvironmentAwareInvoked(ctx, prodEnv);
552-
}
553-
554535
@Test
555536
void abstractApplicationContextValidatesRequiredPropertiesOnRefresh() {
556537
{

integration-tests/src/test/resources/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests-context.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
<props>
4242
<prop key="setA*">PROPAGATION_REQUIRED</prop>
4343
<prop key="rollbackOnly">PROPAGATION_REQUIRED</prop>
44-
<prop key="echoException">PROPAGATION_REQUIRED,+javax.servlet.ServletException,-java.lang.Exception</prop>
44+
<prop key="echoException">PROPAGATION_REQUIRED,+jakarta.servlet.ServletException,-java.lang.Exception</prop>
4545
</props>
4646
</property>
4747
</bean>

spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2018 the original author or authors.
2+
* Copyright 2002-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -47,7 +47,7 @@
4747
* target method needs to implement the same signature, it will have to return
4848
* a temporary Future handle that just passes the return value through
4949
* (like Spring's {@link org.springframework.scheduling.annotation.AsyncResult}
50-
* or EJB 3.1's {@code javax.ejb.AsyncResult}).
50+
* or EJB's {@code jakarta.ejb.AsyncResult}).
5151
*
5252
* <p>When the return type is {@code java.util.concurrent.Future}, any exception thrown
5353
* during the execution can be accessed and managed by the caller. With {@code void}

spring-aspects/spring-aspects.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ dependencies {
2929
optional(project(":spring-orm")) // for JPA exception translation support
3030
optional(project(":spring-tx")) // for JPA, @Transactional support
3131
optional("javax.cache:cache-api") // for JCache aspect
32-
optional("javax.transaction:javax.transaction-api") // for @javax.transaction.Transactional support
32+
optional("jakarta.transaction:jakarta.transaction-api") // for @javax.transaction.Transactional support
3333
testImplementation(project(":spring-core")) // for CodeStyleAspect
3434
testImplementation(project(":spring-test"))
3535
testImplementation(testFixtures(project(":spring-context")))
3636
testImplementation(testFixtures(project(":spring-context-support")))
3737
testImplementation(testFixtures(project(":spring-core")))
3838
testImplementation(testFixtures(project(":spring-tx")))
39-
testImplementation("javax.mail:javax.mail-api")
39+
testImplementation("jakarta.mail:jakarta.mail-api")
4040
testCompileOnly("org.aspectj:aspectjrt")
4141
}
4242

spring-aspects/src/main/java/org/springframework/transaction/aspectj/AspectJJtaTransactionManagementConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
/**
2828
* {@code @Configuration} class that registers the Spring infrastructure beans necessary
2929
* to enable AspectJ-based annotation-driven transaction management for the JTA 1.2
30-
* {@link javax.transaction.Transactional} annotation in addition to Spring's own
30+
* {@link jakarta.transaction.Transactional} annotation in addition to Spring's own
3131
* {@link org.springframework.transaction.annotation.Transactional} annotation.
3232
*
3333
* @author Juergen Hoeller

spring-aspects/src/main/java/org/springframework/transaction/aspectj/JtaAnnotationTransactionAspect.aj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@
1616

1717
package org.springframework.transaction.aspectj;
1818

19-
import javax.transaction.Transactional;
19+
import jakarta.transaction.Transactional;
2020

2121
import org.aspectj.lang.annotation.RequiredTypes;
2222

2323
import org.springframework.transaction.annotation.AnnotationTransactionAttributeSource;
2424

2525
/**
2626
* Concrete AspectJ transaction aspect using the JTA 1.2
27-
* {@link javax.transaction.Transactional} annotation.
27+
* {@link jakarta.transaction.Transactional} annotation.
2828
*
2929
* <p>When using this aspect, you <i>must</i> annotate the implementation class
3030
* (and/or methods within that class), <i>not</i> the interface (if any) that
@@ -42,10 +42,10 @@ import org.springframework.transaction.annotation.AnnotationTransactionAttribute
4242
*
4343
* @author Stephane Nicoll
4444
* @since 4.2
45-
* @see javax.transaction.Transactional
45+
* @see jakarta.transaction.Transactional
4646
* @see AnnotationTransactionAspect
4747
*/
48-
@RequiredTypes("javax.transaction.Transactional")
48+
@RequiredTypes("jakarta.transaction.Transactional")
4949
public aspect JtaAnnotationTransactionAspect extends AbstractTransactionAspect {
5050

5151
public JtaAnnotationTransactionAspect() {

spring-aspects/src/test/java/org/springframework/transaction/aspectj/JtaTransactionAspectsTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@
1818

1919
import java.io.IOException;
2020

21-
import javax.transaction.Transactional;
22-
21+
import jakarta.transaction.Transactional;
2322
import org.junit.jupiter.api.BeforeEach;
2423
import org.junit.jupiter.api.Test;
2524

0 commit comments

Comments
 (0)