Skip to content

Jakarta EE 9+ migration #266

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 26 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
f17c782
Updated pom.xml to use jakarta instead of javax, upgraded few other j…
bhagyashriSawkar Oct 24, 2024
8db4e87
Added java 17 to build platforms
bhagyashriSawkar Oct 24, 2024
9724eca
Updated package namespace from javax.* to jakarta.* whereever used. A…
bhagyashriSawkar Oct 24, 2024
576c7a6
Merge branch 'master' of https://github.com/bhagyashriSawkar/jruby-ra…
bhagyashriSawkar Feb 19, 2025
3182a7f
Merge remote-tracking branch 'upstream/master' into jakarta-update
chadlwilson Jul 22, 2025
9c03176
Merge remote-tracking branch 'upstream/master' into jakarta-update
chadlwilson Aug 9, 2025
1c3aed3
Copy old HttpUtils.parseQueryString from Servlet API
chadlwilson Aug 9, 2025
4773440
[build] Target Java 17 only
chadlwilson Aug 9, 2025
9a77f0d
Merge remote-tracking branch 'upstream/master' into jakarta-update
chadlwilson Aug 9, 2025
95243be
[chore] Minor code inspection & style fixes for modern Java 17
chadlwilson Aug 9, 2025
cfdfc25
Merge remote-tracking branch 'upstream/master' into jakarta-update
chadlwilson Aug 12, 2025
6c76aee
[build] Re-introduce Java 8 compatibility
chadlwilson Aug 12, 2025
bdfafa3
Merge remote-tracking branch 'upstream/master' into jakarta-update
chadlwilson Aug 12, 2025
a897448
[chore] Update history
chadlwilson Aug 12, 2025
e44c80e
Correct references to jakarta types, making them consistent
chadlwilson Aug 12, 2025
e55f7e7
Merge remote-tracking branch 'upstream/master' into jakarta-update
chadlwilson Aug 12, 2025
4228a3e
Merge remote-tracking branch 'upstream/master' into jakarta-update
chadlwilson Aug 12, 2025
4f75182
Fix typo
chadlwilson Aug 12, 2025
b3ca5e6
Remove old <= Servlet API 2.5 support
chadlwilson Aug 13, 2025
10a3ddc
Remove unnecessary serialization code
chadlwilson Aug 13, 2025
52435a4
Bump version
chadlwilson Aug 13, 2025
381f33e
Add comments into Spring classes copied into jruby-rack
chadlwilson Aug 13, 2025
ecb029b
Merge remote-tracking branch 'upstream/master' into jakarta-update
chadlwilson Aug 13, 2025
4a4de19
Merge remote-tracking branch 'upstream/master' into jakarta-update
chadlwilson Aug 13, 2025
be1d4a0
[chore] Align import ordering/format
chadlwilson Aug 13, 2025
c667d36
[chore] Undo unnecessary syntax change
chadlwilson Aug 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions .github/workflows/maven.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:

env:
# Default versions for canonical release build
DEFAULT_JAVA_VERSION: '11'
DEFAULT_JAVA_VERSION: '8'
DEFAULT_JRUBY_VERSION: '9.4.13.0' # Should match pom.xml <jruby.version> property (AND a version inside the test matrix)

jobs:
Expand All @@ -19,8 +19,10 @@ jobs:
strategy:
matrix:
jruby_version: [ '9.4.13.0', '10.0.2.0' ]
java_version: [ '11', '17', '21' ]
java_version: [ '8', '11', '17', '21' ]
exclude:
- jruby_version: '10.0.2.0'
java_version: '8' # JRuby 10 requires Java 21
- jruby_version: '10.0.2.0'
java_version: '11' # JRuby 10 requires Java 21
- jruby_version: '10.0.2.0'
Expand Down Expand Up @@ -53,11 +55,13 @@ jobs:
strategy:
matrix:
jruby_version: [ '9.4.13.0', '10.0.2.0' ]
java_version: [ '11', '17', '21' ]
java_version: [ '8', '11', '17', '21' ]
appraisal: [ 'rails50', 'rails52', 'rails60', 'rails61', 'rails70', 'rails71', 'rails72', 'rails80' ]
exclude:
- jruby_version: '9.4.13.0'
appraisal: 'rails80' # Requires Ruby 3.4 compatibility, which JRuby 9.4 does not support
- jruby_version: '10.0.2.0'
java_version: '8' # JRuby 10 requires Java 21
- jruby_version: '10.0.2.0'
java_version: '11' # JRuby 10 requires Java 21
- jruby_version: '10.0.2.0'
Expand Down
1 change: 1 addition & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ GEM
thor (1.4.0)

