cancel
Showing results for 
Search instead for 
Did you mean: 

UniqueAttributesInterceptor failures in hybris, commerce cx 1808:

1,226

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]
...
View Entire Topic
former_member192125
Participant

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