Hi all,

I've been working on ROL-2183 (https://issues.apache.org/jira/browse/ROL-2183) 
and have a PR up that migrates Roller from Java EE 8 to Jakarta EE 10: 
https://github.com/apache/roller/pull/154

The short version: Java 17 is now the minimum, and the big frameworks all moved 
to their Jakarta-native versions. Struts 7.1, Spring Framework 7, Spring 
Security 7, EclipseLink 5, and Tomcat 10.1 in the Docker image. The Jetty 
plugin moved to Jetty 12, so mvn jetty:run works again for quick local 
development with an in-memory Derby database.

A couple of things went away. OAuth 1.0a and OpenID 2.0 are both obsolete and 
their libraries have no Jakarta-compatible releases, so I removed them. The 
replacement is OAuth 2.0/OIDC login built on Spring Security's OAuth2 client, 
and that's where the follow-up work comes in.

To keep #154 reviewable, I've stacked the follow-ups in my fork. OIDC login 
with a seeded Keycloak in docker-compose is mraible/roller#3. Converting the 
admin and editor UI from Bootstrap 3 to 5.3 is #4 (struts2-bootstrap-plugin 
6.1.0 targets Jakarta and emits Bootstrap 5 markup). And #5 replaces the old 
it-selenium module with Playwright browser tests that CI runs three ways: 
database auth on Jetty, plus OIDC and mixed db-oidc against the Docker stack. 
Each PR only shows its own diff, and I'll retarget them to apache/roller as the 
level below merges.

Getting CI green on the migration branch turned up a few traps worth knowing 
about if you're reviewing. Spring Security 7's XML config denies any request 
that doesn't match an intercept-url rule, where the old 
FilterSecurityInterceptor allowed them, so every page including the login page 
redirected to the login page until I added an explicit permitAll catch-all. The 
old webjars servlet still extends the javax HttpServlet and took the whole 
webapp down on a Jakarta container; WebJar assets are served natively from 
META-INF/resources now. And struts2-bootstrap-plugin turned out to supply the 
FreeMarker templates behind the theme="bootstrap" attribute on nearly every 
form, so removing it as an unused taglib broke every form page. Restoring the 
Jakarta-native 6.1.0 fixed that, and the old Selenium journey (register, log 
in, create a weblog, publish an entry) passes on the migration branch again.

If you want to try it, the quickest path is mvn -DskipTests install followed by 
mvn jetty:run, then http://localhost:8080/roller. For the OIDC branch, docker 
compose up brings up Roller, PostgreSQL, and Keycloak seeded with admin/admin 
and user/user. You'll need a "127.0.0.1 keycloak" line in /etc/hosts so the 
browser and the container resolve the issuer the same way.

CI is green on the PR across JDK 17, 21, and 23, and I've been running the 
Playwright suite against all three auth configurations locally. Review and 
testing on other setups would be welcome, especially from anyone running LDAP 
or container-managed auth, since those paths got mechanical updates but I don't 
have an environment to exercise them.

Cheers,

Matt

Reply via email to