Thursday, 23 February 2012

ATG Search --> How estore(commerce instance) forms the search engine SOAP URL ?

The comminucation between the Commerce box and the Search engine is through SOAP. Read  more about this architecture @

The commerce instance forms the SOAP url just like the below code:

private URL getSearchEngineURL(SearchEngine engine) {
      SearchEnvironmentHost h =  engine.getSearchEnvironmentHost();
      SearchMachine hi = h.getSearchMachine() ;
      return new URL("http://" + hi.getHostname() + ":" + engine.getPort() + "/AEXmlService/");

So the commerce instance need the hi.getHostname()  and engine.getPort() to form the url. It is obtained as below:

1. The component /atg/commerce/search/refinement/CommerceFacetSearchService has the siteName defined, which will be pointing to the environment name defined in the Search Project. Read  more about this search project setup @


2. By using the above siteName, the commerce instance will obtain the search enigne hostbox name just like the below query :

       select * from rout_host_inf  where id =( select host_info_id from rout_host where parent_env_id = ( select id from rout_env where env_name = 'SearchProjectLocal' ) )   --> The hi.getHostname() got from here

3. By using the above siteName, the commerce instance will obtain the search enigne hostbox name just like the below query :

      select * from rout_engine where host_id = (select id from rout_host where parent_env_id = (select id from rout_env where env_name = 'SearchProjectLocal')) --> The engine.getPort() got from here

Read how to make the SOAP call to search engine using SOAP UI  @

Tuesday, 21 February 2012

ATG Search --> How to define the search configuration rules

ATG Search configuration rules are specified through the ATG BCC Merchandising UI. Over here you could specify the below set of rules
  1. Redirection rules --> If you want to redirect to another page other than the search result page for a search keyword
  2. Property Prioritization rules  --> Prioritize certain set of properties and give weightage
  3. Result exclusion rules  --> Exclude certain search results
  4. Result positioning rules  --> Position / Sort the search result data

1.  To create the search configuration tree, you need to log-in to the ATG BCC Merchandising UI and select the Search Configuration Tree in the Browse tab drop down. Now need to click the Create button and first you need to create the Search Configuration Folder.

2.  When you create the folder, give the name of the folder and select whether the contents vary by Language or Segment. If your ecommerce site need to support more than one language and you need to configure different locale specific rules, please select the contents vary by Language option.

3.  After you create the folder, you could click the create the Search Configuration button and specify the Name and the Locale. These locale values are populated in the drop down from the component /atg/search/config/LanguageDimensionService

4. Once you create the Search Configuration,  you can add different rules like Redirection, Result Exclusion,...

Below you could find the screen shot of a sample Result Exclusion rule for the searches with search keyword contains all of the words baby.

Below you could find the screen shot of a sample Result Positioning rule for the searches with search keyword contains all of the words tv.

Monday, 20 February 2012

ATG Search and startRemoteLauncher

If the search engine application is running in a separate box than the ATG CA-BCC deployed server, the search engine is invoked through a remoteLauncher running in these boxes. Means, a remoteLauncher needs to run in the host where SearchEngine is installed remotely to start the search engine. You could find the @ ATG/ATG2007.1/Search2007.1/SearchAdmin/bin/

Start remoteLauncher using the command  ./ –p <RMI Launcher service Port > &

The Launcher Service Port on the host machine can be found in BCC @
Search Administration>Projects > Search Project: gmri_search_en_CA > Environments > Host Machine: > Advanced Settings.

If the startRemoteLanucher reports a BindingException, then you need to find the process that is using the launchServicePort. For that run the netstat command like :  netstat -an |grep 10880
Then inorder to identify the process that uses this port run the command like :
run 'pfiles /proc/* > /export/build/process.txt' .
Then run grep -n 10880 /export/build/process.txt  to get the line number and open the process.txt file and go to the lineNumber and find the ProcessID some few line above.

Saturday, 18 February 2012

Oracle ATG commerce --> ATG's Blog , Facebook link and Youtube channel

You could read the Oracle Complete Commerce blog to get an idea about the latest Oracle updates regarding commerce including the ATG commerce @

Also checkout the ATG commerce Youtube channel @

Checkout the ATG commerce Facebook link @

Another ATG user group @ Facebook :

Check out the below Oracle blog to get the archived Oracle webcast and presentations @

Friday, 17 February 2012

ATG Search --> How the search rules are deployed as refinement config xmls during search indexing

The rules that make up the search configurations are created in ATG Merchandising and stored as repository items in the RefinementRepository. When the product catalog is deployed from the ATG Merchandising environment to the target site, the RefinementRepository is deployed as well.

For the soap call from the commerce instance to the search engine, for text queries we normally use refineConfig=”map” and the search engine itself determines the right refine config for the query.

When Search Administration initiates indexing of the product catalog, it also invokes the /atg/commerce/search/config/CatalogRankConfigAdapter component. This component is a customization adapter that manages the process of generating the search configuration files and submitting them to ATG Search.

To generate the search configuration files, CatalogRankConfigAdapter invokes the /atg/search/repository/SearchConfigurationXMLGenerator component (of class This component is responsible for transforming the repository items into the XML files that represents rule sets in ATG Search.

SearchConfigurationXMLGenerator calls various other components that parse the rules in the RefinementRepository and generate XML representations of those rules. These are known an the refinement  config xmls. You could find below a sample refinement config xml :

<?xml version="1.0" encoding="UTF-8"?><!--This refinement configuration was automatically generated by /atg/commerce/search/refinement/RefinementConfigurationXMLGenerator at May 20, 2011 8:58:19 AM--><refineConfig name="categorycat171770058" specificity="4"><mapping>cat4880034</mapping><mapping>cat171770066:catalog10001</mapping><refineElement exclude="" filter="1" id="20008" label="Brand" order="" property="childSKUs.brandName" range="false" select="" sort="count" type="string"/><refineElement exclude="" filter="1" id="35002" label="Age" order="" property="childSKUs.Age" range="false" select="" sort="count" type="string"/><refineElement exclude="" filter="1" id="20018" label="Sub-category" order="" property="sub-category.$repositoryId" range="false" select="" sort="count" type="string"/></refineConfig>

Thursday, 16 February 2012

ATG Order schema ER diagram

Check out the Product Catalog schema ER-Diagram @

Check out the User Profile schema ER-Diagram @

If you would like to know the relationship between different Order schema tables, please find below screen shots of  Order schema ER Diagrams.

Wednesday, 15 February 2012

ATG Search --> Search engine tuning settings

In this blog, I am going to list the best tuning settings for ATG Search engine.

The AESoapConfig.xml, AESoapWaspConfig.xml  and AEConfig.xml are the xmls referred below and you can find it @  <ATG_DIR>\<Searchx.x>\SearchEngine\<operating_system>\bin\ folder.

(1)  Make sure that the AESoapConfig.xml's rwTimeout is less than or equal to routing's readTimeoutMs. You could find the routing's readTimeoutMs @ atg\search\routing\SearchEngineService component.

              rwTimeout is the  length of time in seconds to wait before a read or write operation times out on an active connection. The number can be decreased to improve performance. However, a value that is too low could cause slow connections to be prematurely closed.

(2)  Adjust the number of engine threads to match the number of CPUs available to the engine. Note that the minimal value for maxThreads and maxSpareThreads is 2, which applies to running with 1 CPU.  However, it is recommended to run with more than one CPU.
      a) Set MaxThreads in AEConfig.xml to number of CPU's
      b) Set maxSpareThreads in AESoapWaspConfig.xml to number of CPU's

             maxThreads is the number of requests you can process simultaneously, and this generally should be the number of CPU's available to the engine. If this is higher than the CPUs, the engine will bog down, with slower response times.
             maxSpareThreads is the number of  worker threads to process requests simultaneously, generally this should be the same as MaxThreads.