PLATFORMS
universal-java-1.8
universal-java-11
universal-java-17
universal-java-21
Expand Down
5 changes: 4 additions & 1 deletion History.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
## 2.0.0 (UNRELEASED)

- Support Jakarta Servlet API 5.0 (JEE 9)

## 1.3.0 (UNRELEASED)

- Require Java 11 or later
- Support Javax Servlet API 4.0 (JEE 8)
- Adds basic compatibility with JRuby 10.0
- Drop support for JRuby 9.3
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ For more information on Rack, visit http://rack.github.io/.

| JRuby-Rack Version | Status | JRuby Compat | Java Compat | Target Servlet API | Target Java EE | Notes |
|--------------------------------------------------------------|------------|--------------|-------------|--------------------|----------------|---------------------------------------------------|
| 2.0.x (_planned_) | Dev | 9.4 → 10.0 | Java 17+ | 5.0 | Jakarta EE 9 | |
| 1.3.x (master, _unreleased_) | Dev | 9.4 → 10.0 | Java 11+ | 4.0 | Java EE 8 | |
| 2.0.x (_planned_) | Dev | 9.4 → 10.0 | Java 8+ | 5.0 | Jakarta EE 9 | |
| 1.3.x (master, _unreleased_) | Dev | 9.4 → 10.0 | Java 8+ | 4.0 | Java EE 8 | |
| [1.2.x](https://github.com/jruby/jruby-rack/tree/1.2-stable) | Maintained | 9.3 → 9.4 | Java 8+ | 3.0 | Java EE 6 | Servlet 3.1 → 4.0 tested OK with some containers. |
| [1.1.x](https://github.com/jruby/jruby-rack/tree/1.1-stable) | EOL | 1.6 → 9.4 | Java 8+ | 2.5 | Java EE 5 | Servlet 3.0 → 4.0 tested OK with some containers. |

Expand Down Expand Up @@ -291,7 +291,7 @@ Or the equivalent of doing `bundle exec rackup ...` if you're using Bundler :
## Logging

JRuby-Rack sets up a delegate logger for Rails that sends logging output to
`javax.servlet.ServletContext#log` by default. If you wish to use a different
`jakarta.servlet.ServletContext#log` by default. If you wish to use a different
logging system, configure `jruby.rack.logging` as follows:

- `servlet_context` (default): Sends log messages to the servlet context.
Expand Down
1 change: 1 addition & 0 deletions gemfiles/rails50.gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ GEM
websocket-extensions (0.1.5)

PLATFORMS
universal-java-1.8
universal-java-11
universal-java-17
universal-java-21
Expand Down
1 change: 1 addition & 0 deletions gemfiles/rails52.gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ GEM
websocket-extensions (0.1.5)

PLATFORMS
universal-java-1.8
universal-java-11
universal-java-17
universal-java-21
Expand Down
1 change: 1 addition & 0 deletions gemfiles/rails60.gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ GEM
zeitwerk (2.6.18)

PLATFORMS
universal-java-1.8
universal-java-11
universal-java-17
universal-java-21
Expand Down
1 change: 1 addition & 0 deletions gemfiles/rails61.gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ GEM
zeitwerk (2.6.18)

PLATFORMS
universal-java-1.8
universal-java-11
universal-java-17
universal-java-21
Expand Down
1 change: 1 addition & 0 deletions gemfiles/rails70.gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ GEM
zeitwerk (2.6.18)

PLATFORMS
universal-java-1.8
universal-java-11
universal-java-17
universal-java-21
Expand Down
1 change: 1 addition & 0 deletions gemfiles/rails71.gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ GEM
zeitwerk (2.6.18)

PLATFORMS
universal-java-1.8
universal-java-11
universal-java-17
universal-java-21
Expand Down
1 change: 1 addition & 0 deletions gemfiles/rails72.gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@ GEM
zeitwerk (2.6.18)

PLATFORMS
universal-java-1.8
universal-java-11
universal-java-17
universal-java-21
Expand Down
16 changes: 5 additions & 11 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,13 @@
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>4.0.4</version>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet.jsp</groupId>
<artifactId>jakarta.servlet.jsp-api</artifactId>
<version>2.3.6</version>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
Expand Down Expand Up @@ -136,16 +136,10 @@
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>jakarta.el</groupId>
<artifactId>jakarta.el-api</artifactId>
<version>3.0.3</version>
<version>4.0.0</version>
<scope>test</scope>
</dependency>
</dependencies>
Expand Down Expand Up @@ -201,8 +195,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>3.14.0</version>
<configuration>
<source>11</source>
<target>11</target>
<source>8</source>
<target>8</target>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
</configuration>
Expand Down
14 changes: 7 additions & 7 deletions src/main/java/org/jruby/rack/AbstractFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
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.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import org.jruby.rack.servlet.RequestCapture;
import org.jruby.rack.servlet.ResponseCapture;
Expand Down
12 changes: 6 additions & 6 deletions src/main/java/org/jruby/rack/AbstractServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import org.jruby.rack.servlet.ServletRackEnvironment;
import org.jruby.rack.servlet.ServletRackResponseEnvironment;
Expand Down
20 changes: 10 additions & 10 deletions src/main/java/org/jruby/rack/DefaultRackApplicationFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,27 @@
package org.jruby.rack;


import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Map;
import java.util.Set;

import org.jruby.Ruby;
import org.jruby.RubyInstanceConfig;
import org.jruby.exceptions.RaiseException;
import org.jruby.javasupport.JavaUtil;
import org.jruby.rack.servlet.ServletRackContext;
import org.jruby.rack.servlet.RewindableInputStream;
import org.jruby.rack.servlet.ServletRackContext;
import org.jruby.rack.util.IOHelpers;
import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.builtin.IRubyObject;
import org.jruby.util.cli.OutputStrings;

import static org.jruby.rack.RackLogger.Level.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Map;
import java.util.Set;

import static org.jruby.rack.DefaultRackConfig.isIgnoreRUBYOPT;
import static org.jruby.rack.RackLogger.Level.*;

/**
* Default application factory creates a new application instance on each
Expand Down
15 changes: 6 additions & 9 deletions src/main/java/org/jruby/rack/DefaultRackConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,16 @@

package org.jruby.rack;

import java.io.IOException;
import java.io.LineNumberReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.StringReader;
import org.jruby.rack.logging.OutputStreamLogger;
import org.jruby.rack.logging.StandardOutLogger;
import org.jruby.util.SafePropertyAccessor;

import java.io.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import org.jruby.rack.logging.OutputStreamLogger;
import org.jruby.rack.logging.StandardOutLogger;
import org.jruby.util.SafePropertyAccessor;

/**
* A base implementation of that retrieves settings from system properties.
Expand Down Expand Up @@ -382,7 +379,7 @@ private Map<String, String> toStringMap(final String env) {
for ( final String entry : entries ) {
String[] pair = entry.split("=", 2);
if ( pair.length == 1 ) { // no = separator
if ( entry.isBlank() ) continue;
if ( entry.trim().isEmpty() ) continue;
if ( lastKey == null ) continue; // missing key
map.put( lastKey, lastVal = lastVal + ',' + entry );
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/jruby/rack/RackDispatcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

package org.jruby.rack;

import javax.servlet.ServletException;
import jakarta.servlet.ServletException;
import java.io.IOException;

/**
Expand Down
Loading