Broadleaf Microservices
  • v1.0.0-latest-prod

Order Services Release Notes for 3.0.0

Important Updates

Spring Boot Upgrade

  • As of Broadleaf Release Train 3.0.0-GA, all microservices have been upgraded to support Spring Boot 4.1 and Java 25.

Requirements

  • JDK 17 is required for Broadleaf release trains 2.0.0-GA, and beyond.

New Features & Notable Changes

Warning

Breaking Change: The semantics of POST /order-resource-locks have changed. It now strictly obtains a permanent lock and no longer returns temporal locks that expire after a TTL. Any existing integrations or custom code relying on this endpoint for temporal locking behavior must migrate to the new POST /order-resource-locks/temporal endpoint.

Locking Architecture Realignment & Temporal Locks

Previously, message idempotency checks (which require a permanent lock to prevent duplicate execution) and short-lived resource concurrency guards (which only require a temporary lock) were conflated into a single locking API (POST /order-resource-locks). This endpoint used temporal locks (which expired based on a default TTL) and expired locks could allow duplicate messages to be re-processed after the TTL elapsed, breaking event deduplication.

In this release, we have decoupled the two behaviors into separate APIs:

  1. POST /order-resource-locks (Semantics Updated):

    • Its behavior has been restricted: it now strictly obtains a permanent lock (by calling repository.lockResource()). It is reserved exclusively for message idempotency checks to permanently block duplicate event processing.

    • Breaking Semantic Change: It no longer returns temporal locks that expire after a TTL. Do not use this endpoint for short-lived resource protection.

  2. POST /order-resource-locks/temporal (New Endpoint):

    • Introduced to obtain short-lived temporal resource locks (calling repository.lockResourceTemporarily()).

    • Custom Configurable TTL: Callers can provide an optional lockTtl query parameter (of type Duration, e.g., PT10S in ISO-8601 duration format) to override the default TTL.

    • Default TTL Fallback: If not specified, the API falls back to the default duration configured via the broadleaf.order.web.order-lock-ttl property (which defaults to 10 seconds).

Order and Order Fulfillment Persistence Events No Longer Emitted

Order Services no longer publishes persistence notification messages for Order and OrderFulfillment. These messages carried change details for every order write and were consumed by nothing in the platform, so producing them cost throughput on the most used write path in the service.

  • Any integration that subscribes to persistence events for orders or order fulfillments stops receiving them after upgrading.

  • If your implementation relies on these persistence events, see the snippet below to restore them.

Restore persistence events for orders or order fulfillments

Broadleaf registers the suppression as named, conditional beans, so an implementation that still needs these messages can switch them back on by defining a bean of the same name:

@Bean
public IgnoredNotificationStateRepository ignoreOrderPersistenceNotification() {
    // returning null leaves Order persistence notifications enabled
    return null;
}

Bug Fixes

  • Fixed the deletion of the Order notes

  • Fix an issue where deleting an order note from the admin failed, because the order note detail action resolved its identifier from the wrong source and produced an incomplete path.