Skip to main content

ATG Order update - InvalidVersionException and ConcurrentUpdateException

ATG repository item descriptor can have the version property. The atg.adapter.gsa.ItemTransactionState holds this version information. For example consider the Order item-descriptor. It has the version property defined against the table dcspp_order. Means, the dcspp_order table has the column version which defines which version of order is currently in the DB. Each order update flow will update this column.

 <property name="version" display-name-resource="version" data-type="int" queryable="true" readable="true" column-name="version" hidden="false" category-resource="categoryInfo" expert="true" required="false" cache-mode="inherit" writable="true">
    <attribute name="uiwritable" value="false"/>
    <attribute name="propertySortPriority" value="30"/>
  </property>


-------------------------------

During the OrderManager.updateOrder() call, validation is done to compare the vesion of the Order object to the one in repository and the exception atg.commerce.order.InvalidVersionException is thrown.
 
2012-09-08 11:38:24,213 99015942 ERROR [nucleusNamespace.atg.commerce.order.OrderManager] (TP-Processor77:) InvalidVersionException: Unable to update order for :6226680554
2012-09-08 11:38:24,213 99015942 ERROR [nucleusNamespace.atg.commerce.order.OrderManager] (TP-Processor77:)
atg.commerce.order.InvalidVersionException: This order (6226680554) is out of date. Changes have been made to the order and the operation should be resubmitted. Order version 136, Repository item version 138.
    at atg.commerce.order.OrderManager.updateOrder(OrderManager.java:2557)


--------------------------------   


During the order update @ GSAItemDescriptor, atg.repository.ConcurrentUpdateException is thrown if no row got updated based on the "where" condition. If the table is having a version property, the where condition includes the version also. And in case of Order, this exception may occurs if the version in the DB not matches with the one in order object.
   
Caused by: atg.repository.ConcurrentUpdateException: no rows updated oldVersion=3 for item=order:6284190656 in GSATransaction=atg.adapter.gsa.GSATransaction@1ccdb05    thread=TP-Processor86 transaction=TransactionImpl:XidImpl[FormatId=257, BranchQual=, localId=4931830]
    at atg.adapter.gsa.GSAItemDescriptor.updateItem(GSAItemDescriptor.java:6070)
    at atg.adapter.gsa.GSARepository.updateItem(GSARepository.java:949)
    at atg.commerce.order.processor.ProcSaveOrderObject.runProcess(ProcSaveOrderObject.java:180)
    at atg.service.pipeline.PipelineManager.runProcess(PipelineManager.java:453)
    at atg.commerce.order.OrderManager.updateOrder(OrderManager.java:2586)


-------------------------------

Comments

  1. This comment has been removed by the author.

    ReplyDelete
  2. How to avoid InvalidVersionException and ConcurrentUpdateException ? Does one need to wrap all update, insert order statements in begin and end transaction code ?

    ReplyDelete
  3. InvalidVersionException and ConcurrentUpdateException will occur due to bad coding/ bad server configuration / clustering.

    ReplyDelete

Post a Comment

Popular posts from this blog

ATG - more about Forms and Form Handlers

An ATG form is defined by the dsp:form tag, which typically encloses DSP tags that specify form elements, such as dsp:input that provide direct access to Nucleus component properties. Find below a sample dsp:form tag.    <dsp:form action="/testPages/showPersonProperties.jsp" method="post" target="_top">      <p>Name: <dsp:input bean="/samples/Person.name" type="text"/>      <p>Age: <dsp:input bean="/samples/Person.age" type="text" value="30"/>      <p><dsp:input type="submit" bean="/samples/Person.submit"/> value="Click to submit"/>    </dsp:form>   When the user submits the form, the /samples/Person.name property is set to the value entered in the input field.Unlike standard HTML, which requires the name attribute for most input tags; the name attribute is optional for DSP form element tags. If an input tag omits the n...

How to convert your Blogger Blog to PDF ?

You can use a website called "blogbooker" @  http://www.blogbooker.com/blogger.php   to convert your Blogger Blog to a PDF . Please find the steps below : 1. Save your blog as an xml using Blogger Settings - Other - Export Blog option 2. Go to the website " http://www.blogbooker.com/blogger.php " and select this XML , give your blog address and select the options like date range, page size, font, ... 3. Click the  "Create Your BlogBook" button to view and save your blog as PDF

Eclipse plug-in to create Class and Sequence diagrams

ModelGoon is an Eclipse plug-in avaiable for UML diagram generation from Java code. It can be used to generate Package Dependencies Diagram, Class Diagram, Interaction Diagram and Sequence Diagram. You coud get it from http://marketplace.eclipse.org/content/modelgoon-uml4java Read more about it and see some vedios about how to create the class and sequence diagram @ http://www.modelgoon.org/?tag=eclipse-plugin Find some snapshots below which gives an idea about the diagram generation.

ATG Search Indexing - behind the scene steps explained

Read more about the search indexing @  http://tips4ufromsony.blogspot.com/2011/11/atg-search-architectural-flow-search.html ATG search indexing involves index file creation, deploying and copying the index file to the search engine's box. The steps can be divided into Initial stage, Preparing Content, Indexing and Deploying. Please find below the detailed analysis of each step. 1. Initial stage:        a. Check whether the folder deployshare configured correctly @ LaunchingService.deployShare  ( \atg\search\routing\LaunchingService.deployShare ). Lets assume that it is configured to \Search2007.1\SearchEngine\i686-win32-vc71\buildedIndexFiles.        b. Lets assume that the index file folder ( \Search2007.1\SearchEngine\i686-win32-vc71\indexFiles)  has the following segments (folders) currently :                     66900...

ATG Search architectural flow : Search and Index

I would like to explain the high level ATG Search implementation architecture ( for an online store) through the above diagram. In this diagram 1.x denotes the search functionality and 2.x denotes the indexing functionality. I have given JBoss as the application server. Physical Boxes and Application Servers in the diagram ( as recommended by ATG )  : Estore ( Commerce ) Box --> The box with the estore/site ear (with the site JSPs and Java codes). Search Engine Box --> The box with the search engine application running. Indexing Engine Box --> The box with the indexing engine application running. CA (Content Administration) Box --> The box with the ATG CA ear ( where we could take CA -BCC - Search Administration and configure the search projects) . Search Indexer Box --> The box with the ATG Search Index ear ( to fetch the index data from repository). Note that the engine performing indexing will need access ...