Elastic Path Commerce 8.5.x Release Notes
Learn about changes to Elastic Path 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 Elastic Path Commerce 8.5 since its release date. To learn how to consume the updates, see Consuming Support Fixes.
- 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 useJPQLQueryBuilder
and optimized generated query for determining product associations. (14-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 whenfollowLocation
is used. (13-Nov-2024) - 37c92d32: Updated product, product sku, and category default cache timeouts from 1 second to 1 hour. (13-Nov-2024)
- 82d18b18: Renamed
notsoldseperately
tonotsoldseparately
in snapitupproducts.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. (16-Oct-2024)
- eac56d4e: Fixed Spring circular dependency that was causing
NullPointerException
s during Integration Server startup. (9-Oct-2024) - 86d962c0: Added pagination support for wish list line items in Cortex. (9-Oct-2024)
- 1afb4fb1: Fixed preconditions in
core-changelog-2020-08-cleanup-expired-failed-orders-job.xml
to avoid potential upgrade error. (3-Oct-2024) - 003b1aea: Upgraded certified ActiveMQ version from 5.16.7 to 5.18.5 (26-Sep-2024)
- b216e4ba: Added missing Liquibase checksums to changesets that were updated during the Liquibase upgrade. (26-Sep-2024)
- 87045e6d: Removed support for
user-name
anduser-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. (13-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. (11-Sep-2024)
- 18d03b49: Build stability improvements. (10-Sep-2024)
- 3f24f148: Coloured 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 withCategoryLookup#findByCompoundCategoryAndCatalogCodes
. (29-Aug-2024) - cc5ee81b: Fix for
NullPointerException
that can occur ifRuleService#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
, andCOMMERCE/SEARCH/accuracy
. (27-Aug-2024) - 3f405497: Consolidated all Awaitility dependencies from version 2.0.0 to 3.1.6. (27-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. (14-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. (2-Aug-2024) - b363dca8: Fixed
SolrFacetAdapter
to consistently expectsearchCriteria.getSearchHint("priceSourceIds")
to contain a list of strings. (31-Jul-2024) - b44a8cca: Fixed issue where
parent-widget-id
andwidget-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 anORDER 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. (17-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
andstate_code
fields of theTCHANGESET
table to address performance issue in the Automated Imports Accelerator. (12-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
andCategoryService
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. (4-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. (22-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. (14-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 usingSkuOptionService#add(SkuOptionValue)
. (6-May-2024) - b869d6eb: Upgraded Jetty from 10.0.17 to 10.0.20 to address CVE-2024-22201. (2-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. (18-Apr-2024) - f9102740: Migrated fusesource mqtt-client 1.3 to activemq-mqtt 5.17.6 to address CVE-2019-0222. (17-Apr-2024)
- c7e9ae4f: Upgraded zookeeper from 3.9.1 to 3.9.2 to address CVE-2024-23944. (17-Apr-2024)
- 49273382: Upgraded spring from 5.3.31 to 5.3.33 to address CVE-2024-2225 and CVE-2024-22243. (17-Apr-2024)
- 6d99e48b: Upgraded hibernate-validator from 6.0.20.Final to 6.2.0.Final to address CVE-2023-1932. (16-Apr-2024)
- e0488447: Upgraded spring from 5.3.26 to 5.3.31 to address CVE-2023-20863. (16-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. (3-Apr-2024)
- ff2a9190: Upgraded solr from 9.4.0 to 9.4.1 to address CVE-2023-50386. (29-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 inbill-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. (20-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. (18-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. (18-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. (14-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. (12-Mar-2024)
- 5ea23034: Migrated jstl 1.1.2 and 1.2 to taglibs-standard-impl 1.2.3 to address CVE-2015-0254. (7-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. (6-Mar-2024)
- 6307003c: Refactored
InventoryFlowServiceImpl
so that product skus are passed as parameters and unnecessary database lookups can be avoided. (5-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. (27-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. (27-Feb-2024) - a14f4c44: Upgraded Apache Shiro from 1.12.0 to 1.13.0 to address CVE-2023-46749. (27-Feb-2024)
- 01251cd7: Upgrade Drools from 7.6 to 7.74.1 to address CVE-2022-1415. (26-Feb-2024)
- da544bc3: Upgraded spring-security from 5.8.5 to 5.8.7 to address CVE-2023-34042. (26-Feb-2024)
- 9d662089: Upgraded json-path from 2.6.0 to 2.9.0 to address CVE-2023-51074. (22-Feb-2024)
- 230c2704: Upgraded poi from 4.0.1 to 4.1.1 to address CVE-2019-12415. (22-Feb-2024)
- fd4ef7e5: Upgraded antisamy from 1.7.4 to 1.7.5 to address CVE-2024-23635. (21-Feb-2024)
- 1ae632a4: Upgrade htmlunit from 3.0.0 to 3.9.0 to address CVE-2023-49093. (15-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. (13-Feb-2024)
- 4431f5f1: Upgraded jsoup from 1.14.2 to 1.15.3 to address CVE-2022-36033. (13-Feb-2024)
- 96f85dbc: Upgraded h2 from 2.1.214 to 2.2.224 to address CVE-2022-45868. (12-Feb-2024)
- 5747835e: Upgraded logback from version 1.2.10 to 1.2.13 to address vulnerability CVE-2023-6481. (12-Feb-2024)
- 94e39f17: Upgraded ant from 1.7.1 to 1.10.14 to address CVE-2020-11979. (12-Feb-2024)
- b04572c2: Upgraded htmlunit from 2.70.0 to 3.0.0 to address CVE-2023-26119. (12-Feb-2024)
- ef651e20: Upgraded postgresql from 42.4.1 to 42.4.3 to address CVE-2022-41946. (9-Feb-2024)
- 092f3670: Upgraded postgresql from 42.3.3 to 42.4.1 to address CVE-2022-31197. (9-Feb-2024)
- e74d88aa: Upgraded junit from 4.12 to 4.13.1 to address CVE-2020-15250. (9-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. (8-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. (8-Feb-2024)
- 4ecd215b: Upgraded xerces from 2.12.0 to 2.12.2 to address CVE-2022-23437. (7-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. (7-Feb-2024)
- b44d15eb: Fixed typo in name of
ep-order-accepted-message-consumer
andep-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. (26-Jan-2024)
- 65d5c973: Upgraded jackson-databind from 2.13.4 to 2.16.1 to address CVE-2022-42003. (26-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
orAND
. (25-Jan-2024) - 41c683ae: Upgraded zookeeper from 3.6.2 to 3.9.1 to address CVE-2023-44981. (24-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. (23-Jan-2024)
- a0f70e91: Remove dependency on
ext-commerce-engine-wrapper
bundle fromep-jms
bundle to prevent possible bidirectional dependency. (16-Jan-2024) - 911c1a03: Optimization to eliminate unnecessary
TSHOPPINGITEMRECURRINGPRICE
queries when a shopping cart is retrieved. (15-Jan-2024) - eb07274c: Replaces the hsqldb driver with the h2 driver for all test modules. (11-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. (19-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 theoffersearch
resource. (12-Dec-2023) - 31dda0af: Added null check in
SolrQueryFactory
to avoidNullPointerException
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. (7-Dec-2023)
- 7cf03aab: Upgraded ESAPI from 2.4.0.0 to 2.5.2.0 to address WS-2023-0388. (6-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. (1-Dec-2023)
- 0ba6f22a: Fixed product lookup cache population bug that can lead to unnecessary database queries. (29-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. (23-Nov-2023)
- c99bac01: Fix for
NullPointerException
that can occur if looking up a non-existent category GUID withCategoryLookup#findByGuid
. (22-Nov-2023) - 4c85b701: Upgraded guava from 31.1-jre to 32.0.1-jre to address CVE-2023-2976. (21-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 matchep-commerce
version. (21-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. (17-Nov-2023) - 80f07569: Upgraded pf4j from 3.6.0 to 3.10.0 to address CVE-2023-40828. (15-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. (8-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
withCaffeineCache
. (8-Nov-2023) - 75a89682: Upgraded json from 20220924 to 20231013 to address CVE-2023-5072. (7-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. (17-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. (17-Oct-2023) - 7439b3e1: Fixed
java.locale.providers
JVM parameter inops-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 the2022-03-set-correct-data-type changeset
to avoid a Liquibase checksum error. (18-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 invalidAUTHENTICATION_UID
references inTCUSTOMER
are cleaned up before applying the foreign key constraint betweenTCUSTOMER
andTCUSTOMERAUTHENTICATION
. (15-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. (7-Sep-2023) - 3417aa0a: Fixed Cortex memory leak that can occur if a resource repeatedly throws exceptions. (7-Sep-2023)
8.5.0
Released: September 2023
Release highlights
Support for Java 17
Elastic Path 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:
- Improved security: Many security updates have been added between Java 8 and Java 17.
- Performance improvements: Our performance tests have shown about a 10% improvement in throughput due to the Java 8 to Java 17 upgrade.
- New language features: Many significant changes have been made to the JDK to benefit developers.
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 Elastic Path 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 Elastic Path Commerce, the Cortex API in Elastic Path 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.
format=nolinks
query parameter in Cortex
Support for 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.
code-style.xml
for use by IntelliJ developers
Added 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 Elastic Path 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, Elastic Path 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 Elastic Path Commerce before 8.5), payment operations for an order with multiple shipments work as follows:
- A single reservation is made for the full amount of the order.
- A charge is applied for the electronic shipment total.
- Elastic Path Commerce then assumes that the original reservation is consumed, so a new reservation is created for the remaining amount.
- 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:
- A single reservation is made for the full amount of the order.
- A charge is applied for the electronic shipment total.
- 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 Elastic Path 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, Elastic Path 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
andStorePaymentProviderConfigService
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".
Removed the "Hide Zoomed Links (Studio only)" option in Cortex Studio
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.
ext-core-caching
module for use by project teams
Added an 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:
- All
ehcache-60-minutes.xml
,ehcache-5-seconds.xml
, andehcache-local.xml
files have been removed. - A new
ehcache-fast-updates.xml
file has been created atextensions/database/ext-data/src/main/resources/environments/default/files/conf/cache/
. - The
ep-properties
files in all environment folders underextensions/database/ext-data/src/main/resources/environments
have been updated to either remove theep.external.ehcache.xml.path
value (if production-like settings should be used), or set it toehcache-fast-updates.xml
(if development settings should be used). - 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.
ops-spec.json
to define supported external dependencies
Added 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 Elastic Path 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 Elastic Path Commerce with different external dependencies to be deployed without encoding these dependencies within CloudOps for Kubernetes itself. This also allows Elastic Path Commerce patches to define dependency changes without requiring a CloudOps for Kubernetes upgrade.
For more information, see Operations Specification.
Multi-threaded build support
All Elastic Path 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, ]
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 the2020-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
to1000
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 causedOptimisticLockingException
s 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 Serverpom.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
, andTTAXJOURNAL
tables to reference orderUIDPK
instead ofORDER_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()
andLocalDateTime.now()
withtimeService.getCurrentTime()
inep-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
withdart-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 theext-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 thecom.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
andmodifierGroups
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 theep-batch
module. All the classes incommerce-engine/core/ep-core/src/main/java/com/elasticpath/domain/order/jobs
were moved intocommerce-engine/batch/ep-batch/src/main/java/com/elasticpath/batch/jobs/orders
.Removed unused
PRODUCT_LOAD_TUNER_MINIMAL
load tuner bean from theep-core
module.Removed the
PersistenceEngine#get
method and replaced all calls withPersistenceEngine#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 theadd
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).
- Accounts should only be editable if user has the
- 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 fromCOMMERCE/Cachge/Cache1
toapplication
. - 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 fromINFO
toDEBUG
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
, andprice-list-assignments-active
to thedata-shape
section of the Operational Insights JSON response. For more information, see Operational Insights API. - Added
db-aurora-version
field to theconfiguration
-->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 theadmin
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 fieldnotsoldseperately
has been renamed tonotsoldseparately
. When importing, either spelling will be accepted, but the new spelling will be used for all exports. - In
tax_jurisdiction.xml
, the fieldpriceCalculationMethod
now expects values ofTAX_INCLUSIVE
orTAX_EXCLUSIVE
instead oftrue
orfalse
. When importing, the following values will be accepted, but onlyTAX_INCLUSIVE
orTAX_EXCLUSIVE
will be returned in exports:TAX_INCLUSIVE
TAX_EXCLUSIVE
true
(maps toTAX_INCLUSIVE
)false
(maps toTAX_EXCLUSIVE
)
- In
coupon_sets.xml
, thecoupon
node now supports an optionalsuspended
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 inTaxJournal
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 toclasspath:
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. - 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 indexedCOUPON_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 theep-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.
Elastic Path Commerce 8.5.0 is compatible with the following Elastic Path releases:
Elastic Path Component | Compatibility |
---|---|
Extension Point Framework | Extension Point Framework compatibility matrix |
CloudOps for Kubernetes | CloudOps for Kubernetes compatibility matrix |
For more information, see Supported Technologies.
Dependency Changes
Many dependencies were updated as part of Elastic Path 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:
Library | Change |
---|---|
accessors-smart-2.4.9.jar | Version changed from 2.4.7 |
annotations-3.0.1.jar | Added |
aopalliance-repackaged-2.6.1.jar | Version changed from 2.5.0 |
asm-7.1.jar | Added |
asm-9.3.jar | Version changed from 9.1 |
asm-3.3.1.jar | Removed |
asm-5.0.4.jar | Removed |
aspectjrt-1.9.19.jar | Version changed from 1.8.9 |
awaitility-2.0.0.jar | Added |
byte-buddy-1.9.12.jar | Version changed from 1.8.21 |
byte-buddy-1.11.13.jar | Added |
byte-buddy-agent-1.11.13.jar | Version changed from 1.8.21 |
camel-api-3.14.6.jar | Added |
camel-attachments-3.14.6.jar | Added |
camel-base-3.14.6.jar | Added |
camel-base-engine-3.14.6.jar | Added |
camel-bean-3.14.6.jar | Added |
camel-browse-3.14.6.jar | Added |
camel-cloud-3.14.6.jar | Added |
camel-cluster-3.14.6.jar | Added |
camel-controlbus-3.14.6.jar | Added |
camel-core-3.14.6.jar | Version changed from 2.25.3 |
camel-core-engine-3.14.6.jar | Added |
camel-core-languages-3.14.6.jar | Added |
camel-core-model-3.14.6.jar | Added |
camel-core-processor-3.14.6.jar | Added |
camel-core-reifier-3.14.6.jar | Added |
camel-core-xml-3.14.6.jar | Version changed from 2.25.3 |
camel-dataformat-3.14.6.jar | Added |
camel-dataset-3.14.6.jar | Added |
camel-direct-3.14.6.jar | Added |
camel-directvm-3.14.6.jar | Added |
camel-file-3.14.6.jar | Added |
camel-groovy-3.14.6.jar | Version changed from 2.25.3 |
camel-health-3.14.6.jar | Added |
camel-http-base-3.14.6.jar | Added |
camel-http-common-3.14.6.jar | Version changed from 2.25.3 |
camel-jackson-3.14.6.jar | Version changed from 2.25.3 |
camel-jaxb-3.14.6.jar | Version changed from 2.25.3 |
camel-jms-3.14.6.jar | Version changed from 2.25.3 |
camel-jsonpath-3.14.6.jar | Version changed from 2.25.3 |
camel-language-3.14.6.jar | Added |
camel-log-3.14.6.jar | Added |
camel-mail-3.14.6.jar | Version changed from 2.25.3 |
camel-management-api-3.14.6.jar | Added |
camel-mock-3.14.6.jar | Added |
camel-ref-3.14.6.jar | Added |
camel-rest-3.14.6.jar | Added |
camel-saga-3.14.6.jar | Added |
camel-scheduler-3.14.6.jar | Added |
camel-script-2.25.3.jar | Removed |
camel-seda-3.14.6.jar | Added |
camel-servlet-3.14.6.jar | Version changed from 2.25.3 |
camel-spring-3.14.6.jar | Version changed from 2.25.3 |
camel-spring-xml-3.14.6.jar | Added |
camel-stub-3.14.6.jar | Added |
camel-support-3.14.6.jar | Added |
camel-swagger-java-3.14.6.jar | Version changed from 2.25.3 |
camel-test-3.14.6.jar | Version changed from 2.25.3 |
camel-test-spring-3.14.6.jar | Version changed from 2.25.3 |
camel-timer-3.14.6.jar | Added |
camel-tooling-model-3.14.6.jar | Added |
camel-util-3.14.6.jar | Added |
camel-util-json-3.14.6.jar | Added |
camel-validator-3.14.6.jar | Added |
camel-vm-3.14.6.jar | Added |
camel-xml-io-util-3.14.6.jar | Added |
camel-xml-jaxb-3.14.6.jar | Added |
camel-xml-jaxp-3.14.6.jar | Added |
camel-xpath-3.14.6.jar | Added |
camel-xslt-3.14.6.jar | Added |
cglib-3.2.0.jar | Removed |
cglib-3.2.8.jar | Version changed from 2.2.2 |
cglib-nodep-3.1.jar | Added |
commons-configuration2-2.1.1.jar | Removed |
commons-digester3-3.2.jar | Added |
commons-fileupload-1.5.jar | Version changed from 1.4 |
commons-net-2.0.jar | Removed |
commons-net-3.8.0.jar | Removed |
commons-net-3.9.0.jar | Version changed from 3.6 |
cucumber-core-4.4.0.jar | Version changed from 2.4.0 |
cucumber-expressions-7.0.2.jar | Added |
cucumber-groovy-4.4.0.jar | Version changed from 2.0.1 |
cucumber-html-0.2.6.jar | Removed |
cucumber-java-4.4.0.jar | Version changed from 2.4.0 |
cucumber-junit-4.4.0.jar | Version changed from 2.4.0 |
cucumber-jvm-deps-1.0.6.jar | Removed |
cucumber-picocontainer-4.4.0.jar | Version changed from 2.4.0 |
cucumber-spring-4.4.0.jar | Added |
datatable-1.1.14.jar | Added |
datatable-dependencies-1.1.14.jar | Added |
FastInfoset-1.2.18.jar | Added |
gemini-blueprint-core-3.0.0.M01.jar | Version changed from 2.1.0.RELEASE |
gemini-blueprint-io-3.0.0.M01.jar | Version changed from 2.1.0.RELEASE |
gherkin-5.1.0.jar | Version changed from 5.0.0 |
gherkin-jvm-deps-1.0.4.jar | Removed |
gmbal-api-only-4.0.3.jar | Added |
groovy-2.5.22.jar | Version changed from 2.4.21 |
groovy-all-2.4.21.jar | Removed |
groovy-json-2.5.22.jar | Added |
groovy-xml-2.5.22.jar | Added |
guice-6.0.0.jar | Version changed from 4.0 |
guice-multibindings-4.0.jar | Removed |
h2-2.1.214.jar | Version changed from 1.4.200 |
ha-api-3.1.13.jar | Added |
hadoop-hdfs-client-3.2.2.jar | Removed |
hamcrest-2.1.jar | Added |
HdrHistogram-2.1.12.jar | Version changed from 2.1.11 |
hk2-api-2.6.1.jar | Version changed from 2.5.0 |
hk2-locator-2.6.1.jar | Version changed from 2.5.0 |
hk2-utils-2.6.1.jar | Version changed from 2.5.0 |
htmlunit-2.70.0.jar | Version changed from 2.38.0 |
htmlunit-core-js-2.70.0.jar | Version changed from 2.38.0 |
htmlunit-cssparser-1.14.0.jar | Version changed from 1.5.0 |
htmlunit-xpath-2.70.0.jar | Added |
jackson-annotations-2.13.4.jar | Version changed from 2.12.7 |
jackson-core-2.13.4.jar | Version changed from 2.12.7 |
jackson-databind-2.13.4.jar | Version changed from 2.12.7 |
jackson-dataformat-xml-2.12.7.jar | Version changed from 2.9.10 |
jackson-dataformat-yaml-2.12.7.jar | Version changed from 2.9.10 |
jackson-datatype-joda-2.12.7.jar | Version changed from 2.9.10 |
jackson-datatype-jsr310-2.13.4.jar | Version changed from 2.12.7 |
jackson-jaxrs-base-2.13.4.jar | Version changed from 2.12.7 |
jackson-jaxrs-json-provider-2.13.4.jar | Version changed from 2.12.7 |
jackson-module-jaxb-annotations-2.13.4.jar | Version changed from 2.9.10 |
jakarta.activation-1.2.2.jar | Added |
jakarta.activation-api-1.2.2.jar | Added |
jakarta.annotation-api-1.3.5.jar | Version changed from 1.3.4 |
jakarta.inject-2.6.1.jar | Version changed from 2.5.0 |
jakarta.inject-api-2.0.1.jar | Added |
jakarta.jws-api-2.1.0.jar | Added |
jakarta.mail-1.6.7.jar | Added |
jakarta.ws.rs-api-2.1.6.jar | Version changed from 2.1.5 |
jakarta.xml.bind-api-2.3.3.jar | Added |
jakarta.xml.soap-api-1.4.2.jar | Added |
jakarta.xml.ws-api-2.3.3.jar | Added |
javax.activation-1.2.0.jar | Added |
javax.activation_1.1.0.v201211130549.jar | Added |
javax.mail_1.4.0.v201005080615.jar | Added |
javax.servlet-api-3.0.1.jar | Removed |
jaxb-core-2.3.0.1.jar | Version changed from 2.3.0 |
jaxb-impl-2.3.8.jar | Version changed from 2.3.0 |
jaxws-rt-2.3.6.jar | Added |
jcip-annotations-1.0.jar | Added |
jersey-client-2.40.jar | Version changed from 2.28 |
jersey-common-2.40.jar | Version changed from 2.28 |
jersey-hk2-2.40.jar | Version changed from 2.28 |
jersey-media-jaxb-2.40.jar | Version changed from 2.28 |
jetty-client-9.4.27.v20200227.jar | Removed |
jetty-client-9.4.50.v20221201.jar | Added |
jetty-http-9.4.27.v20200227.jar | Removed |
jetty-http-9.4.50.v20221201.jar | Added |
jetty-io-9.4.27.v20200227.jar | Removed |
jetty-io-9.4.50.v20221201.jar | Added |
jetty-xml-9.4.27.v20200227.jar | Removed |
jjwt-jackson-0.10.6.jar | Added |
jline-1.0.S2-B.jar | Removed |
jline-2.12.jar | Added |
jmock-2.12.0.jar | Version changed from 2.8.4 |
jmock-imposters-2.12.0.jar | Added |
jmock-junit4-2.12.0.jar | Version changed from 2.8.4 |
jmock-legacy-2.12.0.jar | Version changed from 2.8.4 |
jmock-testjar-2.12.0.jar | Version changed from 2.8.4 |
jna-5.12.1.jar | Version changed from 5.8.0 |
jna-platform-5.12.1.jar | Version changed from 5.8.0 |
joda-time-2.10.8.jar | Version changed from 2.7 |
json-simple-3.0.2.jar | Added |
json-smart-2.4.10.jar | Version changed from 2.4.7 |
json-smart-action-2.3.jar | Removed |
jsr305-3.0.0.jar | Removed |
jwks-rsa-0.21.1.jar | Added |
management-api-3.2.3.jar | Added |
micrometer-core-1.7.12.jar | Version changed from 1.3.9 |
mimepull-1.9.15.jar | Added |
mockito-core-3.12.4.jar | Version changed from 2.22.0 |
monte-screen-recorder-0.7.7.0.jar | Added |
mxparser-1.2.2.jar | Removed |
neko-htmlunit-2.70.0.jar | Version changed from 2.38.0 |
objenesis-2.1.jar | Version changed from 2.6 |
objenesis-3.2.jar | Added |
objenesis-3.0.1.jar | Added |
openjpa-3.2.2-ep1.3.jar | Version changed from 3.2.2-ep1.0 |
org.apache.felix.scr_2.0.14.v20180117-1452-4.8.0.jar | Removed |
org.apache.felix.scr_2.0.14.v20180822-1822.jar | Added |
org.apache.servicemix.bundles.aspectj-1.9.19_1.jar | Version changed from 1.8.8_1 |
org.eclipse.equinox.ds-1.5.200.jar | Version changed from 1.5.100 |
org.eclipse.equinox.event-1.4.300.jar | Version changed from 1.4.200 |
org.eclipse.osgi-3.13.100.jar | Version changed from 3.13.0 |
org.eclipse.osgi.services-3.7.100.jar | Version changed from 3.7.0 |
org.eclipse.osgi.util-3.5.100.jar | Version changed from 3.5.0 |
oro-2.0.8.jar | Removed |
osgi-resource-locator-1.0.3.jar | Version changed from 1.0.1 |
oshi-core-6.4.0.jar | Version changed from 5.7.4 |
policy-2.7.10.jar | Added |
saaj-impl-1.5.3.jar | Added |
salvation2-3.0.1.jar | Added |
serializer-2.7.2.jar | Removed |
shiro-cache-1.9.1.jar | Version changed from 1.8.0 |
shiro-config-core-1.9.1.jar | Version changed from 1.8.0 |
shiro-config-ogdl-1.9.1.jar | Version changed from 1.8.0 |
shiro-core-1.9.1.jar | Version changed from 1.8.0 |
shiro-crypto-cipher-1.9.1.jar | Version changed from 1.8.0 |
shiro-crypto-core-1.9.1.jar | Version changed from 1.8.0 |
shiro-crypto-hash-1.9.1.jar | Version changed from 1.8.0 |
shiro-event-1.9.1.jar | Version changed from 1.8.0 |
shiro-lang-1.9.1.jar | Version changed from 1.8.0 |
spotbugs-annotations-4.7.3.jar | Added |
spring-aop-5.3.26.jar | Version changed from 4.3.30.RELEASE |
spring-batch-core-4.3.6.jar | Version changed from 4.2.3.RELEASE |
spring-batch-infrastructure-4.3.6.jar | Version changed from 4.2.3.RELEASE |
spring-beans-5.3.26.jar | Version changed from 4.3.30.RELEASE |
spring-context-5.3.26.jar | Version changed from 4.3.30.RELEASE |
spring-context-support-5.3.26.jar | Version changed from 4.3.30.RELEASE |
spring-core-5.3.26.jar | Version changed from 4.3.30.RELEASE |
spring-data-commons-2.7.2.jar | Version changed from 1.13.22.RELEASE |
spring-data-jpa-2.7.2.jar | Version changed from 1.11.22.RELEASE |
spring-expression-5.3.26.jar | Version changed from 4.3.30.RELEASE |
spring-jcl-5.3.26.jar | Added |
spring-jdbc-5.3.26.jar | Version changed from 4.3.30.RELEASE |
spring-jms-5.3.26.jar | Version changed from 4.3.30.RELEASE |
spring-messaging-5.3.26.jar | Version changed from 4.3.30.RELEASE |
spring-orm-5.3.26.jar | Version changed from 4.3.30.RELEASE |
spring-retry-1.3.3.jar | Version changed from 1.2.5.RELEASE |
spring-security-config-5.7.8.jar | Version changed from 4.2.13.RELEASE |
spring-security-core-5.7.8.jar | Version changed from 4.2.13.RELEASE |
spring-security-crypto-5.7.8.jar | Added |
spring-security-oauth2-2.5.2.RELEASE.jar | Removed |
spring-security-remoting-4.2.13.RELEASE.jar | Removed |
spring-security-web-5.7.8.jar | Version changed from 4.2.13.RELEASE |
spring-shell-1.2.0.RELEASE.jar | Version changed from 1.0.0.RELEASE |
spring-test-5.3.26.jar | Version changed from 4.3.30.RELEASE |
spring-tx-5.3.26.jar | Version changed from 4.3.30.RELEASE |
spring-velocity-support-2.3.jar | Added |
spring-web-5.3.26.jar | Version changed from 4.3.30.RELEASE |
spring-webmvc-4.3.30.RELEASE.jar | Removed |
stax-1.2.0.jar | Removed |
stax-api-1.0.1-no-namespace.jar | Removed |
stax-ex-1.8.3.jar | Added |
streambuffer-1.5.10.jar | Added |
swagger-annotations-1.6.4.jar | Version changed from 1.5.21 |
swagger-core-1.6.4.jar | Version changed from 1.5.21 |
swagger-jaxrs-1.6.4.jar | Version changed from 1.5.21 |
swagger-models-1.6.4.jar | Version changed from 1.5.21 |
swagger-parser-1.0.56.jar | Version changed from 1.0.37 |
velocity-1.6.2.jar | Removed |
velocity-engine-core-2.3.jar | Added |
velocity-tools-1.2.jar | Removed |
velocity-tools-generic-3.1.jar | Added |
velocity-tools-view-3.1.jar | Added |
websocket-api-9.4.27.v20200227.jar | Removed |
websocket-api-9.4.50.v20221201.jar | Added |
websocket-client-9.4.27.v20200227.jar | Removed |
websocket-client-9.4.50.v20221201.jar | Added |
websocket-common-9.4.27.v20200227.jar | Removed |
websocket-common-9.4.50.v20221201.jar | Added |
wiremock-2.27.2.jar | Version changed from 2.23.2 |
woodstox-core-6.5.0.jar | Added |
xalan-2.7.2.jar | Removed |
xmlbeans-3.0.0.jar | Removed |
xmlpull-1.1.3.1.jar | Removed |
xmlunit-core-2.7.0.jar | Version changed from 2.6.2 |
xmlunit-legacy-2.7.0.jar | Version changed from 2.6.2 |
xmlunit-placeholders-2.7.0.jar | Version changed from 2.6.2 |
xstream-1.4.19.jar | Removed |
Upgrade notes
The upgrading Elastic Path guide provides general instructions on upgrading Elastic Path projects.
Java and Maven versions
Elastic Path 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 theep.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
andModifierFieldsMapWrapper
classes have been moved from thecom.elasticpath.domain.misc.types
package to thecom.elasticpath.persistence.api.domain.types
package. - The
LocalizedAttributeKeyUtils
class has been moved from thecom.elasticpath.domain.misc.utils
package to thecom.elasticpath.persistence.api.domain.utils
package. - The
AbstractExtensibleListBeanDefinitionParser
,ExtensibleListCreateBeanDefinitionParser
,ExtensibleListFactoryBean
,ExtensibleListModifyBeanDefinitionParser
, andExtensibleListNamespaceHandler
classes have been moved from thecom.elasticpath.commons.beanframework.config
package to thecom.elasticpath.commons.extensiblelists
package. - The
maven-bundle-plugin
inep-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 toPersistnceEngine#load
instead.
Import/Export changes
coupon_sets.xml
has changed
Schema for coupons in the 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>
promotions.xml
has changed
Schema for catalog promotions in 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>
promotions.xml
has changed
Schema for cart promotions in 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>
priceCalculationMethod
in tax_jurisdiction.xml
have changed
Supported values for the 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 toTAX_INCLUSIVE
)false
(map toTAX_EXCLUSIVE
)
Exports will only return TAX_INCLUSIVE
or TAX_EXCLUSIVE
.
notsoldseperately
field in products.xml
has been renamed
The 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.
promotions.xml
Shopping Cart Promotions now define enable date and disable date in availability instead of selling context in 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.xml
Price List Assignments now define start date and end date as top-level fields instead of selling context in 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 Elastic Path 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 Elastic Path 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 Elastic Path 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:
- Right-click on the root project (
ep-commerce [commerce-parent]
) - Click "Open Module Settings"
- Click "Project Settings" --> "Project"
- Change SDK to "zulu-17" (it will likely be set to "zulu-11")
- Then right-click on the root project
pom.xml
, and click "Maven" --> "Reload Project"
cm-p2-repository
dependency from all Commerce Manager modules
Removed 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 toorg.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 toorg.apache.velocity.spring.VelocityEngineFactory
.org.springframework.ui.velocity.VelocityEngineUtils
class was moved toorg.apache.velocity.spring.VelocityEngineUtils
.
- Several Velocity class methods have changed their parameters from
org.apache.commons.collections.ExtendedProperties
toorg.apache.velocity.util.ExtProperties
. - The
org.apache.velocity.tools.generic.ListTool
class has changed toorg.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 toorg.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 tofindById
save
renamed tosaveAll
- Spring Shell
BannerProvider
methods renamed:name
renamed togetProviderName
- Spring Context Support
EhCacheFactoryBean
methods renamed:statisticsEnabled
renamed tostatistics
- 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. Usecom.elasticpath.email.producer.spi.composer.impl.EmailComposerImpl
instead. - Spring Security
org.springframework.security.oauth2.common.OAuth2AccessToken
class was removed. Usecom.elasticpath.rest.relos.rs.authentication.springoauth2.impl.OAuth2AccessTokenResponse
instead. RenderMediatorImpl#render
method has been replaced withRenderMediatorImpl#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 toorg.apache.camel.impl.engine.CamelPostProcessorHelper
org.apache.camel.impl.DefaultCamelBeanPostProcessor
moved toorg.apache.camel.impl.engine.DefaultCamelBeanPostProcessor
org.apache.camel.processor.RedeliveryPolicy
moved toorg.apache.camel.processor.errorhandler.RedeliveryPolicy
org.apache.camel.processor.aggregate.AggregationStrategy
moved toorg.apache.camel.AggregationStrategy
org.apache.camel.spring.CamelEndpointFactoryBean
moved toorg.apache.camel.spring.xml.CamelEndpointFactoryBean
(also requires addingcamel-spring-xml
dependency)org.apache.camel.util.ServiceHelper
moved toorg.apache.camel.support.service.ServiceHelper
org.apache.camel.impl.DefaultExchange
moved toorg.apache.camel.support.DefaultExchange
org.apache.camel.impl.DefaultMessage
moved toorg.apache.camel.support.DefaultMessage
org.apache.camel.impl.JndiRegistry
moved toorg.apache.camel.spi.Registry
org.apache.camel.language.Simple
moved toorg.apache.camel.language.simple.Simple
org.apache.camel.model.RedeliveryPolicyDefinition
moved toorg.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.
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 from5000
to1000
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 withORDER_UID
on the following tables:TORDERPAYMENT
TORDERPAYMENTINSTRUMENT
TTAXJOURNAL
TGIFTCERTIFICATE
(original field was namedORDER_GUID
)
- Enabled cascade delete on the following foreign key relationships:
TCUSTOMER.AUTHENTICATION_UID
->TCUSTOMER.UIDPK
- Added a
OIDC_SUBJECT
field toTCUSTOMER
table for storing the subject identifier from a third-party Identity Provider when using OpenID Connect. - Changed
CP_FIRST_NAME
andCP_LAST_NAME
attributes to optional for customers. - Deleted all
TCUSTOMERAUTHENTICATION
records with nullUSERNAME
orUSERNAME_UPPER
fields and added a non-null constraint on these fields. - Added an
ADDED_BY_PROMOTION
field to theTCARTITEM
andTORDERSKU
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
andTLOCALIZEDPROPERTIES.LOCALIZED_PROPERTY_KEY
to improve Cortex performance. - Added an unique constraint on
TINDEXBUILDSTATUS.INDEX_TYPE
- Removed unique constraint on
TTAXVALUE.TAX_REGION_UID
andTTAXVALUE.TAX_CODE_UID
. - Changed the
TCATALOGPROJECTIONS.DISABLE_DATE_TIME
field fromTIMESTAMP
toDATETIME
to match the field type used in theTPRODUCT
andTPRODUCTSKU
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
toTRULECATALOGASSOCIATION
table, and catalog associations fromTRULE.STORE_UID
toTRULESTOREASSOCIATION
table.
- Added new fields to
- 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 theTRULE.START_DATE
andTRULE.END_DATE
fields. - Deleted all
TTAGCONDITION
records associated to promotions withTAGDICTIONARY_GUID = 'TIME'
.
- Copied the start and end dates from
- 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 theTPRICELISTASSIGNMENT.START_DATE
andTPRICELISTASSIGNMENT.END_DATE
fields. - Deleted all
TTAGCONDITION
records associated to price list assignments withTAGDICTIONARY_GUID = 'TIME'
.
- Added new fields to
- 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.
- Added field to
- Support for bundle constituents based on
GUID
relationship instead ofUID
:- Added new fields to
TBUNDLECONSTITUENTX
:PRODUCT_GUID
:VARCHAR(64)
PRODUCT_SKU_GUID
:VARCHAR(64)
- Migrated product and sku values from
CONSTITUENT_UID
toPRODUCT_GUID
andCONSTITUENT_SKU_UID
toPRODUCT_SKU_GUID
. - Removed fields from
TBUNDLECONSTITUENTX
:CONSTITUENT_UID
CONSTITUENT_SKU_UID
- Added new fields to