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. “

6 thoughts on “Design Pattern for Updating an ATG Order

  1. 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 ?

    • 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?

      • Hi Devon,

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

        Thanks.


        Nick Glover
        Oracle Support for ATG Products

  2. 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.

Leave a Reply

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>