on 2019 Aug 14 10:42 AM
Recently we updated hybris 5.7.x to hybris commerce cx 1808 (patch 9) In cx 1808 'DefaultPromotionsService.saveIfModified()' was added, which causes the UniqueAttributesInterceptor to be called and fail occasionally. I could not find the source of the error, it happens randomly at 3% of all 'save' calls for cart.
This error is critical in checkout/placeOrder. I was not able to reproduce the error locally.
Any idea what could be responsible for it or a suggestion how to avoid it, would be greatly appreciated. Is it safe to disable the 'UniqueAttributesInterceptor' ?
Many thanks, Vitali
ERROR [ajp-nio-18009-exec-1060] [de.hybris.platform.servicelayer.interceptor.impl.UniqueAttributesInterceptor@1a3002ea]:Unklare eindeutige Schl??sse: {entryNumber=2, order=CartModel (9684739457067@141)} f??r Modell CartEntryModel (8900165697580@3) - 1 Produkte mit denselben Schl??sseln gefunden - url: http://somecompany.com/checkout/done referer: https://somecompany.com/checkout/update
de.hybris.platform.servicelayer.exceptions.ModelSavingException: [de.hybris.platform.servicelayer.interceptor.impl.UniqueAttributesInterceptor@1a3002ea]:Unklare eindeutige Schl??sse: {entryNumber=2, order=CartModel (9684739457067@141)} f??r Modell CartEntryModel (8900165697580@3) - 1 Produkte mit denselben Schl??sseln gefunden
at de.hybris.platform.servicelayer.internal.model.impl.wrapper.ModelWrapper.invokeValidateInterceptors(ModelWrapper.java:302) ~[coreserver.jar:?]
at de.hybris.platform.servicelayer.internal.model.impl.wrapper.ModelWrapper.validate(ModelWrapper.java:239) ~[coreserver.jar:?]
at de.hybris.platform.servicelayer.internal.model.extractor.impl.DefaultModelExtractor.process(DefaultModelExtractor.java:57) ~[coreserver.jar:?]
at de.hybris.platform.servicelayer.internal.model.impl.DefaultModelService.performPersistenceOperations(DefaultModelService.java:720) ~[coreserver.jar:?]
at de.hybris.platform.servicelayer.internal.model.impl.DefaultModelService.saveAllInternal(DefaultModelService.java:715) ~[coreserver.jar:?]
at de.hybris.platform.servicelayer.internal.model.impl.DefaultModelService.saveAll(DefaultModelService.java:695) ~[coreserver.jar:?]
at de.hybris.platform.servicelayer.internal.model.impl.DefaultModelService.saveAll(DefaultModelService.java:657) ~[coreserver.jar:?]
at de.hybris.platform.promotions.impl.DefaultPromotionsService.saveIfModified(DefaultPromotionsService.java:271) ~[promotionsserver.jar:?]
at de.hybris.platform.promotions.impl.DefaultPromotionsService.transferPromotionsToOrder(DefaultPromotionsService.java:214) ~[promotionsserver.jar:?]
at de.hybris.platform.commerceservices.order.impl.DefaultCommercePlaceOrderStrategy.placeOrder(DefaultCommercePlaceOrderStrategy.java:116) ~[commerceservicesserver.jar:?]
at de.hybris.platform.commerceservices.order.impl.DefaultCommerceCheckoutService.placeOrder(DefaultCommerceCheckoutService.java:320) ~[commerceservicesserver.jar:?]
at de.hybris.platform.commerceservices.order.impl.DefaultCommerceCheckoutService.placeOrder(DefaultCommerceCheckoutService.java:314) ~[commerceservicesserver.jar:?]
at de.s2.hfg.core.services.HfgCommerceCheckoutService$1.doInTransaction(HfgCommerceCheckoutService.java:156) ~[HFGcoreserver.jar:?]
at de.s2.hfg.core.services.HfgCommerceCheckoutService$1.doInTransaction(HfgCommerceCheckoutService.java:1) ~[HFGcoreserver.jar:?]
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133) ~[spring-tx-4.3.21.RELEASE.jar:4.3.21.RELEASE]
...
Request clarification before answering.
Hi, This is can be reproduced. Create a cart of 3 items. Then manually update each cart entry's entry number (in Info tab) with values 1, 2 & 3 respectively. By default entry number will be of the values 0,1,2 respectively for each entry.
Now when you submit order , placeOrder(final CartModel cartModel, final SalesApplication salesApplication) will call getPromotionsService().transferPromotionsToOrder(cartModel, orderModel, false) for transferring of promotions from your cart to orderModel.
In this a full save of all cart entries is done and entry number is validated before saving ,
it replaces entry number values {0,1,2} against {1,2,3} correspondingly like
1st update - {0,2,3} - no exception as 0 was not on {1,2,3}
2nd update - {0,1,3} - exception occurs as 1 is already part of {1,2,3}
Not sure, how the entry nos offests at random scenarios, Either have to correct the entry nos before the call, or override the place order method, by pass transferPromotionsToOrder() exception and continue
Thanks
Praveen Babu
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
7 | |
2 | |
2 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.