Design Pattern for Updating an ATG Order

This is from a post Jeremy Sears made here on the ATG_Tech Google Group, but I thought it was nice and clear and worth reposting. All credit to Jeremy for this:

“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

If you extend atg.commerce.order.purchase.PurchaseProcessFormHander, then steps 1,2,8 & 9 are done for you in the beforeSet and afterSet method implementations. Steps 3&7 are no longer strictly necessary, but are still good practice. Steps 3-7 should be performed manually in your application code. Calling step 6 within the transaction is mandatory and the lock manager work should always wrap the transaction to prevent some rare transaction race conditions. “


Posted

in

by

Tags:

Comments

7 responses to “Design Pattern for Updating an ATG Order”

  1. Tijomon Mathew Avatar
    Tijomon Mathew

    What is the significance of Synchronize on the order ? if we check the cartformhandler it is a request scope but still why

    Synchronize on order is done ?

    1. gffhgffhg Avatar
      gffhgffhg

      cartformhandler is request scoped but order resides in shopping cart which is A session scoped component. synchronize is make sure other processes dont have access to order object from the current session.

  2. Nick Glover Avatar
    Nick Glover

    The wording on this is a bit out-of-date. See https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=1362812.1 for the latest article on this. It does require Oracle support access to view.

    1. Devon Avatar

      Thanks Nick! Too bad it’s behind a paywall most individual devs may not have access to though. Any chance it can be made public? Or I can repost it here?

      1. Nick Glover Avatar
        Nick Glover

        Hi Devon,

        Sorry, Oracle knowledge content cannot be made public, nor can it be re-posted.

        Thanks.


        Nick Glover
        Oracle Support for ATG Products

  3. Deezer Avatar
    Deezer

    Calling updateVersion is a bit dangerous unless there is other preventions in place to prevent multiple sessions at the same time . It’s saying, forget everything and consider this copy of the order as the master, and then persist.

  4. Heidar Avatar
    Heidar

    what if i did the lock on the orderID ? instead of profileid

Leave a Reply

Your email address will not be published. Required fields are marked *

PHP Code Snippets Powered By : XYZScripts.com