Solve With Software

Old Java application modernisation

Solve With Software modernises Java web applications built between about 2003 and 2015: Struts 1, JSP and servlets, EJB, Hibernate 3, Spring 2 to 4, on Java 6, 7 or 8, running on Tomcat, JBoss, WebLogic or WebSphere. Java itself is in good health, which makes staying a real option: current Java, Spring Boot 3, the Jakarta namespace and a build that runs on a current machine, in stages. Where the web layer is Struts 1 or JSP, that part is rebuilt alongside. The assessment reads the application and prices each stage as a fixed number.

Book a free consultation

Free · 1 hour · no obligation

Where old Java stands

The language is fine. Java 25 is the current long-term release, Java 21 and 17 are supported, and free OpenJDK builds cover all of them. What's out of support is the stack a 2008 application was built on:

  • Java 8 lost Oracle's free public updates for commercial use in January 2019. Oracle sells extended support to December 2030; free builds from other vendors carry on, but every framework has moved past it.
  • Struts 1 reached end of life in April 2013, with its last release in December 2008. Struts 2 is a different framework, not an upgrade.
  • Spring Framework 5.3, the last version that runs on Java 8, left open-source support in August 2024, and Spring Boot 2.x in November 2023. Spring 6 and Boot 3 need Java 17 or later.
  • The namespace. In 2020, Jakarta EE 9 renamed every javax.* package to jakarta.*. Tomcat 10 and later, and every current application server, use the new names, so an old application won't even deploy there without code changes. Tomcat 9 is the last version that speaks the old names.
  • Everything else. Hibernate 3, EJB 2, Ant builds, applets, a WebLogic or WebSphere licence the business is still paying for.

Stay in Java, or leave?

Stay and modernise when the business logic is sound and the team, or the market you hire from, knows Java. The path is well trodden: current JDK, Maven or Gradle, Spring Boot 3, the Jakarta namespace, Hibernate 6, a current Tomcat or a container, and the Struts or JSP web layer rebuilt in stages. Most of the application survives.

Leave in stages when the web layer is most of the application and would be rebuilt anyway, when nobody left knows Java, or when the rest of the estate is on .NET or the web stack and one more platform is the cost. Then the new system is built alongside, in whatever the business can support, one process at a time behind a proxy, with the Java application still serving what hasn't moved.

Often the first, then the second. Get it building and supported first, because that removes the risk; then decide the rest with the pressure off. The assessment makes the call from the code.

The staged path

  1. Get it building on a current machine, from source control, with the dependencies resolved. Old Ant builds and jars checked into the tree are where the first surprises are. The assessment does this first.
  2. Safety net. A test environment, a staging environment, and tests around the processes that matter, before any version changes.
  3. Step the JDK. 8 to 11 to 17 to 21 or 25, fixing what each step removes. Reflection, removed modules and old crypto are the usual ones.
  4. Step the frameworks. Spring 4 to 5.3 to 6, Hibernate 3 to 6, and the Jakarta namespace change, which is mechanical but touches every file.
  5. Replace the web layer where it's Struts 1 or raw JSP: one screen or one module at a time, alongside the old one, behind a proxy.
  6. Move the hosting. Off the licensed application server onto Tomcat or a container, in your own accounts.

Each stage has its own fixed price and each ends with the application running on something supported.

Your data

Usually Oracle, SQL Server or MySQL, and it stays where it is. Hibernate upgrades change the generated SQL, so the data layer never meets a change until the change has proven itself somewhere else: tested against a copy in a test environment, then run in staging against the live schema with results reconciled, before anything connects to live.

Can this be done gradually?

Yes. The JDK and framework steps each leave the application running and deployable. The web layer moves one screen at a time behind a proxy. A leave-in-stages plan runs the new system alongside and re-points one process at a time. Stop after any stage and keep everything.

What it costs

The assessment is from £395 + VAT, sized on a free one-hour consultation, with an exact price before you commit. For a Java application it gets the thing building, maps every dependency and framework version, identifies what upgrades in place and what's rebuilt, and prices the stages as fixed numbers. What drives the price and the payment terms each have a page.

The risks of waiting

An application on Java 8 and Spring 4 gets no fixes for anything in its stack, and Java web frameworks have a history of serious vulnerabilities. Each year the gap to current versions widens and the upgrade gets longer, not shorter. And the application server licence keeps being paid for a platform the application doesn't need.

How we approach it

Get it building, make it safe, step the versions, rebuild the web layer alongside. Marc Allington has built in Java and the enterprise middleware around it, and builds in Java, .NET and the web stack now, so both staying and leaving are familiar ground. Everything we build runs on open, widely used technology, in your own accounts, with full source code and ownership transferring to you on final payment.

The technical checklist for an old Java application

CheckWhy it matters
JDK version in production, and does the source build on a current machine?Sets the number of JDK steps. If it doesn't build, that's stage one.
Build: Ant, Maven, Gradle, or jars in the treeOld Ant builds with checked-in jars hide the real dependency list.
Web layer: Struts 1, Struts 2, JSP, JSF, Spring MVC, GWTStruts 1 and raw JSP are rebuilt; Spring MVC mostly upgrades.
Frameworks: Spring version, Hibernate version, EJB, JAX-WSEach has its own upgrade path and its own breaking changes.
javax.* usage, and which application serverThe Jakarta namespace change touches every file and decides the server.
Application server: Tomcat, JBoss, WebLogic, WebSphere, and its licenceWhether hosting moves and what it saves.
Integrations: MQ, SOAP services, batch jobs, file dropsEvery one has a caller or a schedule to keep working.
Tests, source control, deployment processThe safety net comes before any version step.

Each answer goes into the report with its stage, its consequence and a fixed price.

Questions

What people ask before they book.

Is Java a dead end?

No. Java 25 is the current long-term release and the ecosystem is active. What's dead is the 2008 stack: Struts 1, Java 8 on free updates, Spring 4. Staying in Java and modernising is a real option, and often the cheaper one.

Not in place. Struts 1 has been end of life since 2013 and Struts 2 is a different framework. The web layer is rebuilt one screen at a time, usually in Spring MVC or a modern front end, with the business logic underneath kept and upgraded.

Oracle's free public updates for commercial use ended in January 2019; paid extended support runs to December 2030, and other vendors ship free builds. The practical problem is that current frameworks need Java 17 or later, so staying on 8 means staying on old frameworks too.

In 2020 Java EE became Jakarta EE and every javax.* package was renamed jakarta.*. Current servers, including Tomcat 10 and later, use the new names. The change is mechanical but touches every file that imports them, and it's one of the stages.

It depends on how many JDK and framework steps there are and how much of the web layer is Struts or JSP, which the assessment counts. The shape is the same as always: building and safe first, something on a supported version within about six weeks, then one stage at a time, each priced before you commit.

Start with a free consultation

An hour on your system, online or by phone. From there we size the assessment, from £395 + VAT, and give you an exact price before you commit.

Want the numbers first? See how pricing works.

Written by Marc Allington, founder. .