Skip to main content
Version: 8.5.x

Self-Managed Commerce 8.5.x Release Notes

Learn about changes to Self-Managed Commerce for this release. Fixes since the release are summarized in the changelog.

Changelog​

The changelog contains the list of fixes and improvements made to Self-Managed Commerce 8.5 since its release date. To learn how to consume the updates, see Consuming Support Fixes.

CommitDescriptionBadgesRelease Date
b0ba76d0 Upgraded Tomcat from 9.0.122 to 9.0.123 to address CVE-2026-101356, CVE-2026-101296, CVE-2026-88041, CVE-2026-74049, CVE-2026-93446, CVE-2026-74048, CVE-2026-80353.Security5‑Nov‑2026
c65e420e Fixed a Cortex performance issue where api-platform was dispatching LINK and ADVISE operations to resource families already cached as not allowed.Performance4‑Nov‑2026
a620a9ad Upgraded the Google Guava library from 32.0.1 to 33.7.2 to address a high-severity security vulnerability (CVE-2026-102554).Security4‑Nov‑2026
2045141b Build stability fix.3‑Nov‑2026
0c8f3e24 Upgraded the PostgreSQL JDBC driver from 42.7.13 to 42.7.14 to address CVE-2026-107314 and CVE-2026-107315.Security3‑Nov‑2026
c40fe5ab Fixed a performance issue with inefficient localized attribute key parsing by caching parsed results and eliminating repeated regex compilation per call.Performance3‑Nov‑2026
cc25216e Build stability fix.3‑Nov‑2026
687aa255 Fixed an issue where Tomcat-based Commerce containers shut down immediately on SIGTERM, interrupting in-progress heap dumps instead of allowing the Java process to finish gracefully.Build Tools29‑Oct‑2026
8af914ee Fixed an issue where a malformed or unresolvable entry in extensions.json or plugins.json was silently ignored, causing all configured extension overrides to be discarded at startup.28‑Oct‑2026
5c0b2ee4 Fixed an issue where a single failing or repeatedly duplicated search index notification could permanently stall the index update queue, causing indexes to go stale and eventually run out of memory during rebuilds.Data model changes27‑Oct‑2026
4e1c0325 Fixed a performance issue where the outbox message relay job lacked an optimized database index, causing inefficient queries against the outbox message table.Performance Data model changes27‑Oct‑2026
707f6025 Upgraded Jackson from 2.22.3 to 2.22.4 to address three security vulnerabilities (CVE-2026-104895, CVE-2026-106554, CVE-2026-110879).Security26‑Oct‑2026
99c5f506 Search Server's in-memory cache entry limit is now capped during index rebuilds, preventing out-of-memory errors on large catalogs.26‑Oct‑2026
c2aedbba Removed and ban unused snappy-java 1.1.10.8 dependency to address CVE-2026-90559.Security26‑Oct‑2026
f874108b Upgraded Jackson from 2.22.1 to 2.22.3 to address CVE-2026-83557, CVE-2026-19032, CVE-2026-68497, CVE-2026-89425, CVE-2026-89407, CVE-2026-91776, CVE-2026-91777 (fix for previous commit).Security26‑Oct‑2026
80a51aa4 Fixed an issue where concurrent reads of cached product attributes caused threads to spin indefinitely, driving CPU usage up until the service was restarted.23‑Oct‑2026
c2460b34 Updated the ActiveMQ container image to allow tuning ActiveMQ storeUsage and tempUsage limits and totals. Default values are set in the image but can be overridden with new container environment variables.Build Tools23‑Oct‑2026
cfbb373f Fixed an intermittently failing deadlock retry integration test that could exhaust its retry budget due to a livelock, and added a missing error log when all retry attempts are exhausted.22‑Oct‑2026
2dfca30e Fixed an issue where orders with three or more partial captures against the same payment reservation failed with a duplicate key error, leaving orders partially charged and requiring manual intervention.21‑Oct‑2026
ae22b43c Fixed an issue where upgrading across a major Lucene version permanently broke search indexes, causing all storefront and Commerce Manager searches to return no results.21‑Oct‑2026
79acc19e The Operational Insights report now includes OpenJPA level 2 data caches alongside application caches, giving operators visibility into the memory footprint of the persistence cache tier.21‑Oct‑2026
6b551619 Removed msgpack-core dependency to address CVE-2026-90472.Security20‑Oct‑2026
cc1dda73 Upgraded Logback from 1.6.3 to 1.6.5 and SLF4j from 2.0.18 to 2.0.19 to address CVE-2026-104721.Security20‑Oct‑2026
b2123627 Updated the Cortex Studio CSS compiler dependency to address 8 Javascript vulnerablilities.20‑Oct‑2026
afeb6d5f Fixed an issue where Commerce Manager failed to load extension classes that used the Log4j 2 API directly.15‑Oct‑2026
b4913f00 @ResourceRepository and @ResourceService annotations can now be used in non-prototype classes such as permission parameter strategies without requiring a configurePrototypes workaround.15‑Oct‑2026
11006427 Fixed an issue where keyword searches with long multi-word phrases returned no results due to the search server rejecting queries that exceeded its maximum clause count.Data model changes14‑Oct‑2026
45152081 The Operational Insights Data Shape section now includes a record count for the index notification table (TINDEXNOTIFY).14‑Oct‑2026
04836bc7 Fixed an issue where eight Cortex storefront resources evaluated every promotion rule twice per request, causing redundant pricing calculations when rendering cart totals, discounts, and applied promotions.14‑Oct‑2026
2d8f9005 Removed all Groovy dependencies and related dynamic content scripting classes from the core commerce engine module.14‑Oct‑2026
c24085b0 Upgraded certified Java version from 17.0.18 to 17.0.20.Security13‑Oct‑2026
99b32480 Fixed an issue where the Search Server threw OutOfMemoryError during index rebuilds because queued index notifications were loaded entirely into memory before deletion.9‑Oct‑2026
1f1f5106 Upgraded httpclient5 from 5.6.3 to 5.6.4 to address CVE-2026-71290.Security8‑Oct‑2026
34cb4e6d Fixed XML external entity injection vulnerabilities in the Import/Export module that allowed crafted import payloads to read server files or trigger outbound requests from the server.Security8‑Oct‑2026
0f6ec914 Fixed multiple reliability issues in Operational Insights report generation.8‑Oct‑2026
d1b2cb82 Upgraded Jackson from 2.22.1 to 2.22.3 to address CVE-2026-83557, CVE-2026-19032, CVE-2026-68497, CVE-2026-89425, CVE-2026-89407, CVE-2026-91776, CVE-2026-91777.Security7‑Oct‑2026
de43e54a Replaced the unmaintained com.github.java-json-tools:json-schema-validator library with com.networknt:json-schema-validator 2.0.7 to resolve three security vulnerabilities (CVE-2026-86321, CVE-2026-86511, CVE-2026-86513).Security6‑Oct‑2026
e4cfe4f8 Upgraded Tomcat from 9.0.121 to 9.0.122 to address CVE-2026-86350, CVE-2026-77762, CVE-2026-78383, CVE-2026-75973, CVE-2026-78437, CVE-2026-73581, CVE-2026-77756.Security6‑Oct‑2026
1328338f Upgraded Extension Point Framework connectivity library build to Java 17.Security6‑Oct‑2026
5a05cc5a Fixed an issue where importing an order with a mixed-case store code failed with a foreign key violation.1‑Oct‑2026
f11e2f2b Upgraded ActiveMQ from 5.19.10 to 5.19.11 to address CVE-2026-74761.Security Build Tools29‑Sep‑2026
eb04511b Removed a redundant Tomcat version property from the extensions module to simplify Tomcat upgrades.29‑Sep‑2026
e2469d6a Fixed an issue where Cortex permission checks bypassed a required pre-check and passed resource identifiers from unrelated resource types to parameter resolution strategies.28‑Sep‑2026
1285e415 Operational Insights cache sizing now uses a custom heap estimator that requires no JVM flags, replacing the previous engine that failed or silently under-reported on modern JVMs.24‑Sep‑2026
af962bcc Upgraded the Node.js version used to build Cortex Studio from 6.x to 26.x.23‑Sep‑2026
2b23516f Upgraded ant from 1.10.14 to 1.10.18 to address CVE_2026-78254.23‑Sep‑2026
c5185458 Build stability improvements.23‑Sep‑2026
eeb3ca04 Upgraded Zookeeper from 3.9.5 to 3.9.6 to address CVE-2026-79993, CVE-2026-59969, CVE-2026-59739, CVE-2026-84439, CVE-2026-84501.Security22‑Sep‑2026
53d6052e Fixed issue with a NullPointerException appearing in Operational Insights when the webapp smoketests were run.22‑Sep‑2026
8f046f6b Upgraded the certified PostgreSQL 16 Amazon Aurora version from 16.10 to 16.14.22‑Sep‑2026
b0bb19c7 Upgraded the certified MySQL 8.4 RDS version from 8.4.8 to 8.4.11.22‑Sep‑2026
620daf10 Upgraded the certified MySQL 8.0 RDS version from 8.0.43 to 8.0.46.Security22‑Sep‑2026
17c68847 Cleaned up Cortex Studio npm dependencies by dropping unused packages and bringing package-lock.json back in sync with package.json.21‑Sep‑2026
aa7cae00 Fixed NullPointerException in coupon auto-apply role transition if registered user email was null.18‑Sep‑2026
af08dde8 Fixed an issue where upgrading Logback to 1.6.x caused JLine stack traces to appear in the Cortex startup logs and silently broke colorised console output for local development.16‑Sep‑2026
e55f196e Upgraded jsoup from 1.15.3 to 1.23.2 to address CVE-2026-71497.Security11‑Sep‑2026
f9dd08e0 Upgraded Postgresql JDBC driver from 42.7.11 to 42.7.13 to address CVE-2026-54291.Security11‑Sep‑2026
f2679a0e Upgraded httpclient5 from 5.3.1 to 5.6.3 and httpcore5 from 5.2.4 to 5.4.3 to address CVE-2026-64607, CVE-2026-54399, CVE-2026-54428.Security11‑Sep‑2026
784bdaf9 Upgraded Netty from 4.1.136.Final to 4.1.137.Final to address CVE-2026-75595 and CVE-2026-75596.Security10‑Sep‑2026
4f3f79d4 Upgraded Logback from 1.5.35 to 1.6.3 to address CVE-2026-19880.Security10‑Sep‑2026
50ce3e93 Removed the unused http-builder dependency from Cucumber test modules to eliminate a transitive dependency on a vulnerable version of commons-lang (CVE-2025-48924).Security10‑Sep‑2026
5f0eb3a1 Replaced the unmaintained org.fusesource.jansi:jansi 1.18 library with org.jline:jansi 4.3.1.10‑Sep‑2026
2af8a8e6 Upgraded Tomcat from 9.0.120 to 9.0.121 to address multiple high-severity vulnerabilities.Security8‑Sep‑2026
0767422f Upgraded Apache ActiveMQ from version 5.19.6 to 5.19.10 to address 8 vulnerabilities with scores from 5.9 to 8.8. Make sure to upgrade to Commerce Containers 4.8.2, 4.7.1, or 4.6.3 before deploying this patch.Build Tools1‑Sep‑2026
aef68233 Fixed an issue where transacted JMS consumers open and tear down a real TCP connection to the ActiveMQ broker on every receive cycle, causing significant connection churn at idle and under load.1‑Sep‑2026
b8234981 Fixed an issue where MySQL upgrade tests on 8.5.x fail with a datetime truncation error caused by test price list assignments being created with a start date at or too close to the Unix epoch.31‑Aug‑2026
804f4190 Fixed an issue where Camel JMS request-reply (InOut) routes fail with an IllegalArgumentException after connection pooling changes removed a required connection factory property.28‑Aug‑2026
69b4fc48 Fixed an issue where OpenID Connect token exchange requests send a malformed scope parameter, causing sign-in to fail with Microsoft Entra ID.27‑Aug‑2026
68802297 Customer and shopper records for single-session (public) users are now created lazily, only when a cart or profile resource is accessed, rather than at token creation time.Data model changes25‑Aug‑2026
fb9a659e Removed the unmaintained Natty date-parsing library from the test application to resolve a security vulnerability (CVE-2025-48924) in its transitive dependency on Commons Lang.Security24‑Aug‑2026
e761b132 Updated the ActiveMQ container entrypoint to ensure signals reach the broker JVM processBuild Tools23‑Aug‑2026
92f1aee8 Upgraded Logback from 1.5.32 to 1.5.35 to address CVE-2026-9828, CVE-2026-10532, and CVE-2026-13006.Security22‑Aug‑2026
a65f411f Upgraded Tomcat from 9.0.118 to 9.0.120 to address CVE-2026-59084, CVE-2026-59083, CVE-2026-55276, CVE-2026-53404, CVE-2026-55955, CVE-2026-55956.Security22‑Aug‑2026
ac030297 Fixed an issue where importing a registered customer whose username already exists in the target store causes the entire import batch to fail with a raw duplicate key database error.Data model changes21‑Aug‑2026
ba975cf6 Build stability improvements.21‑Aug‑2026
404fecea Upgraded Logback from 1.5.21 to 1.5.32 to address CVE-2026-1225.Security21‑Aug‑2026
3e587411 Fixed an issue where Selenium tests intermittently fail with a stale element reference error when calling click, doubleClick, or setChecked on a RAPTable row, resolved by adding retry logic to each method.21‑Aug‑2026
04ae7c1a Fixed an issue where a Software Composition Analysis security scan falsely reports Bouncy Castle vulnerabilities by excluding unused Shiro crypto dependencies from the Maven dependency graph.Security20‑Aug‑2026
20f36810 Fixed an intermittent cache eviction error during search indexing caused by several Ehcache cache key classes not implementing Serializable.20‑Aug‑2026
e3531dce Upgraded Jackson from 2.21.4 to 2.22.1 to address CVE-2026-59889, CVE-2026-54515.Security20‑Aug‑2026
c7757e55 Upgraded Log4j from 2.25.4 to 2.26.1 to address CVE-2026-49844.Security19‑Aug‑2026
3bc6c6bd Fixed intermittent test failures where the ORDER_CREATED message assertion fails because the message is consumed before the listener is fully initialized.19‑Aug‑2026
1db30d8c Fixed an issue where Cucumber test suites silently pass when step definitions are missing or unimplemented, by enabling strict mode across all 17 Java runners and 7 parallel runner templates.19‑Aug‑2026
4ed4ebba Fixed spurious "Unrecognized collection class" warnings logged by StrictDetachmentStrategyImpl in Cortex whenever an entity with a null collection-valued association is detached before caching.19‑Aug‑2026
9b3efab6 Upgraded Netty from 4.1.135.Final to 4.1.136.Final to address CVE-2026-59901.Security18‑Aug‑2026
f519996d Fixed a bug where transacted JMS routes built on CRSCEnabledRouteBuilder consume only one message and stall permanently, by removing the onCompletion hook that deadlocks the consumer thread on Camel 3 and later.18‑Aug‑2026
b556555f Parallelizes previously serial isolated Cucumber regression tests by scoping test data and configuration to unique stores, catalogs, and scenarios per test run, reducing pipeline duration by approximately 20–30 minutes.18‑Aug‑2026
2092e32c Refactored AccountAssociates.feature so its scenarios can run concurrently.12‑Aug‑2026
1fd1fb43 Fixed intermittent VirtualCatalog.feature failures by improving reliability of menu item widget interactions.11‑Aug‑2026
ef9b404e Improves Commerce Manager Selenium test reliability by removing broken stale-element wait methods, consolidating redundant wait call stacks, introducing stale-safe RAP widget wrappers, and cleaning up dialog handling.11‑Aug‑2026
46896b3a Build stability improvements.10‑Aug‑2026
f4a6c09f Fixed a bug in Commerce Manager where saving a customer record after adding a new address caused the address to appear duplicated in the address list.10‑Aug‑2026
e7f3a041 Fixed an issue where the coupon table migration generates random GUID values, causing the same coupon records to have different identifiers across environments, breaking data synchronization and import/export matching.10‑Aug‑2026
19ff6a0d Improved reliability of ProductCacheInvalidation.feature by dynamically creating unique test identifiers.9‑Aug‑2026
2103e828 Added new RAPMenuItem test widget to standardize menu access in Selenium tests.7‑Aug‑2026
733c8318 Fixed issue with Cortex Studio issuing a redundant GET request after a followlocation form POST.29‑Jul‑2026
88670ce7 JMS message consumers now use dedicated, non-pooled connections instead of shared pooled connections, preventing consumers on low-traffic queues from becoming stranded when a broker connection fails silently.28‑Jul‑2026
9f2bbf69 Removed unused Cortex bundles wrapped-spring-security-config, wrapped-spring-security-data, wrapped-spring-data-commons.Security28‑Jul‑2026
2a4ccf61 Adds a new downloadChecksumWithAlgorithm field to ops-spec.json for all four tool entries (Java, Maven, Tomcat, ActiveMQ), enabling vendor-published SHA-256/SHA-512 hashes to be used directly instead of manually calculated MD5 values.Build Tools24‑Jul‑2026
6e759483 Fixed intermittent parallel Maven build failures with "Could not acquire write lock" on a cold local cache by increasing the artifact lock acquisition timeout from 30 to 120 seconds.23‑Jul‑2026
46e85ab5 Upgraded Jackson from 2.21.2 to 2.21.4 to address CVE-2026-54513, CVE-2026-54512, CVE-2026-54516, CVE-2026-54514, CVE-2026-54517.Security22‑Jul‑2026
d7506052 Upgraded Spring Security from 5.8.15 to 5.8.16 to address CVE-2024-38827.Security16‑Jul‑2026
d3489c1e Operational Insights revenue metrics now only count completed orders, using the order completion date instead of the creation date, preventing historical revenue figures from changing retroactively.16‑Jul‑2026
dc22eca0 Upgraded Solr from 9.10.0 to 9.10.1 to address CVE-2026-22022.Security15‑Jul‑2026
33e00365 Fixed issue with bundle price list cache using excessive memory due to holding entire ProductBundle in the cache key.14‑Jul‑2026
45802497 The promotion rule recompilation trigger interval has been reduced from 5 minutes to 10 seconds by default, and the delay and interval are now configurable via the ep.rule.compilation.delay and ep.rule.compilation.interval properties.13‑Jul‑2026
0b290054 Upgraded Netty from 4.1.133.Final to 4.1.135.Final to address CVE-2026-45416, CVE-2026-50010, and CVE-2026-44249.Security7‑Jul‑2026
5728a330 Upgraded Shiro from 1.13.0 to 2.2.1 to address CVE-2026-23901, CVE-2026-43828, and CVE-2026-49268.Security6‑Jul‑2026
aadef4a5 Refactored ShoppingCart to include transient fields for selected payment instruments, to be consistent with how selected addresses and shipping options work. This also allows us to eliminate some database operations during checkout.29‑Jun‑2026
2a52a7e1 The Commerce Manager test-util module no longer uses PhantomJS to run JavaScript tests, fixing build failures on systems with OpenSSL 3.x (such as Debian Trixie); tests now run via HtmlUnit and JUnit.25‑Jun‑2026
5db4731f Upgraded certified Oracle version from 19.0.0.0.ru-2025-10.rur-2025-10.r1 to 19.0.0.0.ru-2026-01.rur-2026-01.r3.Security23‑Jun‑2026
3b766b18 Upgraded certified PostgreSQL version from 16.10 to 16.14.Security22‑Jun‑2026
508b26e1 Build stability improvements.10‑Jun‑2026
af9abb9e Removed an obsolete reference to a non-existent method (getCurrentLupNumber) from the sync service merge filter configuration; this is a cleanup change with no functional impact.9‑Jun‑2026
47a8e24b Upgraded Netty from 4.1.130.Final to 4.1.133.Final to address CVE-2026-42583.Security9‑Jun‑2026
960485db Upgraded SLF4j from 1.7.x to 2.0.x and Logback from 1.2.x to 1.5.x to address CVE-2024-12798, CVE-2024-12801 and CVE-2025-11226.Security9‑Jun‑2026
509b5421 Upgraded Log4j from 2.17.1 to 2.25.4 to address CVE-2026-34480, CVE-2026-34479, CVE-2026-34477.Security5‑Jun‑2026
b4fe5e83 Upgraded Liquibase from 4.8.0 to 4.33.0 to address a bug with the latest PostgreSQL JDBC driver.Security Data model changes5‑Jun‑2026
e677f4e8 Upgraded Postgresql JDBC driver from 42.4.4 to 42.7.11 to address CVE-2026-42198.Security3‑Jun‑2026
09c5d929 Fixed issue with Cortex not producing logs in deployed environments after the Logback 1.5 upgrade.2‑Jun‑2026
c779d349 Upgraded JJWT from 0.10.6 to 0.12.7 to address CVE-2024-31033.Security2‑Jun‑2026
7d551f8b Adds a new com.elasticpath.logging JMX endpoint to all Self-Managed Commerce services. This allows you to modify the log levels of running services in real time.2‑Jun‑2026
72c7d686 Upgraded Tomcat from 9.0.117 to 9.0.118 to address CVE-2026-43512, CVE-2026-41284, CVE-2026-42498, CVE-2026-41293, CVE-2026-43513, CVE-2026-43515, CVE-2026-43514.Security1‑Jun‑2026
545910c1 Build stability improvements.1‑Jun‑2026
831aec72 A Liquibase changeset has been added to automatically run ANALYZE on PostgreSQL databases during each data population run, preventing query performance issues caused by missing table statistics after a major PostgreSQL version upgrade.Performance26‑May‑2026
af1b9a51 Fixed a bug where copying a promotion reused the original's selling context, causing changes to one promotion's shopper conditions to affect the other. A database migration script separates any previously affected promotions.Data model changes20‑May‑2026
f824491b Moved spring-tx bundle from bundles to bundles level 4 to prevent intermittent Cortex startup failure.17‑May‑2026
814513b7 Upgraded certified Oracle version from 19.0.0.0.ru-2025-07.rur-2025-07.r1 to 19.0.0.0.ru-2025-10.rur-2025-10.r1.Security17‑May‑2026
c7a0df43 Upgraded certified Aurora MySQL 8.0 version from 8.0.mysql_aurora.3.08.2 to 8.0.mysql_aurora.3.10.3.Security16‑May‑2026
7a68e559 Upgraded certified MySQL 8.4 RDS version from 8.4.6 to 8.4.8.Security15‑May‑2026
996bd703 Upgraded Apache ActiveMQ from version 5.18.7 to 5.19.6 to address CVE-2026-40466, CVE-2026-41044, and CVE-2026-39304.Security14‑May‑2026
6c49531f Upgraded Jackson from 2.19.1 to 2.21.2 to address WS-2026-0003 (CVSS3 7.5), with SnakeYAML also upgraded from 2.4 to 2.5.Security8‑May‑2026
da46da03 Updated handling of promotion category exclusions so that if the excluded category is a subcategory of the included category, products belonging to both the included and excluded category satisfy the condition.5‑May‑2026
80d3d6cf Upgraded plexus-utils from 3.5.1 to 3.6.1 to address CVE-2025-67030 (CVSS3 score 9.8).Security4‑May‑2026
652f7f28 Fixed a memory inefficiency in StoreProductSkuFactoryImpl where cached StoreProductSku proxies unnecessarily retained a reference to the factory singleton.4‑May‑2026
fbf449f5 Improved Selenium test widgets: fluent table-cell assertions, text-field clear, sharper retry classification in both retryAttempts and retryFunction.30‑Apr‑2026
17b15315 Upgraded SOLR from 9.9.0 to 9.10.0 to address CVE-2025-12383 and CVE-2025-58457.Security30‑Apr‑2026
c4062c2d Removed deprecated Maven repositories from individual-settings.xml.29‑Apr‑2026
d67c115c Resolved a race condition where simultaneous checkout requests for the same cart could cause a duplicate order constraint violation to be silently swallowed, resulting in a failure indicating that payment instruments are missing.29‑Apr‑2026
dea50ed9 Upgraded Tomcat from 9.0.116 to 9.0.117 to address CVE-2026-34487, CVE-2026-34486, CVE-2026-34483, and CVE-2026-34500.Security28‑Apr‑2026
781c93ea Fixed intermittently failing Catalog Syndication integration tests.28‑Apr‑2026
3fcceeb1 Fixed issue with inventory cache using excessive memory due to holding entire Product SKU in the cache key.27‑Apr‑2026
9fe20139 Fixed missing checkbox label issue in Commerce Manager.21‑Apr‑2026
93fe7d3a Upgraded Zookeeper from 3.9.4 to 3.9.5 to address CVE-2026-24281 and CVE-2026-24308.Security17‑Apr‑2026
04c4ea4e Added missing distributionManagement to boms/pom.xml that was causing Maven deploy operations to fail.15‑Apr‑2026
9e6f3dc0 Upgraded pf4j from 3.10.0 to 3.15.0 to address CVE-2025-70952.Security11‑Apr‑2026
5a6f227e Removed deprecated ServiceMix dependencies and replaced with wrapped bundles maintained by Elastic Path.10‑Apr‑2026
ed956b2a Upgraded Tomcat from 9.0.110 to 9.0.116 to address CVE-2026-24734, CVE-2026-24733, and CVE-2025-66614.Security10‑Apr‑2026
1699a33c Added assertColumnContainsExactly method to RAPTable class.9‑Apr‑2026
6aabad75 Modified build parameters to remove ReservedCodeCacheSize 128m setting and use JDK default instead.Build Tools8‑Apr‑2026
c96771f7 Improved Selenium report usability: captured browser console logs alongside driver logs, wrapped object model snapshots in HTML text area for readability in CI reports, and enabled Chrome browser-level logging.8‑Apr‑2026
beb8ed9e Fixed maven-deploy-plugin configuration that was causing Maven deploy operations to fail.7‑Apr‑2026
3ea6a351 Fixed intermittent failure in "Syndication Сategory flow tests: Create and then Delete Category, check ep.catalog JMS message, check created option projection via API" Cucumber test.7‑Apr‑2026
d4b041bf Added assertDoesNotContainRow method to RAPTable class.3‑Apr‑2026
be47dc72 Upgraded the EhCache servicemix version to make it consistent with the EhCache version.Security2‑Apr‑2026
2d65275c Improved Import/Export logging to show localized message instead of code for warnings and errors.2‑Apr‑2026
bc0f48ff Additional fixes for "context has been closed" exceptions in batch named queries with list parameters when casting to OpenJPAQuery.1‑Apr‑2026
b37cdc2a Fixed test teardown issue in MergeEngineImplITest that can cause SyncToolLauncherMultipleExecutionsITest to fail.31‑Mar‑2026
ec5d2cec Updated Git configuration to ignore .claude folders.30‑Mar‑2026
4073ab21 Data sync change to ensure that only changed values are updated in the target entities. This also ensures that products and skus are not reindexed when a new sku option value is added.29‑Mar‑2026
59bae269 Upgraded Byte Buddy to version 1.18.4.Security27‑Mar‑2026
d47ebbae Fixed issue with Price List Assignment search in Commerce Manager not properly clearing the list when there are no search results.26‑Mar‑2026
9c61e988 Updated OpenID Connect functionality to support RFC-compliant cookie headers and avoid generating "Invalid cookie header" warnings.25‑Mar‑2026
5a0e5965 Added retryAttempts() to Selenium test framework to safely nest retries inside retryFunction().21‑Mar‑2026
c7ee66e2 Fixed a race condition in Utils.uniqueCode() used during tests.20‑Mar‑2026
ef97e57f Additional fixes for "context has been closed" exception in Cortex when setting entity fields that were loaded from the cache.20‑Mar‑2026
31734dc9 Added the ability to override the p2 repository locations.Build Tools19‑Mar‑2026
79f0373d Updated certified Java version from 17.0.16 to 17.0.18.17‑Mar‑2026
9a6a9c01 Updated Payment Configuration Cucumber tests to generate new stores and prevent intermittent failures when running tests concurrently.16‑Mar‑2026
45dabf0d Improved Selenium test reliability and maintainability with typed widget APIs, replacing brittle CSS selectors with strict assertions, automatic retry on transient errors, and session cleanup.16‑Mar‑2026
46f81481 Fix for intermittent "context has been closed" exception in Cortex when accessing fields of bundle constituent products or product SKUs.12‑Mar‑2026
18a60451 Upgraded okhttp from 3.14.1 to 4.12.0 to address CVE-2021-0341.Security11‑Mar‑2026
a26ffe87 Upgraded rhino from 1.7.7.2 to 1.7.14.1 to address CVE-2025-66453.Security10‑Mar‑2026
0ee8ec21 Fixed issue with descender characters (g, p, y, j, q) being cut off in Commerce Manager table headings.4‑Mar‑2026
9821b864 Fixed multiple bugs with promotion exception logic and reverted behaviour change of the "cart contains category" promotion condition done in a previous patch.2‑Mar‑2026
fd980a44 Upgraded AssertJ from 3.11.1 to 3.27.7 to address CVE-2026-24400.Security21‑Feb‑2026
182ebb04 Fixed null pointer exception that can occur when retrieving inventory details for a bundle with no constituents.21‑Feb‑2026
b4b6d8c3 Removed the runAlways flag off of the FK-BATCH Liquibase changesets to avoid creating repeat DATABASECHANGELOG entries in the database.Data model changes10‑Feb‑2026
afc6fd25 Added new with-snapshot-api-platform and with-snapshot-ep-xpf-spi profiles for building with development versions of these dependencies.6‑Feb‑2026
683c9b12 Fixed bug in which removing an attribute from a product type causes all attribute values to be deleted (instead of just the ones for products/skus assigned to that product type).3‑Feb‑2026
b641b12b Upgraded msgpack-core from 0.8.13 to 0.9.11 to address CVE-2026-21452.Security3‑Feb‑2026
bd07ca6d Improved reliability of search-related Commerce Manager test steps to avoid race conditions.2‑Feb‑2026
f82cef26 Added support for custom headers in Cortex Studio.2‑Feb‑2026
71d0fc15 Improved reliability of WebDriver management in Selenium tests.29‑Jan‑2026
ff203063 Cleaned up EmailStepDefinitions by removing inappropriate TestExecutionListeners.29‑Jan‑2026
ccb49f18 Fixed intermittent failures in Performance Insights tests caused by resetting the database between each test.Performance28‑Jan‑2026
9078d9e4 Removed Felix webconsole dependency from ext-cm-webapp.23‑Jan‑2026
2f6d6d1a Fix for intermittent context has been closed exceptions in Cortex under high load.22‑Jan‑2026
440c2f28 Fixed skipITests and skipCucumberTests properties not skipping some expected modules.19‑Jan‑2026
e4e44e46 Fixed issue causing Order Cleanup jobs to fail when order has associated order holds.Data model changes14‑Jan‑2026
a203e3d9 Added more detail to assertion output when Cortex Cucumber step definitions fail.13‑Jan‑2026
6de82696 Allow IntelliJ to properly resolve Eclipse Remote Application Platform dependencies in Commerce Manager classes.13‑Jan‑2026
1e9ef69e Updated Commerce Manager to allow attribute value editor to be opened when product, SKU, or category is locked in changeset mode.13‑Jan‑2026
7f2c721c Refactored confusing Amount of transaction should be (.*) Selenium test definition.8‑Jan‑2026
3be84d12 Fixed intermittently failing Pre/Back-Order Cucumber tests.8‑Jan‑2026
970e65a9 Added the ability to set and distinguish between present and not present boolean customer attribute values in Commerce Manager.7‑Jan‑2026
ba1d5339 Removed zoom graph builder functionality in Cortex Studio.Security7‑Jan‑2026
582a7168 Updated protobuf-java version from 3.16.3 to 3.25.5 to address CVE-2024-7254.Security6‑Jan‑2026
6773a81e Upgraded certified Oracle version from 19.0.0.0.ru-2025-01.rur-2025-01.r2 to 19.0.0.0.ru-2025-07.rur-2025-07.r1.Security19‑Dec‑2025
a392955f Fixed Selenium test issue causing Multiple elements (2) found for selector: div[widget-id*='Sh'][appearance-id='ctab-item'][seeable='true'] warnings in the logs.18‑Dec‑2025
73f133ce Upgraded certified MySQL RDS version from 8.4.5 to 8.4.6.Security17‑Dec‑2025
d64eb517 Added support for MySQL 8.4 in Build Tools. The default MySQL version that gets built by the build_base_images.yml playbook is now 8.4.Build Tools17‑Dec‑2025
026f3d64 Upgraded certified PostgreSQL version from 16.9 to 16.10.Security8‑Dec‑2025
3013ead7 Updated coupon service to ensure that whitespace is trimmed when new coupon codes are created.5‑Dec‑2025
004d9d22 Upgraded certified MySQL 8.0 RDS version from 8.0.41 to 8.0.43.Security27‑Nov‑2025
c50d5e3d Fixed AbstractPageObject#clearAndTypeText to improve detection that ensures that the field text was correctly entered.27‑Nov‑2025
d2972a7b Improved how Checkstyle rules are defined to use suppression files for Integration Tests.26‑Nov‑2025
bf5dd285 Fixed issue where Java compiler warnings would fail build but not show the reason unless the fork configuration was removed.24‑Nov‑2025
48121ceb Upgraded jQuery UI from 1.11.4 to 1.13.2 to fix autocomplete UI issue in Cortex Studio.Security21‑Nov‑2025
f710b153 Fixed incorrect payment API response error message when refund fails.20‑Nov‑2025
c85f014e Fixed an intermittent failure in Create Catalog Selenium tests.19‑Nov‑2025
768c9afb Fixed issue where the JaCoCo test coverage Maven plugin was not executing.14‑Nov‑2025
ac0fe8a4 Fixed issue in which a new master catalog with all languages configured could not be opened in Commerce Manager.14‑Nov‑2025
a93e8c24 Added certification for MySQL RDS 8.4.13‑Nov‑2025
8145f15b Fixed refund error that can occur if the order payment events include reverse charges.13‑Nov‑2025
6a7f8507 Fixed NullPointerException that can occur in Import/Export API when import fails.12‑Nov‑2025
234fc325 Fixed multiple issues related to null or blank customer profile attribute values.10‑Nov‑2025
42c3a748 Upgraded Tomcat from 9.0.107 to 9.0.110.Security7‑Nov‑2025
9e2f6433 Upgraded Zookeeper from 3.9.3 to 3.9.4 to address CVE-2025-58457.Security6‑Nov‑2025
fcb8bdb9 Ensure that Checkstyle verifies JavaDocs for all public, protected, and package private methods.5‑Nov‑2025
c7a01a8b Updated attributeByUidCache cache max entries from unlimited to 10,000 in ehcache-fast-updates.xml.5‑Nov‑2025
2889756c Fixed issue where the applied line item discount amount could exceed the line item subtotal if multiple promotions are stacked.5‑Nov‑2025
b7356ada Set default maxThreads for all services to 250 to match Operational Insights recommendations.Build Tools3‑Nov‑2025
a9049857 Upgraded dependencies within Fluent RelOS Client to address CVE-2025-48924.Security29‑Oct‑2025
c406f3c8 Upgraded fsevents from 1.2.8 to 1.2.11 to address CVE-2023-45311.Security29‑Oct‑2025
9a487e84 Modified XPFTaxableShoppingItem so cart tax calculation results are reusable at checkout by the ElasticPathTaxCalculator cache.24‑Oct‑2025
447b7ad3 Added comments and improved the input validation in the ActiveMQ container entrypoint script.Build Tools21‑Oct‑2025
12035051 Updated certified Java version from 17.0.7 to 17.0.16.18‑Oct‑2025
b6849caa Added a new index to TCOUPONUSAGE to improve performance for the query to find automatically applied coupons.Performance Data model changes17‑Oct‑2025
2db99497 Upgraded Checkstyle plugin from version 2.17 to 3.6.0.Security17‑Oct‑2025
61a53afb Fixed product reindexing issues after updating sku option values in a catalog.16‑Oct‑2025
9eeca2ad Switched default detachment strategy from strict to non-detaching to avoid this.pcStateManager is null exceptions while importing in the Import/Export API.15‑Oct‑2025
1066b6e6 Upgraded jakarta.mail from 1.6.7 to 1.6.8 to address CVE-2025-7962.Security15‑Oct‑2025
63c599c3 Upgraded Jetty from 10.0.24 to 10.0.26 to address CVE-2025-5115.Security15‑Oct‑2025
4816ca61 Added new configuration query parameter to the Import/Export API to allow clients to select different import configuration files to use for the import.15‑Oct‑2025
10525da8 Consume updated code-checking-rules as a prerequisite for upcoming Checkstyle upgrade.15‑Oct‑2025
bd419f91 Resolved the localized message key: incompatible-configuration warnings during service startup.2‑Oct‑2025
6d38ba87 Fixed checkout failure that can occur when resubmitting a shopping cart that previously had a payment issue.30‑Sep‑2025
4cbf01d9 Enabled Checkstyle and PMD checks in webapp-smoketests module.25‑Sep‑2025
79eb527f Upgraded Apache Solr from 9.8.0 to 9.9.0 to address CVE-2024-51504.Security24‑Sep‑2025
d4d234ae Fixed exception that occurred when copying a cart promotion with rule exceptions defined.23‑Sep‑2025
0c9bb642 Upgraded netty-handler from 4.1.118.Final to 4.1.125.Final to address CVE-2025-58057.Security22‑Sep‑2025
6c8b4d6b Fixed issues running reset-db on a local Oracle database.19‑Sep‑2025
5c5a6ee1 Fixed Checkstyle plugin configuration in multiple modules.18‑Sep‑2025
0b468b4c Fixed load.sh/unload.sh/replace.sh scripts generated by the Maven Archetype when creating an external plugin so that they work properly with the new cargo-based service startup mechanism.17‑Sep‑2025
d4569935 Fixed issue with Search Server refusing to shut down if indexing is in progress.17‑Sep‑2025
80e2be9f Upgraded certified PostgreSQL version from 16.6 to 16.9.Security Data model changes17‑Sep‑2025
71853bbe Fixed data type issues with TRMAGENERATOR and TORDERNUMBERGENERATOR that required the database to workaround through implicit casts.Data model changes16‑Sep‑2025
818e9c6b Fixed issue with Search Server taking up to an hour to process index update notifications by reducing the query cache timeout from 1 hour to 5 seconds.15‑Sep‑2025
09098bcf Fix for potential "Value not present" error in Cortex if a new sku option value is added and assigned to a new product SKU before the sku option cache expires.13‑Sep‑2025
cc1520e0 Fixed an issue in the data-pop tool container entrypoint script where files from a secure-configuration repository were being ignored and not applied.12‑Sep‑2025
ebcbadde Changed the behaviour of the "cart contains category" promotion condition so that exclusions only override categories that are explicitly included.11‑Sep‑2025
91d23ccd Added new cortex.headers.ignore JVM parameter that instructs Cortex to ignore the specified headers.8‑Sep‑2025
1537f0eb Updated the ext-container-layout project to include the same assembly rules used in the ext-deployment-package project, specifically so builds will fail if artifacts don't exist.8‑Sep‑2025
994f78ba Fixed "Error during type conversion" exception that appeared in Integration Server logs after each Export API request.5‑Sep‑2025
0c1c9897 Upgraded commons-lang from 3.10 to 3.18.0 to address CVE-2025-48924.Security4‑Sep‑2025
4daed0ed Changed "No product was found for base amount" error to a warning.28‑Aug‑2025
46b30b15 Modified the XPFTaxableShoppingItem so that its GUID matches the shopping cart line item GUID, so that the ElasticPathTaxCalculator cache doesn't miss on subsequent identical tax lookups. WARNING: Make sure to consume patch 6d38ba87 at the same time as this patch to avoid potential checkout failures.28‑Aug‑2025
c3a4f29f Upgraded Camel from 3.21.5 to 3.22.4 to address CVE-2025-29891 and CVE-2025-27636.Security27‑Aug‑2025
e1e3b0f7 Removed all ESAPI dependencies, which were not effectively protecting the Cortex API endpoints and were including vulnerable transitive dependencies.22‑Aug‑2025
2eaa5212 Fixed issue with service level options in the Commerce Manager promotion actions not updating correctly after the selected stores are changed.22‑Aug‑2025
555446e5 Replaced all uses of deprecated org.osgi.core and org.osgi.annotation dependencies with osgi.core and osgi.annotation.13‑Aug‑2025
18e7631f Fixed issue on promotion editor where store and catalog assignments were not persisted if changed after an initial save.13‑Aug‑2025
bf194d45 Added logic to handle situation where a child shopping cart line item is missing a pointer to its parent line item.13‑Aug‑2025
a3ec9647 Upgraded ActiveMQ from 5.18.5 to 5.18.7 to address CVE-2025-27533.Security31‑Jul‑2025
d537bad8 Added a new COMMERCE/STORE/FILTEREDNAVIGATION/priceFacetingEnabled setting that controls whether price faceting support is enabled. If disabled, product search indexing may be significantly faster.Performance Data model changes29‑Jul‑2025
16b4bdf1 Fixed connection leak in DBConnector classes.28‑Jul‑2025
f7e66999 Upgraded Jackson from 2.16.1 to 2.19.1 and switched to jackson-bom to define dependency versions.Security25‑Jul‑2025
1172fb75 Fixed issue where getSettingValue(final String path) doesn't work when using the cached settings reader.24‑Jul‑2025
75d7f7b6 Fixed the Build Tools script build_source_tree.sh to properly handle the --deploy command-line argument.Build Tools22‑Jul‑2025
aaaf49a8 Fixed potential race condition for limited use coupons when incrementing the coupon usage count during checkout, causing some uses to be missed.21‑Jul‑2025
3a6ac6e7 Upgraded Tomcat from 9.0.106 to 9.0.107.Security21‑Jul‑2025
6daa03a5 Fixed multiple incorrect XML bean configurations.18‑Jul‑2025
b737fcc4 Fixed all @Named annotations that are paired with @Autowired to the correct @Qualifier annotation.17‑Jul‑2025
7eb01cef Updated both the Build Tools build container image and the Build Tools application container base images to Amazon Linux 2023.7.20250623.1.Build Tools15‑Jul‑2025
8817bdd6 Fixed issue where resending a Gift Certificate for a specific order line item was resending all order gift certificates to the specified recipient.10‑Jul‑2025
f6055851 Upgraded Tomcat from 9.0.105 to 9.0.106.Security10‑Jul‑2025
372a15c0 Upgraded commons-beanutils from 1.9.4 to 1.11.0.Security9‑Jul‑2025
1f87a7fa Added a new warning to the logs when a service using SwitchableProxyBinder is using the fallback implementation, which usually indicates that application-level caching is not working.9‑Jul‑2025
88011a94 Upgraded spring-security from 5.8.14 to 5.8.15.Security9‑Jul‑2025
237f611a Added support for IS NULL and IS NOT NULL to EP Search Query Language.8‑Jul‑2025
17263eef Fixed infinite recursion bug in CacheableFacetService#findAllFacetsForStore.8‑Jul‑2025
0591b6d8 Modified bundle availability logic so that bundles appear as available as long as sufficient constituents are available to satisfy the bundle selection rules.8‑Jul‑2025
b493620c Added a new ext-container-layout module with updated build tools, to simplify building Self-Managed Commerce container images.Build Tools26‑Jun‑2025
6e79b4b8 Fixed parsing of queries in LuceneRawQueryComposerImpl that was causing problems for the search server when processing some index notifications.26‑Jun‑2025
e2cba6ce Refactored dependencies to define versions in bill-of-materials/pom.xml.26‑Jun‑2025
5917816b Build Tools: Set timeouts for Maven commands, so that Maven builds triggered by these tools will fail fast if Maven artifact download connections hang.Build Tools25‑Jun‑2025
081b29bb Fixed an issue where domain events are not always triggered as expected if the domain class has been extended.23‑Jun‑2025
384264b2 Build Tools: Updated the ActiveMQ container's entrypoint.sh script to enable new ActiveMQ container configuration options. Users can set new environment variables EP_ACTIVEMQ_X_JVM_ARGS and MAXIMUM_CONNECTIONS.Build Tools23‑Jun‑2025
e0f5b999 Fixed issue in which the CM_USER_CREATED event is sent before the Commerce Manager user is persisted.21‑Jun‑2025
0c1f9c36 Fixed the Operational Insights revenue calculations to exclude failed but include cancelled orders.20‑Jun‑2025
6768c903 Fixed issue that causes search indexing to fail if multiple attribute values exist for the same attribute with the same locale.19‑Jun‑2025
70dc815e Replace the unmaintained tag library taglibs-standard-impl with the newer jakarta.servlet.jsp.jstl.Security17‑Jun‑2025
43cfa0cc Upgraded Tomcat from 9.0.102 to 9.0.105.Security12‑Jun‑2025
80bb9372 Fixed multiple issues with limited usage promotions: Promotion wizard not saving the flag, error occurring when checking out, and a potential race condition during checkout.Data model changes Requires downtime6‑Jun‑2025
edc03460 Fixed SQL injection warnings identified by Static Application Security Testing tooling in ep-persistence-openjpa.Security5‑Jun‑2025
98846338 Fixed suppression for false positive FindBugs issues.Security4‑Jun‑2025
385ff802 Upgraded jetty-server from 9.4.56.v20240826 to 9.4.57.v20241219.Security4‑Jun‑2025
a60d147d Added calls to super.configure() within configure methods of route builders extending CRSCEnabledRouteBuilder.2‑Jun‑2025
9cd9a394 Build stability improvements.30‑May‑2025
0332ad71 Fixed intermittently failing Report for B2B Buyer using system Data Policy Segments test.29‑May‑2025
494ad752 Fixed issue that was sending messages to VirtualTopic.ep.catalog containing an error message when Catalog Syndication was triggered.28‑May‑2025
41b6acc4 Fixed issue with Extension Point Framework entities missing all non-localized attribute values when a localized attribute contains a non-localized fallback value.28‑May‑2025
7afb6d19 Made ordering of payment method elements consistent in Cortex.26‑May‑2025
d245862f Added optional JUnit 5 support to the platform.21‑May‑2025
8c02052f Multiple conflicting jars: com.github.java-json-tools:json-schema-core:1.2.14, com.github.java-json-tools:json-schema-validator:2.2.1421‑May‑2025
cba3f6d5 Multiple conflicting jars: com.sun.activation:jakarta.activation:1.2.2, com.sun.activation:javax.activation:1.2.0, jakarta.activation:jakarta.activation-api:1.2.2, javax.activation:activation:1.120‑May‑2025
6151a06f Multiple conflicting jars: aopalliance:aopalliance:1.0, org.glassfish.hk2.external:aopalliance-repackaged:3.1.1, org.springframework:spring-aop:5.3.3920‑May‑2025
d724fe04 Multiple conflicting jars: com.antkorwin:xsync:1.3, org.hibernate.validator:hibernate-validator:6.2.0.Final19‑May‑2025
33d0d92f Multiple conflicting jars: javax.el:javax.el-api:3.0.0, org.glassfish:jakarta.el:3.0.418‑May‑2025
9cb7a581 Multiple conflicting jars: io.swagger.core.v3:swagger-annotations-jakarta:2.2.22, io.swagger.core.v3:swagger-annotations:2.1.1317‑May‑2025
71337431 Multiple conflicting jars: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3, javax.xml.bind:jaxb-api:2.3.116‑May‑2025
b2336af0 Fix for banned dependency errors introduced by "Multiple conflicting jars: org.slf4j:jcl-over-slf4j:1.7.32, org.springframework:spring-jcl:5.3.39, commons-logging:commons-logging:1.1.1"15‑May‑2025
f720d127 Multiple conflicting jars: jakarta.validation:jakarta.validation-api:2.0.2, javax.validation:validation-api:2.0.1.Final15‑May‑2025
f15ff744 Added debug logging for SwitchableProxyBinder.15‑May‑2025
41725358 Multiple conflicting jars: org.slf4j:jcl-over-slf4j:1.7.32, org.springframework:spring-jcl:5.3.39, commons-logging:commons-logging:1.1.114‑May‑2025
56648504 Multiple conflicting jars: javax.servlet:javax.servlet-api:3.1.0, org.eclipse.jetty.toolchain:jetty-servlet-api:4.0.613‑May‑2025
05709223 Multiple conflicting jars: com.sun.mail:imap:1.5.6, com.sun.mail:jakarta.mail:1.6.7, com.sun.mail:javax.mail:1.5.613‑May‑2025
41ac4daf Refactored b2b-buyer-functionality.feature to use client.authRegisteredUserByName instead of JWT authentication.12‑May‑2025
42f15d39 Fixed problem with XPFShoppingCartPricing#getTaxes returning the cart total instead of the cart taxes.7‑May‑2025
6a0d7eb5 Upgraded certified MySQL 8.0 Aurora version from 8.0.mysql_aurora.3.04.2 to 8.0.mysql_aurora.3.08.2.Security6‑May‑2025
2572fd09 Upgraded certified Oracle version from 19.0.0.0.ru-2024-01.rur-2024-01.r1 to 19.0.0.0.ru-2025-01.rur-2025-01.r2.Security6‑May‑2025
7a4289d9 Build stability improvements.6‑May‑2025
20424d09 Upgraded certified MySQL RDS version from 8.0.35 to 8.0.41.Security5‑May‑2025
0398ebc8 Fixed vulnerability in DownloadServiceHandler.Security5‑May‑2025
a9b817ce Fixed intermittently failing ExternalPluginTest integration tests.3‑May‑2025
6d501571 Upgraded certified MySQL 5.7 Aurora version from 5.7.mysql_aurora.2.11.4 to 5.7.mysql_aurora.2.12.5.Security2‑May‑2025
99b0fa0e Fixed intermittently failing "Search product for Merchandising Associations can be filtered by brand" Cucumber test.1‑May‑2025
2fb43412 Added new build plugin that detects when multiple JARs provide the same classes, and outputs this as a warning.25‑Apr‑2025
70d9e2dc Fixed issue with CouponUsageDaoImpl#findEligibleUsagesByEmailAddressInStore passing wrong value to the named query when email address is empty.22‑Apr‑2025
c4d5588d Fixed a performance issue in LocalizedAttributeKeyUtils#getLocaleFromLocalizedKeyName.Performance17‑Apr‑2025
cb14bded Fixed issue with structured error messages from some shopping item validators not showing a link to the affected shopping item.15‑Apr‑2025
d0a7a629 Upgraded Tomcat version from 9.0.98 to 9.0.102 to address CVE-2025-24813.Security11‑Apr‑2025
b126d9ce Allow Cucumber tests in coupon-apply-validation.feature to pass in Trusted Header Mode.9‑Apr‑2025
709a31a5 Hardcoded "mobee" and "vestri" values removed from scope autocomplete in Cortex Studio.3‑Apr‑2025
4f6dcd01 Improved "View Disabled Data Policy for Customer" Selenium test to not fail on retry.3‑Apr‑2025
ff6b8b59 Fixed a problem with "All Stores" filter being ignored on the customer search tab.3‑Apr‑2025
31b7017b Fixed a performance issue when adding actions to catalog promotions in Commerce Manager when database contains a large number of price lists.Performance2‑Apr‑2025
a67b40fe Fixed the Operational Insights revenue calculations to exclude failed and cancelled orders.1‑Apr‑2025
d19f4f49 Improved performance in Commerce Manager when removing an attribute from a product type.Performance28‑Mar‑2025
4914e120 Fixed search indexing issue in which delete requests are ignored if there are no corresponding add/update requests.26‑Mar‑2025
797872c3 Fixed race condition in CachingPriceListAssignmentServiceImpl#listByCatalogAndCurrencyCode that can result in a NoSuchElementException when retrieving values from the cache.26‑Mar‑2025
e302176b Fixed issue with structured error messages from some shopping item validators not showing a link to the affected shopping item.20‑Mar‑2025
cef1c4e5 Created filter to ensure that the Cortex OSGi console is only accessible on the port specified by ep.management.port.19‑Mar‑2025
d1a45d16 Initial release of new build tools for configuring a build environment, building and testing the code project, building the set of application container images, and running the application containers locally.Build Tools15‑Mar‑2025
bcd46786 Upgraded netty-handler from 4.1.113.Final to 4.1.118.Final.14‑Mar‑2025
ed4fe9c2 Performance optimization for the Extension Point Framework to avoid classpath scanning when extensions are retrieved from the framework.Performance12‑Mar‑2025
6f4d80e3 Removed jakarta-xmlbind Jackson module introduced by Solr 9.8.0 to avoid Jackson module autodiscovery issues.12‑Mar‑2025
665ce078 Allow Cortex to authenticate with JWT tokens when enableTrustedSubjectHeaderMode is enabled.12‑Mar‑2025
37bb33f8 Fixed potential table scan when retrieving the order list in Commerce Manager.10‑Mar‑2025
3147b226 Fixed intermittently failing Selenium test "Verify price facets are updated when a promotion is changed".6‑Mar‑2025
8a29bb7f Fixed issue where attributes with keys that match the regex for having a language tag are incorrectly treated as localized attributes when passed to Extension Point Framework entities.4‑Mar‑2025
d31540f4 Modified Tax Calculator extension point so that extensions don't need to calculate before tax price for inclusive taxes.4‑Mar‑2025
546cd45f Fixed behaviour of the first time buyer flag if the shopper's first order fails.3‑Mar‑2025
149fde42 Fixed issue with order hold getting stuck in RESOLVE_PENDING if order lock is present.3‑Mar‑2025
e90f618b Fixed issue with Operational Insights interpreting serviceResponseWaitTime in minutes instead of milliseconds.28‑Feb‑2025
887d291a Fixed Tax Calculator extension IndexOutOfBoundsException exception for empty tax records collection.26‑Feb‑2025
32a30ab0 Fixed issue with Core Request Scoped Caching where some database lookups were not being cached.Performance25‑Feb‑2025
fe74de19 Eliminated unnecessary shopper and shopping cart lookups during cart order retrieval.Performance25‑Feb‑2025
47926a78 Removed unitils-core dependency to address CVE-2016-3093.Security24‑Feb‑2025
7595c07e Fixed "bad value for type int" error that appeared in the logs when running Operational Insights with a PostgreSQL database.22‑Feb‑2025
39953ada Ensure that affected products are re-indexed when catalog promotions are added, modified, or become active or inactive to ensure that the indexed price is correct.21‑Feb‑2025
985bb647 Fixed incorrect environment subfolder names in ext-data.19‑Feb‑2025
58e034d1 Removed unnecessary TCUSTOMER index on CREATED_DATE.Data model changes19‑Feb‑2025
fcb6ab09 Added java.base/java.lang.ref add-open JVM parameter to prevent possible failures when Operational Insights evaluates cache sizes.18‑Feb‑2025
d775088a Fixed race condition that can occur when multiple users execute keyword or navigation searches with different sort keys.18‑Feb‑2025
85efbe7d Upgraded xstream from version 1.4.20 to 1.4.21 to address CVE-2024-47072.Security18‑Feb‑2025
77d78cc1 Enabled HTTP/2 for Solr replication.18‑Feb‑2025
9de15a36 Fixed query error that occurs in MySQL when the anonymous customer cleanup job is executed if the customer has wish list items.18‑Feb‑2025
ef3d8d72 Removed unnecessary product/category cleanup after Cucumber tests and fixed issue that allowed bundles to be created in Commerce Manager without a valid sku code.12‑Feb‑2025
662b5b06 Solr upgraded from 9.4.1 to 9.8.0.Security11‑Feb‑2025
4cd2fcad Fixed intermittent Selenium issue related to case-sensitive ErrorDialog class.4‑Feb‑2025
4aa26f78 Fixed an issue that was causing unnecessary TORDER and TORDERAUDIT update queries to be created.31‑Jan‑2025
21c5b286 Build stability improvements.30‑Jan‑2025
5aac593d Upgraded Tomcat version from 9.0.97 to 9.0.98 to address CVE-2024-56337 and CVE-2024-50379.Security27‑Jan‑2025
a0cffd8a Improved performance of Operational Insights revenue query.Performance Data model changes21‑Jan‑2025
85c56489 Updated getDisplayNames method to lazy loaded in all Extension Point Framework entities to address a potential performance issue when stores have a large number of locales enabled.Performance21‑Jan‑2025
80bf17dc Fixed issues with the 2024-12-create-missing-indexes changeset caused by needing to modify this changeset in Self-Managed Commerce 8.4 and earlier.Data model changes21‑Jan‑2025
adfd072e Upgraded Camel from 3.14.10 to 3.21.5 to address CVE-2024-22371.Security16‑Jan‑2025
6b1fdc75 Removed jetty-runner dependency to address CVE-2024-52046.Security15‑Jan‑2025
8babd0b7 Added missing indexes to PostgreSQL and Oracle that were created implicitly in MySQL.Performance Data model changes15‑Jan‑2025
9de1a219 Changed the orders list on the customer record in Commerce Manager to sort by created date instead of order number to avoid alphanumeric sorting issues.15‑Jan‑2025
80109902 Renamed xpfXPFConverterUtil fields to xpfConverterUtil15‑Jan‑2025
1508a309 Updated certified PostgreSQL version from 14.10 to 16.6.Security14‑Jan‑2025
070f28c4 Updated Commerce Manager cookies to always set the HttpOnly flag for improved security.Security8‑Jan‑2025
83df982f Changed coupon validation failure code ERROR_COUPON_USAGE_MISSING to ERROR_EMAIL_NOT_ASSIGNED to improve clarity.7‑Jan‑2025
a6981c08 Enabled state comparison version strategy on order holds to ensure that two users don't resolve the same hold simultaneously.6‑Jan‑2025
974641d3 Upgraded zookeeper from 3.9.2 to 3.9.3 to address CVE-2024-51504 and CVE-2024-47535.Security6‑Jan‑2025
69cbb254 Added system property to ensure that Log4j always uses the BasicContextSelector to avoid OSGi issues in Cortex.20‑Dec‑2024
e6d5d355 Changed featuredoffers link on navigations resource from a conditional to a static link to remove unnecessary product query.17‑Dec‑2024
cedbff4e Added subquery support to JpqlQueryBuilder.13‑Dec‑2024
3b8dbe77 Upgraded Spring from 5.3.34 to 5.3.39.Security13‑Dec‑2024
300db211 Changed the way that SkuOptionValue is associated with ProductSkuOptionValue, using a lazy load approach instead of the Eager Field Post Load Strategy, to prevent possible "context has been closed" exceptions.10‑Dec‑2024
c5904446 Fixed Core Request-Scoped Caching to ensure that retrievals with different load tuners or fetch groups are cached separately.10‑Dec‑2024
9ff3d4f9 Upgraded Tomcat version from 9.0.85 to 9.0.97.Security10‑Dec‑2024
9caf7b31 Added a new getAttributeValueByKey method to all Extension Point Framework entities with attributes for use with non-localized attribute values.9‑Dec‑2024
065d1191 Fixed issue where dependent items could not be removed from dynamic bundles in the shopping cart.6‑Dec‑2024
f37fd1d4 Upgraded esapi from 2.5.3.1 to 2.5.4.0.Security5‑Dec‑2024
dfefb933 Added comments above api-platform.version and ep-xpf-spi.version properties in bill-of-materials/pom.xml to reduce merge conflicts.4‑Dec‑2024
5c76a5be Upgraded Quartz from version 2.3.2 to 2.4.0 to address CVE-2023-39017.Security4‑Dec‑2024
1c96badf Fixed issue with ProductDaoImpl#findUidBySkuCode that can cause OpenJPA to read all product skus from the database in rare circumstances.Performance3‑Dec‑2024
ef167602 Fixed NullPointerException in Cortex when ep.log.level=TRACE is enabled.2‑Dec‑2024
a63c8fb6 Fixed intermittent failure in Selenium tests due to problems verifying that a user interface element contains the expected value.2‑Dec‑2024
fd93f874 Fixed intermittent failure in Selenium tests due to problems obtaining focus on a user interface element.29‑Nov‑2024
843587a3 Upgraded Spring Security from version 5.8.7 to 5.8.14 to address CVE-2024-22257.Security29‑Nov‑2024
ec8fbce3 Upgraded Jetty for Wiremock from version 9.4.53 to 9.4.56 to address CVE-2024-22201.Security28‑Nov‑2024
757a5c5c Upgraded Jetty from version 10.0.20 to 10.0.24 to address CVE-2024-8184.Security28‑Nov‑2024
befc268f Upgraded commons-io from version 2.8.0 to 2.14.0 to address CVE-2024-47554.Security27‑Nov‑2024
0d3c0cb4 Build stability improvements.27‑Nov‑2024
01538b5c Fixed parent references in Commerce Manager modules to improve Maven reactor hygiene.26‑Nov‑2024
42acf609 Fixed intermittent failure in Selenium tests due to problems typing into text boxes.26‑Nov‑2024
9c81d1af Updated Wiremock Jetty dependencies from 9.4.49.v20220914 to 9.4.53.v20231009.Security25‑Nov‑2024
8db642b6 Fixed duplicate dependency definition in the ep-camel-bundle module.24‑Nov‑2024
05368374 Fixed Import/Export to ensure that the necessary product search indexes are rebuilt when base amounts are updated.22‑Nov‑2024
60595bf7 Fixed issue with private use coupons not working after adding new users to an existing promotion.22‑Nov‑2024
c52e6e61 Added jvmRuntimeArguments field to ActiveMQ in ops-spec.json.20‑Nov‑2024
ee36a19b Created ep-camel-bundle bundle so we can avoid embedding Camel dependencies in multiple bundles.19‑Nov‑2024
c14ee017 Improved order hold resolution error handling to ensure that order holds don't get stuck in a pending state.19‑Nov‑2024
d56a7d28 Modified extensions.json requirements so that just the identifier and enabled flag can be specified; all other fields are now optional.14‑Nov‑2024
e82bf84b Refactored ProductAssociationQueryBuilder to use JPQLQueryBuilder and optimized generated query for determining product associations.Performance14‑Nov‑2024
d1b885f4 Changed root link expectations in Cucumber tests to prevent failures if new resources are added.14‑Nov‑2024
9ec5c2ce Added new X-Ep-Follow-Location-Status header to indicate the status of the second resource when followLocation is used.13‑Nov‑2024
37c92d32 Updated product, product sku, and category default cache timeouts from 1 second to 1 hour.Performance13‑Nov‑2024
82d18b18 Renamed notsoldseperately to notsoldseparately in snapitup products.xml.12‑Nov‑2024
543a62f4 Fixed Cortex structured message response when purchase form is submitted with validation errors.12‑Nov‑2024
05454eb5 Fixed query error that occurs in MySQL when the anonymous customer cleanup job is executed.12‑Nov‑2024
ad7e4718 Added additional details to the structured error message response when a coupon is determined to be invalid.8‑Nov‑2024
b3c2dcbc Fixed cart subtotal applied promotions to ensure it only returns the applied 'best of' promotion.8‑Nov‑2024
cb7d0397 Fixed error handling for shipping option determination so that the actual underlying error is reported rather than a NullPointerException.31‑Oct‑2024
c2428b06 Fixed a NullPointerException that can occur when publishing multi-sku products through the Data Sync Webapp.29‑Oct‑2024
7300eeb0 Fixed search index rebuild when a product is added or updated using Import/Export.29‑Oct‑2024
602df67e Upgraded Wiremock from version 2.27.2 to 2.35.1.Security16‑Oct‑2024
eac56d4e Fixed Spring circular dependency that was causing NullPointerExceptions during Integration Server startup.9‑Oct‑2024
86d962c0 Added pagination support for wish list line items in Cortex.Performance9‑Oct‑2024
1afb4fb1 Fixed preconditions in core-changelog-2020-08-cleanup-expired-failed-orders-job.xml to avoid potential upgrade error.Data model changes3‑Oct‑2024
003b1aea Upgraded certified ActiveMQ version from 5.16.7 to 5.18.5.Security26‑Sep‑2024
b216e4ba Added missing Liquibase checksums to changesets that were updated during the Liquibase upgrade.Data model changes26‑Sep‑2024
87045e6d Removed support for user-name and user-company fields in JWT metadata payload, which was leading to unique constraint errors in PunchOut.19‑Sep‑2024
b814a1fa Fixed issue with Data Sync Webapp where changesets containing base amounts were causing multiple product index notifications to be created and were also holding the base amount objects in memory until the service was restarted.19‑Sep‑2024
748183ab Fixed error that can occur when editing boolean attributes in Commerce Manager.16‑Sep‑2024
4c0d79cd Updated jetty from 9.4.44.v20210927 to 9.4.53.v20231009.Security13‑Sep‑2024
7a494aaa Fixed issue with Cortex attempting to write logs to a folder based on the build machine home folder instead of the runtime machine home folder.12‑Sep‑2024
21c1e453 Refactored the Catalog Syndication builders to use AbstractBatchJob instead of Spring Batch, to address lock wait timeout issues during the build process.12‑Sep‑2024
ada9641f Fixed issues with the shopper conditions user interface in Commerce Manager where conditions were sometimes duplicated or could not be removed.11‑Sep‑2024
7f974a19 Added pagination support for shopping cart line items and purchase line items in Cortex.Performance11‑Sep‑2024
18d03b49 Build stability improvements.10‑Sep‑2024
3f24f148 Colored logging now disabled by default, only enabled for local development deployments.2‑Sep‑2024
5ac3b6be Fix for NullPointerException that can occur if looking up a non-existent compound GUID with CategoryLookup#findByCompoundCategoryAndCatalogCodes.29‑Aug‑2024
cc5ee81b Fix for NullPointerException that can occur if RuleService#findByRuleGuid is called with a non-existent guid.28‑Aug‑2024
4955eb05 Fixed Commerce Manager error that occurs when searching for products using Advanced Search Query Builder.27‑Aug‑2024
5c3cea32 Fixed Cortex keyword search functionality so it correctly reads the COMMERCE/SEARCH/* system configuration settings.27‑Aug‑2024
ca191317 Removed unused setting definitions: COMMERCE/SEARCH/minimumResultsThreshold, COMMERCE/SEARCH/maximumResultsThreshold, COMMERCE/SEARCH/maximumSuggestionsPerWord, and COMMERCE/SEARCH/accuracy.Data model changes27‑Aug‑2024
3f405497 Consolidated all Awaitility dependencies from version 2.0.0 to 3.1.6.Security27‑Aug‑2024
ce53022a Updated the Log4j configuration for all services to ensure that log file sizes are limited by using a fixed window rolling policy.26‑Aug‑2024
c1043f18 Fixed sorting for "Enabled" and "Expiration Date" columns on cart and catalog promotion search results in Commerce Manager.26‑Aug‑2024
bcf14043 Fixed issue where the parentCategoryCodes field is not populated in the SOLR index for linked categories.26‑Aug‑2024
1394cc7e Fixed a race condition in service health checks that could report false health check failures if multiple requests are submitted concurrently.15‑Aug‑2024
879272de Fixed Catalog Syndication cucumber test stability issue.15‑Aug‑2024
6aaa70d5 Upgraded Tomcat version from 9.0.85 to 9.0.90.Security14‑Aug‑2024
ea5cd5de Fixed issue with logging of some Catalog Syndication failures.6‑Aug‑2024
89dbd593 Fixed LibJarUtil parser to properly exclude #runtime refs when scanning the payment plugin classpath.2‑Aug‑2024
1bdfe271 Removed checksum validation from core-changelog-2024-07-expired-data-point-values-job changeset due to required changes in earlier versions.Data model changes2‑Aug‑2024
b363dca8 Fixed SolrFacetAdapter to consistently expect searchCriteria.getSearchHint("priceSourceIds") to contain a list of strings.31‑Jul‑2024
b44a8cca Fixed issue where parent-widget-id and widget-type attributes on a table row were not properly set after a table is updated. This could lead to Selenium test issues.31‑Jul‑2024
ed76e2ee Improved warning Setting retrieval strategy {} threw an exception to ensure that full stack trace is logged.30‑Jul‑2024
1934e637 Fixed all query strings defined on beans for Catalog Syndication JpaPagingItemReader instances to ensure they have an ORDER BY clause.24‑Jul‑2024
998f6599 Fixed issue where importing entities doesn't properly invalidate the application cache in some circumstances.24‑Jul‑2024
dfb28304 Fixed out of memory error that can occur on the Batch Server if database contains a large number of TCUSTOMERCONSENT records.23‑Jul‑2024
27ea19c0 Improved Oracle reset-db script to ensure that the tablespace is created automatically.19‑Jul‑2024
7e78c739 Fixed the Commerce Manager status plugin to allow mvn test to work.19‑Jul‑2024
a36ed795 Enhanced Operational Insights to ensure that Integration Server waits for all service reports to be received before the report is generated.19‑Jul‑2024
af6fe01e Upgraded Apache bval from version 0.4 to 2.0.6.Security17‑Jul‑2024
822cbcd5 Fixed potential NullPointerException that can occur if opening an address with a null subCountry in Commerce Manager.5‑Jul‑2024
82183ca4 Removed line from com.elasticpath.cmclient.core/plugin.xml that caused the XML to be invalid.20‑Jun‑2024
76987540 Updated all Camel routes to extend CRSCEnabledRouteBuilder so they properly evict the Core Request-Scoped Cache and avoid dirty reads.20‑Jun‑2024
a3e14bbf Added exclusion on Spring Framework dependencies within ext-commerce-engine-wrapper to ensure that Spring dependencies aren't accidentally embedded in the bundle.17‑Jun‑2024
62106cf4 Fixed issue with Commerce Manager initialization that can occur if several initial requests are received concurrently.14‑Jun‑2024
eef47c59 Added database index on name and state_code fields of the TCHANGESET table to address performance issue in the Automated Imports Accelerator.Performance12‑Jun‑2024
118a5741 Fixed issue where CouponUsageLimitValidator doesn't properly handle some coupon-related issues.12‑Jun‑2024
247b1c25 Fix for potential race condition around CategoryLookup and CategoryService load tuners which can cause errors about unloaded fields.10‑Jun‑2024
a84e91e0 Added specific patch versions for each database in ops-spec.json to ensure that the deployed database matches the certified database version.7‑Jun‑2024
6554fa5b Fix to avoid retrying the post capture checkout steps if there is an exception thrown.7‑Jun‑2024
bff43744 Fixed issue for scenario when multiple customer records have the same username for different stores, the wrong customer record could be selected during authentication.6‑Jun‑2024
95712ba0 Fixed issue where the Cortex health checks may read the internal health check URL using the wrong Tomcat connector, which can cause the health checks to show Cortex as healthy before startup completes.5‑Jun‑2024
398c1392 Upgraded Spring from 5.3.33 to 5.3.34 to address CVE-2024-22262.Security4‑Jun‑2024
b5b22816 Fix for intermittent Selenium test failure "Error forwarding the new session Empty pool of VM for setup".4‑Jun‑2024
e1464912 Fixed intermittent Selenium test failures related to long generated catalog entity names.2‑Jun‑2024
4d4ae8b4 Fixed intermittent Selenium test failures related to the "Promotion Search With Quotes" test.31‑May‑2024
cb33c1ce Build stability improvements.31‑May‑2024
d0700626 Removed the logic that allowed cached tax calculation for a shopping cart to be reused when checking out, which was unnecessarily complex and was causing a possible issue where tax calculation failures could occur.30‑May‑2024
54078aaa Added additional add-opens JVM parameters to prevent possible failures when Operational Insights evaluates cache sizes.27‑May‑2024
6979501c Fixed issue where an untracked file (ruleUpdate.properties) was left in the Git source folder after running a build with tests enabled.27‑May‑2024
1884860f Improved H2DataSourceInitializerImpl to prevent H2 database snapshots from being corrupted when multiple tests are run concurrently.27‑May‑2024
844c2030 Changed "Less shipment discount" on Commerce Manager shipment summary to always appear as black.23‑May‑2024
bead30b0 Liquibase fix for "Improved performance of case-insensitive queries involving store code" to convert TSHOPPER.STORECODE to upper case and add foreign key constraint.Performance Data model changes22‑May‑2024
a03d40ab Updated logic to prevent customer store code from changing when they log into a linked store.17‑May‑2024
fad05b55 Fixed anonymous customer cleanup job failure that occurs if customer has wish list items.17‑May‑2024
1e909d19 Build stability improvements.14‑May‑2024
c4581da5 Updated activemq-kahadb-store from version 5.14.3 to 5.17.6.Security14‑May‑2024
51b0372f Separated product and product type caching to reduce product cache memory use by 30-60%.14‑May‑2024
7de0165f Removed duplicate localization property key in email.properties that was causing confusion.14‑May‑2024
4c1bc4f1 Added a check at Search Server startup to delete compiled Drools records if they are invalid due to being compiled with an older version of Drools.7‑May‑2024
0e39c4a4 Fixed NullPointerException that can occur if attempting to save a sku option value using SkuOptionService#add(SkuOptionValue).6‑May‑2024
b869d6eb Upgraded Jetty from 10.0.17 to 10.0.20 to address CVE-2024-22201.Security2‑May‑2024
d2bec25e Updated PostgreSQL reset-db behaviour to avoid dropping the user and all related objects, and allow multiple schemas to be created on the same database.2‑May‑2024
b55e0f77 Changed ep-test-application dependencies to test scope to ensure that test artifacts don't end up in the compiled WAR files.26‑Apr‑2024
6ff7ed34 Added java.base/java.lang.invoke to add-opens to resolve potential Helix Validator plugin failure.25‑Apr‑2024
ae4446cf Fixed issue with reset-db operation on PostgreSQL if epdb.schemaname is set to a value with uppercase characters.22‑Apr‑2024
73d67400 Fix to ensure that services connect to the correct PostgreSQL schema when a non-public schema is used.22‑Apr‑2024
77bbc504 Refactored core-changelog-2021-01-data-fields-as-json-clob.xml to make it run 20-30X faster on PostgreSQL databases.Performance Data model changes18‑Apr‑2024
f9102740 Migrated fusesource mqtt-client 1.3 to activemq-mqtt 5.17.6 to address CVE-2019-0222.Security17‑Apr‑2024
c7e9ae4f Upgraded zookeeper from 3.9.1 to 3.9.2 to address CVE-2024-23944.Security17‑Apr‑2024
49273382 Upgraded spring from 5.3.31 to 5.3.33 to address CVE-2024-2225 and CVE-2024-22243.Security17‑Apr‑2024
6d99e48b Upgraded hibernate-validator from 6.0.20.Final to 6.2.0.Final to address CVE-2023-1932.Security16‑Apr‑2024
e0488447 Upgraded spring from 5.3.26 to 5.3.31 to address CVE-2023-20863.Security16‑Apr‑2024
11197fd1 Fixed issue with promotion rules never executing in Cortex if the compiled rules don't exist in the database on the first attempt to load them.15‑Apr‑2024
cc53a90c Fixed exception handling around attribute value types.15‑Apr‑2024
f9b9f359 Build stability improvements.11‑Apr‑2024
57db8205 Fixed more issues with Helix exception handling where the stack trace can be lost.10‑Apr‑2024
73cfd32b Fixed OSGi split package issue for org.apache.commons.fileupload packages.9‑Apr‑2024
ef46e7c0 Fixed fuzzy search functionality in Cortex item and offer keyword search.9‑Apr‑2024
95dd48ee Fixed Commerce Manager build failure that appears as bundle org.eclipse.equinox.p2.repository is not started error.9‑Apr‑2024
df69d64e Build stability improvements.8‑Apr‑2024
948bb807 Improved exception handing around customer creation logic to ensure that root cause is properly logged.5‑Apr‑2024
ac4662b4 Build stability improvements.5‑Apr‑2024
d552d5e7 Fixed Commerce Manager issue where scroll bar doesn't appear as expected after adding new promotion conditions or actions.5‑Apr‑2024
4b0ec0a7 Excluded htrace-core4 from transient dependencies which contains vulnerable shaded copy of jackson-databind 2.4.0.Security3‑Apr‑2024
ff2a9190 Upgraded solr from 9.4.0 to 9.4.1 to address CVE-2023-50386.Security29‑Mar‑2024
0fc5d4bc Fixed issue with the ActiveMQ console showing an error when accessed on a local developer machine.27‑Mar‑2024
f172c5c2 Removed duplicate declarations of org.kie dependencies in bill-of-materials pom.xml.27‑Mar‑2024
9cabca27 Fixed potential race condition that can cause payment provider configuration property values to be returned as empty.21‑Mar‑2024
9a5ad163 Upgraded esapi from 2.5.2.0 to 2.5.3.1 to address WS-2023-0429.Security20‑Mar‑2024
196e665c Fix to allow orders in the CREATED state to be cancelled.20‑Mar‑2024
b587e3e8 Additional performance improvement to avoid creating unnecessary shopper records when the x-ep-account-shared-id header is set in Cortex.Performance18‑Mar‑2024
b6c7dfe8 Modified PostgreSQL functionality to use epdb.schemaname parameter for schema name instead of using the default public schema name.18‑Mar‑2024
b5bca44b Upgraded Tomcat version from 9.0.50 to 9.0.85 to address multiple vulnerabilities.Security18‑Mar‑2024
45bd58d4 Removed Search Index check from Integration Server healthchecks.18‑Mar‑2024
e0507929 Upgraded javax.el from 3.0.0 to 3.0.4 to address CVE-2021-28170.Security14‑Mar‑2024
dc6d67a7 Fixed issue where a selling context condition that uses "not matching" or "not containing" incorrectly evaluated to false if the key was not present in the tagset.13‑Mar‑2024
df64ea70 Modified webapp-smoketests to validate services using liveness healthcheck instead of readiness healthcheck, and removed unnecessary dependency on htmlunit.13‑Mar‑2024
44790049 If order hold resolution fails due to a locked order, process will now retry automatically.13‑Mar‑2024
dd8ba09d Upgraded postgresql from 42.4.3 to 42.4.4 to address CVE-2024-1597.Security12‑Mar‑2024
5ea23034 Migrated jstl 1.1.2 and 1.2 to taglibs-standard-impl 1.2.3 to address CVE-2015-0254.Security7‑Mar‑2024
f8b51b3c Fixed issue with the ext-cm-libs bundle being unable to access ep-settings classes.6‑Mar‑2024
c2e7e2c5 Fix to prevent inventory lookup for all skus in a multi-sku product when checking inventory for a single sku.Performance6‑Mar‑2024
6307003c Refactored InventoryFlowServiceImpl so that product skus are passed as parameters and unnecessary database lookups can be avoided.Performance5‑Mar‑2024
9bd7129e Disabled JMX for Cortex and Integration Server in Cucumber tests to avoid port conflicts.29‑Feb‑2024
7788b829 Fixed intermittent failure in the AccessTokenDtoTransformerTest.testTransformToOAuth2AccessToken unit test.29‑Feb‑2024
168cd251 Added a 60-second cache around inventory lookups done by Cortex during add-to-cart operations and availability requests. The final inventory lookup at checkout is not cached.Performance27‑Feb‑2024
e4e6133c Performance improvement to avoid creating unnecessary shopper and shopping cart records when the x-ep-account-shared-id header is set in Cortex.Performance27‑Feb‑2024
a14f4c44 Upgraded Apache Shiro from 1.12.0 to 1.13.0 to address CVE-2023-46749.Security27‑Feb‑2024
01251cd7 Upgrade Drools from 7.6 to 7.74.1 to address CVE-2022-1415.Security26‑Feb‑2024
da544bc3 Upgraded spring-security from 5.8.5 to 5.8.7 to address CVE-2023-34042.Security26‑Feb‑2024
9d662089 Upgraded json-path from 2.6.0 to 2.9.0 to address CVE-2023-51074.Security22‑Feb‑2024
230c2704 Upgraded poi from 4.0.1 to 4.1.1 to address CVE-2019-12415.Security22‑Feb‑2024
fd4ef7e5 Upgraded antisamy from 1.7.4 to 1.7.5 to address CVE-2024-23635.Security21‑Feb‑2024
1ae632a4 Upgrade htmlunit from 3.0.0 to 3.9.0 to address CVE-2023-49093.Security15‑Feb‑2024
d5ba218b Updated failsafe plugin to use alphabetical ordering instead of default filesystem ordering.13‑Feb‑2024
ba81fbc1 Upgraded missed version of junit from 4.12 to 4.13.1.Security13‑Feb‑2024
4431f5f1 Upgraded jsoup from 1.14.2 to 1.15.3 to address CVE-2022-36033.Security13‑Feb‑2024
96f85dbc Upgraded h2 from 2.1.214 to 2.2.224 to address CVE-2022-45868.Security12‑Feb‑2024
5747835e Upgraded logback from version 1.2.10 to 1.2.13 to address vulnerability CVE-2023-6481.Security12‑Feb‑2024
94e39f17 Upgraded ant from 1.7.1 to 1.10.14 to address CVE-2020-11979.Security12‑Feb‑2024
b04572c2 Upgraded htmlunit from 2.70.0 to 3.0.0 to address CVE-2023-26119.Security12‑Feb‑2024
ef651e20 Upgraded postgresql from 42.4.1 to 42.4.3 to address CVE-2022-41946.Security9‑Feb‑2024
092f3670 Upgraded postgresql from 42.3.3 to 42.4.1 to address CVE-2022-31197.Security9‑Feb‑2024
e74d88aa Upgraded junit from 4.12 to 4.13.1 to address CVE-2020-15250.Security9‑Feb‑2024
edd39de4 Improved JMS-related test reliability.9‑Feb‑2024
3927888e Removed nekohtml dependency to address CVE-2022-29546, CVE-2022-28366, and CVE-2022-24839.Security8‑Feb‑2024
cf3476ef Fix for race condition that can occur if a user posts multiple requests to the registration form concurrently. This change ensures that only a single authentication record is created in this circumstance.8‑Feb‑2024
7861cc8c Upgraded jsoup from 1.8.3 to 1.14.2 to address CVE-2021-37714.Security8‑Feb‑2024
4ecd215b Upgraded xerces from 2.12.0 to 2.12.2 to address CVE-2022-23437.Security7‑Feb‑2024
dcffdf29 Added Oracle configuration to ops-spec.json.7‑Feb‑2024
8cbbb67d Upgraded protobuf-java from 3.11.0 to 3.16.3 to address CVE-2022-3509 and CVE-2022-3171.Security7‑Feb‑2024
b44d15eb Fixed typo in name of ep-order-accepted-message-consumer and ep-order-hold-resolution-message-consumer modules.7‑Feb‑2024
6c1d9c64 Fix to avoid JMX "port in use" conflicts in cargo with multi-threaded builds.5‑Feb‑2024
fffc871d Modified quoted search behaviour to match on the complete phrase when searching for products and skus in Commerce Manager.29‑Jan‑2024
ee774ef5 Fixed issue with currency codes being duplicated in the currency drop-down on shopping cart promotions.29‑Jan‑2024
48a0e707 Upgraded antisamy from 1.6.7 to 1.7.4 to address CVE-2023-43643.Security26‑Jan‑2024
65d5c973 Upgraded jackson-databind from 2.13.4 to 2.16.1 to address CVE-2022-42003.Security26‑Jan‑2024
4e232064 Updated boolean options in Commerce Manager to use true/false terminology consistently within the UI.25‑Jan‑2024
754b961b Fixed search error that can occur if a Commerce Manager search term is OR or AND.25‑Jan‑2024
41c683ae Upgraded zookeeper from 3.6.2 to 3.9.1 to address CVE-2023-44981.Security24‑Jan‑2024
10bd39ec Updated "awsDbEngine" from "postgres" to "postgresql" in ops-spec.json.24‑Jan‑2024
dd7c7e10 Upgraded mysql-connector-java from 8.0.30 to 8.2.0 to address vulnerability CVE-2023-22102.Security23‑Jan‑2024
a0f70e91 Remove dependency on ext-commerce-engine-wrapper bundle from ep-jms bundle to prevent possible bidirectional dependency.16‑Jan‑2024
911c1a03 Optimization to eliminate unnecessary TSHOPPINGITEMRECURRINGPRICE queries when a shopping cart is retrieved.PerformanceData model changes Requires downtime15‑Jan‑2024
eb07274c Replaces the hsqldb driver with the h2 driver for all test modules.Security11‑Jan‑2024
2c61b137 Optimization to eliminate unnecessary queries to update cart item last modified date when a shopping cart is persisted.11‑Jan‑2024
b36ca944 Removed problematic and unnecessary ep-core-cucumber-itests module.10‑Jan‑2024
b0bb1046 Removed named queries that lookup coupons and coupon usage by coupon code.10‑Jan‑2024
d2617000 Fixed issue with ESAPI bundle startup after upgrading ESAPI from 2.4.0.0 to 2.5.2.0.9‑Jan‑2024
bdab0f29 Upgraded solr from 8.11.1 to 9.4.0 to address 17 CVE vulnerabilities.Security19‑Dec‑2023
7c8b86db Excluded transitive Log4j dependencies from SOLR.19‑Dec‑2023
ac1b8b9d Changed sortattributes link to static instead of conditional to remove unnecessary extra product search when using the offersearch resource.12‑Dec‑2023
31dda0af Added null check in SolrQueryFactory to avoid NullPointerException if an expected attribute key does not exist.11‑Dec‑2023
97da8f61 Fixed Cucumber tests that fail if test run order is changed.11‑Dec‑2023
77cb1938 Updated individual-settings.xml to use secure Nexus URLs.11‑Dec‑2023
f3b2ad9d Removed unnecessary recursive definition of java.locale.providers property.7‑Dec‑2023
10c05e64 Upgraded camel from 3.14.6 to 3.14.10 to upgrade ActiveMQ dependency.Security7‑Dec‑2023
7cf03aab Upgraded ESAPI from 2.4.0.0 to 2.5.2.0 to address WS-2023-0388.Security6‑Dec‑2023
301c9b7a Re-enabled api-platform integration tests that were being skipped.4‑Dec‑2023
f18070ce Upgraded shiro-core from 1.9.1 to 1.12.0 to address CVE-2023-34478.Security1‑Dec‑2023
0ba6f22a Fixed product lookup cache population bug that can lead to unnecessary database queries.Performance29‑Nov‑2023
eea765b4 Fixed Cortex permission error that can occur if x-ep-account-shared-id header is set when reading accounts associated to the current user.27‑Nov‑2023
a27b8f5c Fixed issues with Helix exception handling where the stack trace can be lost and the reference number shown to the user doesn't match the logged reference number.23‑Nov‑2023
7342bb7c Upgraded ESAPI from 2.3.0.0 to 2.4.0.0 to address CVE-2022-28366 and CVE-2022-29546.Security23‑Nov‑2023
c99bac01 Fix for NullPointerException that can occur if looking up a non-existent category GUID with CategoryLookup#findByGuid.22‑Nov‑2023
4c85b701 Upgraded Guava from 31.1-jre to 32.0.1-jre to address CVE-2023-2976.Security21‑Nov‑2023
d4ac6be5 Fix for intermittent failure in "Payment Configuration" tests.21‑Nov‑2023
2c690053 Upgraded Jersey version from 2.27 to 2.40 in api-platform to match ep-commerce version.Security21‑Nov‑2023
1291019b Added non-null constraint on customer authentication username field.20‑Nov‑2023
35867a6e Fixed Cortex server error that occurs when reading applied promotions on a shopping cart where one or more line items has no price.20‑Nov‑2023
6032a9c1 Fix for intermittent NullPointerException in Commerce Manager when retrieving a date from the time service.20‑Nov‑2023
1cc1fd21 Performance improvement to eliminate duplicate shopper and customer queries when zooming into wishlistmembership link.Performance17‑Nov‑2023
80f07569 Upgraded pf4j from 3.6.0 to 3.10.0 to address CVE-2023-40828.Security15‑Nov‑2023
98512e1e Fix for error that can appear when doing search operations in Commerce Manager if the COMMERCE/SEARCH/boosts system configuration setting is specified.10‑Nov‑2023
738b54bb Upgraded ActiveMQ from version 5.17.5 to 5.17.6 to address CVE-2023-46604.Security8‑Nov‑2023
2113a63d Updated catalog syndication projection rebuild process to better utilize Spring Batch and avoid long database record locks.8‑Nov‑2023
5ac3ac24 Replaced legacy SOLR LRUCache with CaffeineCache.Performance8‑Nov‑2023
75a89682 Upgraded json from 20220924 to 20231013 to address CVE-2023-5072.Security7‑Nov‑2023
87f1f360 Modified the handling of email localized property values so that properties that are explicitly set to empty string result in an empty string being used as the value.6‑Nov‑2023
d01f2fdc Fixed a failure in the wishlistmembership resource if a wish list contains the same product sku more than once.6‑Nov‑2023
b5ec97c7 Modified the behaviour of data cleanup jobs to process at most X records per scheduled execution. The value of X is defined by the associated COMMERCE/SYSTEM/{batch job name}/batchsize system configuration setting.6‑Nov‑2023
8d0893ac Fixed "cannot access ConsumerType" build error that can appear in IntelliJ.26‑Oct‑2023
16f073c3 Fix for "Authorization failed" message in Cortex logs when accessing the dependentoptions resource.26‑Oct‑2023
87cda9dc Fixed java path parameter in ops-spec.json.17‑Oct‑2023
326a6e31 Fixed issue with PostgreSQL initialization scripts to ensure that they don't attempt to drop and recreate high-privilege user.Security17‑Oct‑2023
ee8db390 Fixed PostgreSQL initialization scripts so that they work properly when a low-privilege database user is specified in the data.population.username data population parameter.Security17‑Oct‑2023
7439b3e1 Fixed java.locale.providers JVM parameter in ops-spec.json.16‑Oct‑2023
719ccc51 Removed Commerce Manager reactors from mvnmin.xml, unneeded since Tycho 4 upgrade.11‑Oct‑2023
d557b37f Fixed issue with Extension Point Framework not setting parent value correctly when calling validator extensions during cart update operation.9‑Oct‑2023
51be893d Fixed issue with selected disabled radio buttons and checkboxes being invisible on the shopping cart promotion wizard.6‑Oct‑2023
71b7ada3 Fixed issue where buyer admins can see customers from other stores when associating buyers to an account.5‑Oct‑2023
344de628 Added an expiry to all messages sent to ActiveMQ to ensure that the message broker file system is not filled up with unconsumed messages.2‑Oct‑2023
26ee0d2a Fixed issue with fields not properly being disabled on the coupon assignment page of the shopping cart promotion wizard.28‑Sep‑2023
771ede69 Improved the error message that appears when a bundle constituent has an invalid quantity.28‑Sep‑2023
37241d81 Fixed issue with customer CSV imports still treating shared ID as case-sensitive.28‑Sep‑2023
6d1a139b Fix for localization issue on gift certificate emails.27‑Sep‑2023
7e31ab33 Fixed issue with the "Assign All Stores" option being disabled in some cases when copying a shopping cart promotion.27‑Sep‑2023
fdcbc88d Fixed issue with data sync notification emails not being delivered.26‑Sep‑2023
545c6dcc Added ability to use quotes to request an exact match on each individual word when searching for products and skus in Commerce Manager.18‑Sep‑2023
c0024df9 Added missing validCheckSum node to the 2022-03-set-correct-data-type changeset to avoid a Liquibase checksum error.Data model changes18‑Sep‑2023
b7ea51d6 Added Vary header to Cortex response to prevent browser cache issues.18‑Sep‑2023
ab062552 Updated the 2022-10-cascade-customer-authentication changeset to ensure that invalid AUTHENTICATION_UID references in TCUSTOMER are cleaned up before applying the foreign key constraint between TCUSTOMER and TCUSTOMERAUTHENTICATION.Data model changes15‑Sep‑2023
63019b82 Added additional validation to Import/Export for orders to ensure that records aren't accidentally transferred from one order to another.15‑Sep‑2023
ce9dbb1d Fixed issue where price list drop-down in Commerce Manager product editor was empty unless user had access to all catalogs.13‑Sep‑2023
747390aa Fixed issue where physical product inventory was not properly released if an order failed.11‑Sep‑2023
dcf5a52f Fixed issue with offer price range not including bundle price adjustments.11‑Sep‑2023
f10f1762 Fix for "Parent cannot be changed on an existing customer record" error when importing customers.11‑Sep‑2023
8310e553 Fixed Commerce Manager issue with sorting accounts by business number where duplicate records were appearing.7‑Sep‑2023
0ff314cb Improved Liquibase changeset 2023-06-build-status-unique-index to ensure that duplicate records are cleaned up before adding the unique constraint.Data model changes7‑Sep‑2023
3417aa0a Fixed Cortex memory leak that can occur if a resource repeatedly throws exceptions.7‑Sep‑2023

Badge legend​

  • Security: Indicates that the patch includes security fixes.
  • Performance: Indicates that the patch improves system performance.
  • Data model changes: Indicates that the patch includes Liquibase scripts that make changes to the data model.
  • Requires downtime: Indicates that the Self-Managed Commerce services should be shut down while the Data Population Tool is executed.
  • Build Tools: Indicates that the patch includes changes to Build Tools.

Changelog Announcements​

Added build-time checks for multiple JARs providing the same classes​

When a Java runtime classpath contains multiple JARs that provide the same fully qualified class name, the classloader will randomly choose one of the class implementations. This can lead to confusing intermittent issues such as MethodNotFound at runtime.

To prevent this, we have added a new plugin to the build process called duplicate-finder-maven-plugin, which detects this situation and logs a warning at build time if it finds multiple JARs providing the same class.

Along with this change, several conflicting dependencies have been resolved:

  • Multiple conflicting jars: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3, javax.xml.bind:jaxb-api:2.3.1
    • javax.xml.bind:jaxb-api was removed.
    • jakarta.xml.bind:jakarta.xml.bind-api is now the primary JAR providing JAXB functionality.
  • Multiple conflicting jars: javax.servlet:javax.servlet-api:3.1.0, org.eclipse.jetty.toolchain:jetty-servlet-api:4.0.6
    • org.eclipse.jetty.toolchain:jetty-servlet-api was removed.
    • javax.servlet:javax.servlet-api is now the primary JAR providing servlet functionality.
  • Multiple conflicting jars: org.slf4j:jcl-over-slf4j:1.7.32, org.springframework:spring-jcl:5.3.39, commons-logging:commons-logging:1.1.1
    • commons-logging:commons-logging was removed and banned.
    • org.slf4j:jcl-over-slf4j is now the primary JAR providing commons logging functionality.
  • Multiple conflicting jars: aopalliance:aopalliance:1.0, org.glassfish.hk2.external:aopalliance-repackaged:3.1.1, org.springframework:spring-aop:5.3.39
    • aopalliance:aopalliance was removed and banned.
    • org.glassfish.hk2.external:aopalliance-repackaged is now the primary JAR providing AOP functionality.
  • Multiple conflicting jars: jakarta.validation:jakarta.validation-api:2.0.2, javax.validation:validation-api:2.0.1.Final
    • Core is only using javax.validation:validation-api (jakarta.validation-api was removed).
    • Search Server is using both:
      • jakarta.validation-api version 3.0.2 which provides the jakarta.validation packages for SOLR.
      • javax.validation-api version 2.0.1 which provides the javax.validation packages.
  • Multiple conflicting jars: javax.el:javax.el-api:3.0.0, org.glassfish:jakarta.el:3.0.4
    • jakarta.el:jakarta.el-api and javax.el:javax.el-api were removed and banned.
    • org.glassfish:jakarta.el is now the only JAR providing expression language functionality.
  • Multiple conflicting jars: io.swagger.core.v3:swagger-annotations-jakarta:2.2.22, io.swagger.core.v3:swagger-annotations:2.1.13
    • io.swagger.core.v3:swagger-annotations was removed and banned.
    • io.swagger.core.v3:swagger-annotations-jakarta is now the only JAR providing Swagger annotations functionality.
  • Multiple conflicting jars: com.sun.mail:imap:1.5.6, com.sun.mail:jakarta.mail:1.6.7, com.sun.mail:javax.mail:1.5.6
    • com.sun.mail:javax.mail, com.sun.mail:imap, javax.mail:mailapi, and javax.mail:mail and were removed and banned.
    • com.sun.mail:jakarta.mail is now the only JAR providing mail functionality.
  • Multiple conflicting jars: com.sun.activation:jakarta.activation:1.2.2, com.sun.activation:javax.activation:1.2.0, jakarta.activation:jakarta.activation-api:1.2.2, javax.activation:activation:1.1
    • com.sun.activation:javax.activation, javax.activation:activation, javax.activation:javax.activation-api, and jakarta.activation:jakarta.activation-api were removed and banned.
    • com.sun.activation:jakarta.activation is now the only JAR providing activation functionality.

If you encounter a banned dependency error after consuming these patches, follow these steps to address the error:

  1. In your terminal, navigate to the module where the banned dependency was found. (i.e. cd extensions/integration/ext-integration-webapp)
  2. Run mvn dependency:tree to view the dependency tree and determine where the banned dependency is coming from.
  3. If the banned dependency is a direct dependency, you should remove it from the POM file.
  4. If the banned dependency is a transitive dependency, add an exclusion to the dependency that is including the banned dependency.
  5. Run mvn dependency:tree again to verify that the banned dependency is no longer in the dependency tree.

Solr upgraded from 9.4.1 to 9.8.0​

This upgrade resolves several CVEs:

  • CVE-2024-45216 (CVSS3 score 9.8) raised on 2024-10-16.
  • CVE-2024-45217 (CVSS3 score 5.3) raised on 2024-10-16.
  • CVE-2025-24814 (CVSS3 score 9.1) raised on 2025-01-27.
  • CVE-2024-52012 (CVSS3 score 7.6) raised on 2025-01-27.

However, this upgrade also causes Solr to use HTTP/2 by default for index replication between the leader (primary) and replica (follower) nodes. As a result, Solr replication will fail unless at least one of the following actions is taken:

  • Enable HTTP/2 support in the Tomcat server used by the Solr leader. Upgrading to Elastic Path Docker version 4.5.6, 4.4.7, or 4.3.7 will do this automatically.
  • Set the following JVM parameter on the Solr follower Tomcat instance: -Dsolr.http1=true.

8.5.0​

Released: September 2023

Release highlights​

Support for Java 17​

Self-Managed Commerce now requires a Java 17 JDK for builds and a Java 17 JRE at runtime. Java 17 is the latest long-term support Java release.

Supporting Java 17 provides several benefits:

Additionally, the Java 17 upgrade required us to update many library dependencies to newer versions that provide Java 17 support. These upgrades further improve security and performance of the application.

note

The next CloudOps for Kubernetes release will support build pipelines on Java 17 as well as service images containing the Java 17 JRE.

For more information about upgraded dependencies, see Dependency Changes.

For more information about the impact of the Java 17 upgrade, see Java upgraded from version 8 to 17.

OpenID Connect integration for shoppers​

Cortex now has the ability to authenticate shoppers using a third-party Identity Provider. This can optionally replace the OAuth2 client credentials authentication that accepted the user's password directly in the API. Use of a third-party Identity Provider can improve security and allow single-sign-on across multiple web applications.

For more information, see OpenID Connect Authentication.

Support for Dynamic Bundles in Cortex​

A Dynamic Bundle is a product bundle that has the bundle constituent selection rule set to "Select 1" or "Select n". This means that the shopper is allowed to select from a subset of the available bundle constituents when adding the bundle to the cart. This contrasts with a Fixed Bundle, which has the "Select All" bundle constituent selection rule set.

If a shopper adds a Dynamic Bundle to their cart, they will be blocked from checking out until the constituent selections are made. However, the ability to add constituents was only supported in Cortex through the use of the Dynamic Bundles Accelerator. Now, this functionality is built into Self-Managed Commerce by default.

The shopping cart line item resource for the Dynamic Bundle will now have a dependentoptions link, which contains element links to each of the supported bundle constituent items. Those items now have a addtobundleitemform link, which allows the shopper to add the constituent to the bundle in the shopping cart.

note

For project teams that have used the Dynamic Bundles accelerator in past versions of Self-Managed Commerce, the Cortex API in Self-Managed Commerce 8.5 is fully compatible, so no changes should be required to your front-end clients.

For more information, see Dynamic Bundles.

Support for liveness and readiness health checks​

The health check functionality has been improved to support the Kubernetes concepts of liveness vs readiness:

  • Liveness probe serves as a diagnostic check to confirm if the container is alive.
  • Readiness probe ensures that the container is healthy to serve incoming traffic.

Specifically, the /healthcheck, /status, and /status/lb endpoints have been deprecated and replaced with /healthcheck/liveness and /healthcheck/readiness endpoints on all EPC services.

For more information, see Health Monitoring Usage.

Orders data cleanup job​

A cleanup job has been added to delete old completed orders (TORDER table).

expiredCompletedOrdersCleanupJob deletes completed orders with a last modified date that is more than a configured number of days old. This job runs hourly at 30 minutes past the hour, if enabled. This job is configured by the following system configuration settings:

  • COMMERCE/SYSTEM/ORDERCLEANUP/enable controls whether this job is enabled. Defaults to false.
  • COMMERCE/SYSTEM/ORDERCLEANUP/maxHistory controls the minimum number of days to consider an order since it last updated. Defaults to 730 days (2 years).
  • COMMERCE/SYSTEM/ORDERCLEANUP/batchSize controls the maximum number of records that should be processed in each job execution.

Catalog syndication history data cleanup job​

A cleanup job has been added to delete old catalog syndication history records (TCATALOGHISTORY table).

cleanupCatalogSyndicationHistoryJob deletes catalog syndication history records with a projection date more than a configured number of days old. This job runs hourly at 15 minutes past the hour. This job is configured by the following system configuration settings:

  • COMMERCE/SYSTEM/CATALOGSYNDICATIONHISTORYCLEANUP/maxHistory controls the minimum number of days to consider a catalog syndication history record since the projection was created. Defaults to 365 days (1 year).
  • COMMERCE/SYSTEM/CATALOGSYNDICATIONHISTORYCLEANUP/batchSize controls the maximum number of records that should be processed in each job execution.

Same coupon code can be applied to multiple promotions​

The same coupon code can now be used in multiple promotions. Previously, coupon codes were treated as unique identifiers for TCOUPON records, and a TCOUPON record could only be assigned to a single promotion. Now, multiple TCOUPON records can have the same coupon code.

As a result of this change, when a shopper adds a coupon code to cart this can now potentially activate multiple promotions. However, separate TCOUPON records with the same coupon code can have different suspension flags, expiry dates, or limited uses. When adding a coupon code to cart, only valid coupons with the specified coupon code will be applied. If all the coupon codes are linked to coupons with problems, the shopper will see an error message describing the issue.

Promotions can be applied to multiple catalogs or stores​

A shopping cart promotion can now be applied to more than one store, or all stores. Similarly, a catalog promotion can now be applied to more than one catalog, or all catalogs.

The Commerce Manager wizard and editor for shopping cart and catalog promotions has been updated to allow business users to specify multiple stores or catalogs, or specify that the promotion applies to all stores or catalogs.

The promotions Import/Export schema has also been updated.

Composite inventory extension​

This optional extension for the Inventory Flow Extension Point improves system performance and reliability where the system of record for inventory is authoritative, but not performant.

It supports delegation to two separate inventory extensions:

  • A cache inventory extension that is not authoritative but is performant (usually this is set to the ElasticPathJournalingInventoryFlow extension).
  • An authoritative extension that is the system of record, but not able to handle a high volume of synchronous requests.

Most inventory read operations are delegated to the cache inventory extension, except for the final checkout validation. All inventory modification requests are sent to both extensions.

For more information, see Composite Inventory Extension.

Cortex requests can now use the format=nolinks query parameter which omits all links from the response, except action links on forms. This query parameter will cause Cortex to skip conditional link evaluations, which can sometimes be expensive.

As an example, a Cortex request for /?zoom=defaultcart,defaultcart:additemstocartform,defaultcart:lineitems:element,defaultcart:lineitems:element:code&format=zoom.noself,nolinks will return this response:

{
"self": {
"type": "elasticpath.collections.links",
"uri": "/?zoom=defaultcart,defaultcart:additemstocartform,defaultcart:lineitems:element,defaultcart:lineitems:element:code",
"href": "http://10.11.12.61:8080/cortex/?zoom=defaultcart,defaultcart:additemstocartform,defaultcart:lineitems:element,defaultcart:lineitems:element:code"
},
"messages": [],
"links": [],
"_defaultcart": [
{
"messages": [],
"links": [],
"_additemstocartform": [
{
"messages": [],
"links": [
{
"rel": "additemstocartaction",
"type": "carts.add-items-to-cart-form",
"uri": "/carts/mobee/mnsgkyjxmftdcljvg4zdcljumjsdsljzg42ggljwgm2wgojvgbqwmodbme=/form",
"href": "http://10.11.12.61:8080/cortex/carts/mobee/mnsgkyjxmftdcljvg4zdcljumjsdsljzg42ggljwgm2wgojvgbqwmodbme=/form"
}
],
"items": [
{
"code": "",
"quantity": 1
}
]
}
],
"_lineitems": [
{
"_element": [
{
"configuration": {},
"quantity": 1
}
]
}
],
"total-quantity": 1
}
]
}

If you don't need API discoverability, and your client app is already configured to zoom into requests to get the data it needs, adding this parameter can give a significant performance boost.

note

This parameter replaces format=zoom.nodatalinks, which is now deprecated.

For more information, see Format query parameter.

Support for Import and Export of Orders​

Import/Export now supports the ability to import and export orders. This allows orders to be transferred between environments or to/from third-party systems.

Example order format:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<orders>
<order order_number="2000">
<account_guid>CatalogBrowserRole</account_guid>
<created_date>2023-04-12T03:48:59Z</created_date>
<currency>CAD</currency>
<customer_guid>80E0B57C-EEF0-646D-105E-056DD9C1D25D</customer_guid>
<exchange_order>false</exchange_order>
<external_order_number>200</external_order_number>
<last_modified_date>2023-04-12T03:53:24Z</last_modified_date>
<locale>en</locale>
<status>COMPLETED</status>
<store_code>MOBEE</store_code>
<total>26.40</total>
<billing_address guid="9ba7e100-5965-452f-abdc-8ab50e4cfa6d">
<last_name>Potter</last_name>
<first_name>Harry</first_name>
<street1>1234 Hogwarts Avenue</street1>
<street2></street2>
<city>Vancouver</city>
<sub_country>BC</sub_country>
<zip_postal_code>V6A 1N4</zip_postal_code>
<country>CA</country>
<phone_number>7789994564</phone_number>
</billing_address>
<order_skus>
<order_sku guid="3b6f03cd-a480-4c34-b333-cbb99cc9ceaf">
<last_modified_date>2023-08-09T22:04:25Z</last_modified_date>
<created_date>2023-04-12T03:48:59Z</created_date>
<sku_code>physical_sku</sku_code>
<tax_code>NONE</tax_code>
<quantity>1</quantity>
<display_name>physicalProduct</display_name>
<amount>25.00</amount>
<tax_amount>0.00</tax_amount>
<list_unit_price>25.00</list_unit_price>
<sale_unit_price>0.00</sale_unit_price>
<promo_unit_price>25.00</promo_unit_price>
<unit_price>25.00</unit_price>
<discount_amount>0.00</discount_amount>
<display_sku_options></display_sku_options>
<weight>0</weight>
<allocated_quantity>1</allocated_quantity>
<ordering>1</ordering>
<sku_guid>563FD18F-C410-4E86-9CDD-BF726107BAB9</sku_guid>
<fields/>
<tax_lines>
<tax_line>
<journal_type>purchase</journal_type>
<transaction_type>Order</transaction_type>
<tax_calculation_date>2023-04-28T10:12:35Z</tax_calculation_date>
<document_id>2000-1.41F0F7EE-F487-630A-56AA-A0471B272FE3</document_id>
<item_object_type>Order SKU</item_object_type>
<item_amount>25.00</item_amount>
<name>NO_TAX</name>
<tax_code>NONE</tax_code>
<tax_amount>0.00</tax_amount>
<tax_rate>0.000000</tax_rate>
<jurisdiction>NO_TAX_JURISDICTION</jurisdiction>
<region>NO_TAX_REGION</region>
<provider>ElasticPath</provider>
<tax_is_inclusive>false</tax_is_inclusive>
</tax_line>
</tax_lines>
<bundle_child_order_skus/>
<child_order_skus/>
</order_sku>
</order_skus>
<events>
<event>
<created_date>2023-04-12T03:48:59Z</created_date>
<detail>Order is placed by Harry Potter.</detail>
<originator_type>CUSTOMER</originator_type>
<title>Order Placed</title>
<last_modified_date>2023-04-28T10:12:34Z</last_modified_date>
</event>
</events>
<payments>
<payment guid="de72551f-f0e1-4fbb-874c-f0dad737e0d2">
<transaction_date>2023-04-12T06:49:00Z</transaction_date>
<transaction_type>RESERVE</transaction_type>
<payment_status>APPROVED</payment_status>
<amount>26.40</amount>
<payment_instrument_guid>a5f44594-6c96-45cc-af56-44bb0ae39c06</payment_instrument_guid>
<is_original_pi>true</is_original_pi>
<payment_provider_config_guid>happy-path-payment-provider-config</payment_provider_config_guid>
<fields>
<field key="Config A">Value of Config A</field>
<field key="Config B">Value of Config B</field>
</fields>
</payment>
</payments>
<order_payment_instruments>
<order_payment_instrument guid="271acc18-5586-434c-a4e1-1d18f7a3f3cf">
<payment_instrument_guid>a5f44594-6c96-45cc-af56-44bb0ae39c06</payment_instrument_guid>
<limit_amount>0.00</limit_amount>
</order_payment_instrument>
</order_payment_instruments>
<payment_instruments>
<payment_instrument guid="a5f44594-6c96-45cc-af56-44bb0ae39c06" payment_provider_config_guid="happy-path-payment-provider-config">
<is_single_reserve_per_pi>false</is_single_reserve_per_pi>
<is_supporting_multi_charges>false</is_supporting_multi_charges>
<name>d</name>
<fields>
<field key="details">c4b0ebbc-bf23-43e8-9b4a-e6a4cc4edb1e</field>
</fields>
</payment_instrument>
</payment_instruments>
<holds/>
<fields>
<field key="name">default</field>
</fields>
<shipments>
<shipment shipment_number="2000-1">
<status>SHIPPED</status>
<type>PHYSICAL</type>
<created_date>2023-04-12T03:48:59Z</created_date>
<last_modified_date>2023-08-09T22:04:25Z</last_modified_date>
<carrier_code>Canada Post</carrier_code>
<carrier_name>Canada Post</carrier_name>
<shipping_option_code>CanadaPostTwoDays</shipping_option_code>
<shipping_option_name>Canada Post 2 days</shipping_option_name>
<shipment_date>2023-04-12T03:53:24Z</shipment_date>
<tracking_code></tracking_code>
<item_subtotal>25.00</item_subtotal>
<subtotal_discount>0.00</subtotal_discount>
<item_tax>0.00</item_tax>
<before_tax_shipping_cost>1.25</before_tax_shipping_cost>
<shipping_tax>0.15</shipping_tax>
<shipping_cost>1.25</shipping_cost>
<inclusive_tax>false</inclusive_tax>
<tax_document_id>2000-1.41F0F7EE-F487-630A-56AA-A0471B272FE3</tax_document_id>
<shipping_address guid="717fab0d-7776-4e1f-b5c9-f23faeaf1762">
<last_name>Potter</last_name>
<first_name>Harry</first_name>
<street1>1234 Hogwarts Avenue</street1>
<street2></street2>
<city>Vancouver</city>
<sub_country>BC</sub_country>
<zip_postal_code>V6A 1N4</zip_postal_code>
<country>CA</country>
<phone_number>7789994564</phone_number>
</shipping_address>
<order_skus>
<order_sku guid="3b6f03cd-a480-4c34-b333-cbb99cc9ceaf"/>
</order_skus>
<total_tax_lines>
<total_tax_line>
<tax_category_name>GST</tax_category_name>
<tax_category_display_name>GST</tax_category_display_name>
<amount>0.06</amount>
</total_tax_line>
<total_tax_line>
<tax_category_name>PST</tax_category_name>
<tax_category_display_name>PST</tax_category_display_name>
<amount>0.09</amount>
</total_tax_line>
</total_tax_lines>
<shipping_cost_tax_lines>
<tax_line>
<journal_type>purchase</journal_type>
<transaction_type>Order</transaction_type>
<tax_calculation_date>2023-04-28T10:12:35Z</tax_calculation_date>
<document_id>2000-1.41F0F7EE-F487-630A-56AA-A0471B272FE3</document_id>
<item_object_type>Order Shipment</item_object_type>
<item_amount>1.25</item_amount>
<name>GST</name>
<tax_code>SHIPPING</tax_code>
<tax_amount>0.06</tax_amount>
<tax_rate>0.050000</tax_rate>
<jurisdiction>CA</jurisdiction>
<region>CA</region>
<provider>ElasticPath</provider>
<tax_is_inclusive>false</tax_is_inclusive>
</tax_line>
<tax_line>
<journal_type>purchase</journal_type>
<transaction_type>Order</transaction_type>
<tax_calculation_date>2023-04-28T10:12:35Z</tax_calculation_date>
<document_id>2000-1.41F0F7EE-F487-630A-56AA-A0471B272FE3</document_id>
<item_object_type>Order Shipment</item_object_type>
<item_amount>1.25</item_amount>
<name>PST</name>
<tax_code>SHIPPING</tax_code>
<tax_amount>0.09</tax_amount>
<tax_rate>0.070000</tax_rate>
<jurisdiction>CA</jurisdiction>
<region>BC</region>
<provider>ElasticPath</provider>
<tax_is_inclusive>false</tax_is_inclusive>
</tax_line>
</shipping_cost_tax_lines>
</shipment>
</shipments>
</order>
</orders>

For more information, see Import/Export Orders.

New in this release​

In addition to the Release Highlights, this release contains the following updates:

Enabled and priority fields are now optional in extensions.json​

When configuring an extension using extensions.json, the extensions[*].enabled flag and the extensions[*].priority field are optional. If enabled is not defined then the extension will only be enabled if there is an @XPFAssignment annotation on the extension class. If priority is not defined then the priority field on the @XPFAssignment annotation will be used.

Operational Insights clients can override service response wait time​

An new query parameter named serviceResponseWaitTime has been added to the Operational Insights API that allows clients to control how long the API should wait for responses from each of the services for their runtime and configuration details. If not specified, the API defaults to 3000 milliseconds.

Added code-style.xml for use by IntelliJ developers​

We have added a code-style.xml file that can be used to set code formatting rules in IntelliJ IDEA. See Local IDE Setup for more details.

Increased the default task executor pool size for Blueprint application context initialization​

During Cortex startup, a significant aspect of startup time is related to the initialization of Blueprint application contexts for each bundle. Blueprint uses a task executor pool to control how this initialization is parallelized. The default pool size has been increased from 1 to a value matching the number of processors available on the machine, which leads to significantly improved Cortex startup time.

We have also added new JVM parameters to allow the Blueprint thread pool parameters to be overridden. See osgi.taskexecutor.maxpoolsize, osgi.taskexecutor.poolsize, and osgi.taskexecutor.queuecapacity.

Enhanced address data points for data protection​

New data protection data points have been added for addresses:

  • CITY
  • SUB_COUNTRY
  • ZIP_POSTAL_CODE
  • COUNTRY
  • FAX_NUMBER

Also, a new data location named CUSTOMER_ALL_ADDRESSES has been added. This data location ensures that the address data for all addresses associated to the customer are removed, instead of just the preferred billing address (CUSTOMER_BILLING_ADDRESS) or preferred shipping address (CUSTOMER_SHIPPING_ADDRESS).

For more information, see Self-Managed Commerce Data Points.

Added support for wildcard character when searching for products and skus in Commerce Manager​

It is now possible to use the wildcard character * in product and sku search fields in Commerce Manager. For example, to find all product codes starting with iphone, enter iphone*.

Added a JVM parameter to Batch Server to allow the Quartz job timezone to be overridden​

The Batch Server now supports a JVM parameter named quartz.timezone. This allows a timezone to be set for use by the quartz jobs. For example, if a job is scheduled to run at midnight, it should run at midnight in the timezone specified by this JVM parameter. If not specified, the local application timezone will be used.

Support for multiple partial charges against a single reservation (also known as multi-capture)​

Previously, Self-Managed Commerce always assumed that payment gateways could not support multiple partial charges for a single reservation (pre-authorization). This assumption was in place to ensure compatibility with as many payment gateways as possible, because many payment gateways do not support this.

Now, payment plugins can indicate if they support multiple partial chargers for a single reservation by adding the @SupportsMultiplePartialCharges annotation.

If the @SupportsMultiplePartialCharges annotation is not present (or if using a version of Self-Managed Commerce before 8.5), payment operations for an order with multiple shipments work as follows:

  1. A single reservation is made for the full amount of the order.
  2. A charge is applied for the electronic shipment total.
  3. Self-Managed Commerce then assumes that the original reservation is consumed, so a new reservation is created for the remaining amount.
  4. Later, when the physical shipment ships, a charge is applied to the new reservation for the physical shipment total.

Now, if the @SupportsMultiplePartialCharges annotation is present, payment operations for an order with multiple shipments work as follows:

  1. A single reservation is made for the full amount of the order.
  2. A charge is applied for the electronic shipment total.
  3. Later, when the physical shipment ships, a charge is applied using the original reservation for the physical shipment total.

Additionally, the ChargeCapabilityRequest class now includes a finalCharge flag that tells the plugin if the charge request is the final one for the reservation. If this flag is set, the plugin can tell the payment gateway that the reservation can be closed out by the payment gateway.

For more information, see Multiple partial charges per reservation.

Enabled Horizontal Database Scaling for Search Server, Batch Server, and Integration Server​

Horizontal Database Scaling (HDS) allows an additional increase in transaction throughput by directing read requests to a cluster of read-only replica databases rather than to the primary database.

This feature was originally introduced in Self-Managed Commerce 7.6 as a beta feature. However, our findings since introducing this beta feature have been that database replication latency can lead to inconsistent results in Cortex, especially under high load.

On the other hand, Self-Managed Commerce services such as Batch Server, Integration Server, and Search Server run asynchronously, so they are far less sensitive to eventually consistent database reads. These applications are ideal for the HDS because all reads could be offloaded to replica databases and reduce load on the primary database. Therefore, we have dropped support for Horizontal Database Scaling on Cortex, and added support on Batch Server, Integration Server, and Search Server.

For more information, see Horizontal Database Scaling.

All Spring schema definitions are now version-less​

Until now, we have always specified a version when specifying the Spring Framework XML schema locations. However, this turns out to be unnecessary since Spring will automatically pick the highest available version from the runtime classpath JARs. Therefore, to simplify our upgrade from Spring 4.x to 5.x (as well as future upgrades), we have removed the version specifier from all Spring schema location references.

For example, Spring XML files with a header like this:

<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

Have been changed to this:

<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

For more information, see Spring version-less schema for latest version.

Added additional service caching​

Added cache implementations for the following services to avoid unnecessary repeat database queries:

  • PaymentProviderConfigurationService and StorePaymentProviderConfigService for payment provider configuration caching.
  • ProductAssociationService for product association caching.

Added new methods to TimeService for better timezone handling​

The existing TimeService#getCurrentTime method returns a java.util.Date, which essentially is a fancy wrapper for the number of milliseconds since the epoch. It will tell the caller the current time in the server's local timezone, but does not tell the caller what the database timezone is.

Therefore, we've added two new methods to the TimeService:

/**
* Returns the current time along with timezone it represents.
*
* @return the current time and corresponding timezone
*/
ZonedDateTime getCurrentZonedDateTime();

