Liferay has evolved dramatically from its early portal days to the enterprise-grade, API-first, cloud-native platform it is today. If you've worked on Liferay 6.x or even 7.0–7.2, you'll notice significant changes in architecture, development approach, tooling, and deployment. This blog covers all 14 key areas where Liferay DXP 7.4 stands apart.
LIFERAY PORTAL
DXP 7.4 vs Earlier Versions
Key Differences Every Developer Must Know
14 Categories | Architecture · APIs · Frontend · DevOps · Low-Code
01 |
Architecture — The Most Fundamental Change |
The shift in architecture is the single most important change to understand. Everything else in Liferay 7.4 flows from this foundational decision.
❌ Earlier Versions
|
✅ Liferay DXP 7.4
|
🔑 Key Impact: In Liferay 7.4, you can deploy, update, or remove a single module while the portal is running — something impossible in older versions. This dramatically speeds up development cycles. |
02 |
Development Framework |
The tools and patterns available to developers have expanded significantly, replacing legacy hooks and EXT plugins with modern, standards-based alternatives.
❌ Earlier Versions
|
✅ Liferay DXP 7.4
|
💡 Tip: EXT plugins and Hooks are fully removed in 7.4. Any migration from older versions must replace these with OSGi modules, REST Builder services, or Client Extensions. |
03 |
Frontend Modernization |
Liferay moved away from its proprietary AlloyUI framework and embraced the modern JavaScript ecosystem, giving developers the freedom to use familiar tools.
❌ Earlier Versions
|
✅ Liferay DXP 7.4
|
Clay UI provides a complete design system including accessibility-compliant components, icons, forms, and data tables — consistent across the entire DXP 7.4 interface.
04 |
Headless & API-First Development |
This is one of the most significant upgrades in DXP 7.4 — a complete shift to an API-first philosophy that enables entirely new integration patterns.
❌ Earlier Versions
|
✅ Liferay DXP 7.4
|
What This Enables
- Mobile apps consuming Liferay content via REST
- External portals and SPAs fetching data headlessly
- Microservices integrating with Liferay data models
- Third-party systems reading/writing portal objects via API
05 |
Search Improvements |
Search in Liferay shifted from a basic, limited capability to a deeply integrated, production-grade search experience powered by Elasticsearch.
❌ Earlier Versions
|
✅ Liferay DXP 7.4
|
⚠️ Note: In production Liferay DXP 7.4 deployments, always use an external Elasticsearch cluster. The embedded sidecar is for development only. |
06 |
Configuration Framework |
Configuration management changed from static property files to a dynamic, UI-driven system that supports runtime changes without restarts.
❌ Earlier Versions
|
✅ Liferay DXP 7.4
|
OSGi Configuration Example
- # bundles/osgi/configs/
- com.example.MyConfiguration.config
- enabled=B"true"
- apiUrl="https://api.example.com"
- timeout=I"5000"
07 |
Client Extensions — New in DXP 7.4 |
Client Extensions are an entirely new concept introduced in Liferay DXP 7.4. They allow developers to extend the portal's UI and behaviour without writing any OSGi code.
🆕 New Feature: Client Extensions exist entirely outside the OSGi container. They are deployed independently and communicate with the portal via REST APIs. This means zero portal restarts and no OSGi knowledge required. |
What You Can Build with Client Extensions
- Remote React apps — full SPA rendered as a portlet
- Custom JS widgets — vanilla JavaScript components
- Theme CSS — custom stylesheets applied portal-wide
- Custom element components — Web Components integration
- Frontend token definitions — design token overrides
Client Extensions are deployed as ZIP packages and can be hosted externally or on any static hosting service — completely decoupled from the Liferay server.
08 |
Workspace & Build Tools |
The build tooling underwent a complete overhaul, replacing Ant-based Plugin SDK with a modern Gradle-powered workspace that manages the entire development lifecycle.
❌ Earlier Versions
|
✅ Liferay DXP 7.4
|
Common Workspace Commands
- # Create workspace
- blade init -v 7.4 my-workspace
- # Initialize bundle (downloads DXP/CE)
- ./gradlew initBundle
- # Create new portlet module
- blade create -t mvc-portlet -p com.example.demo demo-portlet
- # Deploy all modules
- ./gradlew deploy
09 |
Security Enhancements |
Security has been significantly hardened in DXP 7.4, with modern authentication standards and a more granular permission system.
❌ Earlier Versions
|
✅ Liferay DXP 7.4
|
10 |
Performance Improvements |
Liferay 7.4 delivers measurable performance gains across startup time, caching, indexing, and service loading — primarily as a result of the modular OSGi architecture.
❌ Earlier Versions
|
✅ Liferay DXP 7.4
|
11 |
DevOps & Cloud Support |
Liferay DXP 7.4 was designed from the ground up to support modern cloud-native deployment patterns — a major departure from the on-premise-only focus of earlier versions.
❌ Earlier Versions
|
✅ Liferay DXP 7.4
|
Docker Quick Start
- # Run Liferay DXP 7.4 via Docker
- docker run -it -m 8g -p 8080:8080 \
- liferay/dxp:7.4.13-u92
12 |
UI / UX Improvements |
The administrator and content author experience has been significantly modernized in DXP 7.4, making the portal more intuitive and powerful.
❌ Earlier Versions
|
✅ Liferay DXP 7.4
|
13 |
Content Management Enhancements |
Liferay 7.4 brings a major uplift to content management — making it both more powerful for editors and more accessible via API for developers.
❌ Earlier Versions
|
✅ Liferay DXP 7.4
|
14 |
Low-Code Framework — Objects & Automation |
Liferay DXP 7.4 introduced a powerful low-code capability through the Objects framework — allowing business analysts and citizen developers to build data models, forms, and workflows without writing a single line of code.
❌ Earlier Versions
|
✅ Liferay DXP 7.4
|
🚀 Significance: The Objects framework can replace 80% of custom Service Builder data models in many real-world projects. Combined with headless APIs, every Object automatically gets REST and GraphQL endpoints — zero additional development needed. |
Deep Dive — OSGi Container & Service Registry
In Liferay Portal 7.4, the OSGi Container and Service Registry are the core engine of the platform's modular architecture. Understanding how they work is essential for any developer building on Liferay 7.4.
What is the OSGi Container?
The OSGi container (Apache Felix in Liferay's case) is a runtime environment that manages the lifecycle of all modules — called bundles — in the system.
- Each bundle is a JAR with an OSGi manifest (bnd.bnd)
- Bundles declare what packages they export and import
- The container resolves dependencies between bundles automatically
- Bundles can be installed, started, stopped, updated, and uninstalled dynamically
Bundle Lifecycle States
State |
Description |
INSTALLED |
Bundle has been placed in the osgi/modules/ directory |
RESOLVED |
All dependencies are satisfied and resolved by the container |
STARTING |
Bundle activator is executing — initialization in progress |
ACTIVE |
Bundle is running and all services are registered and available |
STOPPING |
Bundle activator is shutting down — services being unregistered |
UNINSTALLED |
Bundle has been removed from the container |
What is the Service Registry?
The Service Registry is a central directory where OSGi services are published and discovered at runtime. It is the mechanism by which bundles communicate with each other without direct coupling.- A bundle publishes a service by registering it with the registry
- Any other bundle can look up that service by its interface
- Services can come and go dynamically — the registry handles it
- Declarative Services (DS) via @Component annotation makes this seamless
Example — Publishing and Consuming a Service
//
PUBLISH a service (Provider bundle)
@Component(service
= GreetingService.class)
public
class GreetingServiceImpl implements GreetingService {
@Override
public
String greet(String name) {
return
"Hello, " + name + " from Liferay DXP 7.4!";
}
}
//
CONSUME a service (Consumer bundle)
@Component(service
= MyPortlet.class)
public
class MyPortlet extends MVCPortlet {
@Reference
private
GreetingService _greetingService;
}
💡 How it works: The @Component annotation registers the class with the OSGi Service Registry. The @Reference annotation tells the container to inject the matching service automatically — no manual wiring needed. |
OSGi vs Monolith — Side by Side
❌ Earlier Versions
|
✅ Liferay DXP 7.4
|
Summary — All 14 Differences at a Glance
# |
Category |
Earlier Versions |
Liferay DXP 7.4 |
01 |
Architecture |
Monolithic + WAR |
OSGi Modular + Hot Deploy |
02 |
Dev Framework |
Hooks, EXT, JSP |
REST Builder, GraphQL, Client Ext |
03 |
Frontend |
AlloyUI, jQuery |
React, Vue, Clay UI |
04 |
APIs |
No headless layer |
REST + GraphQL API-first |
05 |
Search |
Basic Lucene |
Elasticsearch deep integration |
06 |
Configuration |
portal-ext.properties |
System Settings UI + OSGi config |
07 |
Client Extensions |
Not available |
Remote apps, JS widgets, CSS |
08 |
Build Tools |
Plugin SDK + Ant |
Liferay Workspace + Gradle |
09 |
Security |
Basic auth only |
OAuth2, SAML, token-based API |
10 |
Performance |
Slow startup, basic cache |
Fast startup, optimized indexing |
11 |
DevOps |
On-premise only |
Docker, Kubernetes, CI/CD |
12 |
UI/UX |
Dated admin UI |
Modern builder, drag-and-drop |
13 |
Content Mgmt |
Basic WCM |
Headless CMS + Content APIs |
14 |
Low-Code |
No low-code tooling |
Objects, Workflow Builder, Automation |
Comments
Post a Comment