2026 Deprecations and Breaking Changes

Liferay DXP 2026.Q2 Breaking Changes

Breaking changes break or significantly alter existing functionality or code structure. Here are all of the breaking changes for Liferay DXP 2026.Q2. As the product changes and improves, we try our best to minimize these disruptions, but sometimes they are unavoidable.

Changes in Liferay DXP

Here is a list of changes that break or significantly alter existing functionality within Liferay.

Breaking ChangesDescriptionReferences
Indexer Implementation ChangesMany APIs related to indexing and search are optimized and refactored, including removed methods and interfaces. See the Indexer and BaseIndexer entries under LPD-83771 below for the source-level details.LPD-75117, LPD-83771
Liferay Developer Studio: Liferay IDE AlloyUIDevelopment tooling for the AlloyUI framework is removed. You can use the Web Tools Platform to provide similar functionality, though you must configure it to enable auto-complete and syntax highlighting for AlloyUI. You can also use third-party plugins on the Eclipse Marketplace with robust JavaScript support, using the tag metadata here.LPD-74745
Liferay Developer Studio: Liferay Upgrade PlannerThe Liferay Upgrade Planner (for migrating code from older versions of Liferay) is removed. Instead, see the reference documentation for breaking changes and deprecations, and use the upgradeSourceCode Blade command to help automate code migrations.LPD-74745
Liferay Developer Studio: XML SearchThe XPath-based search tab in the Search menu is removed. If you need XPath-based search functionality for XML files, you can find third-party plugins on the Eclipse Marketplace.LPD-74745
Page Management RulesThe option to add page management rules was erroneously exposed in the UI without the correct feature flag, and some settings were not yet fully functional. This behavior shipped in the 2026.Q1.4 patch and continues in 2026.Q2: the option is hidden behind a release feature flag. Previous configurations made before this change are no longer accessible or supported.LPD-85335
Partitioned Virtual InstancesFile system artifacts are now deleted when a virtual instance is removed with database partitioning enabled, including document library files, search indexes, and configuration files. If you have database partitioning enabled, ensure any required data is backed up before deleting a partition.LPD-50166
Petra Utility ClassesUtility classes that were previously duplicated between portal-kernel and Petra libraries (petra-io, petra-string, etc.) are removed from portal-kernel to simplify the code. If you used these utilities, adapt your usages to the equivalent Petra classes to keep the same behavior.LPD-82072
Service Builder: PrevAndNextAll findBy*_PrevAndNext and filterFindBy*_PrevAndNext methods are removed from generated persistence classes (*Persistence, *PersistenceImpl, and *Util) for entities using Service Builder 7.4+. If you used these finder methods in your logic, either fetch the current entity using findByPrimaryKey and retrieve the full matching list with findBy* methods (recommended), or use dslQuery with a limit of 1 to execute one query fetching the previous entry and another fetching the next entry.LPD-83108
Site Pages Matching Layout IDsSite page exports no longer include a page’s friendly URL when the URL is a numeric value equal to that page’s layout ID. Previously, re-importing such pages into a target site whose layouts happened to use the same numeric IDs could fail with LayoutFriendlyURLException. If you depend on numeric friendly URLs surviving an export, set a non-numeric friendly URL before exporting.LPD-74331

Changes in Module Source

CommerceShippingFixedOptionRelLocalServiceImpl.java modules/apps/commerce/commerce-shipping-engine-fixed-service/src/main/java/com/liferay/commerce/shipping/engine/fixed/service/impl/CommerceShippingFixedOptionRelLocalServiceImpl.java

  • Date: Feb. 6, 2026
  • Ticket: LPD-71919
  • What changed: The addCommerceShippingFixedOptionRel and updateCommerceShippingFixedOptionRel methods have their parameters sorted. Additionally, the deprecated addCommerceShippingFixedOptionRel is removed.
  • Reason: This change is required to reflect the service API changes for CommerceShippingFixedOptionRel. The deprecated method is no longer used.

CommerceShippingFixedOptionRelServiceImpl.java modules/apps/commerce/commerce-shipping-engine-fixed-service/src/main/java/com/liferay/commerce/shipping/engine/fixed/service/impl/CommerceShippingFixedOptionRelServiceImpl.java

  • Date: Feb. 6, 2026
  • Ticket: LPD-71919
  • What changed: The addCommerceShippingFixedOptionRel and updateCommerceShippingFixedOptionRel methods have their parameters sorted. Additionally, the deprecated addCommerceShippingFixedOptionRel is removed.
  • Reason: This change is required to reflect the service API changes for CommerceShippingFixedOptionRel. The deprecated method is no longer used.

service.xml modules/apps/marketplace/marketplace-service/service.xml

  • Date: Feb. 7, 2026
  • Ticket: LPD-25552
  • What changed: The app and module finders now have unique or collection return types.
  • Reason: This change is required because non-unique, single finders can cause inconsistent persistence and duplicate entries.

SegmentsExperienceModel.java modules/apps/segments/segments-api/src/main/java/com/liferay/segments/model/SegmentsExperienceModel.java

  • Date: Feb. 7, 2026
  • Ticket: LPD-73850
  • What changed: The segmentsEntryId column is removed, and replaced with segmentsEntryERC and segmentsEntryScopeERC.
  • Reason: This change supports better portability for staging and LAR exports/imports, by allowing lazy referencing of SegmentsEntry via External Reference Code (ERC) instead of a hard primary key database reference.

PipelineAggregationTranslator.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/pipeline/PipelineAggregationTranslator.java

  • Date: Feb. 10, 2026
  • Ticket: LPD-78663
  • What changed: The PipelineAggregationTranslator interface is removed.
  • Reason: The interface was not used. Only the implementation classes are directly used within their own internal module classes.

StatsResponse.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/stats/StatsResponse.java

  • Date: Feb. 10, 2026
  • Ticket: LPD-78663
  • What changed: StatsResponse is now an implementation class instead of an interface, and StatsResponseImpl is merged into it.
  • Reason: StatsResponse is a data object class, so there is no reason to separate the implementation.

StatsResponseBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/stats/StatsResponseBuilder.java

  • Date: Feb. 10, 2026
  • Ticket: LPD-78663
  • What changed: StatsResponseBuilder is now an implementation class instead of an interface, and StatsResponseBuilderImpl is merged into it.
  • Reason: StatsResponseBuilder is a data object class, so there is no reason to separate the implementation.

ObjectDefinitionLocalServiceImpl.java modules/apps/object/object-service/src/main/java/com/liferay/object/service/impl/ObjectDefinitionLocalServiceImpl.java

  • Date: Feb. 10, 2026
  • Ticket: LPD-77985
  • What changed: The addSystemObjectDefinition method has a new boolean parameter, enableObjectEntryHistory.
  • Reason: This change enables tracking for modifiable system objects in CMP, by setting enableObjectEntryHistory to true.

ProgressBarTag.java modules/apps/frontend-taglib/frontend-taglib-clay/src/main/java/com/liferay/frontend/taglib/clay/servlet/taglib/ProgressBarTag.java

  • Date: Feb. 10, 2026
  • Ticket: LPD-71688
  • What changed: ProgressBarTag uses a new major version to reflect breaking changes in Clay CSS.
  • Reason: This change ensures proper accessibility and alignment of the progress bar component.

HeaderTag.java modules/apps/commerce/commerce-frontend-taglib/src/main/java/com/liferay/commerce/frontend/taglib/servlet/taglib/HeaderTag.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-78104
  • What changed: All names with *Url are renamed to *URL.
  • Reason: This change enforces consistent naming standards.

InfoBoxTag.java modules/apps/commerce/commerce-frontend-taglib/src/main/java/com/liferay/commerce/frontend/taglib/servlet/taglib/InfoBoxTag.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-78104
  • What changed: All names with *Url are renamed to *URL.
  • Reason: This change enforces consistent naming standards.

PanelTag.java modules/apps/commerce/commerce-frontend-taglib/src/main/java/com/liferay/commerce/frontend/taglib/servlet/taglib/PanelTag.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-78104
  • What changed: All names with *Url are renamed to *URL.
  • Reason: This change enforces consistent naming standards.

LayoutStructureRendererConstants.java modules/apps/layout/layout-taglib/src/main/java/com/liferay/layout/taglib/constants/LayoutStructureRendererConstants.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-78234
  • What changed: The LAYOUT_DEFAULT_EXTERNAL_REFERENCE_CODE constant value is removed.
  • Reason: This constant is no longer used.

AggregationTranslator.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/AggregationTranslator.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-78941
  • What changed: The AggregationTranslator interface is removed.
  • Reason: The interface was not used. Only the implementation classes are directly used within their own internal module classes.

Script.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/script/Script.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-78941
  • What changed: Script is now an implementation class instead of an interface, and ScriptImpl is merged into it.
  • Reason: Script is a POJO, so there is no reason to separate the implementation.

ScriptBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/script/ScriptBuilder.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-78941
  • What changed: ScriptBuilder is now an implementation class instead of an interface, and ScriptBuilderImpl is merged into it.
  • Reason: ScriptBuilder is a POJO, so there is no reason to separate the implementation.

ScriptField.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/script/ScriptField.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-78941
  • What changed: ScriptField is now an implementation class instead of an interface, and ScriptFieldImpl is merged into it.
  • Reason: ScriptField is a POJO, so there is no reason to separate the implementation.

ScriptFieldBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/script/ScriptFieldBuilder.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-78941
  • What changed: ScriptFieldBuilder is now an implementation class instead of an interface, and ScriptFieldBuilderImpl is merged into it.
  • Reason: ScriptFieldBuilder is a POJO, so there is no reason to separate the implementation.

Scripts.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/script/Scripts.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-78941
  • What changed: Scripts is now an implementation class instead of an interface, and ScriptsImpl is merged into it.
  • Reason: Scripts is a POJO, so there is no reason to separate the implementation.

CircleShape.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/CircleShape.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: CircleShape is now an implementation class instead of an interface, and CircleShapeImpl is merged into it.
  • Reason: CircleShape is a POJO, so there is no reason to separate the implementation.

CircleShapeBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/CircleShapeBuilder.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: CircleShapeBuilder is now an implementation class instead of an interface, and CircleShapeBuilderImpl is merged into it.
  • Reason: CircleShapeBuilder is a POJO, so there is no reason to separate the implementation.

Coordinate.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/Coordinate.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: Coordinate is now an implementation class instead of an interface, and CoordinateImpl is merged into it.
  • Reason: Coordinate is a POJO, so there is no reason to separate the implementation.

EnvelopeShape.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/EnvelopeShape.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: EnvelopeShape is now an implementation class instead of an interface, and EnvelopeShapeImpl is merged into it.
  • Reason: EnvelopeShape is a POJO, so there is no reason to separate the implementation.

EnvelopeShapeBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/EnvelopeShapeBuilder.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: EnvelopeShapeBuilder is now an implementation class instead of an interface, and EnvelopeShapeBuilderImpl is merged into it.
  • Reason: EnvelopeShapeBuilder is a POJO, so there is no reason to separate the implementation.

GeoBuilders.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/GeoBuilders.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: GeoBuilders is now an implementation class instead of an interface, and GeoBuildersImpl is merged into it.
  • Reason: GeoBuilders is a POJO, so there is no reason to separate the implementation.

GeoDistance.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/GeoDistance.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: GeoDistance is now an implementation class instead of an interface, and GeoDistanceImpl is merged into it.
  • Reason: GeoDistance is a POJO, so there is no reason to separate the implementation.

GeoLocationPoint.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/GeoLocationPoint.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: GeoLocationPoint is now an implementation class instead of an interface, and GeoLocationPointImpl is merged into it.
  • Reason: GeoLocationPoint is a POJO, so there is no reason to separate the implementation.

GeometryCollectionShape.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/GeometryCollectionShape.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: GeometryCollectionShape is now an implementation class instead of an interface, and GeometryCollectionShapeImpl is merged into it.
  • Reason: GeometryCollectionShape is a POJO, so there is no reason to separate the implementation.

GeometryCollectionShapeBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/GeometryCollectionShapeBuilder.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: GeometryCollectionShapeBuilder is now an implementation class instead of an interface, and GeometryCollectionShapeBuilderImpl is merged into it.
  • Reason: GeometryCollectionShapeBuilder is a POJO, so there is no reason to separate the implementation.

LineStringShape.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/LineStringShape.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: LineStringShape is now an implementation class instead of an interface, and LineStringShapeImpl is merged into it.
  • Reason: LineStringShape is a POJO, so there is no reason to separate the implementation.

LineStringShapeBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/LineStringShapeBuilder.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: LineStringShapeBuilder is now an implementation class instead of an interface, and LineStringShapeBuilderImpl is merged into it.
  • Reason: LineStringShapeBuilder is a POJO, so there is no reason to separate the implementation.

MultiLineStringShape.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/MultiLineStringShape.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: MultiLineStringShape is now an implementation class instead of an interface, and MultiLineStringShapeImpl is merged into it.
  • Reason: MultiLineStringShape is a POJO, so there is no reason to separate the implementation.

MultiLineStringShapeBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/MultiLineStringShapeBuilder.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: MultiLineStringShapeBuilder is now an implementation class instead of an interface, and MultiLineStringShapeBuilderImpl is merged into it.
  • Reason: MultiLineStringShapeBuilder is a POJO, so there is no reason to separate the implementation.

MultiPointShape.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/MultiPointShape.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: MultiPointShape is now an implementation class instead of an interface, and MultiPointShapeImpl is merged into it.
  • Reason: MultiPointShape is a POJO, so there is no reason to separate the implementation.

MultiPointShapeBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/MultiPointShapeBuilder.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: MultiPointShapeBuilder is now an implementation class instead of an interface, and MultiPointShapeBuilderImpl is merged into it.
  • Reason: MultiPointShapeBuilder is a POJO, so there is no reason to separate the implementation.

MultiPolygonShape.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/MultiPolygonShape.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: MultiPolygonShape is now an implementation class instead of an interface, and MultiPolygonShapeImpl is merged into it.
  • Reason: MultiPolygonShape is a POJO, so there is no reason to separate the implementation.

PointShape.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/PointShape.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: PointShape is now an implementation class instead of an interface, and PointShapeImpl is merged into it.
  • Reason: PointShape is a POJO, so there is no reason to separate the implementation.

PointShapeBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/PointShapeBuilder.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: PointShapeBuilder is now an implementation class instead of an interface, and PointShapeBuilderImpl is merged into it.
  • Reason: PointShapeBuilder is a POJO, so there is no reason to separate the implementation.

PolygonShape.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/PolygonShape.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: PolygonShape is now an implementation class instead of an interface, and PolygonShapeImpl is merged into it.
  • Reason: PolygonShape is a POJO, so there is no reason to separate the implementation.

PolygonShapeBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/geolocation/PolygonShapeBuilder.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-79074
  • What changed: PolygonShapeBuilder is now an implementation class instead of an interface, and PolygonShapeBuilderImpl is merged into it.
  • Reason: PolygonShapeBuilder is a POJO, so there is no reason to separate the implementation.

CookiesPreferenceHandlingConfiguration.java modules/apps/cookies/cookies-api/src/main/java/com/liferay/cookies/configuration/CookiesPreferenceHandlingConfiguration.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-78076
  • What changed: The new cookie-store-consent configuration is added.
  • Reason: This change enables persisting users’ consent to save cookies.

CookiesConfigurationProvider.java modules/apps/cookies/cookies-api/src/main/java/com/liferay/cookies/configuration/CookiesConfigurationProvider.java

  • Date: Feb. 11, 2026
  • Ticket: LPD-78076
  • What changed: The updateCookiesPreferenceHandlingConfiguration method has a new boolean parameter, storeConsent. Additionally, the new isCookiesPreferenceHandlingStoreConsent method is added.
  • Reason: This change supports the new configuration option to store users’ consent to save cookies.

rest-openapi.yaml modules/apps/headless/headless-admin-site/headless-admin-site-impl/rest-openapi.yaml

  • Date: Feb. 11, 2026
  • Ticket: LPD-69121
  • What changed: The schema used to model the page element background image is now the new BackgroundImageValue schema, instead of FragmentImage.
  • Reason: This change enforces schema reuse and improved model structure.

rest-openapi.yaml modules/apps/bulk/bulk-rest-impl/rest-openapi.yaml

  • Date: Feb. 12, 2026
  • Ticket: LPD-75297
  • What changed: The StatusBulkAction schema now treats statuses as String values instead of integers.
  • Reason: This change accounts for statuses that are not numbers.

AgentsFactory.java modules/dxp/apps/ai-hub/ai-hub-impl/src/main/java/com/liferay/ai/hub/internal/agent/AgentsFactory.java

  • Date: Feb. 12, 2026
  • Ticket: LPD-78066
  • What changed: The AgentsFactory class is removed. Instead, use the _createInternalAgents method in SupervisorAgentImpl.
  • Reason: Agent definitions now come from simplified object classes, so a factory to create sub-agent lists is no longer needed.

SupervisorAgent.java modules/dxp/apps/ai-hub/ai-hub-api/src/main/java/com/liferay/ai/hub/agent/SupervisorAgent.java

  • Date: Feb. 12, 2026
  • Ticket: LPD-78066
  • What changed: The _createInternalAgents method is now used to create lists of sub-agents instead of AgentsFactory.
  • Reason: Agent definitions now come from simplified object classes, so a factory to create subagent lists is no longer needed.

IndexedFieldsFixture.java modules/apps/portal-search/portal-search-test-util/src/main/java/com/liferay/portal/search/test/util/IndexedFieldsFixture.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-79227
  • What changed: The IndexedFieldsFixture constructor no longer has a DocumentBuilderFactory parameter.
  • Reason: The constructor now uses a static utility class instead.

Document.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/document/Document.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-79227
  • What changed: Document is now an implementation class instead of an interface, and DocumentImpl is merged into it.
  • Reason: Document is a POJO, so there is no reason to separate the implementation.

DocumentBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/document/DocumentBuilder.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-79227
  • What changed: DocumentBuilder is now an implementation class instead of an interface, and DocumentBuilderImpl is merged into it.
  • Reason: DocumentBuilder is a POJO, so there is no reason to separate the implementation.

DocumentBuilderFactory.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/document/DocumentBuilderFactory.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-79227
  • What changed: DocumentBuilderFactory is now an implementation class instead of an interface, and DocumentBuilderFactoryImpl is merged into it.
  • Reason: DocumentBuilderFactory is a POJO, so there is no reason to separate the implementation.

Field.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/document/Field.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-79227
  • What changed: Field is now an implementation class instead of an interface, and FieldImpl is merged into it.
  • Reason: Field is a POJO, so there is no reason to separate the implementation.

GroupByRequest.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/groupby/GroupByRequest.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-79227
  • What changed: GroupByRequest is now an implementation class instead of an interface, and GroupByRequestImpl is merged into it.
  • Reason: GroupByRequest is a POJO, so there is no reason to separate the implementation.

GroupByResponse.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/groupby/GroupByResponse.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-79227
  • What changed: GroupByResponse is now an implementation class instead of an interface, and GroupByResponseImpl is merged into it.
  • Reason: GroupByResponse is a POJO, so there is no reason to separate the implementation.

GroupByRequestFactory.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/groupby/GroupByRequestFactory.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-79227
  • What changed: The GroupByRequestFactory class is removed.
  • Reason: GroupByRequest can now be directly created, so a factory class is no longer needed.

GroupByResponseFactory.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/groupby/GroupByResponseFactory.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-79227
  • What changed: The GroupByResponseFactory class is removed.
  • Reason: GroupByResponse can now be directly created, so a factory class is no longer needed.

GroupByRequestFactory.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/legacy/groupby/GroupByRequestFactory.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-79227
  • What changed: GroupByRequestFactory is now a static utility class, and GroupByRequestFactoryImpl is merged into it.
  • Reason: This change consolidates the implementation to make GroupByRequestFactory a static utility.

ComplexQueryBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/filter/ComplexQueryBuilder.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-79227
  • What changed: ComplexQueryBuilder is now an implementation class instead of an interface, and ComplexQueryBuilderImpl is merged into it.
  • Reason: ComplexQueryBuilder is a POJO, so there is no reason to separate the implementation.

StatsRequestBuilderFactory.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/legacy/stats/StatsRequestBuilderFactory.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-79227
  • What changed: StatsRequestBuilderFactory is now a static utility class, and StatsRequestBuilderFactoryImpl is merged into it.
  • Reason: This change consolidates the implementation to make StatsRequestBuilderFactory a static utility.

CommerceOrderConfiguration.java modules/apps/commerce/commerce-api/src/main/java/com/liferay/commerce/configuration/CommerceOrderConfiguration.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-77315
  • What changed: The new userNotificationScopeEnabled configuration field is added.
  • Reason: This change is needed to configure the user notifications scope in a channel.

TaskDefinitionManager.java modules/dxp/apps/ai-hub/ai-hub-rest-api/src/main/java/com/liferay/ai/hub/rest/manager/v1_0/TaskDefinitionManager.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-78068
  • What changed: The TaskDefinitionManager interface is renamed to AgentDefinitionManager. Additionally, all methods are renamed (replacing task with agent).
  • Reason: This change enforces correct naming.

Bucket.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/Bucket.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: Bucket is now an implementation class instead of an interface, and BucketImpl is merged into it.
  • Reason: Bucket is a POJO, so there is no reason to separate the implementation.

BucketAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/BucketAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: BucketAggregationResult is now an implementation class instead of an interface, and BaseBucketAggregationResult is merged into it.
  • Reason: BucketAggregationResult is a POJO, so there is no reason to separate the implementation.

ChildrenAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/ChildrenAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: ChildrenAggregationResult is now an implementation class instead of an interface, and ChildrenAggregationResultImpl is merged into it.
  • Reason: ChildrenAggregationResult is a POJO, so there is no reason to separate the implementation.

DateHistogramAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/DateHistogramAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: DateHistogramAggregationResult is now an implementation class instead of an interface, and DateHistogramAggregationResultImpl is merged into it.
  • Reason: DateHistogramAggregationResult is a POJO, so there is no reason to separate the implementation.

DiversifiedSamplerAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/DiversifiedSamplerAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: DiversifiedSamplerAggregationResult is now an implementation class instead of an interface, and DiversifiedSamplerAggregationResultImpl is merged into it.
  • Reason: DiversifiedSamplerAggregationResult is a POJO, so there is no reason to separate the implementation.

FilterAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/FilterAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: FilterAggregationResult is now an implementation class instead of an interface, and FilterAggregationResultImpl is merged into it.
  • Reason: FilterAggregationResult is a POJO, so there is no reason to separate the implementation.

FiltersAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/FiltersAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: FiltersAggregationResult is now an implementation class instead of an interface, and FiltersAggregationResultImpl is merged into it.
  • Reason: FiltersAggregationResult is a POJO, so there is no reason to separate the implementation.

GeoDistanceAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/GeoDistanceAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: GeoDistanceAggregationResult is now an implementation class instead of an interface, and GeoDistanceAggregationResultImpl is merged into it.
  • Reason: GeoDistanceAggregationResult is a POJO, so there is no reason to separate the implementation.

GeoHashGridAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/GeoHashGridAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: GeoHashGridAggregationResult is now an implementation class instead of an interface, and GeoHashGridAggregationResultImpl is merged into it.
  • Reason: GeoHashGridAggregationResult is a POJO, so there is no reason to separate the implementation.

GlobalAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/GlobalAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: GlobalAggregationResult is now an implementation class instead of an interface, and GlobalAggregationResultImpl is merged into it.
  • Reason: GlobalAggregationResult is a POJO, so there is no reason to separate the implementation.

HistogramAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/HistogramAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: HistogramAggregationResult is now an implementation class instead of an interface, and HistogramAggregationResultImpl is merged into it.
  • Reason: HistogramAggregationResult is a POJO, so there is no reason to separate the implementation.

MissingAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/MissingAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: MissingAggregationResult is now an implementation class instead of an interface, and MissingAggregationResultImpl is merged into it.
  • Reason: MissingAggregationResult is a POJO, so there is no reason to separate the implementation.

NestedAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/NestedAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: NestedAggregationResult is now an implementation class instead of an interface, and NestedAggregationResultImpl is merged into it.
  • Reason: NestedAggregationResult is a POJO, so there is no reason to separate the implementation.

RangeAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/RangeAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: RangeAggregationResult is now an implementation class instead of an interface, and RangeAggregationResultImpl is merged into it.
  • Reason: RangeAggregationResult is a POJO, so there is no reason to separate the implementation.

ReverseNestedAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/ReverseNestedAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: ReverseNestedAggregationResult is now an implementation class instead of an interface, and ReverseNestedAggregationResultImpl is merged into it.
  • Reason: ReverseNestedAggregationResult is a POJO, so there is no reason to separate the implementation.

SamplerAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/SamplerAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: SamplerAggregationResult is now an implementation class instead of an interface, and SamplerAggregationResultImpl is merged into it.
  • Reason: SamplerAggregationResult is a POJO, so there is no reason to separate the implementation.

SignificantTermsAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/SignificantTermsAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: SignificantTermsAggregationResult is now an implementation class instead of an interface, and SignificantTermsAggregationResultImpl is merged into it.
  • Reason: SignificantTermsAggregationResult is a POJO, so there is no reason to separate the implementation.

SignificantTextAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/SignificantTextAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: SignificantTextAggregationResult is now an implementation class instead of an interface, and SignificantTextAggregationResultImpl is merged into it.
  • Reason: SignificantTextAggregationResult is a POJO, so there is no reason to separate the implementation.

TermsAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/bucket/TermsAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: TermsAggregationResult is now an implementation class instead of an interface, and TermsAggregationResultImpl is merged into it.
  • Reason: TermsAggregationResult is a POJO, so there is no reason to separate the implementation.

AvgAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/metrics/AvgAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: AvgAggregationResult is now an implementation class instead of an interface, and AvgAggregationResultImpl is merged into it.
  • Reason: AvgAggregationResult is a POJO, so there is no reason to separate the implementation.

CardinalityAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/metrics/CardinalityAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: CardinalityAggregationResult is now an implementation class instead of an interface, and CardinalityAggregationResultImpl is merged into it.
  • Reason: CardinalityAggregationResult is a POJO, so there is no reason to separate the implementation.

GeoBoundsAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/metrics/GeoBoundsAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: GeoBoundsAggregationResult is now an implementation class instead of an interface, and GeoBoundsAggregationResultImpl is merged into it.
  • Reason: GeoBoundsAggregationResult is a POJO, so there is no reason to separate the implementation.

GeoCentroidAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/metrics/GeoCentroidAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: GeoCentroidAggregationResult is now an implementation class instead of an interface, and GeoCentroidAggregationResultImpl is merged into it.
  • Reason: GeoCentroidAggregationResult is a POJO, so there is no reason to separate the implementation.

MaxAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/metrics/MaxAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: MaxAggregationResult is now an implementation class instead of an interface, and MaxAggregationResultImpl is merged into it.
  • Reason: MaxAggregationResult is a POJO, so there is no reason to separate the implementation.

MinAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/metrics/MinAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: MinAggregationResult is now an implementation class instead of an interface, and MinAggregationResultImpl is merged into it.
  • Reason: MinAggregationResult is a POJO, so there is no reason to separate the implementation.

PercentileRanksAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/metrics/PercentileRanksAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: PercentileRanksAggregationResult is now an implementation class instead of an interface, and PercentileRanksAggregationResultImpl is merged into it.
  • Reason: PercentileRanksAggregationResult is a POJO, so there is no reason to separate the implementation.

ScriptedMetricAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/metrics/ScriptedMetricAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: ScriptedMetricAggregationResult is now an implementation class instead of an interface, and ScriptedMetricAggregationResultImpl is merged into it.
  • Reason: ScriptedMetricAggregationResult is a POJO, so there is no reason to separate the implementation.

SumAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/metrics/SumAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: SumAggregationResult is now an implementation class instead of an interface, and SumAggregationResultImpl is merged into it.
  • Reason: SumAggregationResult is a POJO, so there is no reason to separate the implementation.

TopHitsAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/metrics/TopHitsAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: TopHitsAggregationResult is now an implementation class instead of an interface, and TopHitsAggregationResultImpl is merged into it.
  • Reason: TopHitsAggregationResult is a POJO, so there is no reason to separate the implementation.

ValueCountAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/metrics/ValueCountAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: ValueCountAggregationResult is now an implementation class instead of an interface, and ValueCountAggregationResultImpl is merged into it.
  • Reason: ValueCountAggregationResult is a POJO, so there is no reason to separate the implementation.

WeightedAvgAggregationResult.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/aggregation/metrics/WeightedAvgAggregationResult.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: WeightedAvgAggregationResult is now an implementation class instead of an interface, and WeightedAvgAggregationResultImpl is merged into it.
  • Reason: WeightedAvgAggregationResult is a POJO, so there is no reason to separate the implementation.

HighlightField.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/highlight/HighlightField.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: HighlightField is now an implementation class instead of an interface, and HighlightFieldImpl is merged into it.
  • Reason: HighlightField is a POJO, so there is no reason to separate the implementation.

HighlightFieldBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/highlight/HighlightFieldBuilder.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: HighlightFieldBuilder is now an implementation class instead of an interface, and HighlightFieldBuilderImpl is merged into it.
  • Reason: HighlightFieldBuilder is a POJO, so there is no reason to separate the implementation.

HighlightFieldBuilderFactory.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/highlight/HighlightFieldBuilderFactory.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: The HighlightFieldBuilderFactory class is removed.
  • Reason: HighlightFieldBuilder can now be directly created, so a factory class is no longer needed.