/**
* Returns the TimeZone used for all TimeService Dates.
*
* @return the TimeZone used for all TimeService Dates.
*/
TimeZone getTimeZone();

These methods allow the caller to determine the timezone used for all dates and times, as determined based on the database configuration.

Order failure reasons are now added as order notes​

Whenever an order is marked as FAILED due to a business validation issue or an unexpected error, the error message is now recorded as an order note with the title "Order Failed".

This option was confusing because it did the same thing as "Hide Zoomed Data Links" in the Query Parameters section, so we removed it.

Updates to the promotions list on an order in Commerce Manager​

On the applied promotions list on an order in Commerce Manager, we've removed the description column (since the promotion name and display name were already present) and added the ability for users to double-click to open the related promotion.

Upgraded compiler warnings to errors in all modules​

Although modules using the standard maven-compiler-plugin treated compiler warnings as errors, modules using the groovy-eclipse-compiler did not. Now all modules treat most compiler warnings as errors that must be resolved.

Allow batch add to cart to be used with items that have optional cart item modifiers​

Previously, the batch add to cart form (additemstocartform) did not allow items to be added if they had any cart item modifiers. Now items can be added to cart using this form as long as all of their cart item modifiers are optional.

Added new promotion conditions​

Added new conditions for catalog and shopping cart promotions as described below:

New catalog promotion conditions:

  • Product SKU is []: This allows the catalog promotion to activate based on a specific product SKU (in addition to the existing condition to activate based on a specific product).
  • Product attribute [] has value []: This allows the catalog promotion to activate based on the presence of a specific value in a product attribute.
  • Product SKU attribute [] has value []: This allows the catalog promotion to activate based on the presence of a specific value in a product SKU attribute.

New shopping cart promotion conditions:

  • [At least|At most|Exactly] [] items of product with attribute [] having value [] are in the shopping cart: This allows the shopping cart promotion to activate based on the presence of a specific value in a product attribute for an item in the shopping cart.
  • [At least|At most|Exactly] [] items of product SKU with attribute [] having value [] are in the shopping cart: This allows the shopping cart promotion to activate based on the presence of a specific value in a product SKU attribute for an item in the shopping cart.

Catalog and shopping promotion searches have been separated in Commerce Manager​

Previously, Commerce Manager had a single tab called "Promotions" (in the "Store" section) for looking up promotions, regardless of type. This has now been separated into separate tabs for "Catalog Promotions" and "Shopping Cart Promotions".

Along with this change, each tab now has separate filters for catalogs (in the "Catalog Promotions" tab) or stores (in the "Shopping Cart Promotions" tab). Each list also shows either catalogs or stores depending on type.

