Feature/Notable Change | Related Services | Links |
---|---|---|
Refactored import processes |
ImportServices, ImportConsumer |
Issue |
---|
Fixed issue where example import files don’t work on Windows |
Fixed NullPointerException when sorting tags with null priorities |
Fixed label for Add-Ons |
Fixed ModelMapper maintenance of collections that are Hibernate orphan aware |
Fixed issue where augmentation field doesn’t work if added during the creation of the AdvancedTag |
The changes in this release are largely motivated by the goal of simplifying and improving the import processes.
The main target of change is product import, which, combined with the changes in Import Services 1.8.1 and Import Consumer 1.7.1, has been fully re-written.
The new product import, referred to as 'complete product import', is implemented with a brand new batch handler and new converters. It differs significantly from the prior implementation, which attempted to capture the full product domain and all of its complexity. The 'complete product import' now focuses on key, commonly useful fields and has a simplified, opinionated approach for building associations with related entities such as translations, categories, assets, and variants. It supports creates and simple updates.
The existing product import specification (on the ImportServices side) and corresponding resource-tier handler (ProductImportBatchHandler
) are deprecated and disabled by default in favor of the new specification and CompleteProductImportBatchHandler
.
To continue using the deprecated components and disable the new components, set broadleaf.import.product.specification.use-legacy
to true
in both the ImportServices properties and CatalogServices properties.
Furthermore, any existing PRODUCT
imports and batches should be allowed to fully complete processing with the old handler (and no more batch requests should be in the Kafka message queue) before the new components are enabled - this way the new product batch handler will not be forced to consume messages intended for the old handler.
Deprecate all components related to the current product import, including various row converters and the import batch handler. Note that the components have been deprecated, but not modified in any way. If enabled, they will work as they did before.
Introduce a new CompleteProductImportBatchHandler
and row converters to support the new 'Complete Product' import specification, which has reduced usage of row-types and increased usage of complex column values.
The new handler eagerly queries the datastore to fetch all existing entities matching provided rows, and converters subsequently use the prefetched data to determine operation type and apply the necessary changes.
The handler contains error-handling logic to account for conversion errors and persistence errors.
For example, if the parent product fails persistence, the column-based related entities for it such as category products will not be persisted.
Conversely, if the parent product successfully persists but the column-based related entities don’t, those errors will be bubbled and set on the main product record.
This is important as it guarantees any issues are always surfaced to users via completion records.
Introduce new methods in various services/repositories for fetching products, variants, and categories to match the requirements for the new handler