SearchHit.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/hits/SearchHit.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: SearchHit is now an implementation class instead of an interface, and SearchHitImpl is merged into it.
  • Reason: SearchHit is a POJO, so there is no reason to separate the implementation.

SearchHitBuilder.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/hits/SearchHitBuilder.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: SearchHitBuilder is now an implementation class instead of an interface, and SearchHitBuilderImpl is merged into it.
  • Reason: SearchHitBuilder is a POJO, so there is no reason to separate the implementation.

SearchHitBuilderFactory.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/hits/SearchHitBuilderFactory.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: The SearchHitBuilderFactory class is removed.
  • Reason: SearchHitBuilder can now be directly created, so a factory class is no longer needed.

DocumentBuilderFactory.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/legacy/document/DocumentBuilderFactory.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: DocumentBuilderFactory is now an implementation class instead of an interface, and DocumentBuilderFactoryImpl is merged into it.
  • Reason: DocumentBuilderFactory is a POJO, so there is no reason to separate the implementation.

SPINodeResource.java modules/dxp/apps/portal-workflow/portal-workflow-metrics-rest-spi/src/main/java/com/liferay/portal/workflow/metrics/rest/spi/resource/SPINodeResource.java

  • Date: Feb. 14, 2026
  • Ticket: LPD-79324
  • What changed: The SPINodeResource constructor now has a SearchEngineAdapter parameter, instead of SearchRequestExecutor.
  • Reason: SearchRequestExecutor is no longer exposed as an external API.

CPDefinitionLocalServiceImpl.java modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPDefinitionLocalServiceImpl.java

  • Date: Feb. 16, 2026
  • Ticket: LPD-64459
  • What changed: All variants of the addCPDefinition, addOrUpdateCPDefinition, and updateCPDefinition methods are removed. The addCPDefinition, addOrUpdateCPDefinition, and updateCPDefinition methods now include boolean parameters for accountGroupFilterEnabled and channelFilterEnabled, and the parameters are sorted based on service.xml. Additionally, the updateCPDefinition method has new parameters for shippable, freeShipping, shipSeparately, shippingExtraPrice, width, height, depth, weight, cpTaxCategoryId, taxExempt, and telcoOrElectronics, and the parameters are sorted based on service.xml.
  • Reason: This change is required to use the existing values to determine if account group filters and channel filters are enabled. The refactoring also simplifies method usage.

CPDefinitionServiceImpl.java modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPDefinitionServiceImpl.java

  • Date: Feb. 16, 2026
  • Ticket: LPD-64459
  • What changed: All variants of the addCPDefinition, addOrUpdateCPDefinition, and updateCPDefinition methods are removed. The addCPDefinition, addOrUpdateCPDefinition, and updateCPDefinition methods now include boolean parameters for accountGroupFilterEnabled and channelFilterEnabled, and the parameters are sorted based on service.xml.
  • Reason: This change is required to use the existing values to determine if account group filters and channel filters are enabled. The refactoring also simplifies method usage.

BatchEngineImportTaskExceptionHandler.java modules/apps/batch-engine/batch-engine-api/src/main/java/com/liferay/batch/engine/exception/handler/BatchEngineImportTaskExceptionHandler.java

  • Date: Feb. 16, 2026
  • Ticket: LPD-79175
  • What changed: The handle method has a new String parameter for message.
  • Reason: This change is required to use the problem provider’s message.

BulkableDocumentRequest.java modules/apps/portal-search/portal-search-engine-adapter-api/src/main/java/com/liferay/portal/search/engine/adapter/document/BulkableDocumentRequest.java

  • Date: Feb. 17, 2026
  • Ticket: LPD-79486
  • What changed: BulkableDocumentRequest is now a marker interface.
  • Reason: This change avoids creating unnecessary lambdas.

UIDFactory.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/model/uid/UIDFactory.java

  • Date: Feb. 18, 2026
  • Ticket: LPD-79552
  • What changed: The getUID(com.liferay.portal.kernel.search.Document), getUID(Document), setUID(ClassedModel, com.liferay.portal.kernel.search.Document) and setUID(ClassedModel, DocumentBuilder) methods are removed.
  • Reason: UIDFactory should only create UIDs, not get or set them.

CTClosureFactory.java modules/apps/change-tracking/change-tracking-api/src/main/java/com/liferay/change/tracking/closure/CTClosureFactory.java

  • Date: Feb. 20, 2026
  • Ticket: LPD-79328
  • What changed: The create(long ctCollectionId, Set<Long>) method is removed. Instead, use create(long ctCollectionId) to get (at least) the same information.
  • Reason: The original feature that required this new method was removed. It was removed to simplify the logic and caching.

LayoutPageTemplateEntryLocalService.java modules/apps/layout/layout-page-template-api/src/main/java/com/liferay/layout/page/template/service/LayoutPageTemplateEntryLocalService.java

  • Date: Feb. 21, 2026
  • Ticket: LPD-77604
  • What changed: Several methods have a new String parameter added for a class type key.
  • Reason: The class type key enables pages to use the lazy reference strategy.

CPActionKeys.java modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/constants/CPActionKeys.java

  • Date: Feb. 24, 2026
  • Ticket: LPD-78231
  • What changed: The MANAGE_COMMERCE_PRODUCT_MEASUREMENT_UNITS constant value is removed. Additionally, the new ADD_COMMERCE_PRODUCT_MEASUREMENT_UNIT and VIEW_COMMERCE_PRODUCT_MEASUREMENT_UNITS constant values are added.
  • Reason: This change is necessary to correctly manage permissions.

CPMeasurementUnitLocalService.java modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPMeasurementUnitLocalService.java

  • Date: Feb. 24, 2026
  • Ticket: LPD-78231
  • What changed: The fetchCPMeasurementUnitByKey(String) and getCPMeasurementUnitByKey(String) methods are renamed to fetchCPMeasurementUnit(String) and getCPMeasurementUnit(String), respectively. Additionally, the getCPMeasurementUnits(long), getCPMeasurementUnitsByType(OrderByComparator), fetchCPMeasurementUnitByExternalReferenceCode(String), fetchPrimaryCPMeasurementUnitByType(long, int), and getCPMeasurementUnitsByType(long, int) methods are removed. Use getCPMeasurementUnits(OrderByComparator) instead of getCPMeasurementUnits(long) and getCPMeasurementUnitsByType(OrderByComparator). Use fetchCPMeasurementUnit(long) instead of fetchCPMeasurementUnitByExternalReferenceCode(String).
  • Reason: This change enforces consistent naming standards and code reuse.

DigitalSalesRoomTicketConstants.java modules/dxp/apps/digital-sales-room/digital-sales-room-api/src/main/java/com/liferay/digital/sales/room/constants/DigitalSalesRoomTicketConstants.java

  • Date: Feb. 25, 2026
  • Ticket: LPD-69509
  • What changed: The DigitalSalesRoomTicketConstants constants are moved to the site-dsr-site-initializer-api module.
  • Reason: This class is migrated to another module to improve the code structure.

ModelIndexerWriterContributor.java modules/apps/portal-search/portal-search-spi/src/main/java/com/liferay/portal/search/spi/model/index/contributor/ModelIndexerWriterContributor.java

  • Date: Feb. 25, 2026
  • Ticket: LPD-80542
  • What changed: The getCompanyId method is removed.
  • Reason: The logic is handled within ModelIndexerWriterContributor, so it is not needed in a subclass.

BatchIndexingActionable.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/batch/BatchIndexingActionable.java

  • Date: Feb. 26, 2026
  • Ticket: LPD-80551
  • What changed: The BatchIndexingActionable class is removed. Instead, use IndexableActionableDynamicQuery directly.
  • Reason: This change improves the code structure.

DynamicQueryBatchIndexingActionableFactory.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/batch/DynamicQueryBatchIndexingActionableFactory.java

  • Date: Feb. 26, 2026
  • Ticket: LPD-80551
  • What changed: The DynamicQueryBatchIndexingActionableFactory class is removed. Instead, use IndexableActionableDynamicQuery directly.
  • Reason: This change improves the code structure.

ModelIndexerWriterDocumentHelper.java modules/apps/portal-search/portal-search-spi/src/main/java/com/liferay/portal/search/spi/model/index/contributor/helper/ModelIndexerWriterDocumentHelper.java

  • Date: Feb. 26, 2026
  • Ticket: LPD-80661
  • What changed: The ModelIndexerWriterDocumentHelper class is removed. Instead, use IndexerDocumentBuilder directly.
  • Reason: This change improves the code structure.

CPDefinitionLocalServiceImpl.java modules/apps/commerce/commerce-product-service/src/main/java/com/liferay/commerce/product/service/impl/CPDefinitionLocalServiceImpl.java

  • Date: Feb. 26, 2026
  • Ticket: LPD-79253
  • What changed: The copyCPDefinition(long, long, int) method now only performs a copy operation if product versioning is active.
  • Reason: A unique index has been added for the CProductId and version fields.

OAuthClientASLocalMetadataLocalServiceImpl.java modules/apps/oauth-client/oauth-client-persistence-service/src/main/java/com/liferay/oauth/client/persistence/service/impl/OAuthClientASLocalMetadataLocalServiceImpl.java

  • Date: Feb. 26, 2026
  • Ticket: LPD-67473
  • What changed: Various add and update methods have a new String parameter for a registration endpoint.
  • Reason: This parameter is necessary to register new apps.

CommerceInventoryActionKeys.java modules/apps/commerce/commerce-inventory-api/src/main/java/com/liferay/commerce/inventory/constants/CommerceInventoryActionKeys.java

  • Date: Feb. 27, 2026
  • Ticket: LPD-79147
  • What changed: The MANAGE_INVENTORY constant value is removed, and the new VIEW_INVENTORIES constant value is added.
  • Reason: This change is necessary to correctly manage permissions.

WorkflowDefinitionResourceImpl.java modules/apps/headless/headless-admin-workflow/headless-admin-workflow-impl/src/main/java/com/liferay/headless/admin/workflow/internal/resource/v1_0/WorkflowDefinitionResourceImpl.java

  • Date: Feb. 27, 2026
  • Ticket: LPD-78064
  • What changed: The getWorkflowDefinitionsPage and getLatestWorkflowDefinitions methods have a new String parameter for a scope.
  • Reason: This change supports retrieving AI Hub scoped workflows.

WorkflowDefinitionManagerImpl.java modules/apps/portal-workflow/portal-workflow-kaleo-runtime-integration-impl/src/main/java/com/liferay/portal/workflow/kaleo/runtime/integration/internal/WorkflowDefinitionManagerImpl.java

  • Date: Feb. 27, 2026
  • Ticket: LPD-78064
  • What changed: The getWorkflowDefinitionsPage and getLatestWorkflowDefinitions methods have a new String parameter for a scope.
  • Reason: This change supports retrieving AI Hub scoped workflows.

WorkflowDefinitionManagerUtil.java modules/apps/portal-workflow/portal-workflow-api/src/main/java/com/liferay/portal/workflow/util/WorkflowDefinitionManagerUtil.java

  • Date: Feb. 27, 2026
  • Ticket: LPD-78064
  • What changed: The getWorkflowDefinitionsPage and getLatestWorkflowDefinitions methods have a new String parameter for a scope.
  • Reason: This change supports retrieving AI Hub scoped workflows.

WorkflowDefinitionManager.java modules/apps/portal-workflow/portal-workflow-api/src/main/java/com/liferay/portal/workflow/manager/WorkflowDefinitionManager.java

  • Date: Feb. 27, 2026
  • Ticket: LPD-78064
  • What changed: The getWorkflowDefinitionsPage and getLatestWorkflowDefinitions methods have a new String parameter for a scope.
  • Reason: This change supports retrieving AI Hub scoped workflows.

Queries.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/query/Queries.java

  • Date: Feb. 28, 2026
  • Ticket: LPD-80837
  • What changed: The Queries class is removed. Instead, use QueriesUtil.
  • Reason: This change improves the code structure.

AggregationUtil.java modules/apps/headless/headless-delivery/headless-delivery-api/src/main/java/com/liferay/headless/delivery/search/aggregation/AggregationUtil.java

  • Date: Feb. 28, 2026
  • Ticket: LPD-80837
  • What changed: The processVulcanAggregation method no longer accepts a Queries parameter.
  • Reason: This method now uses the QueriesUtil static utility instead.

SortUtil.java modules/apps/headless/headless-delivery/headless-delivery-api/src/main/java/com/liferay/headless/delivery/search/sort/SortUtil.java

  • Date: Feb. 28, 2026
  • Ticket: LPD-80837
  • What changed: The processSorts method no longer accepts a Queries parameter.
  • Reason: This method now uses the QueriesUtil static utility instead.

CPDefinitionLocalService.java modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionLocalService.java

  • Date: Mar. 2, 2026
  • Ticket: LPD-76491
  • What changed: The fetchCPDefinitionByCProductExternalReferenceCode and fetchCPDefinitionByCProductId methods have a new boolean parameter, excludeDraft.
  • Reason: This change is needed to avoid accessing product data for unauthenticated users on the front store.

CPDefinitionService.java modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/service/CPDefinitionService.java

  • Date: Mar. 2, 2026
  • Ticket: LPD-76491
  • What changed: The fetchCPDefinitionByCProductExternalReferenceCode and fetchCPDefinitionByCProductId methods have a new boolean parameter, excludeDraft.
  • Reason: This change is needed to avoid accessing product data for unauthenticated users on the front store.

WorkflowDefinition.java modules/apps/headless/headless-admin-workflow/headless-admin-workflow-api/src/main/java/com/liferay/headless/admin/workflow/dto/v1_0/WorkflowDefinition.java

  • Date: Mar. 3, 2026
  • Ticket: LPD-78054
  • What changed: The workflow definition DTO has a new String property for a group external reference code.
  • Reason: This property scopes AI Agents by accounts.

WorkflowDefinitionManager.java modules/apps/portal-workflow/portal-workflow-api/src/main/java/com/liferay/portal/workflow/manager/WorkflowDefinitionManager.java

  • Date: Mar. 3, 2026
  • Ticket: LPD-78054
  • What changed: The saveWorkflowDefinition method has a new String parameter for a scope.
  • Reason: This property scopes AI Agents by accounts.

SegmentsEntryPersistence.java modules/apps/segments/segments-api/src/main/java/com/liferay/segments/service/persistence/SegmentsEntryPersistence.java

  • Date: Mar. 5, 2026
  • Ticket: LPD-81650
  • What changed: These company ID finder methods are removed: findByCompanyId, fetchByCompanyId_First, findByCompanyId_First, fetchByCompanyId_Last, findByCompanyId_Last, findByCompanyId_PrevAndNext, removeByCompanyId, and countByCompanyId.
  • Reason: These methods did not function properly and were not used.