Shopping Cart promotion enable/expiration dates moved in Commerce Manager​

The "Time Conditions" editor has been removed from the Shopping Cart promotions wizard and editor. Now the enable and expiration dates for Shopping Cart promotions appear on the summary tab (or first page of the wizard) consistently with catalog promotions.

Added ability for business users to manually set shared ID when creating an account in Commerce Manager​

The Commerce Manager wizard for creating a new account now allows business users to choose whether the shared ID should be automatically generated or manually specified. If the account originated in another system, then it may be desirable to specify the same unique identifier so that the records can be linked.

Added ability for business users to duplicate a shopping cart promotion in Commerce Manager​

Business users can now use the "Copy Promotion" button on the "Shopping Cart Promotion Search Results" page to copy the highlighted promotion. This will open the usual shopping cart promotion wizard, but with all of the values from the original promotion filled-in. The promotion is not persisted to the database until the "Finish" button is clicked.

Added an ext-core-caching module for use by project teams​

Project teams often need to add application-level caching to either custom methods in existing services, or completely new custom services. Previously, this was challenging since we didn't provide an extension module for the ep-core-caching bundle that implements service caching. New caching classes and wiring can be added to this module to avoid the need to modify the ep-core-caching module directly.

The new module exists at extensions/core/ext-core-caching and contains a class named CachingExampleServiceImpl as an example for how a service class can be wrapped with caching. The module also contains Spring configuration XML files, and an OSGi blueprint file which wire in the CachingExampleServiceImpl class.