(3)  Disable the the keep-alive/connection reuse setting
       a) Set reuseCount=0
            reuseCount is the number of requests that may be accepted using the same connection. The number can be increased to reduce the frequency of opening new connections and improve performance. However, a value that is too high could prevent new connections from being accepted. A value of 0 disables connection reuse. This applies to HTTP 1.1 only.

Tuesday, 14 February 2012

Mozilla FireFox --> How to add security certificate exception urls

If you visit a web site with a secure connection(https) and if the website's security certificate has some problem like the security certificate presented by the website was not issued by a trusted certificate authority  or  the security certificate has expired or is not yet valid, you will get an error page ( like below in IE ) with an option to continue to this website.

When this non secure page is loading, in Internet Explorer, you will get an option to specify whether you need to download the page content files like JS, CSS, Images,... But you will not get such an option in FireFox/Chrome and could see only the text data in this new non secure page.

If you are doing some local development with FireFox/Chrome and have such a situation, you might want to override this security restriction. FireFox provides some exception url list in secure certificates menu. Go to Options - Advanced - Encryption - View Certificates and click the exception list and add your url to get all content of the site irrespective of the security certificate issue.

Monday, 13 February 2012

ATG Search related repositories

Other than the ProductCatalog repository, ATG search uses the SearchConfigurationRepository, SearchAdminRepository and RefinementRepository. Search Administration requires access to all these 3 repositories. The client application must have access to the routing repository.  Please find below the details of each repository.

   1. SearchConfigurationRepository :

              #  \atg\search\routing\repository\SearchConfigurationRepository.
              #  It stores information about search engines, index structure and deployment information.
              #  refers to all “ rout_* "  tables.

   2. SearchAdminRepository : 

              #  \atg\searchadmin\SearchAdminRepository.
              #  It stores information about search administration like search projectand sync task details.
              #  refers to “ srch_* "  tables.

   3. RefinementRepository :

              #  \atg\search\repository\RefinementRepository.
              #  It stores information about refine elements and refine configuration.
              #  refers to "srch_* " tables.