SegmentsEntryUtil.java modules/apps/segments/segments-api/src/main/java/com/liferay/segments/service/persistence/SegmentsEntryUtil.java

  • Date: Mar. 5, 2026
  • Ticket: LPD-81650
  • What changed: These company ID finder methods are removed: findByCompanyId, fetchByCompanyId_First, findByCompanyId_First, fetchByCompanyId_Last, findByCompanyId_Last, findByCompanyId_PrevAndNext, removeByCompanyId, and countByCompanyId.
  • Reason: These methods did not function properly and were not used.

service.xml modules/apps/object/object-service/service.xml

  • Date: Mar. 5, 2026
  • Ticket: LPD-79365
  • What changed: The database-level unique constraint on folder names is removed.
  • Reason: Uniqueness should only be enforced for active folders, allowing users to reuse a name if the original folder is in the trash.

KaleoDefinitionPersistence.java modules/apps/portal-workflow/portal-workflow-kaleo-api/src/main/java/com/liferay/portal/workflow/kaleo/service/persistence/KaleoDefinitionPersistence.java

  • Date: Mar. 5, 2026
  • Ticket: LPD-78054
  • What changed: The findByC_S and findByC_S_A methods have a new long parameter for a group ID.
  • Reason: This change takes into account AI-based Kaleo Definitions being scoped by group.

FragmentEntryLinkLocalServiceImpl.java modules/apps/fragment/fragment-service/src/main/java/com/liferay/fragment/service/impl/FragmentEntryLinkLocalServiceImpl.java

  • Date: Mar. 6, 2026
  • Ticket: LPD-81197
  • What changed: Various *ByFragmentEntryERC methods are replaced by *ByFragmentEntry methods. Additionally, the deleteFragmentEntryLinksByFragmentEntryERC(long, String, String) method is removed with no direct replacement.
  • Reason: This change keeps the scope logic in service methods. The method removed with no replacement was not used.

FragmentEntryLinkFinderImpl.java modules/apps/fragment/fragment-service/src/main/java/com/liferay/fragment/service/persistence/impl/FragmentEntryLinkFinderImpl.java

  • Date: Mar. 6, 2026
  • Ticket: LPD-81197
  • What changed: The FragmentEntryLinkFinderImpl class is removed.
  • Reason: This change removes custom finders in favor of using DSLQuery.

UpgradeSourceCodeTask.java modules/sdk/gradle-plugins-workspace/src/main/java/com/liferay/gradle/plugins/workspace/task/UpgradeSourceCodeTask.java

  • Date: Mar. 6, 2026
  • Ticket: LPD-75694
  • What changed: An overriding implementation of the exec method is added. Additionally, the setToVersion(String) method is removed, in favor of lazy version retrieval.
  • Reason: This task now validates that a valid Liferay version is passed in as a property.

CommerceDiscountRelFinderImpl.java modules/apps/commerce/commerce-discount-service/src/main/java/com/liferay/commerce/discount/service/persistence/impl/CommerceDiscountRelFinderImpl.java

  • Date: Mar. 7, 2026
  • Ticket: LPD-79952
  • What changed: The CommerceDiscountRelFinder class is removed. Instead, use CommerceDiscountRelService methods.
  • Reason: The CommerceDiscountRelFinder implementation was outdated and no longer used.

SegmentsExperience.java modules/apps/segments/segments-api/src/main/java/com/liferay/segments/model/SegmentsExperience.java

  • Date: Mar. 8, 2026
  • Ticket: LPD-79814
  • What changed: The getSegmentsEntryGroupId method is removed.
  • Reason: Entity models should primarily represent data state. Using ScopeUtil to dynamically resolve scope inside the model implementation tightly couples the entity to external utility classes and context. The resolution of the Segments Entry group ID should be handled explicitly at the business logic or service layer, rather than hidden inside the model itself.

DSRPortletKeys.java modules/apps/site/site-dsr-site-initializer-api/src/main/java/com/liferay/site/dsr/site/initializer/constants/DSRPortletKeys.java

  • Date: Mar. 9, 2026
  • Ticket: LPD-69509
  • What changed: The DIGITAL_SALES_ROOM_INVITE_MEMBER constant is renamed to DSR_INVITE_MEMBER.
  • Reason: This change enforces compliance with the new module structure.

SitePage.java modules/apps/headless/headless-admin-site/headless-admin-site-api/src/main/java/com/liferay/headless/admin/site/dto/v1_0/SitePage.java

  • Date: Mar. 9, 2026
  • Ticket: LPD-79415
  • What changed: Various method names, parameters, and return types are updated to use TaxonomyCategoryBrief instead of ItemExternalReference. This change applies to content page templates, master pages, page templates, site pages, and widget page templates.
  • Reason: This change enables creating empty shells for categories and displaying them properly in the UI.

CTCollectionService.java modules/apps/change-tracking/change-tracking-api/src/main/java/com/liferay/change/tracking/service/CTCollectionService.java

  • Date: Mar. 10, 2026
  • Ticket: LPD-79378
  • What changed: Company ID and user ID parameters are removed from all methods. Instead, get the user ID from the base class method, and get the company ID from CompanyThreadLocal.
  • Reason: This change prevents incorrect access to user information across virtual instances.

PanelApp.java modules/apps/application-list/application-list-api/src/main/java/com/liferay/application/list/PanelApp.java

  • Date: Mar. 10, 2026
  • Ticket: LPD-75093
  • What changed: The new getIcon method is added.
  • Reason: This change is necessary to display an icon alongside the panel application label in the UI.

rest-openapi.yaml modules/apps/bulk/bulk-rest-impl/rest-openapi.yaml

  • Date: Mar. 10, 2026
  • Ticket: LPD-81782
  • What changed: The bulk action types for selection actions are renamed (from *_BULK_ACTION to *_BULK_SELECTION_ACTION).
  • Reason: This change enforces consistent naming.

DSLFunctionFactory.java modules/core/petra/petra-sql-dsl-api/src/main/java/com/liferay/petra/sql/dsl/factory/DSLFunctionFactory.java

  • Date: Mar. 11, 2026
  • Ticket: LPD-82351
  • What changed: The new replace(Expression<String>, Expression<String>, Expression<String>) and replace(Expression<String>, String, String) methods are added.
  • Reason: The REPLACE SQL function is needed to strip prefixes, when ordering group results by name in DSL queries.

IconImageURL.java modules/apps/headless/headless-admin-site/headless-admin-site-api/src/main/java/com/liferay/headless/admin/site/dto/v1_0/IconImageURL.java

  • Date: Mar. 12, 2026
  • Ticket: LPD-81218
  • What changed: The IconImageURLReference class is removed. Instead, use IconImageURL.
  • Reason: Icon image external reference codes are unique by company, and they shouldn’t be shared by pages, so trying to set them resulted in errors promoting pages within the same company.

Settings.java modules/apps/headless/headless-admin-site/headless-admin-site-api/src/main/java/com/liferay/headless/admin/site/dto/v1_0/Settings.java

  • Date: Mar. 12, 2026
  • Ticket: LPD-81218
  • What changed: The iconImageURLReference field and its corresponding getter and setter methods are removed. Instead, use iconImageURL and its corresponding getter and setter methods.
  • Reason: Icon image external reference codes are unique by company, and they shouldn’t be shared by pages, so trying to set them resulted in errors promoting pages within the same company.

StagingConfiguration.java modules/apps/staging/staging-api/src/main/java/com/liferay/staging/configuration/StagingConfiguration.java

  • Date: Mar. 12, 2026
  • Ticket: LPD-81012
  • What changed: The Publish parent pages by default configuration is removed.
  • Reason: This functionality is not available since the new promote content changes were implemented. Lazy referencing substitutes similar functionality.

OAuthClientEntryLocalServiceImpl.java modules/apps/oauth-client/oauth-client-persistence-service/src/main/java/com/liferay/oauth/client/persistence/service/impl/OAuthClientEntryLocalServiceImpl.java

  • Date: Mar. 12, 2026
  • Ticket: LPD-67470
  • What changed: The addOAuthClientEntry and updateOAuthClientEntry methods have a new String parameter, matcherField.
  • Reason: The matcher field is now stored in the OAuth client entry.

OAuthClientEntryServiceImpl.java modules/apps/oauth-client/oauth-client-persistence-service/src/main/java/com/liferay/oauth/client/persistence/service/impl/OAuthClientEntryServiceImpl.java

  • Date: Mar. 12, 2026
  • Ticket: LPD-67470
  • What changed: The addOAuthClientEntry and updateOAuthClientEntry methods have a new String parameter, matcherField.
  • Reason: The matcher field is now stored in the OAuth client entry.

CPActionKeys.java modules/apps/commerce/commerce-product-api/src/main/java/com/liferay/commerce/product/constants/CPActionKeys.java

  • Date: Mar. 12, 2026
  • Ticket: LPD-78239
  • What changed: The MANAGE_COMMERCE_PRODUCT_TAX_CATEGORIES constant value is removed, and the new ADD_COMMERCE_PRODUCT_TAX_CATEGORIES constant value is added. Additionally, all uses of MANAGE_COMMERCE_PRODUCT_TAX_CATEGORIES are substituted with either ADD_COMMERCE_PRODUCT_TAX_CATEGORIES or VIEW_COMMERCE_PRODUCT_TAX_CATEGORIES at the portlet level, and either DELETE or UPDATE at the resource level.
  • Reason: This change is necessary to correctly manage permissions associated with tax categories.

StagingConfiguration.java modules/apps/staging/staging-api/src/main/java/com/liferay/staging/configuration/StagingConfiguration.java

  • Date: Mar. 13, 2026
  • Ticket: LPD-81248
  • What changed: The publish-displayed-content configuration is removed.
  • Reason: This configuration is no longer useful, after the export/import framework changes.

AssetCategoryService.java portal-kernel/src/com/liferay/asset/kernel/service/AssetCategoryService.java

  • Date: Mar. 13, 2026
  • Ticket: LPD-81547
  • What changed: The getOrAddEmptyCategoryWithAncestors method no longer has a long userId parameter.
  • Reason: The user ID parameter was not used.

CommerceActionKeys.java modules/apps/commerce/commerce-api/src/main/java/com/liferay/commerce/constants/CommerceActionKeys.java

  • Date: Mar. 13, 2026
  • Ticket: LPD-78534
  • What changed: The MANAGE_COMMERCE_AVAILABILITY_ESTIMATES constant value is removed, and the new ADD_COMMERCE_AVAILABILITY_ESTIMATE and VIEW_COMMERCE_AVAILABILITY_ESTIMATES constant values are added.
  • Reason: This change is necessary to correctly manage permissions.

JoinStep.java modules/core/petra/petra-sql-dsl-api/src/main/java/com/liferay/petra/sql/dsl/query/JoinStep.java

  • Date: Mar. 15, 2026
  • Ticket: LPD-80827
  • What changed: The new innerJoinON(Table<?>, UnsafeSupplier<Predicate, T>) and leftJoinOn(Table<?>, UnsafeSupplier<Predicate, T>) methods are added. Add new methods to generate the Join using UnsafeSuppliers if needed.
  • Reason: This change reduces duplicate logic and uses specific methods to get a predicate using an UnsafeSupplier.

ExportImportVulcanBatchEngineTaskItemDelegate.java modules/apps/export-import/export-import-api/src/main/java/com/liferay/exportimport/vulcan/batch/engine/ExportImportVulcanBatchEngineTaskItemDelegate.java

  • Date: Mar. 16, 2026
  • Ticket: LPD-80308
  • What changed: The isApplicableExternalReferenceCode method is removed. Additionally, the new getApplicableModelFunction and getModelClass methods are added.
  • Reason: This change enables getting applicable models from the system event table, to correctly export model deletions with multiple REST resources.

CookiesConfigurationProvider.java modules/apps/cookies/cookies-api/src/main/java/com/liferay/cookies/configuration/CookiesConfigurationProvider.java

  • Date: Mar. 16, 2026
  • Ticket: LPD-78592
  • What changed: The new getCookiesPreferenceHandlingFloatingIcon(ExtendedObjectClassDefinition.Scope, long) method is added.
  • Reason: The new method enables the new cookies preference configuration.

bnd.bnd modules/third-party/com-liferay-faces-util/bnd.bnd

  • Date: Mar. 18, 2026
  • Ticket: LPD-82936
  • What changed: The com-liferay-faces-util version is increased and its build.gradle is rewritten.
  • Reason: These changes support liferay-faces-util version 5.0.0.

bnd.bnd modules/third-party/com-liferay-faces-bridge-api/bnd.bnd

  • Date: Mar. 18, 2026
  • Ticket: LPD-82936
  • What changed: The com-liferay-faces-bridge-api version is increased and its build.gradle is rewritten.
  • Reason: These changes support liferay-faces-bridge-api version 7.0.0.

bnd.bnd modules/third-party/com-liferay-faces-bridge-impl/bnd.bnd

  • Date: Mar. 18, 2026
  • Ticket: LPD-82936
  • What changed: The com-liferay-faces-bridge-impl version is increased and its build.gradle is rewritten.
  • Reason: These changes support liferay-faces-bridge-impl version 7.0.0.

bnd.bnd modules/third-party/com-liferay-faces-bridge-ext/bnd.bnd

  • Date: Mar. 18, 2026
  • Ticket: LPD-82936
  • What changed: The com-liferay-faces-bridge-ext version is increased and its build.gradle is rewritten.
  • Reason: These changes support liferay-faces-bridge-ext version 9.0.0.

BasePortletExportImportTestCase.java modules/apps/export-import/export-import-test-util/src/main/java/com/liferay/exportimport/test/util/lar/BasePortletExportImportTestCase.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-81878
  • What changed: The importPortlet method now returns an ExportImportconfiguration.
  • Reason: The new changes related to export/import report entries require new testing steps related to the configuration report entries. This requires exposing the ExportImportConfiguration values.

base_resource_impl.ftl modules/util/portal-tools-rest-builder/src/main/resources/com/liferay/portal/tools/rest/builder/dependencies/base_resource_impl.ftl

  • Date: Mar. 21, 2026
  • Ticket: LPD-78778
  • What changed: The isAcceptAllLanguages method now returns true during an export process when REST Builder’s compatibility version is >= 15.
  • Reason: This change enables returning all available translations from the API when the request comes from an export/import process.

OAuthClientASLocalMetadataLocalService.java modules/apps/oauth-client/oauth-client-persistence-api/src/main/java/com/liferay/oauth/client/persistence/service/OAuthClientASLocalMetadataLocalService.java

  • Date: Mar. 24, 2026
  • Ticket: LPD-74226
  • What changed: The addOAuthClientASLocalMetadata(long, String, String, String, boolean, String, String[], String[], String[], String, String) method has a new String parameter for an external reference code.
  • Reason: This change adds support for LAR exports and imports.