Refactored the Ehcache configuration files​

This refactoring was done to reduce complexity around Ehcache default values and override files. Now, there are just two places where Ehcache time-to-live and time-to-idle values are set: The default values set in the bean (intended for use in production-like environments) and the ehcache-fast-updates.xml file (intended for use in development environments). The following changes have been made:

  1. All ehcache-60-minutes.xml, ehcache-5-seconds.xml, and ehcache-local.xml files have been removed.
  2. A new ehcache-fast-updates.xml file has been created at extensions/database/ext-data/src/main/resources/environments/default/files/conf/cache/.
  3. The ep-properties files in all environment folders under extensions/database/ext-data/src/main/resources/environments have been updated to either remove the ep.external.ehcache.xml.path value (if production-like settings should be used), or set it to ehcache-fast-updates.xml (if development settings should be used).
  4. The default values for all cache beans have been updated to be appropriate for production-like environments.

The ehcache-fast-updates.xml file sets most caches to a 5-second expiry, so that changes made to catalog or configuration values will be quickly reflected in Cortex.

For more information, see Ehcache.

Updated Elastic Path logo and icon in Commerce Manager​

The Elastic Path logo has been updated on the Commerce Manager login screen and about screen. The website icon has also been updated. This new Elastic Path branding took effect in August 2023.