Search Facets --> How to create a new search facets in ATG Search

A Facet is a search refinement element that corresponds to a property of a commerce item type. ATG supports the search result refinement using the Faceted Search concept. Read more about facted search @

Facet can either be ranges or specific values. Each facet is stored in the RefinementRepository as a separate refineElement repository item.

Facets are divided into Global and Local facets. Global facets apply to all the categories and local facets only to the category in which they are created. For example Price/Brand can be considered as the facets that are common for all skus and New Release/Coming Soon can be considered as the facets that are specific to Physical Media products like Vidoe/DVD/Blue-ray/Books.

We can use the ATG BCC - Merchandising UI to create facets. The Faceting Property depends on the meta-properties defined in the \atg\commerce\search\product-catalog-output-config.xml ( the definitionFile of the \atg\commerce\search\ProductCatalogOutputConfig).

Below I am listing the different steps to create a new Facet :

1. Log-in to the  ATG BCC - Merchandising UI and select the Facet in the Merchandising Browse tab drop down.

2. If you want to create a Global Facet,  select the global facet folder. If it is a local facet, select the category/department against which you want to add the facet and click the create new Facet button.

3. In the Faceting Property, select the property against which you want to add the new Facet.These properties listed depends on the meta-properties defined in the \atg\commerce\search\product-catalog-output-config.xml. 

4. Specify the property name and also define the selection type.

5. Sometimes you might need to specify a defined range of values for the Facets. For example if the products have some user ratings, then the value might be a range between 1-5. 

6. Now you could select the sorting options.

7. If you want to exclude some values from the Facet, you could specify that too and click on the Save button to finish the facet creation.

Wednesday, 8 February 2012

ATG Search troubleshooting tips

In this blog, I have listed some basic ATG Search troubleshooting tips in some general scenarios.

1. If the index did not deploy, consider the following possible causes :
  • Is the DeployShare property configured @ /atg/search/routing/LaunchingService component ? 
  • Is enough space available @ deployment share box for the index ? 
  • Are the RMI ports configured correctly in the RoutingSystemService component ? 
  • If the search engine application is running in a separate box, this application is invoked through a RemoteLauncher running in these boxes. Check whether these RemoteLaunchers are running in these boxes ?
2. If you have trouble in launching one or more search engines, try the following remedies:
  • If the Search engine is standalone, set the /atg/search/routing/LaunchingService component’s engineDir property to the absolute path of the Search engine directory. 
3. Search unavailable in the estore page, even when the SearchEngine is in "Running" status.

        This may occur sometimes, when the eStore-AppServer 's SearchEngineService component is pointing to the old port, different from what the engine is actually pointing as mentioned in the searchServer's SearchEngineService component. This occurs when indexing is triggered and when searchIndexing gets completed, the searchEngine port gets a new value. Inorder to resolve this, either restart this SearchEngineService component of the estore server. If its still not pointing to the right port, then restart the eStore AppServer.

4. Following are the steps to enable the different logging for troubleshooting :
  • Set the LaunchingService component’s loggingDebug property to true and look at the Launching debugging line.
  • Go to /atg/search/routing/SearchEngineService/ and change the loggingAllRequests property value to true to log all requests made to the Search engine. 
  • Go to /atg/search/routing/LaunchingService and change the engineLogLevel property value to D to enable debug logging. This will log all requests and takes effect upon the next engine restart. 
 5. In case of failure in indexing, check the following logs
  • JBoss server logs - <JBOSS_HOME>\server\atg\logs\server.log
  • Dumping request logs Folder - <ATG_HOME>\logs\searchEngineActivity\*.xml (request and response xmls). These logs will provide what was the request send to search engine in xml form and what was the response from engine for a query.
  • Search engine logs - <ATG_HOME>\Search2007.1\SearchEngine\i686-win32-vc71\bin. This can also be used for checking the indexing failing in the engine level.  

Friday, 3 February 2012

ATG --> How to create and deploy a new atg module

ATG products are packaged as a number of separate application modules. Application modules exist in the ATG installation as a set of directories defined by a manifest file.