OAuthClientASLocalMetadataService.java modules/apps/oauth-client/oauth-client-persistence-api/src/main/java/com/liferay/oauth/client/persistence/service/OAuthClientASLocalMetadataService.java

  • Date: Mar. 24, 2026
  • Ticket: LPD-74226
  • What changed: The addOAuthClientASLocalMetadata(long, String, String, String, boolean, String, String[], String[], String[], String, String) method has a new String parameter for an external reference code.
  • Reason: This change adds support for LAR exports and imports.

OAuthClientEntryLocalService.java modules/apps/oauth-client/oauth-client-persistence-api/src/main/java/com/liferay/oauth/client/persistence/service/OAuthClientEntryLocalService.java

  • Date: Mar. 24, 2026
  • Ticket: LPD-74226
  • What changed: The addOAuthClientEntry(long, String, String, String, String, String, long, String, String) method has a new String parameter for an external reference code.
  • Reason: This change adds support for LAR exports and imports.

OAuthClientEntryService.java modules/apps/oauth-client/oauth-client-persistence-api/src/main/java/com/liferay/oauth/client/persistence/service/OAuthClientEntryService.java

  • Date: Mar. 24, 2026
  • Ticket: LPD-74226
  • What changed: The addOAuthClientEntry(long, String, String, String, String, String, long, String, String) method has a new String parameter for an external reference code.
  • Reason: This change adds support for LAR exports and imports.

KaleoDefinitionVersionLocalService.java modules/apps/portal-workflow/portal-workflow-kaleo-api/src/main/java/com/liferay/portal/workflow/kaleo/service/KaleoDefinitionVersionLocalService.java

  • Date: Mar. 24, 2026
  • Ticket: LPD-83622
  • What changed: The fetchLatestKaleoDefinitionVersion(long, String, OrderByComparator) method is removed.
  • Reason: This method overload was no longer used.

KaleoDefinitionVersionLocalServiceUtil.java modules/apps/portal-workflow/portal-workflow-kaleo-api/src/main/java/com/liferay/portal/workflow/kaleo/service/KaleoDefinitionVersionLocalServiceUtil.java

  • Date: Mar. 24, 2026
  • Ticket: LPD-83622
  • What changed: The fetchLatestKaleoDefinitionVersion(long, String, OrderByComparator) method is removed.
  • Reason: This method overload was no longer used.

KaleoDefinitionVersionLocalServiceWrapper.java modules/apps/portal-workflow/portal-workflow-kaleo-api/src/main/java/com/liferay/portal/workflow/kaleo/service/KaleoDefinitionVersionLocalServiceWrapper.java

  • Date: Mar. 24, 2026
  • Ticket: LPD-83622
  • What changed: The fetchLatestKaleoDefinitionVersion(long, String, OrderByComparator) method is removed.
  • Reason: This method overload was no longer used.

IndexerWriter.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/indexer/IndexerWriter.java

  • Date: Mar. 25, 2026
  • Ticket: LPD-83771
  • What changed: The reindex(String[]) is removed. Instead, use reindexCompany(long companyId).
  • Reason: The removed method always received a single-element array containing a company ID as a String. This change improves the code clarity and distinguishes this route from reindex(long classPK).

build.gradle modules/apps/commerce/commerce-report-impl/build.gradle

  • Date: Mar. 27, 2026
  • Ticket: LPD-82858
  • What changed: The jasperreports dependency is updated to version 7.0.6. Custom print order templates must be updated to be compatible with this version.
  • Reason: This change is necessary to upgrade jasperreports.

OAuthClientASLocalMetadataPersistenceImpl.java modules/apps/oauth-client/oauth-client-persistence-service/src/main/java/com/liferay/oauth/client/persistence/service/persistence/impl/OAuthClientASLocalMetadataPersistenceImpl.java

  • Date: Mar. 31, 2026
  • Ticket: LPD-74226
  • What changed: The findByLocalWellKnownURI(String), fetchByLocalWellKnownURI(String), fetchByLocalWellKnownURI(String, boolean), removeByLocalWellKnownURI(String), and countByLocalWellKnownURI(String) methods now have a new long parameter for a company ID.
  • Reason: This change adds support for LAR exports and imports.

OAuthClientASLocalMetadataLocalServiceImpl.java modules/apps/oauth-client/oauth-client-persistence-service/src/main/java/com/liferay/oauth/client/persistence/service/impl/OAuthClientASLocalMetadataLocalServiceImpl.java

  • Date: Mar. 31, 2026
  • Ticket: LPD-74226
  • What changed: Various methods have a new String parameter for an external reference code.
  • Reason: This change adds support for LAR exports and imports.

OAuthClientEntryLocalServiceImpl.java modules/apps/oauth-client/oauth-client-persistence-service/src/main/java/com/liferay/oauth/client/persistence/service/impl/OAuthClientEntryLocalServiceImpl.java

  • Date: Mar. 31, 2026
  • Ticket: LPD-74226
  • What changed: Various methods have a new String parameter added for an external reference code.
  • Reason: This change adds support for LAR exports and imports.

CommercePriceListLocalServiceImpl.java modules/apps/commerce/commerce-price-list-service/src/main/java/com/liferay/commerce/price/list/service/impl/CommercePriceListLocalServiceImpl.java

  • Date: Apr. 3, 2026
  • Ticket: LPD-78018
  • What changed: All overloads of the updateCommercePriceList, addCatalogBaseCommercePriceList, addCommercePriceList, addOrUpdateCommercePriceList, and updateCommercePriceList methods have their parameters sorted according to the service.xml.
  • Reason: This change enforces consistent code organization.

CommercePriceListServiceImpl.java modules/apps/commerce/commerce-price-list-service/src/main/java/com/liferay/commerce/price/list/service/impl/CommercePriceListServiceImpl.java

  • Date: Apr. 3, 2026
  • Ticket: LPD-78018
  • What changed: All overloads of the addCommercePriceList, addOrUpdateCommercePriceList, and updateCommercePriceList methods have their parameters sorted according to the service.xml.
  • Reason: This change enforces consistent code organization.

CookiesPreferenceHandlingConfiguration.java modules/apps/cookies/cookies-api/src/main/java/com/liferay/cookies/configuration/CookiesPreferenceHandlingConfiguration.java

  • Date: Apr. 3, 2026
  • Ticket: LPD-84142
  • What changed: The new consentRenewalPeriodTimeUnit and dissentRenewalPeriodTimeUnit methods are added for new configurations. Additionally, the dissentRenewalPeriod configuration method now has a description.
  • Reason: This change enables consent renewal period and dissent renewal period configurations to be defined with other units of time. It also accommodates for up to one year regardless of time unit.

DocumentFragmentEntryProcessor.java modules/apps/fragment/fragment-api/src/main/java/com/liferay/fragment/processor/DocumentFragmentEntryProcessor.java

  • Date: Apr. 7, 2026
  • Ticket: LPD-82607
  • What changed: The processFragmentEntryLinkHTML(FragmentEntryLink, Document, FragmentEntryProcessorContext) method’s parameters are reordered.
  • Reason: This change enforces consistent code organization.

FragmentEntryProcessor.java modules/apps/fragment/fragment-api/src/main/java/com/liferay/fragment/processor/FragmentEntryProcessor.java

  • Date: Apr. 7, 2026
  • Ticket: LPD-82607
  • What changed: The getDefaultEditableValuesJSONObject(String, JSONObject), processFragmentEntryLinkCSS(FragmentEntryLink, String, FragmentEntryProcessorContext), and processFragmentEntryLinkHTML(FragmentEntryLink, String, FragmentEntryProcessorContext) methods have their parameters reordered.
  • Reason: This change enforces consistent code organization.

DDMTemplateInfoItemFieldSetProvider.java modules/apps/dynamic-data-mapping/dynamic-data-mapping-api/src/main/java/com/liferay/dynamic/data/mapping/info/item/provider/DDMTemplateInfoItemFieldSetProvider.java

  • Date: Apr. 9, 2026
  • Ticket: LPD-85077
  • What changed: The getInfoItemFieldSet method has a new long parameter, for a group ID.
  • Reason: This change enables returning the correct templates based on group ID.

ObjectDefinitionLocalServiceImpl.java modules/apps/object/object-service/src/main/java/com/liferay/object/service/impl/ObjectDefinitionLocalServiceImpl.java

  • Date: Apr. 9, 2026
  • Ticket: LPD-85693
  • What changed: The addCustomObjectDefinition and addSystemObjectDefinition methods have a new boolean parameter, enableCategorization.
  • Reason: The new value supplied in the API request should be honored when creating an object definition.

SegmentsEntryProviderRegistry.java modules/apps/segments/segments-api/src/main/java/com/liferay/segments/provider/SegmentsEntryProviderRegistry.java

  • Date: Apr. 14, 2026
  • Ticket: LPD-86011
  • What changed: The getSegmentsEntryIds(long, String, long, Context, long[]) method no longer has a long[] parameter for segmentsEntryIds.
  • Reason: Segment entry IDs are now cached. Since the method filters a user’s segments based on this parameter, caching can lead to incorrect results when the same context is used with different values. For example, if the user belongs to segments [0, 1, 2, 3, 4], a first call with [0, 1] may cache the filtered result, and a subsequent call with [0, 2] would incorrectly reuse the cached value instead of returning the correct filtered set.

SegmentsEntryRetriever.java modules/apps/segments/segments-api/src/main/java/com/liferay/segments/SegmentsEntryRetriever.java

  • Date: Apr. 14, 2026
  • Ticket: LPD-86011
  • What changed: The getSegmentsEntryIds(long, long, Context, long[]) no longer has a long[] parameter for segmentsEntryIds.
  • Reason: Segment entry IDs are now cached. Since the method filters a user’s segments based on this parameter, caching can lead to incorrect results when the same context is used with different values. For example, if the user belongs to segments [0, 1, 2, 3, 4], a first call with [0, 1] may cache the filtered result, and a subsequent call with [0, 2] would incorrectly reuse the cached value instead of returning the correct filtered set.

DefaultObjectEntryManager.java modules/apps/object/object-rest-api/src/main/java/com/liferay/object/rest/manager/v1_0/DefaultObjectEntryManager.java

  • Date: Apr. 14, 2026
  • Ticket: LPD-83164
  • What changed: The new fetchObjectEntry(DTOConverterContext, String, ObjectDefinition, String) method is added.
  • Reason: This method enables retrieving object entries via external reference code.

VertexAIConfiguration.java modules/apps/ai-hub-cell/ai-hub-cell-api/src/main/java/com/liferay/ai/hub/cell/configuration/VertexAIConfiguration.java

  • Date: Apr. 15, 2026
  • Ticket: LPD-86060
  • What changed: The new VertexAIConfiguration class is added.
  • Reason: This configuration ensures the Vertex AI configurations are kept safe and not hard-coded.

CommerceTaxCalculation.java modules/apps/commerce/commerce-api/src/main/java/com/liferay/commerce/tax/CommerceTaxCalculation.java

  • Date: Apr. 20, 2026
  • Ticket: LPD-84997
  • What changed: The getCommerceTaxValues(long, long, long, long, BigDecimal, String, boolean) method’s long groupId and BigDecimal amount parameters are renamed to commerceChannelGroupId and price, respectively. The parameters are also reordered with the name change.
  • Reason: The parameters are renamed to be more descriptive and consistent with the commerce domain.

CommercePriceConverterUtil.java modules/apps/commerce/commerce-service/src/main/java/com/liferay/commerce/internal/util/CommercePriceConverterUtil.java

  • Date: Apr. 20, 2026
  • Ticket: LPD-84997
  • What changed: The getConvertedPrice(long, long, long, long, String, BigDecimal, boolean, CommerceTaxCalculation) method’s parameters are reordered.
  • Reason: This change enforces consistent (alphabetical) source formatting.

CommerceTaxCalculationImpl.java modules/apps/commerce/commerce-tax-service/src/main/java/com/liferay/commerce/tax/internal/CommerceTaxCalculationImpl.java

  • Date: Apr. 20, 2026
  • Ticket: LPD-84997
  • What changed: The getCommerceTaxValues(long, long, long, long, BigDecimal, String, boolean) method’s long groupId and BigDecimal amount parameters are renamed to commerceChannelGroupId and price, respectively. The parameters are also reordered with the name change.
  • Reason: The method parameters reflect the changes to the CommerceTaxCalculation interface.

StyleBookEntryLocalService.java modules/apps/style-book/style-book-api/src/main/java/com/liferay/style/book/service/StyleBookEntryLocalService.java

  • Date: Apr. 21, 2026
  • Ticket: LPD-86116
  • What changed: These method overloads are removed: updatePreviewFileEntryId(long, long), updateStyleBookEntry(long, long, boolean, String, String, String, long), and updateStyleBookEntry(long, String, String) (overloads without a ServiceContext). Instead, call one of the overloads with a ServiceContext parameter; use ServiceContextFactory.getInstance(className, request) for request-scoped callers, or new ServiceContext() if only the default behavior (with a new modified date) is needed.
  • Reason: Service context is needed so export/import (and other callers) can transmit the modified date and other audit fields through the update path. Keeping the old overloads left a second API surface that silently dropped that information.

StyleBookEntryService.java modules/apps/style-book/style-book-api/src/main/java/com/liferay/style/book/service/StyleBookEntryService.java

  • Date: Apr. 21, 2026
  • Ticket: LPD-86116
  • What changed: Several methods to update style books or previews now have a new ServiceContext parameter. Existing callers must pass a ServiceContext; use ServiceContextFactory.getInstance(className, actionRequest) for MVC action commands, and build a new one from the request and scope group for headless resources.
  • Reason: The remote service must pass a service context so the local service can transmit the modified date and other audit fields through the update paths. Without it, the remote surface silently drops that information.

BaseScriptingExecutor.java modules/apps/portal-scripting/portal-scripting-api/src/main/java/com/liferay/portal/scripting/BaseScriptingExecutor.java

  • Date: Apr. 22, 2026
  • Ticket: LPD-85800
  • What changed: The BaseScriptingExecutor class is removed.
  • Reason: GroovyScriptingExecutor was the only subclass. Its logic has been refactored, so the abstract base class is no longer needed.

ClassVisibilityChecker.java modules/apps/portal-scripting/portal-scripting-api/src/main/java/com/liferay/portal/scripting/ClassVisibilityChecker.java

  • Date: Apr. 22, 2026
  • Ticket: LPD-85800
  • What changed: The ClassVisibilityChecker class is removed.
  • Reason: This class was the sandbox-policy helper for the JavaScript and Ruby/Python scripting executors, and it was consumed via the JavaScriptClassVisibilityChecker subclass as a Rhino ClassShutter. Those executors have been removed, leaving ClassVisibilityChecker with no usages. Groovy is the only remaining scripting language, and it never used it.