Added a new Cortex scenario to Performance Insights​

A new Cortex scenario has been added to Performance Insights. Unlike the existing "Shopping cart workflow", which tests a typical add-to-cart and checkout scenario, the new "Catalog browsing workflow" tests these scenarios:

  • Search
  • Navigation
  • Facets
  • Product associations
  • Price lookup

For more information, see Performance Insights for Cucumber Tests.

Added a Liquibase custom change class for adding new setting definitions and setting values​

A Liquibase custom change class has been added to make it easier to add new setting definitions and setting values into the database within Liquibase changesets.

For more information, see Setting Definitions.

Added ops-spec.json to define supported external dependencies​

A new JSON file has been added at devops/ops-spec/src/main/resources/ops-spec.json which contains details about the external dependencies that the Self-Managed Commerce platform depends on, such as:

  • Java version and download location
  • JVM runtime arguments
  • Maven version and download location
  • Tomcat version and download location
  • ActiveMQ version and download location
  • Supported database versions
  • Healthcheck paths

This file is primarily used by CloudOps for Kubernetes to support multiple versions of Self-Managed Commerce with different external dependencies to be deployed without encoding these dependencies within CloudOps for Kubernetes itself. This also allows Self-Managed Commerce patches to define dependency changes without requiring a CloudOps for Kubernetes upgrade.

For more information, see Operations Specification.

Multi-threaded build support​

All Self-Managed Commerce modules (including Commerce Manager modules) now support multi-threaded builds. As an example, it is possible to run the following build command:

mvn clean install -DskipAllTests -T0.5C
note

For builds that require downloading dependencies from Maven, you may run into failures with the multi-threaded option enabled. You may need to run an initial single threaded build to download these dependencies first, and then subsequent multi-threaded builds should work as expected.

Fixed Issues​

Stability/Correctness​

  • Resolved split package warnings reported while building ep-core and modified the configuration to fail the build if new split package issues are detected in the future. An example of the type of warning that was previously appearing is shown below:

    [WARNING] Bundle com.elasticpath:ep-core:bundle:0.0.0-SNAPSHOT : Split package, multiple jars provide the same package:com/elasticpath/xpf/converters
    Use Import/Export Package directive -split-package:=(merge-first|merge-last|error|first) to get rid of this warning
    Package found in [Jar:., Jar:ep-xpf]
    Class path [Jar:., Jar:osgi.core, Jar:org.osgi.annotation, <A VERY LONG LIST OF JARs>]
  • Changed default max active database connection pool setting in Cortex from 150 to 250 to match max threads permitted by Tomcat.

  • Returned default JMS connection pool size back to 25.

  • Returned default JMS max active session per connection size back to 25.

  • Changed DBSettingValueRetrievalStrategy so dependencies are more explicit to prevent failures if extensions create a circular dependency.

  • Updated Catalog Syndication projection builder to ensure that projection and projection history records are persisted in separate transactions to prevent deadlocks.

  • Changed the Apache Velocity ClasspathResourceLoader to a singleton to resolve runaway instantiation of this class.

  • Ensure that TINDEXNOTIFY records are cleared during index rebuilds. Previously, since the records were not cleared, Search Server would spent unnecessary time reindexing records that were just indexed during the rebuild.

  • Fixed invalid number error that occurs on Oracle in the 2020-08-flatten-order-sku-tree-for-better-performance changeset.

  • Fixed issue with payment framework charges that could cause a successful operation to be treated as a failure, and retried. If payment capture failed when a shipment shipped, the JMS message that triggered the async operation would not be consumed, and the operation was re-executed resulting in an attempt to capture funds multiple times. Now the exception is handled properly and the payment capture is not retried.

  • Reduced the maximum default product cache size from 5000 to 1000 to avoid out of memory issues during product indexing with larger catalogs.

  • Removed duplicate indexes from TORDERADDRESS table.

  • Removed Product Recommendations job from the batch server. This job was adding RECOMMENDATION product associations automatically based on purchase history, but it was very inefficient and sometimes caused OptimisticLockingExceptions in the Data Sync Tool.

  • Updated Maven Minimal configuration so that changes to ext-cm-libs trigger the correct subprojects.

  • Removed the failover protocol from the JMS broker URL in accordance with our policy of discouraging use of ActiveMQ high availability mode.

  • Increased cadence of the "data policy consents revoked" job to run every hour instead of every day to ensure that a customer revoking consent is actioned promptly.

  • Corrected the location of the purchase-order-plugin in the Integration Server pom.xml to ensure that it is deployed properly.

  • Fixed issue where promotions that can apply to multiple cart items but are limited in number would apply the discount correctly but the appliedPromotions resource would show it applying to both.

  • Fixed issue where promotion date range was being checked using application timezone instead of database timezone.

  • Modified the TORDERPAYMENT, TORDERPAYMENTINSTRUMENT, and TTAXJOURNAL tables to reference order UIDPK instead of ORDER_NUMBER. This reduces duplication of contextual identifiers in the database.

  • Changed customer shared ID to be case-insensitive on PostgreSQL and Oracle to match MySQL behaviour.

  • Replaced all uses of new Date() and LocalDateTime.now() with timeService.getCurrentTime() in ep-core to eliminate a class of timezone-related bugs.

  • Fixed issue where cart item modifier fields were sometimes immutable, preventing customizations from modifying them.

  • Replaced libsass-maven-plugin with dart-sass-maven-plugin to resolve build errors on Mac M1 machines.

  • Fixed an issue where a free item promotion triggered by a coupon was not activated.

  • Fixed problems with promotions that have an action to create a coupon code automatically.

  • Fixed issue preventing email notifications from being sent when a changeset publish completes.

  • Added a timeout on Helix resource operations to ensure that stuck threads are released. Timeout defaults to 30 secs but can be overridden with the relos.prototype.operation.timeout JVM parameter.

  • Fixed issue where the discount apportioning calculator didn't properly handle non-discountable shopping items.

  • Fix to populate the cart item modifier fields in the OrderSkuDTO object that is passed to payment plugins.

  • When checking out a cart that contains a coupon that has run out of uses, block checkout instead of removing the coupon code automatically.

  • Modified EpEmailValidator to accept empty values to be consistent with other validators.

  • Fixed Search Server race condition that can prevent indexes from building.

  • Fixed error in JWT authentication if token does not contain either sub or account.

  • Rearranged ext-commerce-engine-wrapper package exports to fix *.impl package exclusions. The !*.impl exclusion in the ext-commerce-engine-wrapper export-packages instruction was not working. This is because it was at the end of the list, so it was being overridden by the com.elasticpath.* instruction. Earlier instructions override later instructions.

  • Fixed bug in Cortex Studio zoom builder caused by sending header value x-ep-account-shared-id: undefined to Cortex.

  • Enabled the testOnBorrow flag of the JDBC connection pool to trigger verification that each connection is active and functional before returning it to the application. Therefore if there are any database disconnects, the application will quickly recover from them without any required restarts.

  • Fixed issues with the skuOptions and modifierGroups options in the Product Type load tuner.

  • Fixed NullPointerException that can occur when updating a shopping cart line item quantity if the line item has a non-bundle-constituent child.

  • Moved all batch job classes from the ep-core module into the ep-batch module. All the classes in commerce-engine/core/ep-core/src/main/java/com/elasticpath/domain/order/jobs were moved into commerce-engine/batch/ep-batch/src/main/java/com/elasticpath/batch/jobs/orders.

  • Removed unused PRODUCT_LOAD_TUNER_MINIMAL load tuner bean from the ep-core module.

  • Removed the PersistenceEngine#get method and replaced all calls with PersistenceEngine#load.

  • Fixed issue where sku option and attribute display names sometimes appear as empty in Cortex due to a race condition.

  • Fixed issue where a free item is not automatically removed from the shopping cart if the promotion becomes ineligible.

  • Fixed issue where the redirect from checkout to the order resource returns a 403 error if the order failed.

  • Fixed "The system could not charge the reservation." error that can appear if all items in the shopping cart are free.

  • Fixed issue where a product that is flagged as "not store visible" still shows up in the featuredoffers resource in Cortex.

  • Fixed issue where shopping cart line items with children are not properly migrated when a customer logs in.

  • Fixed issue with product associations becoming active the day after the specified start date.

  • Fixed issue in which cart item modifiers are lost on dependent cart line items if the parent line item is updated.

  • Improvements to JWT token error logging to ensure that errors are returned as structured error messages.

  • Removed unnecessary OSGi package imports from the ep-core-caching bundle.

  • Fixed issues that could prevent Search Server from shutting down cleanly in some circumstances.

  • Fixed issue in the Money class that caused amounts to be unexpectedly rounded by the add method.

  • Fixed store selector support in Tax Calculator extension point.

  • Ensure that Cortex bundles are always loaded in the correct order to ensure that cache configuration is properly recognized.

  • Fixed "encountered unmanaged object" error when publishing bundles with sku constituents through the Data Sync Tool.

  • Fixed authentication error that can occur when running Performance Insights locally.

  • Updated Cortex to automatically remove a bundle from the cart if it no longer matches the catalog definition of the bundle constituents.

  • Fixed issue where a NullPointerException can occur when updating the quantity for a shopping cart line item with children.

  • Fixed issue in attribute value comparator that caused "Not implemented" exceptions to appear when building search indexes containing attributes of type "image", "boolean", or "file".

  • Fixed issue in which settings are not cached in the Batch Server.

  • Fixed issue in which navigation offers sorted by price did not sort properly until the search index was rebuilt.