To create a new module, follow the below steps :
  1. Create a module directory within your ATG installation. 
  2. Create a META-INF directory within the module directory. Note that this directory must be named META-INF. 
  3. Create a manifest file named MANIFEST.MF and include it in the META-INF directory for the module. The manifest contains the meta-data describing the module.
  4. A module located at <ATG2007.1dir>/MyModule is named MyModule and a module located at <ATG2007.1dir>/CustomModules/MyModule is named CustomModules.MyModule.
  5. Within the subdirectory that holds the module, any number of files may reside in any desired order. These files are the module resources (EAR files for J2EE applications, WAR files for web applications, EJB-JAR files for Enterprise JavaBeans, JAR files of Java classes, platform-dependent libraries, HTML documentation, configuration files,...)
Sample MANIFEST.MF content :

Manifest-Version:  1.0
ATG-Config-Path:  config/
ATG-J2EE:  j2ee-apps/my-estore
ATG-EAR-Module:  j2ee-apps/my-estore
ATG-Class-Path:  lib

  • ATG-Required --> A space-delimited set of module names. Here we will define the other modules that need to be included in this module. When the application is started up, the module’s manifest is processed after the manifests of the modules that the module depends on. Note that in most cases, you should set this attribute to include the out of the box module DSS. DSS has ATG required DPS and DPS module has DAS.
  • ATG-Config-Path --> Check the ATG-Config-Path for the property files for this module.
  • ATG-Class-Path --> The ATG platform adds the ATG-Class-Path value to the beginning of the EAR file’s classpath as each module is processed. Paths are relative to the module’s root directory.
Read  more about different attributes @

How to create an ATG ear ?

           To create an ATG ear module, your web.xml should contain some basic elements. To use ATG platform functionality, a web application needs to start Nucleus by invoking NucleusServlet. So it should be included in the web.xml to load on start up.


Also the following tag lib alias name should be given to call the dsp tags.


             To assemble the ATG application, we can use the "runAssembler.bat" available @ ATG\ATG2007.1\home\bin\runAssembler.bat location. The basic syntax of the command follows this format : runAssembler  earfilename  –m  module-list  .  Each EAR file built by runAssembler includes the following J2EE modules:
  • atg_bootstrap_ejb.jar: This module contains a single session EJB. The EJB’s class loader is used to load the ATG classes needed by the application.
  • atg_bootstrap.war: This module starts up Nucleus and runs the DAF servlet pipeline and the DAS servlet pipeline (for JHTML).
  • The EAR file can optionally include Dynamo Administration, which is packaged as a web application named atg_admin.war and you must specify the DafEar.Admin module when you run the application assembler to include Dynamo Administration.

             You can create two types of EAR files with the ATG application assembler, development and standalone. Both types contain all ATG classes needed for the application. The primary difference is in where the configuration files for Nucleus components are stored. In development mode, the application draws its Nucleus configuration information from the ATG installation folders. In standalone mode, the application stores its configuration in the EAR file itself.

             The main differences between development-mode and standalone-mode EAR files are found in the WEB-INF/ATG-INF directory of the atg_bootstrap.war J2EE module. In this directory, both types of EAR files have a file called dynamo.env, which defines Dynamo environment properties. In a development-mode EAR, the dynamo.env file contains the following entry, which tells the application to get its configuration from the .properties and XML files in the ATG installation :  atg.dynamo.use-install=true. So in development-mode you can make configuration changes without having to rebuild the EAR file.

Wednesday, 1 February 2012

ATG deprecated code (till ATG 10)

ATG  Deprecated Code (till ATG 10)

Technology Deprecated as of Notes
ACC Reporting functionality ATG 2007.2, 9.2, 10.0.1
Oracle WebLogic and IBM WebSphere JMS Providers ATG 10.0 This includes the WebLogic.JMSProvider and WebSphere.JMSProvider modules
Support for CA deployment to prior versions ATG 10.0 CA will only support deployments to the same version
Standard Commerce Catalogs ATG 10.0 Standard Catalogs are deprecated in favor of Custom Catalogs
Pioneer Cycling Reference Application ATG 10.0 Replaced by Commerce Reference Store application
Cache Switch Hot (cacheSwitchHot) ATG 10.0
.NET Client Software ATG 10.0
Facet Droplets ATG 9.0 The FacetSearchDroplet is deprecated in favor of  using the to issue faceted search  queries. As of ATG 10.0, the FacetSearchDroplet will be removed entirely and any use of this droplet must be updated to use QueryFormHandler instead. Note that  the FacetTrailDroplet has not been deprecated and is still used to construct  facet trails.
Response Management ATG 2007.1 All versions of Response Management have reached End-of-Life status on November 1, 2009. As of ATG 10.0, all Response Management code will have been removed from the ATG products.
Relational Views ATG 6.0 Relational Views are deprecated in favor of ATG Repositories.
HTML and XML Repositories ATG 6.0 Deprecated in favor of SQL/File System Connector (SQL Content Repository with Content Repository Loader)