LayoutUtilityPageEntryServiceImpl.java modules/apps/layout/layout-utility-page-service/src/main/java/com/liferay/layout/utility/page/service/impl/LayoutUtilityPageEntryServiceImpl.java

  • Date: Apr. 23, 2026
  • Ticket: LPD-86647
  • What changed: The updateLayoutUtilityPageEntry(long layoutUtilityPageEntryId, long previewFileEntryId) and updateLayoutUtilityPageEntry(long layoutUtilityPageEntryId, String name) methods are removed. Instead, use the method overloads with a ServiceContext.
  • Reason: These methods are replaced by equivalent methods that accept a ServiceContext. This aligns the remote service with the local service and ensures that workflow, permissions, and audit metadata propagate correctly.

LayoutUtilityPageEntryLocalServiceImpl.java modules/apps/layout/layout-utility-page-service/src/main/java/com/liferay/layout/utility/page/service/impl/LayoutUtilityPageEntryLocalServiceImpl.java

  • Date: Apr. 23, 2026
  • Ticket: LPD-86647
  • What changed: The updateLayoutUtilityPageEntry(long layoutUtilityPageEntryId, long previewFileEntryId) and updateLayoutUtilityPageEntry(long layoutUtilityPageEntryId, String name) methods are removed. Instead, use the method overloads with a ServiceContext.
  • Reason: These methods are replaced by equivalent methods that accept a ServiceContext. This aligns the remote service with the local service and ensures that workflow, permissions, and audit metadata propagate correctly.

IndexerWriter.java modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/indexer/IndexerWriter.java

  • Date: Apr. 23, 2026
  • Ticket: LPD-87320
  • What changed: The new shouldRun(long companyId) method is added.
  • Reason: DefaultIndexer#getReindexEntryCount now consults the indexer’s shouldRun policy, short-circuiting to 0 when it returns false. This prevents indexers that opt out of a given reindex (e.g., per-definition ObjectEntry indexers during a full portal reindex) from running a filtered SELECT COUNT(*) query whose result is discarded, since reindexCompany already no-ops via the same shouldRun check. IndexerWriterImpl is the only implementation in the codebase, so promoting shouldRun to the interface is the right approach.

AttachmentResource.java modules/apps/commerce/headless/headless-commerce/headless-commerce-delivery-cart-api/src/main/java/com/liferay/headless/commerce/delivery/cart/resource/v1_0/AttachmentResource.java

  • Date: May 5, 2026
  • Ticket: LPD-75148
  • What changed: The getCartAttachmentsPage and getCartByExternalReferenceCodeAttachmentsPage methods have new Search, Filter, and Sort[] parameters.
  • Reason: This change adds support for searching and filtering attachments.

AttachmentResource.java modules/apps/commerce/headless/headless-commerce/headless-commerce-delivery-order-api/src/main/java/com/liferay/headless/commerce/delivery/order/resource/v1_0/AttachmentResource.java

  • Date: May 5, 2026
  • Ticket: LPD-75148
  • What changed: The getCartAttachmentsPage and getCartByExternalReferenceCodeAttachmentsPage methods have new Search, Filter, and Sort[] parameters.
  • Reason: This change adds support for searching and filtering attachments.

Changes in portal-impl Classes

GitUtil.java portal-impl/src/com/liferay/portal/tools/GitUtil.java

  • Date: Mar. 14, 2026
  • Ticket: LPD-82650
  • What changed: The getGitCommandReader method now returns a com.liferay.petra.io.unsync.UnsyncBufferedReader instead of com.liferay.portal.kernel.io.unsync.UnsyncBufferedReader.
  • Reason: The kernel UnsyncBufferedReader was removed and replaced by the petra-io version.

Changes in portal-kernel Classes

FilterTranslator.java portal-kernel/src/com/liferay/portal/kernel/search/filter/FilterTranslator.java

  • Date: Feb. 10, 2026
  • Ticket: LPD-78663
  • What changed: The FilterTranslator interface is removed.
  • Reason: The abstract interface was not used. Only the implementation classes are directly used within their own internal module classes.

QueryTranslator.java portal-kernel/src/com/liferay/portal/kernel/search/query/QueryTranslator.java

  • Date: Feb. 10, 2026
  • Ticket: LPD-78663
  • What changed: The QueryTranslator interface is removed.
  • Reason: The abstract interface was not used. Only the implementation classes are directly used within their own internal module classes.

WorkflowLog.java portal-kernel/src/com/liferay/portal/kernel/workflow/WorkflowLog.java

  • Date: Feb. 10, 2026
  • Ticket: LPD-77823
  • What changed: The new getWorkflowContext method is added.
  • Reason: This change is necessary to save metadata from AI agents in the KaleoLog table.

DestinationNames.java portal-kernel/src/com/liferay/portal/kernel/messaging/DestinationNames.java

  • Date: Feb. 13, 2026
  • Ticket: LPD-76073
  • What changed: The CMP_PROJECT_COMMENT_ADDED destination name is renamed to CMP_COMMENT_ADDED.
  • Reason: This change reflects the logic for adding comments consolidating in the CMP_COMMENT_ADDED destination, instead of one per entity.

LayoutLocalService.java portal-kernel/src/com/liferay/portal/kernel/service/LayoutLocalService.java

  • Date: Feb. 17, 2026
  • Ticket: LPD-78515
  • What changed: The getOrAddEmptyLayout method has a new boolean parameter, privateLayout.
  • Reason: This change supports exporting private pages in the Headless API.

Field.java portal-kernel/src/com/liferay/portal/kernel/search/Field.java

  • Date: Feb. 18, 2026
  • Ticket: LPD-79553
  • What changed: The validate(String) method is removed.
  • Reason: Fields do not need to be internally validated.

DocumentImpl.java portal-kernel/src/com/liferay/portal/kernel/search/DocumentImpl.java

  • Date: Feb. 18, 2026
  • Ticket: LPD-79553
  • What changed: The doGetField(String, boolean) method is removed.
  • Reason: The paths for getting and creating documents are separate now, so this method for a merged path is no longer needed.

FriendlyURLResolverRegistryUtil.java portal-kernel/src/com/liferay/portal/kernel/portlet/FriendlyURLResolverRegistryUtil.java

  • Date: Feb. 21, 2026
  • Ticket: LPD-78504
  • What changed: The getFriendlyURLResolver and getFriendlyURLResolversAsCollection methods now accept a long parameter for companyId.
  • Reason: This change enables filtering friendly URL resolvers by company ID.

HashedFilesRegistry.java portal-kernel/src/com/liferay/portal/kernel/frontend/hashed/files/HashedFilesRegistry.java

  • Date: Feb. 24, 2026
  • Ticket: LPD-78555
  • What changed: The new getCachingLevel(HttpServletRequest) method is added.
  • Reason: This change is required to centralize the caching configuration.

PortletDataHandler.java portal-kernel/src/com/liferay/exportimport/kernel/lar/PortletDataHandler.java

  • Date: Feb. 25, 2026
  • Ticket: LPD-77963
  • What changed: The getName method is removed, in favor of getTitle(locale).
  • Reason: This change simplifies retrieving BatchEnginePortletDataHandler titles for the UI, and it enforces consistency in using getLabelLanguageKey from the export/import descriptor for batch engine portlet data handlers.

ActionKeys.java portal-kernel/src/com/liferay/portal/kernel/security/permission/ActionKeys.java

  • Date: Feb. 27, 2026
  • Ticket: LPD-78219
  • What changed: The MANAGE_COUNTRIES constant value is removed, and the ADD_COUNTRY constant value is added. Additionally, all the uses of MANAGE_COUNTRIES are substituted with either ADD_COUNTRY at the portlet level, or either DELETE or UPDATE at the resource level.
  • Reason: This change is necessary to correctly manage permissions.

SearchContext.java portal-kernel/src/com/liferay/portal/kernel/search/SearchContext.java

  • Date: Mar. 5, 2026
  • Ticket: LPD-81727
  • What changed: The registerBatchModeSyncFuture method now returns a Future<?> instead of NoticeableFuture<?>. Additionally, the unregisterBatchModeSyncFuture(Future<?>) method is removed.
  • Reason: The registerBatchModeSyncFuture method now uses NoticeableFuture.addFutureListener() to remove completed futures from the batch mode sync set automatically, enabling self-cleanup without requiring callers to manually unregister. This makes the removed unregistering method unnecessary.

StringBundler.java portal-kernel/src/com/liferay/portal/kernel/util/StringBundler.java

  • Date: Mar. 10, 2026
  • Ticket: LPD-82197
  • What changed: The com.liferay.portal.kernel.util.StringBundler class is removed. Instead, use com.liferay.petra.string.StringBundler.
  • Reason: All usages have been migrated to com.liferay.petra.string.StringBundler. This change consolidates string bundling and enforces code reuse.

QuickAccessEntry.java portal-kernel/src/com/liferay/portal/kernel/servlet/taglib/ui/QuickAccessEntry.java

  • Date: Mar. 10, 2026
  • Ticket: LPD-82197
  • What changed: The deprecated setBody(com.liferay.portal.kernel.util.StringBundler) method is removed. Instead, use setBody(com.liferay.petra.string.StringBundler).
  • Reason: The kernel StringBundler class has been removed.

Serializer.java portal-kernel/src/com/liferay/portal/kernel/io/Serializer.java

  • Date: Mar. 11, 2026
  • Ticket: LPD-82276
  • What changed: The com.liferay.portal.kernel.io.Serializer class is removed. Instead, use com.liferay.petra.io.Serializer.
  • Reason: All usages have been migrated to com.liferay.petra.io.Serializer. This change consolidates serialization and enforces code reuse.

Deserializer.java portal-kernel/src/com/liferay/portal/kernel/io/Deserializer.java

  • Date: Mar. 11, 2026
  • Ticket: LPD-82276
  • What changed: The com.liferay.portal.kernel.io.Deserializer class has been removed. Instead, use com.liferay.petra.io.Deserializer.
  • Reason: All usages have been migrated to com.liferay.petra.io.Deserializer. This change consolidates deserialization and enforces code reuse.

LayoutSetPrototypeLocalService.java portal-kernel/src/com/liferay/portal/kernel/service/LayoutSetPrototypeLocalService.java

  • Date: Mar. 12, 2026
  • Ticket: LPD-81592
  • What changed: The addLayoutSetPrototype(long, long, Map<Locale, String>, Map<Locale, String>, boolean, boolean, boolean, ServiceContext) and updateLayoutSetPrototype(long, Map<Locale, String>, Map<Locale, String>, boolean, boolean, boolean, ServiceContext) methods are removed.
  • Reason: The Ready for propagation toggle allowed admins to control when site template changes propagated to connected sites. This feature has been completely removed from the UI and the service layer, and an upgrade process removes it for existing site templates.

LayoutSetPrototypeService.java portal-kernel/src/com/liferay/portal/kernel/service/LayoutSetPrototypeService.java

  • Date: Mar. 12, 2026
  • Ticket: LPD-81592
  • What changed: The addLayoutSetPrototype(Map<Locale, String>, Map<Locale, String>, boolean, boolean, boolean, ServiceContext) and updateLayoutSetPrototype(long, Map<Locale, String>, Map<Locale, String>, boolean, boolean, boolean, ServiceContext) methods are removed. Additionally, the addLayoutSetPrototype(String, String, boolean, boolean, boolean, ServiceContext) no longer has a boolean parameter for readyForPropagation.
  • Reason: The Ready for propagation toggle allowed admins to control when site template changes propagated to connected sites. This feature has been completely removed from the UI and the service layer, and an upgrade process removes it for existing site templates.

UnsyncByteArrayInputStream.java portal-kernel/src/com/liferay/portal/kernel/io/unsync/UnsyncByteArrayInputStream.java

  • Date: Mar. 12, 2026
  • Ticket: LPD-82456
  • What changed: The com.liferay.portal.kernel.io.unsync.UnsyncByteArrayInputStream class is removed. Instead, use com.liferay.petra.io.unsync.UnsyncByteArrayInputStream.
  • Reason: This change consolidates the code and enforces code reuse.

UnsyncByteArrayOutputStream.java portal-kernel/src/com/liferay/portal/kernel/io/unsync/UnsyncByteArrayOutputStream.java

  • Date: Mar. 12, 2026
  • Ticket: LPD-82456
  • What changed: The com.liferay.portal.kernel.io.unsync.UnsyncByteArrayOutputStream class is removed. Instead, use com.liferay.petra.io.unsync.UnsyncByteArrayOutputStream.
  • Reason: This change consolidates the code and enforces code reuse.

UnsyncStringReader.java portal-kernel/src/com/liferay/portal/kernel/io/unsync/UnsyncStringReader.java

  • Date: Mar. 13, 2026
  • Ticket: LPD-82616
  • What changed: The com.liferay.portal.kernel.io.unsync.UnsyncStringReader class is removed. Instead, use com.liferay.petra.io.unsync.UnsyncStringReader.
  • Reason: This change consolidates the code and enforces code reuse.

UnsyncStringWriter.java portal-kernel/src/com/liferay/portal/kernel/io/unsync/UnsyncStringWriter.java

  • Date: Mar. 13, 2026
  • Ticket: LPD-82616
  • What changed: The com.liferay.portal.kernel.io.unsync.UnsyncStringWriter class is removed. Instead, use com.liferay.petra.io.unsync.UnsyncStringWriter.
  • Reason: This change consolidates the code and enforces code reuse.

UnsyncBufferedReader.java portal-kernel/src/com/liferay/portal/kernel/io/unsync/UnsyncBufferedReader.java

  • Date: Mar. 14, 2026
  • Ticket: LPD-82650
  • What changed: The com.liferay.portal.kernel.io.unsync.UnsyncBufferedReader class is removed. Instead, use com.liferay.petra.io.unsync.UnsyncBufferedReader.
  • Reason: All usages are migrated to com.liferay.petra.io.unsync.UnsyncBufferedReader. This change consolidates the code and enforces code reuse.

UnsyncBufferedWriter.java portal-kernel/src/com/liferay/portal/kernel/io/unsync/UnsyncBufferedWriter.java

  • Date: Mar. 14, 2026
  • Ticket: LPD-82650
  • What changed: The com.liferay.portal.kernel.io.unsync.UnsyncBufferedWriter class is removed. Instead, use com.liferay.petra.io.unsync.UnsyncBufferedWriter.
  • Reason: All usages are migrated to com.liferay.petra.io.unsync.UnsyncBufferedWriter. This change consolidates the code and enforces code reuse.

UnsyncBufferedInputStream.java portal-kernel/src/com/liferay/portal/kernel/io/unsync/UnsyncBufferedInputStream.java

  • Date: Mar. 17, 2026
  • Ticket: LPD-82823
  • What changed: The com.liferay.portal.kernel.io.unsync.UnsyncBufferedInputStream is removed. Instead, use com.liferay.petra.io.unsync.UnsyncBufferedInputStream.
  • Reason: This change consolidates the code and enforces code reuse.

