While updating the order we might get atg.commerce.order.InvalidVersionException: This order (oXXXXXXX) is out of date.
To fix this problem you must always make sure to update an order within a transaction using the same version. 
In general, the design pattern for updating an order is as follows:
1.      Acquire lock-manager write lock on profile id from the /atg/commerce/order/LocalLockManager
2.      Begin Transaction
3.      Synchronize on the Order object.
4.      Modify Order
5.      Call ((OrderImpl) pOrder).updateVersion();
6.      Call OrderManager.updateOrder()
7.      Release Order synchronization
8.      End Transaction
9.      Release lock-manager write lock on profile id from the /atg/commerce/order/LocalLockManager
Sample Code:
TransactionManager tm =
getOrderManager().getTransactionManager(); 
TransactionDemarcation td = new
TransactionDemarcation ();
boolean rollback = false;
try {
               
td.begin(mTransactionManager, TransactionDemarcation.REQUIRES_NEW);
               
SivarCustomOrderImpl sivarCustomOrder=(SivarCustomOrderImpl) getSivarOrderManager().loadOrder(orderId);
               
synchronized (sivarCustomOrder) {
                               
sivarCustomOrder.setOpportunityStatus(SivarCartConstants.OPP_STATUS_PENDING);
((SivarCustomOrderImpl)
sivarCustomOrder).updateVersion();
                                getSivarOrderManager().updateOrder(sivarCustomOrder);
               
}
} catch
(TransactionDemarcationException re) {
               
rollback=true;
               
if (isLoggingError()) {
                               
logError(re.getMessage());
               
}
}  finally {
   
            try {
   
           
               
td.end(rollback);
   
            } catch
(TransactionDemarcationException e) {
   
           
               
if (isLoggingError()) {
   
           
               
               
logError("TransactionDemarcationException while transaction end: " +
e.getMessage(), e);
   
                           
}
   
            }
}
Note: It's a sample code for your reference.
tanks for you help!!! this solution save my life hehe
ReplyDelete