Hybris升级至2105版本多目录同步类适配问题咨询
SAP Commerce(Hybris) 2105 版本 DefaultSetupSyncJobService 返回类型变更适配方案
2105版本框架完成了部分遗留Jalo层接口的下线,DefaultSetupSyncJobService中所有原返回Jalo层SyncItemJob对象的方法,已统一调整为返回Service层持久化模型SyncItemJobModel,所有依赖旧返回类型的自定义多目录同步逻辑可按以下步骤适配,无需改动核心业务逻辑:
- 清理旧类型依赖
删除自定义类中所有de.hybris.platform.jalo.c2l.sync.SyncItemJob的导入语句,替换为模型类导入de.hybris.platform.catalog.model.SyncItemJobModel;移除所有针对旧SyncItemJob类型的强转代码,2105版本该服务直接返回Model实例,强转Jalo类型会直接抛出类转换异常。 - 调整同步任务创建/配置逻辑
SyncItemJobModel的属性getter/setter命名与旧Jalo层SyncItemJob的业务方法完全对齐,仅需替换变量类型声明即可,不需要修改属性配置的业务代码:
多目录场景下循环创建各内容目录、商品目录的同步任务时,逻辑和旧版本完全一致,仅需替换集合的泛型声明为// 2105前版本旧写法(2105版本编译不通过) import de.hybris.platform.jalo.c2l.sync.SyncItemJob; SyncItemJob productCatalogSyncJob = defaultSetupSyncJobService.createSyncJob(productCatalogPair, 0, true, true, true); productCatalogSyncJob.setDontCopyItems(Boolean.FALSE); modelService.save(productCatalogSyncJob); // 2105版本适配后写法 import de.hybris.platform.catalog.model.SyncItemJobModel; SyncItemJobModel productCatalogSyncJob = defaultSetupSyncJobService.createSyncJob(productCatalogPair, 0, true, true, true); productCatalogSyncJob.setDontCopyItems(Boolean.FALSE); modelService.save(productCatalogSyncJob);SyncItemJobModel即可。 - 调整同步任务触发逻辑
旧版本直接调用SyncItemJob实例perform()方法触发同步的逻辑需要替换,禁止直接调用Model类继承的遗留perform()方法(2105版本已标记废弃,多目录并发同步时会出现锁冲突),统一使用catalogSynchronizationService触发同步:import de.hybris.platform.catalog.synchronization.CatalogSynchronizationService; import de.hybris.platform.catalog.synchronization.SyncConfig; import de.hybris.platform.catalog.synchronization.SyncResult; // 注入服务 private CatalogSynchronizationService catalogSynchronizationService; // 多目录批量同步触发逻辑 SyncConfig syncConfig = new SyncConfig(); syncConfig.setSynchronous(Boolean.FALSE); syncConfig.setForceUpdate(Boolean.FALSE); syncConfig.setCreateSavedValues(Boolean.TRUE); // 循环传入每个目录对应的SyncItemJobModel实例即可 for (SyncItemJobModel catalogSyncJob : allCatalogSyncJobs) { SyncResult result = catalogSynchronizationService.synchronize(catalogSyncJob, syncConfig); // 自定义结果校验逻辑保持不变 } - 校验自定义同步扩展逻辑
排查所有自定义同步拦截器、同步事件监听器、同步权限校验代码中针对SyncItemJob的类型判断、参数声明,全部替换为SyncItemJobModel,避免多目录同步时自定义逻辑不生效。
避坑提示:不要尝试通过
modelService.getSource()方法从SyncItemJobModel反向获取Jalo层SyncItemJob做兼容,2105版本部分Jalo同步逻辑已被裁剪,该写法会在多目录并发同步场景下引发事务不一致、同步进程死锁的问题。
内容的提问来源于stack exchange,提问作者Facu Figliuolo
相关产品推荐
相关产品推荐