UnsyncBufferedOutputStream.java portal-kernel/src/com/liferay/portal/kernel/io/unsync/UnsyncBufferedOutputStream.java

  • Date: Mar. 17, 2026
  • Ticket: LPD-82823
  • What changed: The com.liferay.portal.kernel.io.unsync.UnsyncBufferedOutputStream class is removed. Instead, use com.liferay.petra.io.unsync.UnsyncBufferedOutputStream.
  • Reason: This change consolidates the code and enforces code reuse.

UnsyncCharArrayReader.java portal-kernel/src/com/liferay/portal/kernel/io/unsync/UnsyncCharArrayReader.java

  • Date: Mar. 17, 2026
  • Ticket: LPD-82919
  • What changed: The com.liferay.portal.kernel.io.unsync.UnsyncCharArrayReader class is removed. Instead, use com.liferay.petra.io.unsync.UnsyncCharArrayReader.
  • Reason: This change consolidates the code and enforces code reuse.

UnsyncCharArrayWriter.java portal-kernel/src/com/liferay/portal/kernel/io/unsync/UnsyncCharArrayWriter.java

  • Date: Mar. 17, 2026
  • Ticket: LPD-82919
  • What changed: The com.liferay.portal.kernel.io.unsync.UnsyncCharArrayWriter class is removed. Instead, use com.liferay.petra.io.unsync.UnsyncCharArrayWriter.
  • Reason: This change consolidates the code and enforces code reuse.

UnsyncFilterInputStream.java portal-kernel/src/com/liferay/portal/kernel/io/unsync/UnsyncFilterInputStream.java

  • Date: Mar. 17, 2026
  • Ticket: LPD-82919
  • What changed: The com.liferay.portal.kernel.io.unsync.UnsyncFilterInputStream class is removed. Instead, use com.liferay.petra.io.unsync.UnsyncFilterInputStream.
  • Reason: This change consolidates the code and enforces code reuse.

UnsyncFilterOutputStream.java portal-kernel/src/com/liferay/portal/kernel/io/unsync/UnsyncFilterOutputStream.java

  • Date: Mar. 17, 2026
  • Ticket: LPD-82919
  • What changed: The com.liferay.portal.kernel.io.unsync.UnsyncFilterOutputStream class is removed. Instead, use com.liferay.petra.io.unsync.UnsyncFilterOutputStream.
  • Reason: This change consolidates the code and enforces code reuse.

UnsyncPrintWriter.java portal-kernel/src/com/liferay/portal/kernel/io/unsync/UnsyncPrintWriter.java

  • Date: Mar. 17, 2026
  • Ticket: LPD-82919
  • What changed: The com.liferay.portal.kernel.io.unsync.UnsyncPrintWriter class is removed. Instead, use com.liferay.petra.io.unsync.UnsyncPrintWriter.
  • Reason: This change consolidates the code and enforces code reuse.

AnnotatedObjectInputStream.java portal-kernel/src/com/liferay/portal/kernel/io/AnnotatedObjectInputStream.java

  • Date: Mar. 18, 2026
  • Ticket: LPD-83085
  • What changed: The com.liferay.portal.kernel.io.AnnotatedObjectInputStream class is removed. Instead, use com.liferay.petra.io.AnnotatedObjectInputStream.
  • Reason: This change consolidates the code and enforces code reuse.

AnnotatedObjectOutputStream.java portal-kernel/src/com/liferay/portal/kernel/io/AnnotatedObjectOutputStream.java

  • Date: Mar. 18, 2026
  • Ticket: LPD-83085
  • What changed: The com.liferay.portal.kernel.io.AnnotatedObjectOutputStream class is removed. Instead, use com.liferay.petra.io.AnnotatedObjectOutputStream.
  • Reason: This change consolidates the code and enforces code reuse.

OutputStreamWriter.java portal-kernel/src/com/liferay/portal/kernel/io/OutputStreamWriter.java

  • Date: Mar. 18, 2026
  • Ticket: LPD-83085
  • What changed: The com.liferay.portal.kernel.io.OutputStreamWriter class is removed. Instead, use com.liferay.petra.io.OutputStreamWriter.
  • Reason: This change consolidates the code and enforces code reuse.

WriterOutputStream.java portal-kernel/src/com/liferay/portal/kernel/io/WriterOutputStream.java

  • Date: Mar. 18, 2026
  • Ticket: LPD-83085
  • What changed: The com.liferay.portal.kernel.io.WriterOutputStream class is removed. Instead, use com.liferay.petra.io.WriterOutputStream.
  • Reason: This change consolidates the code and enforces code reuse.

ProtectedAnnotatedObjectInputStream.java portal-kernel/src/com/liferay/portal/kernel/io/ProtectedAnnotatedObjectInputStream.java

  • Date: Mar. 18, 2026
  • Ticket: LPD-83085
  • What changed: The com.liferay.portal.kernel.io.ProtectedAnnotatedObjectInputStream class is removed. Instead, use com.liferay.petra.io.ProtectedAnnotatedObjectInputStream.
  • Reason: This change consolidates the code and enforces code reuse.

ProtectedObjectInputStream.java portal-kernel/src/com/liferay/portal/kernel/io/ProtectedObjectInputStream.java

  • Date: Mar. 18, 2026
  • Ticket: LPD-83085
  • What changed: The com.liferay.portal.kernel.io.ProtectedObjectInputStream class is removed. Instead, use com.liferay.petra.io.ProtectedObjectInputStream.
  • Reason: This change consolidates the code and enforces code reuse.

DummyOutputStream.java portal-kernel/src/com/liferay/portal/kernel/io/DummyOutputStream.java

  • Date: Mar. 18, 2026
  • Ticket: LPD-83085
  • What changed: The com.liferay.portal.kernel.io.DummyOutputStream class is removed. Instead, use com.liferay.petra.io.DummyOutputStream.
  • Reason: This change consolidates the code and enforces code reuse.

DummyWriter.java portal-kernel/src/com/liferay/portal/kernel/io/DummyWriter.java

  • Date: Mar. 18, 2026
  • Ticket: LPD-83085
  • What changed: The com.liferay.portal.kernel.io.DummyWriter class is removed. Instead, use com.liferay.petra.io.DummyWriter.
  • Reason: This change consolidates the code and enforces code reuse.

BigEndianCodec.java portal-kernel/src/com/liferay/portal/kernel/io/BigEndianCodec.java

  • Date: Mar. 18, 2026
  • Ticket: LPD-83085
  • What changed: The com.liferay.portal.kernel.io.BigEndianCodec class is removed. Instead, use com.liferay.petra.io.BigEndianCodec.
  • Reason: This change consolidates the code and enforces code reuse.

ByteArrayFileInputStream.java portal-kernel/src/com/liferay/portal/kernel/io/ByteArrayFileInputStream.java

  • Date: Mar. 18, 2026
  • Ticket: LPD-83085
  • What changed: The com.liferay.portal.kernel.io.ByteArrayFileInputStream class is removed. Instead, use com.liferay.petra.io.ByteArrayFileInputStream.
  • Reason: This change consolidates the code and enforces code reuse.

SerializationConstants.java portal-kernel/src/com/liferay/portal/kernel/io/constants/SerializationConstants.java

  • Date: Mar. 18, 2026
  • Ticket: LPD-83085
  • What changed: The com.liferay.portal.kernel.io.constants.SerializationConstants class is removed. Instead, use com.liferay.petra.io.SerializationConstants.
  • Reason: This change consolidates the code and enforces code reuse.

PathHolder.java portal-kernel/src/com/liferay/portal/kernel/io/PathHolder.java

  • Date: Mar. 18, 2026
  • Ticket: LPD-83085
  • What changed: The com.liferay.portal.kernel.io.PathHolder class is removed.
  • Reason: This class was unused.

ClassLoaderObjectInputStream.java portal-kernel/src/com/liferay/portal/kernel/util/ClassLoaderObjectInputStream.java

  • Date: Mar. 18, 2026
  • Ticket: LPD-83085
  • What changed: The com.liferay.portal.kernel.util.ClassLoaderObjectInputStream class is removed. Instead, use com.liferay.petra.io.ClassLoaderObjectInputStream.
  • Reason: This change consolidates the code and enforces code reuse.

ProtectedClassLoaderObjectInputStream.java portal-kernel/src/com/liferay/portal/kernel/util/ProtectedClassLoaderObjectInputStream.java

  • Date: Mar. 18, 2026
  • Ticket: LPD-83085
  • What changed: The com.liferay.portal.kernel.util.ProtectedClassLoaderObjectInputStream class is removed. Instead, use com.liferay.petra.io.ProtectedClassLoaderObjectInputStream.
  • Reason: This change consolidates the code and enforces code reuse.

AsyncBroker.java portal-kernel/src/com/liferay/portal/kernel/concurrent/AsyncBroker.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The com.liferay.portal.kernel.concurrent.AsyncBroker class is removed. Instead, use com.liferay.petra.concurrent.AsyncBroker.
  • Reason: This change consolidates the code and enforces code reuse.

BaseFutureListener.java portal-kernel/src/com/liferay/portal/kernel/concurrent/BaseFutureListener.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The com.liferay.portal.kernel.concurrent.BaseFutureListener class is removed. Instead, use com.liferay.petra.concurrent.BaseFutureListener.
  • Reason: This change consolidates the code and enforces code reuse.

DefaultNoticeableFuture.java portal-kernel/src/com/liferay/portal/kernel/concurrent/DefaultNoticeableFuture.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The com.liferay.portal.kernel.concurrent.DefaultNoticeableFuture class is removed. Instead, use com.liferay.petra.concurrent.DefaultNoticeableFuture.
  • Reason: This change consolidates the code and enforces code reuse.

FutureConverter.java portal-kernel/src/com/liferay/portal/kernel/concurrent/FutureConverter.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The com.liferay.portal.kernel.concurrent.FutureConverter class is removed. Instead, use com.liferay.petra.concurrent.FutureConverter.
  • Reason: This change consolidates the code and enforces code reuse.

FutureListener.java portal-kernel/src/com/liferay/portal/kernel/concurrent/FutureListener.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The com.liferay.portal.kernel.concurrent.FutureListener class is removed. Instead, use com.liferay.petra.concurrent.FutureListener.
  • Reason: This change consolidates the code and enforces code reuse.

NoticeableFuture.java portal-kernel/src/com/liferay/portal/kernel/concurrent/NoticeableFuture.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The com.liferay.portal.kernel.concurrent.NoticeableFuture class is removed. Instead, use com.liferay.petra.concurrent.NoticeableFuture.
  • Reason: This change consolidates the code and enforces code reuse.

NoticeableFutureConverter.java portal-kernel/src/com/liferay/portal/kernel/concurrent/NoticeableFutureConverter.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The com.liferay.portal.kernel.concurrent.NoticeableFutureConverter class is removed. Instead, use com.liferay.petra.concurrent.NoticeableFutureConverter.
  • Reason: This change consolidates the code and enforces code reuse.

ThreadPoolExecutor.java portal-kernel/src/com/liferay/portal/kernel/concurrent/ThreadPoolExecutor.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The com.liferay.portal.kernel.concurrent.ThreadPoolExecutor class is removed. Instead, use com.liferay.petra.concurrent.NoticeableThreadPoolExecutor.
  • Reason: This change consolidates the code and enforces code reuse.

ThreadPoolHandler.java portal-kernel/src/com/liferay/portal/kernel/concurrent/ThreadPoolHandler.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The com.liferay.portal.kernel.concurrent.ThreadPoolHandler class is removed. Instead, use com.liferay.petra.concurrent.ThreadPoolHandler.
  • Reason: This change consolidates the code and enforces code reuse.

ThreadPoolHandlerAdapter.java portal-kernel/src/com/liferay/portal/kernel/concurrent/ThreadPoolHandlerAdapter.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The com.liferay.portal.kernel.concurrent.ThreadPoolHandlerAdapter class is removed. Instead, use com.liferay.petra.concurrent.ThreadPoolHandlerAdapter.
  • Reason: This change consolidates the code and enforces code reuse.

AbortPolicy.java portal-kernel/src/com/liferay/portal/kernel/concurrent/AbortPolicy.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The com.liferay.portal.kernel.concurrent.AbortPolicy class is removed. Instead, use java.util.concurrent.ThreadPoolExecutor.AbortPolicy.
  • Reason: This change consolidates the code and enforces code reuse.

CallerRunsPolicy.java portal-kernel/src/com/liferay/portal/kernel/concurrent/CallerRunsPolicy.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The com.liferay.portal.kernel.concurrent.CallerRunsPolicy class is removed. Instead, use java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy.
  • Reason: The kernel ThreadPoolExecutor class is removed.

RejectedExecutionHandler.java portal-kernel/src/com/liferay/portal/kernel/concurrent/RejectedExecutionHandler.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The com.liferay.portal.kernel.concurrent.RejectedExecutionHandler class is removed. Instead, use java.util.concurrent.RejectedExecutionHandler.
  • Reason: The kernel ThreadPoolExecutor class is removed.

TaskQueue.java portal-kernel/src/com/liferay/portal/kernel/concurrent/TaskQueue.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The com.liferay.portal.kernel.concurrent.TaskQueue class is removed.
  • Reason: This class was only used by the kernel ThreadPoolExecutor class, which is now removed.

ClusterMasterExecutor.java portal-kernel/src/com/liferay/portal/kernel/cluster/ClusterMasterExecutor.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: The executorOnMaster method now returns a com.liferay.petra.concurrent.NoticeableFuture instead of a com.liferay.portal.kernel.concurrent.NoticeableFuture.
  • Reason: NoticeableFuture was migrated to the petra-concurrent module.

FutureClusterResponses.java portal-kernel/src/com/liferay/portal/kernel/cluster/FutureClusterResponses.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83105
  • What changed: FutureClusterResponses now extends com.liferay.petra.concurrent.DefaultNoticeableFuture instead of com.liferay.portal.kernel.concurrent.DefaultNoticeableFuture.
  • Reason: DefaultNoticeableFuture was migrated to the petra-concurrent module.

ReaderInputStream.java portal-kernel/src/com/liferay/portal/kernel/io/ReaderInputStream.java

  • Date: Mar. 19, 2026
  • Ticket: LPD-83273
  • What changed: The ReaderInputStream class is removed.
  • Reason: This class is no longer used.

Indexer.java portal-kernel/src/com/liferay/portal/kernel/search/Indexer.java

  • Date: Mar. 25, 2026
  • Ticket: LPD-83771
  • What changed: The reindex(String[]) method is removed. Instead, use reindexCompany(long companyId).
  • Reason: The removed method always received a single-element array containing a company ID as a String, and every implementation only used ids[0]. This change improves the code clarity and distinguishes this route from reindex(long classPK).