Commerce Manager​

  • Fixed issue with empty facet name when assigning available facets to a store in Commerce Manager.
  • Modified Commerce Manager product and category display name localization so that only intentionally specified values are displayed and saved.
  • Fixed issues with Commerce Manager permissions for accounts:
    • Accounts should only be editable if user has the CREATE_EDIT_ACCOUNTS permission.
    • Accounts should be editable even for users assigned to a specific store (because accounts aren't linked to stores).
  • Removed duplicate "Assign Customer Segments" permission appearing in Commerce Manager.
  • Limited orders list to 25 on customer record in Commerce Manager to prevent slowness when accessing that tab for customers with many orders.
  • Removed unused splash.bmp from Commerce Manager core.
  • Fixed intermittent "Device is disposed" error in Commerce Manager.
  • Improved the error message that appears in Commerce Manager if there are no open stores to assign a price list assignment to.
  • Fixed issue with changeset list resetting to page one when locking or publishing changesets.
  • Refactored all logging calls to use SLF4j parameters instead of string concatenation. This addresses several warnings flagged by SonarQube.
  • Fixed issue where setting COMMERCE/APPSPECIFIC/RCP/idleTimeForLock to 0 logs you out of Commerce Manager immediately. Now you will remain logged in until you manually log out.
  • Fixed an error that could occur when trying to edit tax values in Commerce Manager.
  • Fixed issues with date/time values in Commerce Manager showing in the wrong timezone if the application timezone doesn't match the database timezone.

Logging​

  • Modified the COMMERCE/SYSTEM/SEARCH/searchHost deprecation warning so it doesn't get logged repeatedly. Also changed caching of this setting from COMMERCE/Cachge/Cache1 to application.
  • Modified logging calls from using Log4j2 classes to SLF4j classes to allow these log messages to appear properly in Cortex (which uses Logback for logging). This solves several problems related to log messages being "swallowed" by Cortex.
  • Changed EhcacheConfigurationConfigurator time-to-live and time-to-idle configuration logging from INFO to DEBUG to reduce log spam.
  • Addressed XML parse warning org.xml.sax.SAXParseException in the Search Server logs during startup on local developer machines.
  • Added logging in the Search Server periodic monitor that logs is a pipeline is waiting to finish. Example: Waiting for 'product' index pipeline to finish: 46 of 241 completed.
  • Fixed NoClassDefFoundError: org/slf4j/IMarkerFactory error when the first Cortex request is received.
  • Fixed Failed to lookup JNDI env-entry [java:comp/env/appName] error appearing during Cortex startup.
  • Fixed incorrect logging of successful / skipped counts in batch jobs after failure.

Operational Insights​

  • Included all caches in Operational Insights API response, instead of just select caches.
  • Added fields cart-promotions-active, catalog-promotions-active, and price-list-assignments-active to the data-shape section of the Operational Insights JSON response. For more information, see Operational Insights API.
  • Added db-aurora-version field to the configuration --> database section of the Operational Insights response. This reports the Aurora database version, if applicable. For more information, see Operational Insights API.
  • Fixed issue with the commerce-manager-admin-user-enabled Operational Insights field returning true even if the admin user is disabled.
  • Fixed several Operational Insights metrics that were broken for customers using PostgreSQL.
  • Improved Operational Insights error handling when hardware metrics calls generate a NoClassDefFoundError.
  • Fixed potential NullPointerException when requesting an Operational Insights report if no services respond with results.

Import/Export​

  • Fixed issue when importing a product with localized attribute values that already exist, where attempting to set a more specific attribute value locale incorrectly updated the "broader" locale value.
  • Fixed an issue where the summary details returned at the end of an import or export through the Import/Export API can include details from separate requests run at the same time due to the use of a shared singleton object.
  • In products.xml, the field notsoldseperately has been renamed to notsoldseparately. When importing, either spelling will be accepted, but the new spelling will be used for all exports.
  • In tax_jurisdiction.xml, the field priceCalculationMethod now expects values of TAX_INCLUSIVE or TAX_EXCLUSIVE instead of true or false. When importing, the following values will be accepted, but only TAX_INCLUSIVE or TAX_EXCLUSIVE will be returned in exports:
    • TAX_INCLUSIVE
    • TAX_EXCLUSIVE
    • true (maps to TAX_INCLUSIVE)
    • false (maps to TAX_EXCLUSIVE)
  • In coupon_sets.xml, the coupon node now supports an optional suspended attribute that can be used to specify if the coupon should be suspended. Suspended means that the coupon exists, but cannot be used by shoppers.
  • Fixed issue with saved conditions not being added to a changeset when imported with the changeset GUID query parameter set.
  • Fixed issue with price lists not being added to a changeset when imported with the changeset GUID query parameter set.
  • Modified Product Association export functionality to significantly improve performance.
  • Added Import/Export validation check to prevent adding a category with a parent assigned to itself.

Performance​

  • Avoid running JWTTokenStrategy when Authorization header contains an OAuth access token to improve performance.
  • Modified Cortex repositories to use Single.defer when generating resource operation failures to avoid overhead of instantiating these classes unnecessarily.
  • Avoid loading OAuth token from the database during logout operations to improve performance.
  • Improved performance of case-insensitive queries involving store code. This ensures that the store code in the database is always persisted in upper case, so we can avoid using the database UPPER function, which prevents the database from using indexes effectively.
  • Improved product sku caching implementation so it better handles the circumstance where a new sku has been added to a product.
  • Separated indexing pipelines by type to ensure that long queues in one pipeline don't delay indexing in another.
  • Removed FlushMode override in TaxJournal queries to prevent issue where all tax journal records are loaded into memory in the Integration Server in some circumstances.
  • Removed base price sources list from shopper object so we avoid retrieving price list stack whenever a shopper is created or loaded from the database.
  • Added caching to the ProductService#isInCategory method to improve performance of promotions and price lists that are conditional on a product being in a category.
  • Added an index on TSHOPPINGCART.LAST_MODIFIED_DATE to improve performance of the abandoned cart cleanup job.
  • Performance improvement which replaces full product lookup with simple query when only product sku guid to product sku code conversion is needed.
  • Converted several classpath*: imports to classpath: to improve Cortex startup time.
  • Modified how promotion and price list assignment start and end dates are stored to allow queries to easily exclude expired records.
  • Refactored several EPC 8.0 upgrade Liquibase changesets to better handle large order volumes in the database.
  • Refactored the core-changelog-2021-01-data-fields-as-json-clob.xml Liquibase changeset to make it run 20-30X faster on MySQL and Oracle databases. Performance Data model changes
  • Eliminated the slow 2020-09-convert-customer-passwords-to-bcrypt Liquibase changeset that upgrades customer passwords to BCrypt and replaced it with a Quartz job that upgrades the shopper hashes in the background while the system is live.
  • Fixed several coupon-related named queries that were using the unindexed COUPON_CODE field instead of the indexed COUPON_CODE_UPPER field, leading to table scans.
  • Removed JPA relationship between bundle constituents and their associated product or sku. The BundleConstituent#getConstituent method now retrieves the product or sku via a cached service.

Tests​

  • Updated Surefire and Failsafe plugin configurations to ensure that the JUnit4 provider is always used (instead of the TestNG provider).
  • Fixed java.lang.IllegalStateException: Product futureProduct is not linked to any categories error during search indexing. This fix simply corrects some bad test data that was causing the error.
  • Fixed issue where Cucumber tests with the @ignore annotation were still being executed.
  • Fixed ability to run Cucumber integration tests on Windows developer machines.
  • Removed all elasticpath.com email addresses from test data to ensure that tests don't accidentally send emails to our domain.
  • Fixed intermittently failing CatalogServiceImplIntegrationTest#shouldAddDeletedProjectionAsTombstone integration test.
  • The request-reindex goal of the ep-core-tool Maven plugin now waits for both search indexing and promotion rule compilation to complete (rather than just search index completion).

Supported Technology Updates​

  • Updated MySQL 5.7 Aurora supported version to 2.11.2.
  • Updated MySQL 5.7 RDS and standalone supported version to 5.7.41.
  • Updated MySQL 8.0 RDS and standalone supported version to 8.0.32.
  • Updated PostgreSQL 14 Aurora, RDS, and standalone supported version to 14.6.
  • Updated ActiveMQ supported version to 5.17.5.

Self-Managed Commerce 8.5.0 is compatible with the following Elastic Path releases:

Elastic Path ComponentCompatibility
Extension Point FrameworkExtension Point Framework compatibility matrix
CloudOps for KubernetesCloudOps for Kubernetes compatibility matrix

For more information, see Supported Technologies.

Dependency Changes​

Many dependencies were updated as part of Self-Managed Commerce 8.5.0. The highlights are shown below:

  • Required for Java 11 support
    • Upgraded Apache Velocity from 1.6.2 to 2.3.
    • Upgraded Apache Camel from 2.25.3 to 3.14.6.
    • Upgraded AspectJ from 1.8.9 to 1.9.19.
    • Upgraded Felix Framework from 5.6.10 to 7.0.5.
    • Upgraded Guice from 4.0 to 6.0.0.
    • Upgraded Jacoco from 0.7.5 to 0.8.10.
    • Upgraded Jersey from 2.28 to 2.40.
    • Upgraded Jmock from 2.8.4 to 2.9.0.
    • Upgraded Mockito from 2.25.0 to 3.12.4.
    • Upgraded Spring from 4.3.30 to 5.3.26.
    • Upgraded Spring Security from 4.2.4.RELEASE to 5.7.8. Note: This was further upgraded to 5.8.5 to address vulnerabilities (see below).
    • Upgraded Tycho from 1.0.0 to 1.7.0.
    • Upgraded aspectj-maven-plugin from 1.8 to 1.14.0.
    • Upgraded driver-binary-downloader-maven-plugin from 1.0.11 to 1.0.18.
    • Upgraded maven-plugin-plugin from 3.5.0 to 3.6.4.
    • Upgraded maven-war-plugin from 2.4 to 3.4.0.
    • Upgraded plexus-component-metadata from 1.5.5 to 2.1.1.
  • Required for Java 17 support
    • Upgraded Groovy from 2.4.15 to 2.5.22.
    • Upgraded maven-bundle-plugin from 4.2.1 to 5.1.9.
  • To address vulnerabilities
    • Removed commons-fileupload dependency.
    • Upgraded ActiveMQ KahaDB Store from 5.14.3 to 5.17.3.
    • Upgraded ESAPI from 2.1.0.1 to 2.3.0.0.
    • Upgraded Guava from 24.1.1-jre to 32.1-jre.
    • Upgraded JQuery from 1.11.3 to 3.5.1 (Cortex Studio).
    • Upgraded Spring Security from 5.7.8 to 5.8.5.
    • Upgraded Twitter Bootstrap from 3.3.5 to 3.4.1 (Cortex Studio).
    • Upgraded Wiremock from 2.23.2 to 2.27.2.
    • Upgraded XStream from 1.4.18 to 1.4.20.
    • Upgraded antisamy from 1.5.8 to 1.6.7.
    • Upgraded commons-configuration2 from 2.1.1 to 2.8.0.
    • Upgraded commons-text from 1.9 to 1.10.
    • Upgraded h2 from 1.4.200 to 2.1.214.
    • Upgraded hibernate-validator from 5.4.3.Final to 6.0.20.Final.
    • Upgraded httpclient from 4.5.5 to 4.5.13.
    • Upgraded jackson-databind from 2.12.3 to 2.12.7.
    • Upgraded jdom from 1.1.3 to 2.0.5_1.
    • Upgraded json-path from 2.4.0 to 2.6.0.
    • Upgraded json-smart from 2.4.7 to 2.4.10.
    • Upgraded mybatis from 3.2.2 to 3.5.11.
    • Upgraded mysql-connector-java from 8.0.25 to 8.0.30.
    • Upgraded org.json.json from 20170516 to 20220924.
    • Upgraded oshi from 5.7.4 to 6.4.0 (to add support for newer Mac operating systems).
    • Upgraded shiro-core from 1.8.0 to 1.9.1.
  • To address functional issues
    • Upgraded commons-validator from 1.6 to 1.7.

The complete list of all library dependency updates can be seen in the table below:

LibraryChange
accessors-smart-2.4.9.jarVersion changed from 2.4.7
annotations-3.0.1.jarAdded
aopalliance-repackaged-2.6.1.jarVersion changed from 2.5.0
asm-7.1.jarAdded
asm-9.3.jarVersion changed from 9.1
asm-3.3.1.jarRemoved
asm-5.0.4.jarRemoved
aspectjrt-1.9.19.jarVersion changed from 1.8.9
awaitility-2.0.0.jarAdded
byte-buddy-1.9.12.jarVersion changed from 1.8.21
byte-buddy-1.11.13.jarAdded
byte-buddy-agent-1.11.13.jarVersion changed from 1.8.21
camel-api-3.14.6.jarAdded
camel-attachments-3.14.6.jarAdded
camel-base-3.14.6.jarAdded
camel-base-engine-3.14.6.jarAdded
camel-bean-3.14.6.jarAdded
camel-browse-3.14.6.jarAdded
camel-cloud-3.14.6.jarAdded
camel-cluster-3.14.6.jarAdded
camel-controlbus-3.14.6.jarAdded
camel-core-3.14.6.jarVersion changed from 2.25.3
camel-core-engine-3.14.6.jarAdded
camel-core-languages-3.14.6.jarAdded
camel-core-model-3.14.6.jarAdded
camel-core-processor-3.14.6.jarAdded
camel-core-reifier-3.14.6.jarAdded
camel-core-xml-3.14.6.jarVersion changed from 2.25.3
camel-dataformat-3.14.6.jarAdded
camel-dataset-3.14.6.jarAdded
camel-direct-3.14.6.jarAdded
camel-directvm-3.14.6.jarAdded
camel-file-3.14.6.jarAdded
camel-groovy-3.14.6.jarVersion changed from 2.25.3
camel-health-3.14.6.jarAdded
camel-http-base-3.14.6.jarAdded
camel-http-common-3.14.6.jarVersion changed from 2.25.3
camel-jackson-3.14.6.jarVersion changed from 2.25.3
camel-jaxb-3.14.6.jarVersion changed from 2.25.3
camel-jms-3.14.6.jarVersion changed from 2.25.3
camel-jsonpath-3.14.6.jarVersion changed from 2.25.3
camel-language-3.14.6.jarAdded
camel-log-3.14.6.jarAdded
camel-mail-3.14.6.jarVersion changed from 2.25.3
camel-management-api-3.14.6.jarAdded
camel-mock-3.14.6.jarAdded
camel-ref-3.14.6.jarAdded
camel-rest-3.14.6.jarAdded
camel-saga-3.14.6.jarAdded
camel-scheduler-3.14.6.jarAdded
camel-script-2.25.3.jarRemoved
camel-seda-3.14.6.jarAdded
camel-servlet-3.14.6.jarVersion changed from 2.25.3
camel-spring-3.14.6.jarVersion changed from 2.25.3
camel-spring-xml-3.14.6.jarAdded
camel-stub-3.14.6.jarAdded
camel-support-3.14.6.jarAdded
camel-swagger-java-3.14.6.jarVersion changed from 2.25.3
camel-test-3.14.6.jarVersion changed from 2.25.3
camel-test-spring-3.14.6.jarVersion changed from 2.25.3
camel-timer-3.14.6.jarAdded
camel-tooling-model-3.14.6.jarAdded
camel-util-3.14.6.jarAdded
camel-util-json-3.14.6.jarAdded
camel-validator-3.14.6.jarAdded
camel-vm-3.14.6.jarAdded
camel-xml-io-util-3.14.6.jarAdded
camel-xml-jaxb-3.14.6.jarAdded
camel-xml-jaxp-3.14.6.jarAdded
camel-xpath-3.14.6.jarAdded
camel-xslt-3.14.6.jarAdded
cglib-3.2.0.jarRemoved
cglib-3.2.8.jarVersion changed from 2.2.2
cglib-nodep-3.1.jarAdded
commons-configuration2-2.1.1.jarRemoved
commons-digester3-3.2.jarAdded
commons-fileupload-1.5.jarVersion changed from 1.4
commons-net-2.0.jarRemoved
commons-net-3.8.0.jarRemoved
commons-net-3.9.0.jarVersion changed from 3.6
cucumber-core-4.4.0.jarVersion changed from 2.4.0
cucumber-expressions-7.0.2.jarAdded
cucumber-groovy-4.4.0.jarVersion changed from 2.0.1
cucumber-html-0.2.6.jarRemoved
cucumber-java-4.4.0.jarVersion changed from 2.4.0
cucumber-junit-4.4.0.jarVersion changed from 2.4.0
cucumber-jvm-deps-1.0.6.jarRemoved
cucumber-picocontainer-4.4.0.jarVersion changed from 2.4.0
cucumber-spring-4.4.0.jarAdded
datatable-1.1.14.jarAdded
datatable-dependencies-1.1.14.jarAdded
FastInfoset-1.2.18.jarAdded
gemini-blueprint-core-3.0.0.M01.jarVersion changed from 2.1.0.RELEASE
gemini-blueprint-io-3.0.0.M01.jarVersion changed from 2.1.0.RELEASE
gherkin-5.1.0.jarVersion changed from 5.0.0
gherkin-jvm-deps-1.0.4.jarRemoved
gmbal-api-only-4.0.3.jarAdded
groovy-2.5.22.jarVersion changed from 2.4.21
groovy-all-2.4.21.jarRemoved
groovy-json-2.5.22.jarAdded
groovy-xml-2.5.22.jarAdded
guice-6.0.0.jarVersion changed from 4.0
guice-multibindings-4.0.jarRemoved
h2-2.1.214.jarVersion changed from 1.4.200
ha-api-3.1.13.jarAdded
hadoop-hdfs-client-3.2.2.jarRemoved
hamcrest-2.1.jarAdded
HdrHistogram-2.1.12.jarVersion changed from 2.1.11
hk2-api-2.6.1.jarVersion changed from 2.5.0
hk2-locator-2.6.1.jarVersion changed from 2.5.0
hk2-utils-2.6.1.jarVersion changed from 2.5.0
htmlunit-2.70.0.jarVersion changed from 2.38.0
htmlunit-core-js-2.70.0.jarVersion changed from 2.38.0
htmlunit-cssparser-1.14.0.jarVersion changed from 1.5.0
htmlunit-xpath-2.70.0.jarAdded
jackson-annotations-2.13.4.jarVersion changed from 2.12.7
jackson-core-2.13.4.jarVersion changed from 2.12.7
jackson-databind-2.13.4.jarVersion changed from 2.12.7
jackson-dataformat-xml-2.12.7.jarVersion changed from 2.9.10
jackson-dataformat-yaml-2.12.7.jarVersion changed from 2.9.10
jackson-datatype-joda-2.12.7.jarVersion changed from 2.9.10
jackson-datatype-jsr310-2.13.4.jarVersion changed from 2.12.7
jackson-jaxrs-base-2.13.4.jarVersion changed from 2.12.7
jackson-jaxrs-json-provider-2.13.4.jarVersion changed from 2.12.7
jackson-module-jaxb-annotations-2.13.4.jarVersion changed from 2.9.10
jakarta.activation-1.2.2.jarAdded
jakarta.activation-api-1.2.2.jarAdded
jakarta.annotation-api-1.3.5.jarVersion changed from 1.3.4
jakarta.inject-2.6.1.jarVersion changed from 2.5.0
jakarta.inject-api-2.0.1.jarAdded
jakarta.jws-api-2.1.0.jarAdded
jakarta.mail-1.6.7.jarAdded
jakarta.ws.rs-api-2.1.6.jarVersion changed from 2.1.5
jakarta.xml.bind-api-2.3.3.jarAdded
jakarta.xml.soap-api-1.4.2.jarAdded
jakarta.xml.ws-api-2.3.3.jarAdded
javax.activation-1.2.0.jarAdded
javax.activation_1.1.0.v201211130549.jarAdded
javax.mail_1.4.0.v201005080615.jarAdded
javax.servlet-api-3.0.1.jarRemoved
jaxb-core-2.3.0.1.jarVersion changed from 2.3.0
jaxb-impl-2.3.8.jarVersion changed from 2.3.0
jaxws-rt-2.3.6.jarAdded
jcip-annotations-1.0.jarAdded
jersey-client-2.40.jarVersion changed from 2.28
jersey-common-2.40.jarVersion changed from 2.28
jersey-hk2-2.40.jarVersion changed from 2.28
jersey-media-jaxb-2.40.jarVersion changed from 2.28
jetty-client-9.4.27.v20200227.jarRemoved
jetty-client-9.4.50.v20221201.jarAdded
jetty-http-9.4.27.v20200227.jarRemoved
jetty-http-9.4.50.v20221201.jarAdded
jetty-io-9.4.27.v20200227.jarRemoved
jetty-io-9.4.50.v20221201.jarAdded
jetty-xml-9.4.27.v20200227.jarRemoved
jjwt-jackson-0.10.6.jarAdded
jline-1.0.S2-B.jarRemoved
jline-2.12.jarAdded
jmock-2.12.0.jarVersion changed from 2.8.4
jmock-imposters-2.12.0.jarAdded
jmock-junit4-2.12.0.jarVersion changed from 2.8.4
jmock-legacy-2.12.0.jarVersion changed from 2.8.4
jmock-testjar-2.12.0.jarVersion changed from 2.8.4
jna-5.12.1.jarVersion changed from 5.8.0
jna-platform-5.12.1.jarVersion changed from 5.8.0
joda-time-2.10.8.jarVersion changed from 2.7
json-simple-3.0.2.jarAdded
json-smart-2.4.10.jarVersion changed from 2.4.7
json-smart-action-2.3.jarRemoved
jsr305-3.0.0.jarRemoved
jwks-rsa-0.21.1.jarAdded
management-api-3.2.3.jarAdded
micrometer-core-1.7.12.jarVersion changed from 1.3.9
mimepull-1.9.15.jarAdded
mockito-core-3.12.4.jarVersion changed from 2.22.0
monte-screen-recorder-0.7.7.0.jarAdded
mxparser-1.2.2.jarRemoved
neko-htmlunit-2.70.0.jarVersion changed from 2.38.0
objenesis-2.1.jarVersion changed from 2.6
objenesis-3.2.jarAdded
objenesis-3.0.1.jarAdded
openjpa-3.2.2-ep1.3.jarVersion changed from 3.2.2-ep1.0
org.apache.felix.scr_2.0.14.v20180117-1452-4.8.0.jarRemoved
org.apache.felix.scr_2.0.14.v20180822-1822.jarAdded
org.apache.servicemix.bundles.aspectj-1.9.19_1.jarVersion changed from 1.8.8_1
org.eclipse.equinox.ds-1.5.200.jarVersion changed from 1.5.100
org.eclipse.equinox.event-1.4.300.jarVersion changed from 1.4.200
org.eclipse.osgi-3.13.100.jarVersion changed from 3.13.0
org.eclipse.osgi.services-3.7.100.jarVersion changed from 3.7.0
org.eclipse.osgi.util-3.5.100.jarVersion changed from 3.5.0
oro-2.0.8.jarRemoved
osgi-resource-locator-1.0.3.jarVersion changed from 1.0.1
oshi-core-6.4.0.jarVersion changed from 5.7.4
policy-2.7.10.jarAdded
saaj-impl-1.5.3.jarAdded
salvation2-3.0.1.jarAdded
serializer-2.7.2.jarRemoved
shiro-cache-1.9.1.jarVersion changed from 1.8.0
shiro-config-core-1.9.1.jarVersion changed from 1.8.0
shiro-config-ogdl-1.9.1.jarVersion changed from 1.8.0
shiro-core-1.9.1.jarVersion changed from 1.8.0
shiro-crypto-cipher-1.9.1.jarVersion changed from 1.8.0
shiro-crypto-core-1.9.1.jarVersion changed from 1.8.0
shiro-crypto-hash-1.9.1.jarVersion changed from 1.8.0
shiro-event-1.9.1.jarVersion changed from 1.8.0
shiro-lang-1.9.1.jarVersion changed from 1.8.0
spotbugs-annotations-4.7.3.jarAdded
spring-aop-5.3.26.jarVersion changed from 4.3.30.RELEASE
spring-batch-core-4.3.6.jarVersion changed from 4.2.3.RELEASE
spring-batch-infrastructure-4.3.6.jarVersion changed from 4.2.3.RELEASE
spring-beans-5.3.26.jarVersion changed from 4.3.30.RELEASE
spring-context-5.3.26.jarVersion changed from 4.3.30.RELEASE
spring-context-support-5.3.26.jarVersion changed from 4.3.30.RELEASE
spring-core-5.3.26.jarVersion changed from 4.3.30.RELEASE
spring-data-commons-2.7.2.jarVersion changed from 1.13.22.RELEASE
spring-data-jpa-2.7.2.jarVersion changed from 1.11.22.RELEASE
spring-expression-5.3.26.jarVersion changed from 4.3.30.RELEASE
spring-jcl-5.3.26.jarAdded
spring-jdbc-5.3.26.jarVersion changed from 4.3.30.RELEASE
spring-jms-5.3.26.jarVersion changed from 4.3.30.RELEASE
spring-messaging-5.3.26.jarVersion changed from 4.3.30.RELEASE
spring-orm-5.3.26.jarVersion changed from 4.3.30.RELEASE
spring-retry-1.3.3.jarVersion changed from 1.2.5.RELEASE
spring-security-config-5.7.8.jarVersion changed from 4.2.13.RELEASE
spring-security-core-5.7.8.jarVersion changed from 4.2.13.RELEASE
spring-security-crypto-5.7.8.jarAdded
spring-security-oauth2-2.5.2.RELEASE.jarRemoved
spring-security-remoting-4.2.13.RELEASE.jarRemoved
spring-security-web-5.7.8.jarVersion changed from 4.2.13.RELEASE
spring-shell-1.2.0.RELEASE.jarVersion changed from 1.0.0.RELEASE
spring-test-5.3.26.jarVersion changed from 4.3.30.RELEASE
spring-tx-5.3.26.jarVersion changed from 4.3.30.RELEASE
spring-velocity-support-2.3.jarAdded
spring-web-5.3.26.jarVersion changed from 4.3.30.RELEASE
spring-webmvc-4.3.30.RELEASE.jarRemoved
stax-1.2.0.jarRemoved
stax-api-1.0.1-no-namespace.jarRemoved
stax-ex-1.8.3.jarAdded
streambuffer-1.5.10.jarAdded
swagger-annotations-1.6.4.jarVersion changed from 1.5.21
swagger-core-1.6.4.jarVersion changed from 1.5.21
swagger-jaxrs-1.6.4.jarVersion changed from 1.5.21
swagger-models-1.6.4.jarVersion changed from 1.5.21
swagger-parser-1.0.56.jarVersion changed from 1.0.37
velocity-1.6.2.jarRemoved
velocity-engine-core-2.3.jarAdded
velocity-tools-1.2.jarRemoved
velocity-tools-generic-3.1.jarAdded
velocity-tools-view-3.1.jarAdded
websocket-api-9.4.27.v20200227.jarRemoved
websocket-api-9.4.50.v20221201.jarAdded
websocket-client-9.4.27.v20200227.jarRemoved
websocket-client-9.4.50.v20221201.jarAdded
websocket-common-9.4.27.v20200227.jarRemoved
websocket-common-9.4.50.v20221201.jarAdded
wiremock-2.27.2.jarVersion changed from 2.23.2
woodstox-core-6.5.0.jarAdded
xalan-2.7.2.jarRemoved
xmlbeans-3.0.0.jarRemoved
xmlpull-1.1.3.1.jarRemoved
xmlunit-core-2.7.0.jarVersion changed from 2.6.2
xmlunit-legacy-2.7.0.jarVersion changed from 2.6.2
xmlunit-placeholders-2.7.0.jarVersion changed from 2.6.2
xstream-1.4.19.jarRemoved

Upgrade notes​

The upgrading Elastic Path guide provides general instructions on upgrading Elastic Path projects.

Java and Maven versions​

Self-Managed Commerce 8.5 now requires Azul Zulu OpenJDK 17 JDK and Maven 3.9.1 for builds. A Maven enforcer plugin is configured to show an error if these requirements are not met.

Additionally, an Azul Zulu OpenJDK 17 Java runtime engine must be available.

For more information, see Supported Technologies and Java Upgraded from version 8 to 17.

Build memory usage​

The build process in Self-Managed Commerce 8.5 requires more available heap space than previous versions. To address this, local developers need to change the -Xmx values in their JAVA_OPTS and MAVEN_OPTS environment variables.

For more information, see Configuring Environment Variables.

Ehcache configuration​

If your project has overridden Ehcache configuration values by modifying ehcache-60-minutes.xml, ehcache-5-seconds.xml, or ehcache-local.xml, these changes will need to be refactored since those files have been deleted.

For cache values that should be used in development environments, where performance is less of a concern than quick updates, your customizations should be merged into extensions/database/ext-data/src/main/resources/environments/default/files/conf/cache/ehcache-fast-updates.xml.

For cache values that should be used in production, we recommend the following:

  • Create a new Ehcache XML file in the extensions/database/ext-data/src/main/resources/environments/default/files/conf/cache folder.

  • Update the ep.external.ehcache.xml.path value of the ep.properties file in each of the environment folders where it should be used. See the example below:

    ep.external.ehcache.xml.path=${user.home}/ep/conf/cache/ehcache-custom.xml

Commerce Engine changes​

  • The AbstractJPAManageableMapWrapper, Modifiable and ModifierFieldsMapWrapper classes have been moved from the com.elasticpath.domain.misc.types package to the com.elasticpath.persistence.api.domain.types package.
  • The LocalizedAttributeKeyUtils class has been moved from the com.elasticpath.domain.misc package to the com.elasticpath.persistence.api.domain.utils package.
  • The AbstractExtensibleListBeanDefinitionParser, ExtensibleListCreateBeanDefinitionParser, ExtensibleListFactoryBean, ExtensibleListModifyBeanDefinitionParser, and ExtensibleListNamespaceHandler classes have been moved from the com.elasticpath.commons.beanframework.config package to the com.elasticpath.commons.extensiblelists package.
  • The maven-bundle-plugin in ep-core module will now fail to build if split packages are detected. Split packages are defined as multiple bundles exporting the same package. This should be corrected by either moving classes from the same package into the same bundle, or changing the package names for classes that need to be exported from separate bundles.
  • The PersistenceEngine#get method has been removed. Refactor any code calling this method with a call to PersistenceEngine#load instead.

Import/Export changes​

Schema for coupons in the coupon_sets.xml has changed​

Since multiple TCOUPON records can now contain the same coupon code, the Import/Export coupon schema now requires that a guid attribute be specified.

The schema now looks as follows:

<coupon_set>
<coupon_config>
...etc...
</coupon_config>
<coupons>
<coupon guid="a0697911-6080-44b8-915d-47693cfb7fa4">test</coupon>
</coupons>
<coupon_usages/>
</coupon_set>
Schema for catalog promotions in promotions.xml has changed​

Previously, catalog promotions could only be associated to a single catalog:

<promotion type="Catalog">
<catalog_code>Mobile</catalog_code>
<name>Test Promotion</name>
...etc...
</promotion>

Now, catalog promotions support an applies_to_all_catalogs flag (which is optional), and a list of catalog codes:

<promotion type="Catalog">
<catalogs>
<catalog_code>Mobile</catalog_code>
<catalog_code>Toastie</catalog_code>
</catalogs>
<applies_to_all_catalogs>false</applies_to_all_catalogs>
<name>Test Promotion</name>
...etc...
</promotion>
Schema for cart promotions in promotions.xml has changed​

Previously, shopping cart promotions could only be associated to a single store:

<promotion type="Cart">
<store_code>Mobee</store_code>
<name>Test Promotion</name>
...etc...
</promotion>

Now, shopping cart promotions support an applies_to_all_stores flag (which is optional), and a list of store codes:

<promotion type="Cart">
<stores>
<store_code>Mobee</store_code>
<store_code>Kobee</store_code>
</stores>
<applies_to_all_stores>false</applies_to_all_stores>
<name>Test Promotion</name>
...etc...
</promotion>
Supported values for the priceCalculationMethod in tax_jurisdiction.xml have changed​

Previously the priceCalculationMethod field was a boolean, which was unclear:

<tax_jurisdictions>
<jurisdiction guid="CATaxJurisdiction">
<region_code>CA</region_code>
<priceCalculationMethod>false</priceCalculationMethod>
<tax_categories/>
</jurisdiction>
</tax_jurisdictions>

Now the field supports clearer enum values:

<tax_jurisdictions>
<jurisdiction guid="CATaxJurisdiction">
<region_code>CA</region_code>
<priceCalculationMethod>TAX_INCLUSIVE</priceCalculationMethod>
<tax_categories/>
</jurisdiction>
</tax_jurisdictions>

For backwards compatibility, imports will accept any of the following values:

  • TAX_INCLUSIVE
  • TAX_EXCLUSIVE
  • true (maps to TAX_INCLUSIVE)
  • false (map to TAX_EXCLUSIVE)

Exports will only return TAX_INCLUSIVE or TAX_EXCLUSIVE.

The notsoldseperately field in products.xml has been renamed​

The notsoldseperately field contained a spelling mistake, so it has been renamed to notsoldseparately.

For backwards compatibility, imports will accept either the notsoldseperately field name or the notsoldseparately field name.

Exports will always use the notsoldseparately field name.

Shopping Cart Promotions now define enable date and disable date in availability instead of selling context in promotions.xml​

The enable date and disable date restrictions on shopping cart promotions were previously defined as selling context conditions, as in the following example:

<promotion type="Cart">
<store_code>store-VirtualAB</store_code>
<name>time_Enabled</name>
<displayName>
<value language="es">time_Enabled</value>
</displayName>
<code>449d6c50-cbec-4203-86d0-7f5886def9ba</code>
<availability>
<enabled>true</enabled>
</availability>
<actions/>
<selling_context>
<guid>b773a804-b35d-4687-8171-e838ddb83119</guid>
<name>time_Enabled</name>
<priority>0</priority>
<conditions>
<condition>
<guid>8006757d-4d07-46bf-a737-554455947ac9</guid>
<name>4148265397162700</name>
<condition_string> { AND { SHOPPING_START_TIME.greaterThan (1483229460000L) } { SHOPPING_START_TIME.lessThan (1488240660000L) } } </condition_string>
<dictionary_guid>TIME</dictionary_guid>
</condition>
</conditions>
</selling_context>
</promotion>

Now enable date and disable date are defined as part of availability, just like catalog promotions:

<promotion type="Cart">
<store_code>store-VirtualAB</store_code>
<name>time_Enabled</name>
<displayName>
<value language="es">time_Enabled</value>
</displayName>
<code>449d6c50-cbec-4203-86d0-7f5886def9ba</code>
<availability>
<enabled>true</enabled>
<enabledate>2017-01-01T00:11:00+00:00</enabledate>
<disabledate>2017-02-28T00:11:00+00:00</disabledate>
</availability>
<actions/>
</promotion>
Price List Assignments now define start date and end date as top-level fields instead of selling context in price_list_assignments.xml​

The start date and end date restrictions on price list assignments were previously defined as selling context conditions, as in the following example:

<price_list_assignment>
<guid>606c1507-901c-477b-ac67-ae9cd3b6544f</guid>
<name>Alternative Pricing for Mobee Based on Time</name>
<priority>4</priority>
<catalog_guid>Mobile</catalog_guid>
<price_list_guid>ffde669d-3d8e-4d9d-bb9a-832a60e0c110</price_list_guid>
<selling_context>
<guid>70a8e011-cfbb-4ed9-bbc1-5335430d1c07</guid>
<name>SELLING_CONTEXT_NAME_null</name>
<description>SELLING_CONTEXT_DESCR_null</description>
<priority>0</priority>
<conditions>
<condition>
<guid>acc01c30-346b-4d66-a824-4f660655cbaf</guid>
<name>2785799330702988</name>
<condition_string> { AND { SHOPPING_START_TIME.greaterThan (1394233200000L) } { SHOPPING_START_TIME.lessThan (1924988400000L) } } </condition_string>
<dictionary_guid>TIME</dictionary_guid>
</condition>
</conditions>
</selling_context>
</price_list_assignment>

Now start date and end date are defined as top level fields:

<price_list_assignment>
<guid>606c1507-901c-477b-ac67-ae9cd3b6544f</guid>
<name>Alternative Pricing for Mobee Based on Time</name>
<priority>4</priority>
<catalog_guid>Mobile</catalog_guid>
<price_list_guid>ffde669d-3d8e-4d9d-bb9a-832a60e0c110</price_list_guid>
<start_date>2014-03-07T23:00:00+00:00</start_date>
<end_date>2030-12-31T23:00:00+00:00</end_date>
<selling_context>
<guid>70a8e011-cfbb-4ed9-bbc1-5335430d1c07</guid>
<name>SELLING_CONTEXT_NAME_null</name>
<description>SELLING_CONTEXT_DESCR_null</description>
<priority>0</priority>
</selling_context>
</price_list_assignment>
Date and DateTime attribute values are now specified in ISO8601 format​

Customer profile, product, product sku, and category attribute values defined as Date or DateTime were previously specified using the format defined by the COMMERCE/SYSTEM/localeDateFormat system configuration setting:

<attribute key="catReleaseDate">
<value>Sun Apr 22 00:00:00 2012</value>
</attribute>
<attribute key="A00017">
<value>Tue Nov 15 19:46:00 2011</value>
</attribute>

Now these dates are always specified in ISO8601 format:

<attribute key="catReleaseDate">
<value>2012-04-22</value>
</attribute>
<attribute key="A00017">
<value>2011-11-15T19:46:00</value>
</attribute>

For backwards compatibility, imports will accept either the ISO8601 format or the old format defined by the COMMERCE/SYSTEM/localeDateFormat system configuration setting.

Exports will always export using the ISO8601 format.

Upgraded libraries​

This section contains details about major library upgrades that may impact your customizations.

Java upgraded from version 8 to 17​

As part of the Java 8 to 17 upgrade, some changes may be required to your customizations:

Runtime JVM parameters​

Some new JVM parameters need to be specified when your application server is started for the Self-Managed Commerce services. These include:

  • -Djava.locales.provider=COMPAT to ensure that locale sensitive services are compatible with the Java 8.
  • -XX:+UseParallelGC to ensure that the Parallel garbage collector is used. Our tests have found that the Parallel garbage collector supports higher throughput than the default G1 garbage collector.
  • Several --add-opens values to allow runtime access to non-public JVM modules.

For a complete list of JVM parameters that should be specified, see the java --> jvmRuntimeArguments node within the devops/ops-spec/src/main/resources/ops-spec.json file.

note

For project teams using CloudOps for Kubernetes, these JVM parameters will be specified by default for all deployments.

Most build warnings are now treated as build failures​

In previous versions of Self-Managed Commerce, modules using the Groovy Eclipse Compiler would allow build warnings without failing the build. Now, warnings in most modules are upgraded to errors so any build warnings will need to be fixed or suppressed using @SuppressWarnings.

IntelliJ configuration​

When opening the Self-Managed Commerce 8.5 source code in IntelliJ, it is important to make sure that IntelliJ is using the Java 17 JDK for internal builds. By default, IntelliJ will likely detect that the source is using Java 11, since the code compiles to Java 11 bytecode.

If IntelliJ is not configured properly, the Java classes will not resolve properly, and you see the following error message:

Unable to provision, see the following errors:

1) Error in custom provider, java.lang.TypeNotPresentException: Type org.eclipse.tycho.core.maven.TychoMavenLifecycleParticipant not present
at ClassRealm[extension>org.eclipse.tycho:tycho-maven-plugin:4.0.0, parent: jdk.internal.loader.ClassLoaders$AppClassLoader@5c29bfd] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
while locating org.apache.maven.AbstractMavenLifecycleParticipant annotated with @com.google.inject.name.Named(value="TychoMavenLifecycleListener")

