Liferay upgrade & migration to DXP 7.4, without the rewrite
Most Liferay portals are still running a version their vendor no longer patches, held there by custom code nobody wants to touch. We upgrade them — 6.x, 7.0, 7.1, 7.2 or 7.3 to DXP 7.4 — starting with a fixed-fee assessment that tells you which of three upgrade paths you are on, what it will cost, and what will break before anything does.












































What an upgrade covers
The six workstreams in every Liferay upgrade
A Liferay upgrade is never only the database upgrade tool. It is the custom code, the themes, the search index, the documents and the infrastructure around it — each of which moves at its own pace. We run all six as one plan, on the same engineering principles as a new build: no core changes, everything in OSGi modules, everything rehearsed before cut-over.
Assessment & upgrade plan
An inventory of every plugin, hook, theme, Marketplace app, integration and database table that the upgrade touches, classified as keep, port or replace — with effort per item and a fixed price for the whole.
Database & document upgrade
Rehearsed runs of Liferay's upgrade tool on a copy of production, pruned document and web-content versions, file-store migration to S3 or the advanced file system, and reconciliation reports before and after.
Portlet & module modernisation
Plugins-SDK WARs and ext plugins rebuilt as Liferay Workspace OSGi modules; JSP hooks replaced by fragment bundles and dynamic includes; Service Builder entities regenerated; MVC portlets rebuilt in React where the UX warrants it.
Theme & front-end migration
Velocity and AlloyUI-era themes rebuilt on FreeMarker and Clay, page layouts recreated as content pages and fragments, and style books replacing hand-edited CSS — so the next upgrade is a configuration change.
Search & integrations
Elasticsearch upgrade or Solr-to-Elasticsearch migration with a full reindex; SSO (SAML, OIDC, LDAP), ERP, CRM and payment integrations re-tested against the new APIs, with the SOAP-to-REST changes handled.
Consolidation & infrastructure
Several portals folded into one DXP instance with virtual instances or sites; Docker-based environments, CI/CD, clustering and a rollback plan — on your servers, AWS, Azure or Liferay's own cloud.
Why now
Why a portal on Liferay 6.x or early 7.x is a liability, not a saving
Liferay retires each release line a few years after it ships. Liferay 6.2 and the early 7.x lines are already past premium support, and 7.3 follows on Liferay's published lifecycle — which means no security patches for a platform that usually sits behind your customer or employee login. The longer a portal stays on an old line, the wider the gap grows: every year of not upgrading adds another year of API changes, Java versions, browser deprecations and dependency CVEs that the eventual upgrade has to cross at once.
DXP 7.4 is also a different product from the one most old portals were built on. Content pages and fragments replaced hand-built layouts; Liferay Objects let business teams model data without a Service Builder entity; client extensions let custom JavaScript, CSS and micro-frontends live outside the platform; headless REST and GraphQL APIs serve the same content to a React app or a mobile app; and Liferay now ships quarterly releases with a yearly long-term-support line. An upgrade is the moment to adopt these rather than port fifteen-year-old workarounds for their absence.
The commercial case is usually the simplest one. ICICI Bank ran four separate portal applications, each with its own infrastructure and maintenance team; consolidating them into a single DXP 7.4 instance cut infrastructure cost by 45 % and operations overhead by half. The upgrade paid for itself before the modernised portlets shipped.
The assessment
A fixed-fee assessment that decides the path before anyone writes code
Every upgrade engagement starts with a one- to two-week assessment of the portal as it actually runs — not as it was documented when it launched. We inventory the deployed plugins and modules, the hooks and ext plugins, the themes and layout templates, the Marketplace apps, the integrations and the custom database tables; we measure the database, the document library and the number of web-content and document versions; we check the permissions algorithm, the Java version, the app server and the search engine; and we read the code that will not survive the upgrade unchanged.
The output is an upgrade plan you can act on with or without us: every component classified as keep, port, replace or retire, with effort against each; the upgrade path that fits; a list of features that behave differently in 7.4 and need a product decision; a dry-run of the database upgrade tool on a copy of production with its actual run time; and a fixed price for the implementation. The dry-run matters more than it sounds — it surfaces the corrupt rows, orphaned documents and unsupported customisations that would otherwise appear at 2 a.m. on cut-over night.
- Code inventory — plugins, OSGi modules, hooks, ext plugins, Service Builder entities, custom SQL
- Content inventory — sites, pages, layouts, themes, structures and templates, workflows, Marketplace apps
- Data profile — database size, document library size, version counts, file-store type, orphaned records
- Platform profile — Java, app server, database, search engine, clustering, SSO and integrations
- Deliverables — component-by-component plan, upgrade path, dry-run results, fixed-price proposal
Upgrade paths
The three Liferay upgrade paths, and how we choose between them
From 7.3 to 7.4 the platform is continuous: OSGi modules, Liferay Workspace, FreeMarker themes and the headless APIs all carry over. The work is the database upgrade, a dependency and Java-version refresh, a Clay and JavaScript update for anything still on Metal.js or AlloyUI, and a regression pass. Most portals on 7.3 can be on 7.4 in four to eight weeks, and after that the quarterly releases are routine.
From 7.0, 7.1 or 7.2 the code model is the same but the front end is not. Themes built for the early 7.x releases, portlets on Senna and Metal.js, and layouts assembled by hand all need rework; SOAP web services and some deprecated APIs are gone; and the upgrade tool has several years of schema changes to apply, which is where the rehearsal earns its keep. We port the modules, rebuild the themes and layouts on content pages and fragments, and take the opportunity to move the heaviest portlets to React — the change that gave ICICI Bank a 55 % faster page load.
From 6.1 or 6.2 the honest description is a rebuild in place. Plugins-SDK WARs, ext plugins, Velocity themes and the 6.x permission system do not port; every custom feature is re-implemented as an OSGi module, a fragment, an Object or a client extension, while the content, users, roles, documents and workflow history come across through the upgrade tool — after a mandatory step to 6.2 and permissions algorithm 6 if the portal is still on 6.1. We have run 6.1 and 6.2 portals for PodEngine, Netwokin, IGT and MasterCard, so we know exactly what those code bases contain and what 7.4 has replaced it with.
There is a fourth path that is really a business decision: consolidation. When an organisation has accumulated several portals — separate applications, separate logins, separate teams — the upgrade is the moment to fold them into one DXP instance with sites or virtual instances, one SSO and one support model. That is what ICICI Bank did, and it is usually where the largest saving is.
Data migration
Upgrading the database and documents without losing a record
Liferay's database upgrade tool does the heavy lifting, but how long it runs and whether it finishes depend on what you feed it. Before the real run we prune expired web-content and document versions (with the business's sign-off on retention), clean orphaned document-library rows, move the file store to S3 or the advanced file system if it is still on the legacy layout, and fix the data the dry-run complained about. On a large portal this turns an upgrade that would run for a day into one that runs for an hour — which is the difference between a maintenance window and a weekend outage.
We run the upgrade at least three times: on a fresh copy of production during assessment, on a staging environment with the ported code, and finally on the cut-over night. Each run produces a reconciliation report — users, roles, sites, pages, journal articles, documents, workflow instances, custom entities — counted before and after and compared. Engineers India Limited moved 200,000+ engineering documents to a DXP 7.4 document-management platform this way with Elasticsearch-powered search on the other side; Bank of Baroda's early-warning system was re-platformed on DXP 7.4 with a hundred per cent of its data intact while scaling to three times the volume after the bank's mergers; CIGNEX's legacy CMS came across to Liferay with zero content loss across twelve language variants.
Search is its own migration. Portals still on Solr move to Elasticsearch; portals on an old Elasticsearch move to a supported major version, usually as a separate cluster rather than the embedded sidecar; and everything is reindexed with the new analyzers, then spot-checked against the queries your users actually run.
Code & themes
Modernising custom code so that this is the last painful upgrade
The reason a portal is hard to upgrade is almost always that a previous team modified Liferay itself — ext plugins, patched JSPs, forked core modules, custom SQL against internal tables. Our rule on every upgrade is the same as on every new build: never change core. Custom behaviour goes into OSGi modules with declared dependencies; JSP changes go into fragment bundles and dynamic includes; overrides use the extension points Liferay documents; and anything that still needs a core patch is written down as a risk with a plan to remove it.
Where a custom entity only stores and lists business data, we replace the Service Builder code with a Liferay Object — configurable, permissioned, exposed over headless APIs and upgraded by Liferay rather than by you. Where custom JavaScript or CSS lives in a theme, it moves to a client extension or a style book so the theme is no longer a fork. And where a portlet is doing real application work — a dispute-management screen, a maker-checker approval, a risk dashboard — we rebuild it as a React or Angular portlet against a Spring Boot service, the pattern behind the Bank of Baroda and ICICI Bank platforms.
The test of a good upgrade is the next one. A portal that leaves us on 7.4 with all customisations in modules, fragments, Objects and client extensions takes the next quarterly release as a dependency bump and a regression run — which is what our support retainers do for clients every quarter.
Timeline & cost
How long a Liferay upgrade takes, and what sets the price
The assessment is a fixed fee and takes one to two weeks. As a guide from our own projects, the implementation then runs four to eight weeks for a 7.3 → 7.4 upgrade with a modest custom-code base; three to five months for 7.0, 7.1 or 7.2 → 7.4 where themes, layouts and the heavier portlets are rebuilt; and five to nine months for a 6.x rebuild in place or a multi-portal consolidation, delivered in releases so that the business sees progress before the cut-over.
Six things set the cost: the number and kind of custom plugins (a hook is an hour, an ext plugin is a rewrite); the number of themes and hand-built layouts; database and document-library size, which drives rehearsal and cut-over time; the integrations to re-test; the number of environments and the state of CI/CD; and how much downtime the business can accept, because a zero-downtime cut-over costs more than a weekend one. Liferay licence changes — DXP subscription tiers, or a move between DXP and the community Portal edition — are a separate line we help you size but do not mark up.
We quote the implementation as a fixed price for the scope in the assessment, with change control for anything found afterwards, and the post-upgrade support as a monthly retainer. You will not find a price list here because an upgrade without an inventory is a guess; send us the version you are on and roughly what has been customised and we will give you a bracket within a couple of days, and a number after the assessment.
Cut-over & after
Cut-over, rollback and what happens in the first quarter on 7.4
Cut-over is rehearsed to a script: freeze content on the old portal, take the final database and file-store snapshot, run the upgrade on the new environment, reindex, run the reconciliation and smoke tests, switch DNS or the load balancer, and keep the old environment intact for a rollback window agreed in advance. For portals that cannot take a weekend outage we run the old and new environments side by side with the database frozen and switch traffic in stages. Either way, the decision to go or roll back is made against a checklist, not a feeling.
After cut-over comes a hypercare month with the engineers who did the upgrade on call, then a support retainer that applies Liferay's quarterly releases and security patches, monitors the platform and picks up the small changes that follow any upgrade. The hosting decision — your own servers, AWS or Azure with Docker, or Liferay's PaaS and SaaS offerings — is made during the assessment, and we set up the target environment with CI/CD before the first rehearsal so that every run of the upgrade is reproducible. Our wider Liferay DXP practice covers the new-build, integration and banking work that usually follows.
Start with the assessment
One to two weeks, fixed fee, and you leave with a component-by-component upgrade plan, a timed dry-run of the database upgrade and a fixed price — whether or not you go ahead with us.
Book an upgrade assessmentOur technology stack
What a DXP 7.4 upgrade lands on
Liferay DXP on Java 11 or 17, custom services in Spring Boot, React for the rebuilt portlets, Elasticsearch for search, Docker-based environments with CI/CD, and the cloud or servers you already run.
How we deliver
From assessment to a portal on the current release
Five phases, each ending in something you can verify: a plan, a rehearsed upgrade with timings, ported code, a reconciled migration, and a live portal with a rollback you never needed.
Assess
Inventory, data profile, dry-run of the upgrade tool and a component-by-component plan with a fixed price — one to two weeks.
Rehearse
Full upgrade on a copy of production: prune, migrate the file store, run the tool, reindex, time it, fix what it finds.
Modernise
Port modules, rebuild themes and layouts, replace hooks with fragments and entities with Objects, rebuild key portlets in React.
Migrate & verify
Staging upgrade with the ported code, reconciliation reports, integration and SSO re-tests, UAT on your data.
Cut over & support
Scripted cut-over with a rollback window, a hypercare month, then quarterly releases on retainer.
Case studies
Liferay migrations and DXP 7.4 platforms we have delivered
Consolidations, re-platforming and document migrations onto DXP 7.4 — each with the outcome the client measured.
ICICI Bank — DXP Migration
Consolidation of 4 Legacy Banking Applications into Single Liferay DXP Platform. ATS architected a phased migration strategy consolidating all four applications into a single Liferay DXP 7.4 instance.
Read case study
Public Sector BankingBank of Baroda — EWS Migration
Early Warning System Migration & Enhancement for Public Sector Bank. ATS led the complete migration to a Spring Boot + Angular architecture on Liferay DXP 7.4, introducing Angular portlets for dynamic UI, a multi-level maker-checker approval workflow, and predictive analytics modules for real-time financial risk flagging.
Read case study
Engineering Consulting & Project ManagementEngineers India Limited
Engineering Knowledge Repository & Project Document Management. ATS implemented a Liferay DXP-based Document Management System (DMS) with metadata-driven classification, version control, Elasticsearch-powered search, and role-based access control aligned to project hierarchies.
Read case study
Digital Transformation & Open SourceCIGNEX Datamatics
Enterprise Content Management & Open Source Portal Modernization. ATS architected a headless-capable Liferay DXP content platform leveraging REST and Headless APIs, enabling omnichannel content delivery across web, mobile, and third-party applications.
Read case study
Environmental Management / GovernmentBEAH — Environmental Services (Jordan/Oman)
National Waste Management Services Digital Portal for be'ah Oman. ATS built a comprehensive Liferay DXP 7.4 platform leveraging Liferay Forms, Liferay Objects, form data providers, and Picklists for flexible, configurable service request management.
Read case study
Central Banking / Financial RegulationEWS-Plus — Royal Monetary Authority of Bhutan
National Banking Sector Early Warning System for Fraud & Financial Stability Monitoring. ATS built a comprehensive Liferay DXP 7.4 EWS platform featuring Liferay REST service modules for data ingestion, a multi-level Kaleo workflow for indicator data review (maker-checker), custom Elasticsearch integration for real-time indexed search and alerting, an automated notification system (in-app and email), and dynamic Excel reporting.
Read case study
From the blog
All articlesHow we built a Liferay DXP intranet for 8,000 employees across three countries
Building a multilingual enterprise intranet at scale requires more than a platform installation. Here's what we learned delivering Liferay DXP across India, KSA, and Malaysia.
Mahaboob Basha · JUN 20, 2026BACKEND ENGINEERING · 7 min readJava Spring Boot vs Node.js for enterprise APIs: how we decide
Both Spring Boot and Node.js build production-grade APIs. The choice comes down to team composition, throughput patterns, and integration requirements — not benchmarks.
Mahaboob Basha · MAY 20, 2026Also in our Liferay practice
Liferay DXP services overview
New portals, intranets, headless integrations, the engineering principles and the full list of Liferay case studies.
ExploreSpring Boot & Java services
The services behind our banking portals — where the heaviest portlets end up when a portal is modernised.
ExploreBanking & financial services
ICICI Bank, Bank of Baroda and the Royal Monetary Authority of Bhutan — the sector where most of our migration work sits.
ExploreFAQs
Liferay upgrades — questions we are asked first
How long does a Liferay upgrade take?+
From our projects: four to eight weeks for 7.3 → 7.4 with a modest custom-code base; three to five months for 7.0, 7.1 or 7.2 → 7.4 where themes, layouts and heavier portlets are rebuilt; five to nine months for a 6.x rebuild in place or a multi-portal consolidation. The fixed-fee assessment turns these ranges into a dated plan for your portal.
Can we upgrade directly from Liferay 6.2 to DXP 7.4?+
The data can: Liferay's upgrade tool takes a 6.2 database (on permissions algorithm 6) to 7.4 in one run, and a 6.1 portal is first stepped to 6.2. The code cannot — plugins-SDK portlets, ext plugins and Velocity themes are re-implemented as OSGi modules, fragments, Objects and client extensions. That is why we describe 6.x → 7.4 as a rebuild in place rather than an upgrade.
Will our custom portlets and themes still work?+
OSGi modules written for 7.x generally port with dependency and API updates; anything on Senna, Metal.js or AlloyUI needs front-end rework; plugins-SDK WARs and ext plugins from 6.x are rewritten. Themes from 7.0–7.2 are usually rebuilt on Clay and content pages, which is cheaper than patching them and leaves you with a portal the next release will not break. The assessment classifies every one of yours.
Will we lose any data?+
No. We rehearse the database and document upgrade at least three times before cut-over and reconcile counts of users, roles, sites, pages, content, documents, workflow instances and custom entities before and after each run. Bank of Baroda's re-platforming onto DXP 7.4 kept 100 % data integrity while scaling to three times the volume; Engineers India Limited moved 200,000+ documents without loss.
Should we upgrade or rebuild the portal?+
Upgrade when the custom code is in OSGi modules and the content model still fits the business — most 7.x portals. Rebuild in place when the portal is on 6.x or when the customisations are mostly core patches, because porting them costs more than re-implementing them on 7.4's Objects, fragments and client extensions. Consolidate when you have several portals; the saving is usually larger than either. The assessment gives you the numbers for your case.
Do you handle Liferay DXP and the community Portal edition, on-premise and cloud?+
Yes. We upgrade DXP subscriptions and community Portal installations, on your own servers, on AWS or Azure with Docker, and on Liferay's PaaS and SaaS offerings; we also move portals between these during the upgrade when that is the goal. Licence and subscription changes are sized with you but not marked up.
Let’s work together
Tell us which version you are on
Send the Liferay version, the app server and database, and roughly what has been customised — we will come back within a couple of days with the likely upgrade path and a bracket, and a fixed price after the assessment.