BaseIndexer.java portal-kernel/src/com/liferay/portal/kernel/search/BaseIndexer.java

  • Date: Mar. 25, 2026
  • Ticket: LPD-83771
  • What changed: The reindex(String[]) and doReindex(String[] ids) methods are removed. Use reindexCompany(long companyId) instead of reindex(String[]), and use doReindexCompany(long companyId) instead of doReindex(String[]).
  • Reason: The removed method always received a single-element array containing a company ID as a String. Both the public and protected abstract methods are updated to accept long companyId directly.

BaseSearcher.java portal-kernel/src/com/liferay/portal/kernel/search/BaseSearcher.java

  • Date: Mar. 25, 2026
  • Ticket: LPD-83771
  • What changed: The doReindex(String[]) method is removed. Instead, use doReindexCompany(long companyId).
  • Reason: This change reflects change to doReindexCompany in BaseIndexer.

DummyIndexer.java portal-kernel/src/com/liferay/portal/kernel/search/dummy/DummyIndexer.java

  • Date: Mar. 25, 2026
  • Ticket: LPD-83771
  • What changed: The reindex(String[]) method is removed. Instead, use reindexCompany(long companyId).
  • Reason: This change reflects the changes to the Indexer interface.

DuplicateUniqueFinderRowsCleaner.java portal-kernel/src/com/liferay/portal/kernel/dao/db/DuplicateUniqueFinderRowsCleaner.java

  • Date: Apr. 10, 2026
  • Ticket: LPD-83003
  • What changed: The deleteDuplicates method now returns a boolean value, which indicates whether the duplicate cleanup deleted data. It returns false when _hasUnpopulatedColumn detects that one of the indexed columns in _columnNames is entirely null or empty for all rows in _tableName.
  • Reason: This change is required so callers (such as IndexUpdaterUtil) can distinguish between duplicate rows being deleted successfully (so unique index creation can be retried), and duplicate cleanup being intentionally skipped because a newly added indexed column was not populated yet. Without this extra information, the caller cannot safely decide whether retrying unique index creation is correct.

ScriptingValidator.java portal-kernel/src/com/liferay/portal/kernel/scripting/ScriptingValidator.java

  • Date: Apr. 22, 2026
  • Ticket: LPD-85800
  • What changed: The ScriptingValidator interface is removed. Its validate(String) method is moved to ScriptingExecutor.
  • Reason: The validator was a parallel SPI to ScriptingExecutor with the same per-language registration pattern. Merging its logic with ScriptingExecutor removes the duplicate service tracker and keeps all language-specific scripting behavior in a single interface.

Scripting.java portal-kernel/src/com/liferay/portal/kernel/scripting/Scripting.java

  • Date: Apr. 22, 2026
  • Ticket: LPD-85800
  • What changed: The clearCache(String language) method is removed.
  • Reason: This method is no longer used.

ScriptingExecutor.java portal-kernel/src/com/liferay/portal/kernel/scripting/ScriptingExecutor.java

  • Date: Apr. 22, 2026
  • Ticket: LPD-85800
  • What changed: The clearCache and getScriptingContainer methods are removed.
  • Reason: These methods are no longer used.

ScriptingUtil.java portal-kernel/src/com/liferay/portal/kernel/scripting/ScriptingUtil.java

  • Date: Apr. 22, 2026
  • Ticket: LPD-85800
  • What changed: The static clearCache(String language) method is removed.
  • Reason: This change follows the removal of Scripting#clearCache(String).

BooleanQuery.java portal-kernel/src/com/liferay/portal/kernel/search/BooleanQuery.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: BooleanQuery is now a class that extends BaseQueryImpl instead of an interface; code that implements it must now extend it or use it directly. The add(Query, BooleanClauseOccur) method no longer throws a ParseException. Additionally, the add(Query, String) method is removed; instead, use add(Query, BooleanClauseOccur).
  • Reason: BooleanQueryImpl was the only implementation of BooleanQuery, so merging them into a single class improves the code structure. The method that accepted a String parameter always converted it to a BooleanClauseOccur, so the extra method overload was redundant.

BooleanQueryImpl.java portal-kernel/src/com/liferay/portal/kernel/search/generic/BooleanQueryImpl.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: The BooleanQueryImpl is removed. Use BooleanQuery directly instead.
  • Reason: BooleanQuery is now a concrete class that incorporates all functionality from BooleanQueryImpl, making the separate implementation class unnecessary.

BooleanClauseFactory.java portal-kernel/src/com/liferay/portal/kernel/search/BooleanClauseFactory.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: The BooleanClauseFactory interface is removed. Instead, create BooleanClause instances directly.
  • Reason: The factory class is no longer needed to create BooleanClause instances.

BooleanClauseFactoryUtil.java portal-kernel/src/com/liferay/portal/kernel/search/BooleanClauseFactoryUtil.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: The BooleanClauseFactoryUtil utility class is deleted. Instead, create BooleanClause instances directly.
  • Reason: This static utility is no longer needed.

BooleanClauseFactoryImpl.java portal-kernel/src/com/liferay/portal/kernel/search/generic/BooleanClauseFactoryImpl.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: The BooleanClauseFactoryImpl class is deleted. Instead, create a BooleanClause directly.
  • Reason: The factory implementation is no longer needed.

BooleanClause.java portal-kernel/src/com/liferay/portal/kernel/search/BooleanClause.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: BooleanClause is now a concrete class instead of an interface. Code that implements BooleanClause must be updated to extend it or use it directly instead.
  • Reason: BooleanClauseImpl was the only implementation of the BooleanClause interface. Merging them into a single POJO class simplifies the code structure.

BooleanClauseImpl.java portal-kernel/src/com/liferay/portal/kernel/search/generic/BooleanClauseImpl.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: The BooleanClauseImpl class is deleted. Instead, use BooleanClause directly.
  • Reason: BooleanClause is now a concrete class that incorporates all functionality from BooleanClauseImpl, making the separate implementation class unnecessary.

BooleanClauseOccur.java portal-kernel/src/com/liferay/portal/kernel/search/BooleanClauseOccur.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: BooleanClauseOccur is now an enum instead of an interface. Additionally, the getName method is removed, and the static MUST, MUST_NOT, and SHOULD fields are now enum constants instead of BooleanClauseOccurImpl instances.
  • Reason: This change simplifies the code structure. The three constants are a fixed set of values that are best represented as an enum.

BooleanClauseOccurImpl.java portal-kernel/src/com/liferay/portal/kernel/search/BooleanClauseOccurImpl.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: The BooleanClauseOccurImpl class is deleted.
  • Reason: BooleanClauseOccur is now an enum, so the separate implementation class is no longer needed.

TermQuery.java portal-kernel/src/com/liferay/portal/kernel/search/TermQuery.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: TermQuery is now a concrete class that extends BaseQueryImpl, instead of an interface. Code that implements TermQuery must be updated to extend it or use it directly instead.
  • Reason: TermQueryImpl was the only implementation of the TermQuery interface. Merging them into a single POJO class simplifies the code structure.

TermQueryImpl.java portal-kernel/src/com/liferay/portal/kernel/search/generic/TermQueryImpl.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: The TermQueryImpl class is removed. Instead, use TermQuery directly.
  • Reason: TermQuery is now a concrete class that incorporates all functionality from TermQueryImpl, making the separate implementation class unnecessary.

QueryTerm.java portal-kernel/src/com/liferay/portal/kernel/search/QueryTerm.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: QueryTerm is now a concrete class instead of an interface. Code that implements QueryTerm must be updated to use it directly instead.
  • Reason: QueryTermImpl was the only implementation of the QueryTerm interface. Merging them into a single POJO class simplifies the code structure.

QueryTermImpl.java portal-kernel/src/com/liferay/portal/kernel/search/generic/QueryTermImpl.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: The QueryTermImpl class is removed. Instead, use QueryTerm directly.
  • Reason: QueryTerm is now a concrete class that incorporates all functionality from QueryTermImpl, making the separate implementation class unnecessary.

TermRangeQuery.java portal-kernel/src/com/liferay/portal/kernel/search/TermRangeQuery.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: TermRangeQuery is now a concrete class that extends BaseQueryImpl, instead of an interface. Code that implements TermRangeQuery must be updated to extend it or use it directly instead.
  • Reason: TermRangeQueryImpl was the only implementation of the TermRangeQuery interface. Merging them into a single POJO class simplifies the code structure.

TermRangeQueryImpl.java portal-kernel/src/com/liferay/portal/kernel/search/generic/TermRangeQueryImpl.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: The TermRangeQueryImpl class is removed. Instead, use TermRangeQuery directly.
  • Reason: TermRangeQuery is now a concrete class that incorporates all functionality from TermRangeQueryImpl, making the separate implementation class unnecessary.

BaseBooleanQueryImpl.java portal-kernel/src/com/liferay/portal/kernel/search/BaseBooleanQueryImpl.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: The BaseBooleanQueryImpl abstract class is removed. Its methods (addTerms and parseKeywords) are moved into BooleanQuery.
  • Reason: BooleanQueryImpl was the only subclass of BaseBooleanQueryImpl. The extra layer of inheritance was unnecessary.

WildcardQuery.java portal-kernel/src/com/liferay/portal/kernel/search/WildcardQuery.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: WildcardQuery is now a concrete class that extends BaseQueryImpl, instead of an interface. Code that implements WildcardQuery must be updated to extend it or use it directly instead.
  • Reason: WildcardQueryImpl was the only implementation of the WildcardQuery interface. Merging them into a single POJO class simplifies the code structure.

WildcardQueryImpl.java portal-kernel/src/com/liferay/portal/kernel/search/generic/WildcardQueryImpl.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: The WildcardQueryImpl class is removed. Instead, use WildcardQuery directly.
  • Reason: WildcardQuery is now a concrete class that incorporates all functionality from WildcardQueryImpl, making the separate implementation class unnecessary.

Query.java portal-kernel/src/com/liferay/portal/kernel/search/Query.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: Query is now an abstract class instead of an interface. Code that implements Query must be updated to extend it instead.
  • Reason: BaseQueryImpl was the only direct implementation of the Query interface. Merging them into a single abstract class simplifies the code structure.

BaseQueryImpl.java portal-kernel/src/com/liferay/portal/kernel/search/BaseQueryImpl.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: The BaseQueryImpl abstract class is removed. Instead, extend Query directly.
  • Reason: Query is now an abstract class that incorporates all functionality from BaseQueryImpl, making the separate base class unnecessary.

DisMaxQuery.java portal-kernel/src/com/liferay/portal/kernel/search/generic/DisMaxQuery.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: DisMaxQuery is moved to the com.liferay.portal.kernel.search package.
  • Reason: The generic sub-package is being removed, to flatten the search query class hierarchy into a single package.

FuzzyQuery.java portal-kernel/src/com/liferay/portal/kernel/search/generic/FuzzyQuery.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: FuzzyQuery is moved to the com.liferay.portal.kernel.search package.
  • Reason: The generic sub-package is being removed, to flatten the search query class hierarchy into a single package.

MatchAllQuery.java portal-kernel/src/com/liferay/portal/kernel/search/generic/MatchAllQuery.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: MatchAllQuery is moved to the com.liferay.portal.kernel.search package.
  • Reason: The generic sub-package is being removed, to flatten the search query class hierarchy into a single package.

MatchQuery.java portal-kernel/src/com/liferay/portal/kernel/search/generic/MatchQuery.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: MatchQuery is moved to the com.liferay.portal.kernel.search package.
  • Reason: The generic sub-package is being removed, to flatten the search query class hierarchy into a single package.

MoreLikeThisQuery.java portal-kernel/src/com/liferay/portal/kernel/search/generic/MoreLikeThisQuery.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: MoreLikeThisQuery is moved to the com.liferay.portal.kernel.search package.
  • Reason: The generic sub-package is being removed, to flatten the search query class hierarchy into a single package.

MultiMatchQuery.java portal-kernel/src/com/liferay/portal/kernel/search/generic/MultiMatchQuery.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: MultiMatchQuery is moved to the com.liferay.portal.kernel.search package.
  • Reason: The generic sub-package is being removed, to flatten the search query class hierarchy into a single package.

NestedQuery.java portal-kernel/src/com/liferay/portal/kernel/search/generic/NestedQuery.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: NestedQuery is moved to the com.liferay.portal.kernel.search package.
  • Reason: The generic sub-package is being removed, to flatten the search query class hierarchy into a single package.

StringQuery.java portal-kernel/src/com/liferay/portal/kernel/search/generic/StringQuery.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: StringQuery is moved to the com.liferay.portal.kernel.search package.
  • Reason: The generic sub-package is being removed, to flatten the search query class hierarchy into a single package.

packageinfo portal-kernel/src/com/liferay/portal/kernel/search/generic/packageinfo

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: The com.liferay.portal.kernel.search.generic package is removed.
  • Reason: All classes have been moved to com.liferay.portal.kernel.search, so a separate generic sub-package is no longer needed.

QueryVisitor.java portal-kernel/src/com/liferay/portal/kernel/search/query/QueryVisitor.java

  • Date: Apr. 25, 2026
  • Ticket: LPD-87417
  • What changed: The DisMaxQuery, FuzzyQuery, MatchAllQuery, MatchQuery, MoreLikeThisQuery, MultiMatchQuery, NestedQuery, and StringQuery classes are now imported from the com.liferay.portal.kernel.search package. Classes implementing QueryVisitor must update their imports and @Override annotations to match the new parameter types.
  • Reason: The corresponding *Query classes were moved out of the generic sub-package into com.liferay.portal.kernel.search.

Changes in Taglibs

BodyContentWrapper.java util-taglib/src/com/liferay/taglib/BodyContentWrapper.java

  • Date: Mar. 13, 2026
  • Ticket: LPD-82616
  • What changed: The BodyContentWrapper constructor now has a com.liferay.petra.io.unsync.UnsyncStringWriter parameter instead of com.liferay.portal.kernel.io.unsync.UnsyncStringWriter.
  • Reason: UnsyncStringWriter was migrated from portal-kernel to petra-io.

Changes in util-java Classes

XMLSafeReader.java util-java/src/com/liferay/util/xml/XMLSafeReader.java

  • Date: Mar. 13, 2026
  • Ticket: LPD-82616
  • What changed: XMLSafeReader now extends com.liferay.petra.io.unsync.UnsyncStringReader instead of com.liferay.portal.kernel.io.unsync.UnsyncStringReader.
  • Reason: UnsyncStringReader was migrated from portal-kernel to petra-io.

Changes in util-bridges Classes

ScriptPostProcess.java util-bridges/src/com/liferay/util/bridges/common/ScriptPostProcess.java

  • Date: Mar. 10, 2026
  • Ticket: LPD-82197
  • What changed: The deprecated setInitalPage(com.liferay.portal.kernel.util.StringBundler) method is removed. Instead, use setInitalPage(com.liferay.petra.string.StringBundler).
  • Reason: The kernel StringBundler class has been removed.