1 error

To correct this issue, follow these steps:

  1. Right-click on the root project (ep-commerce [commerce-parent])
  2. Click "Open Module Settings"
  3. Click "Project Settings" --> "Project"
  4. Change SDK to "zulu-17" (it will likely be set to "zulu-11")
  5. Then right-click on the root project pom.xml, and click "Maven" --> "Reload Project"
Removed cm-p2-repository dependency from all Commerce Manager modules​

We have removed the cm-p2-repository dependency from all Commerce Manager plugin modules. As a result, Commerce Manager plugins may now be missing dependencies on other modules, such as com.elasticpath.cmclient.core.

If a dependency is missing, you will see a build-time error message similar to the following:

[ERROR] Cannot resolve project dependencies:
[ERROR] Software being installed: ext-fulfillment 0.0.0.qualifier
[ERROR] Missing requirement: com.elasticpath.cmclient.core 0.0.0.2023083023 requires 'osgi.bundle; com.elasticpath.ep-base 0.0.0' but it could not be found
[ERROR] Cannot satisfy dependency: com.elasticpath.extensions.cm.ext-cm-libs 0.0.0.SNAPSHOT depends on: osgi.bundle; com.elasticpath.cmclient.core 0.0.0
[ERROR] Cannot satisfy dependency: ext-fulfillment 0.0.0.qualifier depends on: osgi.bundle; com.elasticpath.extensions.cm.ext-cm-libs 0.0.0
[ERROR]
[ERROR] See https://wiki.eclipse.org/Tycho/Dependency_Resolution_Troubleshooting for help.

Based on the error message, you will need to add the missing dependency to your Commerce Manager plugin module pom.xml, as in the following example:

<dependency>
<groupId>com.elasticpath.cmclient</groupId>
<artifactId>com.elasticpath.cmclient.core</artifactId>
</dependency>
Apache Velocity upgraded from version 1.6.2 to 2.3​

This upgrade was necessary to support Java 11.

Several changes were required as part of the Spring Framework upgrade which might affect customizations. They are outlined here:

  • Velocity org.apache.velocity.tools.view.servlet.WebappLoader class was renamed to org.apache.velocity.tools.view.WebappResourceLoader.
    • The definition of several methods in this class have also changed.
  • Several Velocity classes were moved from Spring Framework into Velocity itself:
    • org.springframework.ui.velocity.VelocityEngineFactory class was moved to org.apache.velocity.spring.VelocityEngineFactory.
    • org.springframework.ui.velocity.VelocityEngineUtils class was moved to org.apache.velocity.spring.VelocityEngineUtils.
  • Several Velocity class methods have changed their parameters from org.apache.commons.collections.ExtendedProperties to org.apache.velocity.util.ExtProperties.
  • The org.apache.velocity.tools.generic.ListTool class has changed to org.apache.velocity.tools.generic.LoopTool.
  • The org.apache.velocity.tools.generic.IteratorTool class has been renamed. #foreach should be used instead in Velocity templates.
  • The org.apache.velocity:velocity dependency has changed to org.apache.velocity:velocity-engine-core.
  • The org.apache.velocity.runtime.log.NullLogSystem class has been removed. org.slf4j.helpers.NOPLogger should be used instead.

Some Velocity template behaviour has changed, so some of your custom Velocity email templates may no longer work the same. You can maximize compatibility with older versions of Velocity by adding backwards compatibility properties as documented here. Pay special consideration to the following properties, which we found made the biggest difference to compatibility:

# When using an invalid reference handler, also include quiet references (since 2.2)
event_handler.invalid_references.quiet = true

# When using an invalid reference handler, also include null references (since 2.2)
event_handler.invalid_references.null = true

# When using an invalid reference handler, also include tested references (since 2.2)
event_handler.invalid_references.tested = true

To set Velocity properties, open commerce-engine/email/ep-email/src/main/resources/META-INF/elasticpath/conf/spring/plugin.xml, and modify the entries in the velocityProperties bean.

Spring Framework upgraded from version 4.3.30 to 5.3.26​

This upgrade was necessary to support Java 11.

Several changes were required as part of the Spring Framework upgrade which might affect customizations. They are outlined here:

  • Spring Data CrudRepository methods renamed:
    • findOne renamed to findById
    • save renamed to saveAll
  • Spring Shell BannerProvider methods renamed:
    • name renamed to getProviderName
  • Spring Context Support EhCacheFactoryBean methods renamed:
    • statisticsEnabled renamed to statistics
  • Several deprecated Spring classes were removed but still required, so they have been added to ep-core/src/main/java/com/elasticpath/commons/spring/legacy:
    • BaseDigestPasswordEncoder
    • BasePasswordEncoder
    • MessageDigestPasswordEncoder
    • PasswordEncoder
    • PasswordEncoderUtils
    • ShaPasswordEncoder
  • Unused Dynamic Content rendering classes have been removed:
    • com.elasticpath.service.contentspace.RendererFactory
    • com.elasticpath.service.contentspace.Renderer
    • com.elasticpath.service.contentspace.impl.VelocityRendererImpl
  • Unused and deprecated com.elasticpath.email.util.LegacyEmailComposer composer class has been removed. Use com.elasticpath.email.producer.spi.composer.impl.EmailComposerImpl instead.
  • Spring Security org.springframework.security.oauth2.common.OAuth2AccessToken class was removed. Use com.elasticpath.rest.relos.rs.authentication.springoauth2.impl.OAuth2AccessTokenResponse instead.
  • RenderMediatorImpl#render method has been replaced with RenderMediatorImpl#generateRenderContext, which contains details required for rendering, without actually rendering.
  • Unnecessary spring-webmvc dependencies removed.
Apache Camel upgraded from version 2.25.3 to 3.14.6​

This upgrade was necessary to support Java 11.

Several changes were required as part of the Spring Framework upgrade which might affect customizations. We strongly recommend reviewing the Apache Camel 2.x to 3.0 Migration Guide. Additionally, several key changes are outlined here:

Package renames​
  • org.apache.camel.impl.CamelPostProcessorHelper moved to org.apache.camel.impl.engine.CamelPostProcessorHelper
  • org.apache.camel.impl.DefaultCamelBeanPostProcessor moved to org.apache.camel.impl.engine.DefaultCamelBeanPostProcessor
  • org.apache.camel.processor.RedeliveryPolicy moved to org.apache.camel.processor.errorhandler.RedeliveryPolicy
  • org.apache.camel.processor.aggregate.AggregationStrategy moved to org.apache.camel.AggregationStrategy
  • org.apache.camel.spring.CamelEndpointFactoryBean moved to org.apache.camel.spring.xml.CamelEndpointFactoryBean (also requires adding camel-spring-xml dependency)
  • org.apache.camel.util.ServiceHelper moved to org.apache.camel.support.service.ServiceHelper
  • org.apache.camel.impl.DefaultExchange moved to org.apache.camel.support.DefaultExchange
  • org.apache.camel.impl.DefaultMessage moved to org.apache.camel.support.DefaultMessage
  • org.apache.camel.impl.JndiRegistry moved to org.apache.camel.spi.Registry
  • org.apache.camel.language.Simple moved to org.apache.camel.language.simple.Simple
  • org.apache.camel.model.RedeliveryPolicyDefinition moved to org.apache.camel.processor.errorhandler.RedeliveryPolicy
CamelTestSupport class​

If CamelTestSupport is used, replace the camel-test dependency with the camel-test-spring dependency.

Camel Script dependency​

Remove all camel-script dependencies.

adviceWith method​

Uses of the adviceWith method such as the following example need to be updated:

context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
interceptSendToEndpoint(SMTP_SCHEME + "://*")
.skipSendToOriginalEndpoint()
.process(errorGenerator)
.to(outgoingEndpoint);
}
});

The updated code becomes:

AdviceWith.adviceWith(context, "ep-email-sender", adviceWithRouteBuilder -> {
adviceWithRouteBuilder.interceptSendToEndpoint(SMTP_SCHEME + "://*")
.skipSendToOriginalEndpoint()
.process(errorGenerator)
.to(outgoingEndpoint);
});
addAttachment method​

Uses of the addAttachment method such as the following example need to be updated:

message.addAttachment(attachmentFilename, new DataHandler(new ByteArrayDataSource(attachmentData, mimeType)));

The updated code becomes:

AttachmentMessage attachmentMessage = exchange.getMessage(AttachmentMessage.class);
attachmentMessage.addAttachment(attachmentFilename, new DataHandler(new ByteArrayDataSource(attachmentData, mimeType)));
JndiRegistry class​

Test classes extending CamelTestSupport can no longer initialize the Camel registry as follows:

@Override
protected JndiRegistry createRegistry() throws Exception {
final JndiRegistry registry = super.createRegistry();
new TransactionPolicyRegistryManager(registry).registerDefaultTransactionPolicy();
return registry;
}

Instead, the following line should be added within the setup method:

new TransactionPolicyRegistryManager(context().getRegistry()).registerDefaultTransactionPolicy();
body method in Camel route builders​

Route builders can no longer use the body method as in the following example:

body().method("methodName")

Instead, the following code should be used:

simple("${body.methodName()}")
ErrorHandlingPolicy#setRedeliveryPolicy method replaced​

The ErrorHandlingPolicy#setRedeliveryPolicy method has been replaced with ErrorHandlingPolicy#setRedeliveryPolicyRef. For example, the following code needs to be modified:

final RedeliveryPolicyDefinition redeliveryPolicy = new RedeliveryPolicyDefinition()
.maximumRedeliveries(MAX_REDELIVERY_ATTEMPTS)
.redeliveryDelay(0L); // go fast

errorHandlingPolicy = new RecoverableRetryErrorHandlingPolicy();
errorHandlingPolicy.setDeadLetterQueueEndpoint(deadLetterEndpoint);
errorHandlingPolicy.setRedeliveryPolicy(redeliveryPolicy);
errorHandlingPolicy.setRecoverableExceptions(EpServiceException.class);

Instead, the following code should be used:

final RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy()
.maximumRedeliveries(MAX_REDELIVERY_ATTEMPTS)
.redeliveryDelay(0L); // go fast
context().getRegistry().bind(REDELIVERY_POLICY_ID, redeliveryPolicy);

errorHandlingPolicy = new RecoverableRetryErrorHandlingPolicy();
errorHandlingPolicy.setDeadLetterQueueEndpoint(deadLetterEndpoint);
errorHandlingPolicy.setRedeliveryPolicyRef(REDELIVERY_POLICY_ID);
errorHandlingPolicy.setRecoverableExceptions(EpServiceException.class);
Registry#put method replaced​

The Registry#put method has been replaced with Registry#bind. For example, the following code needs to be modified:

registry.put("json-jackson", jacksonDataFormat);

Instead, the following code should be used:

registry.bind("json-jackson", jacksonDataFormat);
Camel#properties XML node replaced​

The Camel#properties XML node has been replaced with Camel#globalOptions. For example, the following code needs to be modified:

<camel:properties>
<camel:property key="CamelLogDebugBodyMaxChars" value="0"/>
</camel:properties>

Instead, the following code should be used:

<camel:globalOptions>
<camel:globalOption key="CamelLogDebugBodyMaxChars" value="0"/>
</camel:globalOptions>
from XML node parameters changed​

The from XML node has had its ref property replaced with uri. For example, the following code needs to be modified:

<from ref="domainBulkMessageHandlerInternalEndpoint"/>

Instead, the following code should be used:

<from uri="ref:domainBulkMessageHandlerInternalEndpoint"/>
@EndpointInject annotation parameters changed​

The @EndpointInject annotation its ref property replaced with the default URI value. For example, the following code needs to be modified:

@EndpointInject(ref = "epChangeSetMessagingChangeSetEventExternalEndpoint")

Instead, the following code should be used:

@EndpointInject("ref:epChangeSetMessagingChangeSetEventExternalEndpoint")

Also, the context parameter is no longer supported.

PojoProxyHelper changes​

The PojoProxyHelper class can be useful for defining a bean that allows Java methods to send a message to a Camel endpoint. This could be used in combination with the com.elasticpath.messaging.EventMessagePublisher interface as in the following example:

final EventMessage message = eventMessageFactory.createEventMessage(eventType, "200", additionalData);
eventMessagePublisher.publish(message);

However, the org.apache.camel.component.bean.PojoProxyHelper class has now been deprecated. Therefore, any beans defined using the org.apache.camel.component.bean.PojoProxyHelper class should be updated to use the org.apache.camel.component.bean.ProxyHelper class instead.

For example:

<bean id="inventoryEventMessagePublisher" class="org.apache.camel.component.bean.PojoProxyHelper" factory-method="createProxy">
<constructor-arg ref="inventoryEventInternalEndpoint"/>
<constructor-arg>
<util:list>
<value>com.elasticpath.messaging.EventMessagePublisher</value>
</util:list>
</constructor-arg>
</bean>

Becomes:

<bean id="inventoryEventMessagePublisher" class="org.apache.camel.component.bean.ProxyHelper" factory-method="createProxy">
<constructor-arg ref="inventoryEventInternalEndpoint"/>
<constructor-arg value="com.elasticpath.messaging.EventMessagePublisher"/>
</bean>

Database changes​

  • Deleted unused setting definition records:
    • COMMERCE/STORE/PRODUCTRECOMMENDATIONS/numberOrderHistoryDays
    • COMMERCE/STORE/PRODUCTRECOMMENDATIONS/numberMaxRecommendations
  • Added new setting definition records:
    • COMMERCE/SYSTEM/ENCRYPTCUSTOMERPASSWORDS/enabled
    • COMMERCE/SYSTEM/ENCRYPTCUSTOMERPASSWORDS/batchSize
    • COMMERCE/SYSTEM/ORDERCLEANUP/enable
    • COMMERCE/SYSTEM/ORDERCLEANUP/batchSize
    • COMMERCE/SYSTEM/ORDERCLEANUP/maxHistory
    • COMMERCE/SYSTEM/CATALOGSYNDICATIONHISTORYCLEANUP/batchSize
    • COMMERCE/SYSTEM/CATALOGSYNDICATIONHISTORYCLEANUP/maxHistory
  • Changed COMMERCE/SYSTEM/CACHING/PRODUCT/maxEntriesLocalHeap setting definition default value from 5000 to 1000 to avoid Search Server running out of heap space.
  • Converted STORECODE field to upper-case on the following tables:
    • TCUSTOMER
    • TORDER
    • TSHOPPINGCART
    • TSTORECUSTOMERATTRIBUTE
    • TSTOREPAYMENTPROVIDERCONFIG
    • TWISHLIST
    • TSTORE
  • Converted SHARED_ID field to upper-case on the following tables:
    • TCUSTOMER
  • Removed duplicate indexes from TORDERADDRESS table:
    • I_ORDERADDRESS_FIRST_NAME
    • I_ORDERADDRESS_LAST_NAME
    • I_ORDERADDRESS_ZIP_POSTAL_CODE
    • I_ORDERADDRESS_PHONE_NUMBER
  • Replaced ORDER_NUMBER field with ORDER_UID on the following tables:
    • TORDERPAYMENT
    • TORDERPAYMENTINSTRUMENT
    • TTAXJOURNAL
    • TGIFTCERTIFICATE (original field was named ORDER_GUID)
  • Enabled cascade delete on the following foreign key relationships:
    • TCUSTOMER.AUTHENTICATION_UID -> TCUSTOMER.UIDPK
  • Added a OIDC_SUBJECT field to TCUSTOMER table for storing the subject identifier from a third-party Identity Provider when using OpenID Connect.
  • Changed CP_FIRST_NAME and CP_LAST_NAME attributes to optional for customers.
  • Deleted all TCUSTOMERAUTHENTICATION records with null USERNAME or USERNAME_UPPER fields and added a non-null constraint on these fields.
  • Added an ADDED_BY_PROMOTION field to the TCARTITEM and TORDERSKU tables. This flag indicates if a line item was added by a promotion.
  • Added an index on TSHOPPINGCART.LAST_MODIFIED_DATE to improve performance of the abandoned cart cleanup job.
  • Added indexes on TLOCALIZEDPROPERTIES.TYPE and TLOCALIZEDPROPERTIES.LOCALIZED_PROPERTY_KEY to improve Cortex performance.
  • Added an unique constraint on TINDEXBUILDSTATUS.INDEX_TYPE
  • Removed unique constraint on TTAXVALUE.TAX_REGION_UID and TTAXVALUE.TAX_CODE_UID.
  • Changed the TCATALOGPROJECTIONS.DISABLE_DATE_TIME field from TIMESTAMP to DATETIME to match the field type used in the TPRODUCT and TPRODUCTSKU tables.
  • Added field to TCUSTOMERAUTHENTICATION table:
    • ENCRYPTION_TYPE: VARCHAR(255)
  • Support for linking promotions to multiple stores and catalog:
    • Added new fields to TRULE:
      • APPLIES_TO_ALL_CATALOGS: BOOLEAN
      • APPLIES_TO_ALL_STORES: BOOLEAN
    • Removed fields from TRULE:
      • CATALOG_UID
      • STORE_UID
    • Created new TRULECATALOGASSOCIATION table with fields:
      • RULE_UID: BIGINT
      • CATALOG_UID: BIGINT
    • Created new TRULESTOREASSOCIATION table with fields:
      • RULE_UID: BIGINT
      • STORE_UID: BIGINT
    • Migrated catalog and store associations from TRULE.CATALOG_UID to TRULECATALOGASSOCIATION table, and catalog associations from TRULE.STORE_UID to TRULESTOREASSOCIATION table.
  • Moved promotion start and end date conditions from selling context Groovy rules to TRULE fields.
    • Copied the start and end dates from TIME selling context conditions into the TRULE.START_DATE and TRULE.END_DATE fields.
    • Deleted all TTAGCONDITION records associated to promotions with TAGDICTIONARY_GUID = 'TIME'.
  • Moved price list assignment start and end date conditions from selling context Groovy rules to TPRICELISTASSIGNMENT fields.
    • Added new fields to TPRICELISTASSIGNMENT:
      • START_DATE: TIMESTAMP
      • END_DATE: TIMESTAMP
    • Copied the start and end dates from TIME selling context conditions into the TPRICELISTASSIGNMENT.START_DATE and TPRICELISTASSIGNMENT.END_DATE fields.
    • Deleted all TTAGCONDITION records associated to price list assignments with TAGDICTIONARY_GUID = 'TIME'.
  • Support for multiple coupons with the same coupon code:
    • Added field to TCOUPON table:
      • GUID: VARCHAR(64)
    • Added unique constraint on GUID field.
    • Populated GUID field with generated UUID values.
    • Removed unique constraint on COUPONCODE_UPPER field and replaced with a non-unique index.
  • Support for bundle constituents based on GUID relationship instead of UID:
    • Added new fields to TBUNDLECONSTITUENTX:
      • PRODUCT_GUID: VARCHAR(64)
      • PRODUCT_SKU_GUID: VARCHAR(64)
    • Migrated product and sku values from CONSTITUENT_UID to PRODUCT_GUID and CONSTITUENT_SKU_UID to PRODUCT_SKU_GUID.
    • Removed fields from TBUNDLECONSTITUENTX:
      • CONSTITUENT_UID
      • CONSTITUENT_SKU_UID