Setup
Once the application installed, the correct parameters must be associated in order to have the more accurate behavior.
In this section, we detail first the database configuration, then the application server configuration and finally the parameters for CPQ.
How to Configure the Database
DATABASE INITIALIZATION
As explained in the reference document CPQ Installation Guide, The database configuration must follow the requirements in the table below:
| CONFIGURATION | CPQ SUPPORTED VALUES | OBSERVATION |
|---|---|---|
| Database server and client versions | Oracle XE universal (for standalone usage), Oracle 10g, Oracle 11g R2 | |
| Character set of the Oracle database | AL32UTF8 | To verify the correctness of your character set, execute the following query: select value from nls_database_parameters where parameter = ‘NLS_CHARACTERSET’ |
| Specific tablespace for Smart CPQ | Any Oracle tablespace name | To create a tablespace, execute : create tablespace cameleon_tablespace, data file ’/oracle/cameleon_tablespace.dbf’, size 1G, online |
| Specific user for Smart CPQ | Any Oracle user name | To create a user, execute : create user cameleon_database_user, identified by cameleon_database_password, default tablespace cameleon_tablespace |
| Specific user for Quote | Any Oracle user name | To create a user, execute : create user cart_database_user, identified by cart_database_password, default tablespace cameleon_tablespace |
| Specific user for CCS | Any Oracle user name | To create a user, execute : create user CCS_database_user, identified by CCS_database_password, default tablespace cameleon_tablespace |
| The Oracle user rights for Smart CPQ | Connect, resource | To create a user, execute : grant connect, resource to cameleon_database_user, grant connect, resource to cart_database_user, grant connect, resource to CCS_database_user |
Do not: Database users must be tied to the “cameleon_tablespace” and cannot be a DBA.
In the standard installation tool, both tables and indexes are installed in the same tablespace.
As, for large database, it is recommended to dissociate indexes and tables in two distinct tablespaces, this architecture is supported for CPQ but must be done manually.
Reference: To encrypt the database credentials, please refer to the CPQ Installation Guide.
How to Configure the Application
OPTIMIZING THE JBOSS STANDALONE.SH/.BAT FILE
After installing CPQ, a default server profile is provided. This server profile has the following form:
SERVER_PROFILE="-Xms128m -Xmx1024m -Xss512k -XX:MaxPermSize=256m"
It is recommended to update the server profile in order to optimize the environment based on the expected load.On 64-bit environments, we recommend adding the -XX:+UseCompressedOops option, which can improve performance of the 64-bit JRE when the Java object heap is less than 32 gigabytes in size. In this case, Hotspot compresses object references to 32 bits, reducing the amount of data that it must process. The server profile would thus become:
SERVER_PROFILE="-Xms128m -Xmx1024m -Xss512k -XX:MaxPermSize=256m - XX:+UseCompressedOops”
MAIN CONFIGURATION FILE: CAMELEON.PROPERTIES
The cameleon.properties file contains all the parameters of CPQ that can impact the behavior of the application.
This file can be found in: \conf\
The cameleon.properties file contains a list of parameters grouped by theme. We present the different parameters into the following section except for those for the caches that are detailed in a further section.
cameleon.properties
| NETWORK CONFIGURATION | ||
|---|---|---|
| java.naming.provider.url | For internal use only. When using an external web server (Apache), this URL should point to the CPQ server. | jnp://<IP of the server>:<JNDI Port of the server> |
| cameleon.url.public | CPQ public url | http://<IP of server>:<Port |
| cameleon.url.private | CPQ private url | http://<IP of server>:<Port |
| cameleon.work.dir | CPQ working (temporary) directory | ${cameleon.home}/work |
| QUOTE MODEL CACHE MANAGEMENT | ||
|---|---|---|
| provider.remote.url.cluster.nodes | List of remote cluster node URLs separated by ';' delimiter. This is used to clean quote model cache. | Empty by default. For instance: remote://cpq1:4647;remote://cpq2:4647 |
| provider.http.url.cluster.nodes | List of cluster's node urls separated by ';' delimiter. This is used to clean quote model cache. | Empty by default.For instance: http://cpq1:8280;http://cpq2:8280 |
When the cart model is modified and saved on one node, the disk synchronization with other nodes can take up to 2 minutes. Clearing the cache on other nodes should therefore be
done after this sync time only, otherwise the modification will not be taken into account.
| JMX CONSOLE | Examples | |
|---|---|---|
| api.cross.domain.allowed.origins | List of allowed origins used to filter the cross-domain requests. The list of parameters, separated by commas, can be exact domains or domains with wildcards. Warning: with a single * all requests are accepted. |
|
| admin.fatals_history_length | The maximum number of fatal errors that will be displayed in the JMX console. The list of displayed errors is made of the latest ones. | 20 |
| MODELING API | ||
|---|---|---|
| modeling.api.rmgFolder | Points to the folder where the Rich Media Gallery will be stored. | <cpq_home>/jboss/standalone/deployments/cameleon.ear/cameleonResources.war/RMGRepository/ |
| modeling.api.rmgURL.private | Points to the private URL where the Rich Media Gallery is accessible. | ${cameleon.url.private}/cameleonResources/RMGRepository/ |
| modeling.api.distributionFolder | Points to the folder where the export&import files will be stored. | ${cameleon.home}/export_import |
| modeling.api.indexFolder | Points to the folder where the index files will be stored. | ${cameleon.home}/indexes |
| eximp.simpEximp.cache.generate | Flag to generate the cache automatically in the Simple Eximp process | Default is set to TRUE. TRUE, the cache is generated when the Simple Eximp process is launched. FALSE, the cache is not generated when the Simple Eximp process is launched. |
| eximp.simpEximp.full.text.generate | Flag to generate full text search automatically in the Simple Eximp process | Default is set to FALSE. TRUE, the full text search is generated when the Simple Eximp process is launched. FALSE, the full text search is not generated when the Simple Eximp process is launched. |
| modeling.api.db.stats.strategy | Activate the automatic Oracle statistic gathering after an XML/XLS import or Version creation. Could be valued with “gather” / “none” / “custom”. | gather |
| modeling.api.db.stats.activities | List of activities that trigger the statistics gathering. The default behavior is: all activities trigger a gathering. | import;version |
| modeling.api.db.stats.bps | Activate the cleaning of BPS from orphan lines. | STAT to run and only display the total number of BPS to clean and the total number of BPS lines to clean; CLEAN to run only the cleaning of BPS; CLEAN_STAT to run both the clean and stat. |
| MODELING API | ||
|---|---|---|
| eximp.simpEximp.full.text.generate | Flag to generate full text search automatically in the Simple Eximp process | Default is set to FALSE. TRUE, the full text search is generated when the Simple Eximp process is launched. FALSE, the full text search is not generated when the Simple Eximp process is launched. |
| modeling.api.db.stats.strategy | Activate the automatic Oracle statistic gathering after an XML/XLS import or Version creation. Could be valued with “gather” / “none” / “custom”. | gather |
| modeling.api.db.stats.activities | List of activities that trigger the statistics gathering. The default behavior is: all activities trigger a gathering. | import;version |
| modeling.api.db.stats.bps | Activate the cleaning of BPS from orphan lines. | STAT to run and only display the total number of BPS to clean and the total number of BPS lines to clean; CLEAN to run only the cleaning of BPS; CLEAN_STAT to run both the clean and stat. |
| COMMON UI CONFIGURATION | ||
|---|---|---|
| cameleon.ui.enableGZIPOnWS | Enable (true) or Disable (false) GZIP on WS flows | true |
| cameleon.ui.browserCacheLifetime | Browser cache lifetime in minutes. If you set this parameter, browser cache will be automatically refreshed each browserCacheLifetime value. (Example: 10080 corresponds to a refresh every week: 7* 24 * 60). | |
| cameleonUI.errorPage.exception.url | URL of a custom error page used to override the default Java Exception error page. | See the Error Page Customization chapter for more details |
| COMMON UI CONFIGURATION | ||
|---|---|---|
| cameleonUI.errorPage.http.[errorCode].url | URL of a custom error page used when an HTTP [errorCode] is returned. | The HTTP error codes handled by this property are the following: 400, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 500, 501, 502, 503, 504, 505, 511 |
| cameleonUI.errorPage.http.url | URL of a custom error page used when an HTTP error code not handled by the cameleonUI.errorPage.http.[errorCode].url property is returned. | See above to identify which error codes are concerned. |
| CONFIGURATOR UI CONFIGURATION | ||
|---|---|---|
| configurator.ui. layoutFileName | Name of the Configurator User Interface configuration file to be used. Determines the default value in the Designer “run current” function. See the reference document CPQ User Interface for more details about this file. | configuratorUI.xml |
| configurator.ui.configurationFileName | Name of the default configuration XML file to be used when starting the Configurator. Determines the default value in the Designer “run current” function. | configuration.xml |
| configurator.ui.savedConfigurationFileName | Name of the default file to be used when saving a configuration in the Configurator. | configuration-saved.xml |
| configurator.ui.upload.allowedExtensions | White list of file extensions allowed for upload in Form Properties of type File, separated by ‘;’ | txt;info;jpg;jpeg;gif;png;swf;jrxml;zip;pdf;doc;docx;ppt;pptx;xls;xlsx;rtf;csv |
| configurator.ui.upload.fileMaxSize | Max size for files uploaded via Form Properties of type File (in MB) | 15 |
| CONFIGURATOR UI CONFIGURATION | ||
|---|---|---|
| configurator.ui.upload.directory | Path of the directory, under the CPQ install root directory, where the files uploaded via Form Properties of type File will be stored | upload |
| configurator.ui.scrollMode | configurator automatic scroll mode: previousFP: try to keep the last answered FP on the screen when answering the next FP nextFP: scroll to next FP (and put it at the top of the screen) | previousFP Warning: The "previousFP" behavior does not apply on a change of Form (last FP of a form to first FP of the next Form) |
| configurator.ui.disableCatalogAuthentication | If set to false, the navigation on the catalog will be dependent of the current session | |
| configurator.codification.policy | In the codification rule, you can design either a mapping function or a codifying function. CPQ Designer provides two modes to manage the potential interactions between these functions. Standard mode: If both a mapping and a codifying functions have been provided, the codifying function will be deactivated Merge mode: If both a mapping and a codifying functions have been provided, the mapping function will be used and its result will be overridden by the parameters of the codifying function, including the system properties, the Business Properties and the Rich Media Objects. | Merge (default) | standard |
| CONFIGURATOR UI CONFIGURATION | ||
|---|---|---|
| configurator.ui.hideIfCellExpressionDoesNotExist | Value in cameleon.properties that determines what happens when the CPE pointed by a cell expression doesn’t exist, or one of its parents doesn’t exist. When equals true, the value is not displayed. When equals false, the value is displayed, regardless of the existence state of the target CPE and its parents. | True |
| CATALOG CONFIGURATION | ||
|---|---|---|
| catalog.bookmark.enabled | Authorize or not bookmark capabilities. | True by default. Set to false if bookmarks have to be forbidden |
| CATALOG UI CONFIGURATION | ||
|---|---|---|
| catalog.ui.layoutFileName | Name of the Catalog User Interface configuration file to be used. Determines the default value in the Designer “run current” function and when launching the catalog from a bookmarked URL. | catalogUI_2011.xml |
| catalog.ui.catalogFileName | Name of the default Catalog XML file to be used when starting the Catalog. Determines the default value in the Designer 'run current' function and when launching the Catalog from a bookmarked URL | catalog.xml |
| catalog.ui.savedCartFileName | Name of the default file to be used when saving products selected from the Catalog | cart-saved.xml |
| catalog.ui.internationalSettingsName | At runtime, the CPEs corresponding to the internationalSettings will be injected as settings and override the ones found in the catalog.xml file. | |
| catalog.ui.applicationDate | Application date | |
| catalog.ui.hotspots.comparator | The sort class to use on hotspots. Must be a class to use to sort hotspots, i.e. : com.cameleon.configuratorui.comparator.HotspotAlphaNumComparator, com.cameleon.configuratorui.comparator.HotspotNaturalComparator (default is HotspotAlphaNumComparator) | com.cameleon.configuratorui.comparator.HotspotAlphaNumComparator |
| EXTERNAL COMPONENTS CONFIGURATION- COMMON PARAMETERS | ||
|---|---|---|
| externalComponents.transform.disable | disable the init method if equal true | true |
| MODELING UI CONFIGURATION- MODELINGUI INITIALIZATION | ||
|---|---|---|
| modeling.ui.defaultUser.internationalSettings | Name of the international settings object which is to be associated with the default user created at first access. | englishSettings |
| modeling.ui.defaultLocale | Locale of the default user created at first access. Also used to determine the default language of the Designer interface. In the Designer, if no locale is associated to the user, this value is set as the default locale for this user. | en |
| modeling.ui.historySize | The number of steps to memorize in the Designer history | 20 |
| modeling.ui.searchResultSize | Number of results displayed by object type in the Designer search field. | 5 |
| modeling.ui.sharedSettingsPersistenceTimeout | For internal use only. Do not change. | 1800000 |
| MODELING UI CONFIGURATION- MODELINGUI INITIALIZATION | ||
|---|---|---|
| modeling.ui.sharedContextMode | Shared context mode | MEM |
| modeling.ui.headerColor modeling.ui.environmentName | These 2 parameters are used to customize your modeling environments. They are optional. You can set header color and environment name for each modeling environment. | |
| modeling.ui.manageVersion.generateChecked | Parameter used to check or uncheck by default the 'Generate Cache', 'Generate Search index' and 'Generate Sitemap' checkboxes when generating a version. | true |
| modeling.ui.themes.management.enabled | Parameter used to enable/disable the possibility to manage themes for versioning | true |
| modeling.full.text.auto.remove.version | Parameter used to remove search indexes when a version is deleted | true |
| MODELING UI CONFIGURATION- MODELINGUI INITIALIZATION | ||
|---|---|---|
| modeling.full.text.auto.generate | Parameter used to automatically create full text search indexes when a version is created | false |
| MODELINGUIMIGRATION CLASSIC TO CPQ OUTPUT FOLDER | ||
|---|---|---|
| modeling.ui.migrationOutputFolder | Output folder of the migration process from Classic to CPQ. | ${cameleon.home}/MigrationOutputFolder |
| MODELINGUI RICH MEDIA GALLERY UPLOAD PARAMETERS | ||
|---|---|---|
| modeling.ui.rmg.allowedExtensions | List of allowed file extensions | txt;info;jpg;jpeg;gif;png;swf;jrxml;zip;pdf;doc;docx;ppt;pptx;xls;xlsx;pdf;rtf;csv;dae;obj;json;wrl;jasper |
| modeling.ui.rmg.zipMaxSize | File size limit for uploads (in MB) | 15 |
| EXTERNAL APPLICATION RICH MEDIA GALLERY ACCESS | ||
|---|---|---|
| secure.rmg.enabled | Enable secure static assets on RMG | True to enable security on the assets. |
| secure.rmg.secret | Secure assets secret key |
| EXTERNAL APPLICATION RICH MEDIA GALLERY ACCESS | ||
|---|---|---|
| secure.rmg.authorized.applications | Authorized applications (Use ',' separator if multiple) | jasperreport-pros,catalog,configurator,cart,cpqdesigner |
| EXTERNAL LOGIN CONTROL CLASSES | |
|---|---|
| modeling.ui.externalLoginClass | Name of the class which is used to bypass the login, and to call an external LDAP check. This class needs to be deployed in the same target as the “cameleon.ear” file. |
| modeling.ui.limitedRole | Name of the role to be applied if the external login class sends back “LIMITED” (meaning the LDAP is down). |
| SSO SAML PARAMETERS | ||
|---|---|---|
| modeling.ui.appPortal.login.enable | Enable AppPortal UI login for CPQ designer. If true all AppPortal properties without default value must be provided | false |
| modeling.ui.appPortal.login.portal.uri | App portal login url for SellingPRO Designer. | |
| modeling.ui.appPortal.application.id | Application id of CPQ designer in AppPortal. |
| SSO SAML PARAMETERS | ||
|---|---|---|
| modeling.ui.appPortal.tenant.id | Tenant id of the client using AppPortal. | |
| modeling.ui.appPortal.application.secret | Application secret of the given tenant and application id in AppPortal. | false |
| modeling.ui.appPortal.authenticator.type | AppPortal authentication type. | session |
| modeling.ui.appPortal.whitelist.uri.prefixes | List of url to skip by AppPortal security filter. | Must be comma-delimited list, no whitespace. Keep comment if no url to whitelist. |
| modeling.ui.appPortal.application.oauth2.uri | AppPortal application endpoints. | oauth2 |
| modeling.ui.appPortal.application.entry.uri | AppPortal application base endpoint url | |
| modeling.ui.appPortal.user.workgroup | Defines the authenticated user workgroup. | (provided by the customer). |
| modeling.ui.appPortal.user.autocreate | Automatically creates user with when logged in with AppPortal but not existing in the Application. | false |
| SSO SAML PARAMETERS | ||
|---|---|---|
| modeling.ui.appPortal.user.default.team | Users automatically created after an AppPortal login will belong to the default team if provided. | Mandatory if user auto-creation is enabled (provided by the customer). |
| modeling.ui.appPortal.user.default.role | Users automatically created after an AppPortal login will be granted the default role if provided. | Mandatory if user auto-creation is enabled (provided by the customer). |
| CSV EXPORT | ||
|---|---|---|
| modeling.UI.CSVexport.maxLinesNumber | Max number of lines that can be exported on a call to the CSV export feature in the Designer. | 500 |
| PUSH METADATA TO CRM | ||
|---|---|---|
| modeling.ui.push.metadata.class | Java Class allowing pushing CPQ XML structure to a CRM like MS Dynamics, so that CRM and CPQ meta elements remain in sync, meaning that every change done on the model in CPQ is proactively applied accordingly in the CRM | com.pros.integration.DefaultPushMetadataImpl |
| modeling.ui.push.metadata.crm.instances | List of CRM instance orgID separated by a comma | org55b5ee2c,org54dfe335 |
| CWT INITIALIZATION | ||
|---|---|---|
| modeling.ui.cwt.config.upload.sizethreshold | Maximum permitted size for a file to be uploaded in memory, without the creation of a temporary file on disk (for 512Kb, write 524288 = 512x1024) | 1024000 |
| CWT INITIALIZATION | ||
|---|---|---|
| modeling.ui.cwt.config.upload.maxsize | The maximum permitted size for a file to be uploaded (in bytes, for 512Kb, write 524288 = 512x1024). | 524288000 |
| modeling.UI.CSVimport.maxFileSize | The max CSV request size (in byte, for 512Kb, write 524288 = 512x1024) | 1024000 |
| SPARE PART DESIGNER | ||
|---|---|---|
| modeling.ui.imagemagic.path | Path for Image Magic tool. Mandatory only for spare parts module hotspots detection (see http://www.imagemagick.org for more information) | For default value refer to CPQ Installation Guide |
| modeling.ui.ocrad.path | Path for OCRAD tool. Mandatory only for spare parts module hotspots detection (see http://www.gnu.org/software/ocrad/ for more information) | For default value refer to CPQ Installation Guide |
| modeling.ui.hotspots.comparator | Hotspot sorting to use. Must be a class to use, i.e.: com.cameleon.modelingui.comparator.HotspotAlphaNumComparator or com.cameleon.modelingui.comparator.HotspotNaturalComparator (default is AlphaNum). | com.cameleon.modelingui.comparator.HotspotAlphaNumComparator |
| MESSAGES CONFIGURATION | ||
|---|---|---|
| common.message.persistence | This property allows activating the engine messages persistence mechanism. The default value is set to false to activate the previous engine messages behavior, i.e. purge of all engine messages on each call. | false |
| LOGGING CONFIGURATION | ||
|---|---|---|
| log.maxParameterSize | The maximum parameter size to display. (If a parameter exceeds this given size, it will be truncated to maxParameterSize). Default value, if no value is provided, is 2048 | 1000 |
| LOGGING CONFIGURATION | ||
|---|---|---|
| log.showMethodsParams | “true” in order to display method parameters during method trace, otherwise “false”. | true |
| log.execTime.level | Specifies the log level for execution times. Possible values: OFF, TRACE, DEBUG, INFO, WARNING, ERROR, FATAL. | OFF |
| log.execTime.collectMethods | “true” if statistics need to be collected for logging execution times, otherwise “false”. | false |
| log.showLinesNumber | “true” if line numbers need to be shown, otherwise “false” | false |
| CPQ MACRO LANGUAGE CONFIGURATION | ||
|---|---|---|
| ml.lang | The language to use for messages sent by the Macro Language. Typically used to change the tracing language. Possible values: US, FR. | us |
| ml.macroLegacy | Not Implemented | Not Implemented |
| ml.dbDriver | The ml.dbDriver attribute is a list (separated by comma) of driver class name to load. | |
| ml.creationDBPool | The ml.creationDBPool attribute is a list (separated by comma) of database pool definition. The pattern is the following: Name=...;Driver=..;Url=..;User=..;Password=..;MaxCapacity=..;InitCapacity=..;Timeout=... | |
| ml.externDBPool | The ml.externDBPool attribute is a list (separated by comma) of data source JNDI name | |
| ml.javalib | A list of class names (separated by comma) in order to extend the Macro Language with external libraries. The jar file(s) containing the classes corresponding to these external libraries will also have to be deployed in the CPQ JBoss target. An example of value could be:com.cameleon.business.dao.BusinessDAO .com.cameleon.framework.commons.type.Range, java.lang.Integer, com.cameleon.business.object.product.impl.StandardItemImpl, com.cameleon.business.object.metaobject.impl.BusinessPropertySetImpl, com.cameleon.business.object.metaobject.impl.BusinessPropertyImpl, com.cameleon.framework.business.cpe.CPEBuilder | Default value is null. |
| ml.trace | Activates (or deactivates) the traces produced by the TRACE command in Business Macros. Should be ON in a development environment and OFF in a production environment. Indeed, Macro language traces must always be turned off in production environment where concurrent runs could happen in order to avoid concurrent write into the trace files. Possible values: ON, OFF. | ON |
| ml.traceMaxSize | Maximum size of macro language trace file, in megabytes |
| CPQ MACRO LANGUAGE CONFIGURATION | ||
|---|---|---|
| ml.maxNbInstr | Maximum number of instructions in a macro language script run | |
| ml.chrootMLTraceDir | Path of macroLanguage trace directory | |
| ml.securityLevel | Security level of the macro language | None|Medium|High |
| ml.maxExecTime | Maximum execution time (in milliseconds) allowed for external java calls (post-checked) |
| CPQ LICENSE | ||
|---|---|---|
| license.timeout | The license timeout, which will automatically liberate the license ticket if no activity has been registered. Has to be higher than 1 minute and is given in minutes. | 6 |
| license.timeoutPolicy | Timeout policy: Unlimited (default value) or LicenseTimeout (in this last case, sessions will timeout after a license.timeout duration of inactivity) | Unlimited |
| license.logger.activation | Enable (true) or Disable (false) the license logger | By default is set to true |
| CPQ DISTRIBUTION | ||
|---|---|---|
| distribution.scheduler.startonload | If this property is set to TRUE, then the scheduler will be started automatically on the Designer startup. The scheduler is the part of the CPQ distribution tool that automates the import of published versions. If this property is set to FALSE, then the scheduler will not be started. | TRUE |
| distribution.publisher.defaultname | The default name of a server that acts as a publisher. Can be overridden by the publisher.xml file. | DEFAULT_PUBLISHER |
| distribution.repository.path | The default distribution path. | ${cameleon.home}/distribution |
| CPQ DISTRIBUTION | ||
|---|---|---|
| distribution.subscriber.upload.folder | The name of the folder where import file of the Audit Import step are uploaded. | upload |
Engine Cache Configuration (cf. next chapter)
| ENGINES LIMITATION | ||
|---|---|---|
| configurator.limit.productFilterSearch.maxItemNumber | Provides a limit for product filters result size | 1000 |
| configurator.limit.completeMatchingSearch.maxItemNumber | Provides a limit for complete matchings result size | 1000 |
| configurator.limit.partialMatchingSearch.maxItemNumber | Provides a limit for partial matching result size | 1000 |
| configurator.limit.manufacturingMatchingSearch.maxItemNumber | Provides a limit for manufacturing matching result size | 1000 |
| configurator.limit.needAnalysisSearch.maxItemNumber | Provides a limit for need analysis search result size | 1000 |
| engines.limit.search | Provides a limit for all engines (Configurator and Catalog) searches result size. | 1000 |
ERROR PAGES CUSTOMIZATION
The cameleon.properties file allows to declare URLs for customized error pages as follows:
| ERROR PAGES CUSTOMIZATION | ||
|---|---|---|
| cameleonUI.errorPage.exception.url | URL of a custom error page used to override the default Java Exception error page. | The HTTP error codes handled by this property are the following: 400, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 500, 501, 502, 503, 504, 505, 511. |
| cameleonUI.errorPage.http.[errorCode].url | URL of a custom error page used when an HTTP [errorCode] is returned. | See above to identify which error codes are concerned. |
| cameleonUI.errorPage.http.url | URL of a custom error page used when an HTTP error code not handled by the cameleonUI.errorPage.http.[errorCode].url property is returned. |
Look for the "cameleonUI.errorPage.http.404.url" property and use its value if any [If the previous step failed]
Look for the "cameleonUI.errorPage.http.url" property and use its value if any [If all of the previous steps failed]
Use the default (hardcoded) HTTP 404 error page
In case of an outside custom error page used in the "cameleonUI.errorPage.exception.url" property, some information about the error might be forwarded to the error page (depending on the exception type) as GET parameters.
USER TRACING
The cameleon.properties file enables tracing of user connections via the following parameters:
| EXTERNAL TRACING SERVICE CLASS | ||
|---|---|---|
| modeling.ui.externalTracingClass | Name of the class used to trace user actions in the Designer. This class uses the supervisionClass to trace. | com.cameleon.modelingui.services.trace.CameleonDefaultTracingService |
| EXTERNAL SUPERVISION (TRACER) CLASS (USED BY TRACING SERVICE) | ||
|---|---|---|
| modeling.ui.supervisionClass | Name of the class used to print out traces. | com.cameleon.framework.commons.trace.CameleonTracer |
| modeling.ui.supervisionCategory | The log4j category is used by the supervision class. It should be defined in jboss-log4j.xml too. | cameleon.designer.security |
When tracing is activated, the following information will be logged:
- The access type (ACCESS, SAVE, etc.)
- The users’ IP address
- The users’ original IP address
- The timestamp
- The user name (= the connected user in the Designer)
- The users’ first name
- The users’ last name
- The process name
- The parent object workspace/class/name
- The version information:
- Internal identifier
- Fix number
- Version label
- Version start date
- The user name for the user who created the version
- The timestamp of creation
- The user name for the user that fixed the version
- The timestamp of fix creation
- « false » (a static field, no longer used)
- « false » if the version is a « real » version, « true » if the version is a working version
- The concerned object (e.g. the object which has been saved)
REPORT GENERATION
The following parameters available in cameleon.properties are available for report generation:
| REPORT GENERATOR CONFIGURATION | ||
|---|---|---|
| report.file.access | Determine if report must upload and download every required files (XML, JRXML, ZIP, PDF ...). Due to performance reasons we recommend to use ReportGenerator remote generation capability only when a direct file sharing is possible through a NAS or shared disk. For quicker report generation: use LOCAL. Available values are: LOCAL (files can be reached through a common file structure) or REMOTE (files can be reached through HTTP protocol and stored in report gen cache). | LOCAL |
| report.naming.provider.url | When using an external report engine server, this URL should point to the ReportEngine JNDI URL. If report engine is local, this property doesn't need to be defined (local JNDI is used). This parameter is client parameter (if not set, java.naming.provider.url will be used). | ${java.naming.provider.url} |
| report.product.name | This entry provides the name of ReportGenerator ear name (due to EJB retrieving reasons). Leave blank if ReportGenerator is embedded into the CPQ ear. Pertinent value for remote usage can be 'ReportGenerator' if ear file name is: 'ReportGenerator.ear'. This parameter is client one (if not set, environment variable 'cameleon.product.name' is used instead) | cpq |
| report.download.url | This entry defines the URL to use for downloading reports when ReportGenerator is deployed remotely. This parameter is client side (if not set, no remote report generation can be done). | ${cameleon.url.public}/ReportGenerator/ReportDownload |
| REPORT GENERATOR CONFIGURATION | ||
|---|---|---|
| report.working.delete | Determines if generated reports elements must be deleted in the report.working.dir (note that if report.working.dir is not set, reports elements will always be deleted). Assume that if this parameter is set to true, the report.working.dir will grow quickly. Ensure that folder is cleaned sometimes and this parameter comes back to true when report corrections are done. | true |
| net.sf.jasperreports.xpath.executer.factory | Determines which Jasper parser is in use among Xalan or Jaxen. Do not modify this parameter if you don’t know how to use it. | net.sf.jasperreports.engine.util.xml.XalanXPathExecuterFactory or net.sf.jasperreports.engine.util.xml.JaxenXPathExecuterFactory |
| quotex.export.state_max_retries | Maximum number of iterations to check the status of the export executed by Performance Quoting during the Jasper report generation | Default value = 10 |
| quotex.export.state_retries_delay | Number of milliseconds to wait between each iteration when checking the Performance Quoting export status during the Jasper report generation | Default value = 500 |
PRICING
| PRICING | ||
|---|---|---|
| common.pricing.service.checkflagsduringpricescomputation = true | Pricing Calls and Aliases flags: When the parameter is found and equals True, then the aliases flags (defined in PROS Pricing or the standard Pricing Grid) for Must Answer and Must Be Answered are taken into account when getting prices from BRC aliases and ML / API calls (getPrice…). When the parameter is commented or equals False, then the aliases flags are only taken into account in BRC aliases (ex: fpProduct.value.PRGM/pmPricing.Range[1]) | True False |
PROS PRICING INTEGRATION (POD OR PPSS)
| PROS PRICING INTEGRATION | ||
|---|---|---|
| integration.pros.pricing.service | Pricing System Integrated With | PPSS, POD |
POD INTEGRATION
The following parameters available in cameleon.properties aim at managing the POD Integration:
| POD INTEGRATION | ||
|---|---|---|
| integration.pros.pricing.login | POD login | Ex: SystemUserPODLogin |
| integration.pros.pricing.password | POD password | Ex: SystemUserPPODPassword |
| integration.pros.pricing.pricingsvcurl | POD Web service endpoint | Ex: https://myPODServer.com:port/axis2/services/PricingService?wsdl |
PPSS INTEGRATION
The following parameters available in cameleon.properties aim at managing the PPSS Integration:
| PPSS INTEGRATION | ||
|---|---|---|
| integration.pros.pricing.login | PPSS login | Ex: SystemUserPPSSLogin |
| integration.pros.pricing.password | PPSS password | Ex: SystemUserPPSSPassword |
| integration.pros.pricing.pricingsvcurl | PPSS Web service endpoint | Ex: http://myPPSSServer:port/axis2/services/PricingService?wsdl |
| integration.pros.pricing.authentication | PPSS authentication mode | 'standard', 'nebula' or 'sso' |
| PPSS INTEGRATION | ||
|---|---|---|
| integration.pros.pricing.url | URL necessary to link the PPSS instance with the CPQ Designer | https://myserver/PPSS |
| PPSS INTEGRATION WITH NEBULA AUTHENTICATION | |
|---|---|
| integration.pros.pricing.nebulasvcurl | PPSS Nebula service Url |
| integration.pros.pricing.nebulatoken | PPSS Nebula authentication token |
| integration.pros.pricing.nebulatenant | PPSS Nebula tenant |
| integration.pros.pricing.nebulauid | PPSS Nebula unique id |
STANDALONE CART INTEGRATION
The following parameters available in cameleon.properties aim to manage the standalone cart integration (indexWS)
| STANDALONE CART | ||
|---|---|---|
| cart.validation.regex | reg ex (regular expression) for authentification | By default the password defined in defaultUsers.xml should contain upper and lower case characters, as well as numerical and special characters. You can lift or change these restriction by using a regex. For example cart.validation.regex=^((?!=")(?!=').)+$ will allow any type of password. |
MS DYNAMICS CRM INTEGRATION
The following parameters available in cameleon.properties aim to manage MSCRM Integration:
| MSCRM | ||
|---|---|---|
| integration.mscrm.login | MSCRM login | For default value refer to CPQ Installation Guide |
| integration.mscrm.password | MSCRM password | For default value refer to CPQ Installation Guide |
| integration.mscrm.discoverurl | MSCRM discovery URL to retrieve Web service endpoint | For default value refer to CPQ Installation Guide |
| Integration.mscrm.orguniquename | MSCRM organization unique ID | For default value refer to CPQ Installation Guide |
| integration.mscrm.webServiceTimeout | The timeout of the MSCRM web service expressed in milliseconds | 300000=5mn |
| integration.mscrm.credential.file | Path to a properties file managing the mscrm credential in replacement of the management in cameleon.properties. If not filled, the credential used are the one defined in cameleon.properties (see the above parameters) | ${cameleon.home}/conf/mscrm.properties |
SFDC INTEGRATION- OAUTH SETUP
| SFDC INTEGRATION | ||
|---|---|---|
| integration.sfdc.oauth.token | SFDC Managed Package OAuth Connected App Consumer Key | 3MVG9yZ.WNe6byQB.d.atN_YP9v2Wrp432aDmfLdG71waVrwpQHggVnOuBEIiF2vcTDq2VreV5yCM_0lDxoqI |
| SFDC INTEGRATION | ||
|---|---|---|
| integration.sfdc.oauth.url | SFDC Oauth URL. This parameter should be modified when applying Domains in SFDC environment. | Sandbox: https://test.salesforce.com/services/oauth2/token, Production (default): https://login.salesforce.com/services/oauth2/token |
| integration.sfdc.oauth.certificate | SFDC OAuth self-signed certificate full path | ${cameleon.home}/conf/sfdc.jks |
| integration.sfdc.oauth.password | SFDC OAuth self-signed certificate password | PROS2016! |
QUOTE
The following parameters available in cameleon.properties are dedicated to Quote administration:
| QUOTE CONFIGURATION | ||
|---|---|---|
| cart.storage.mode | Quote Storage Mode (DBStorageMode, XMLStorageMode or none) | DBStorageMode |
| cart.lva.mode | List of values management. If 1 we display code, if 2 we display description, if 3 we display description and code in values list. | 3 |
| cart.max.decimal.number | Maximum decimal for all numbers | 2 |
| cart.on.trigger.error | Treatment after Trigger error. Possible values are "fail" or "continue". By default, it’s "continue". | continue |
| cart.enable.layoutCache | Enable or not cache layout xml | yes |
| cart.enable.servicesCache=yes | Enable or not cache services | yes |
| cart.emptyCartsValidityDuration | Validity of empty quote | 5 |
| cart.redirect.on.close | Page redirection when user close application | ../cart/exitPage.jsp |
| cart.redirect.on.exit | Page redirection when user hits the close button within exit page (commented out=no button) | ../cart/indexWS.jsp |
| cart.redirect.on.error | Page redirection when an error occurs and a button OK is set on error page (SFDC integration) | /cart/exitOnError.do |
| QUOTE CONFIGURATION | ||
|---|---|---|
| cart.redirect.on.sessionexpired | Redirect to this error page if the session has expired | ../cart/sessionExpired.jsp |
| cart.redirect.on.toorder | URL determining jsp file which do the order action. | /order/ToOrder.jsp |
| cart.documentroot | Physical path pointing to CPQ JSP file | ${cameleon.home}/jboss/standalone/deployments/cameleon.ear/cart.war |
| cart.refreshHTTPSessionURL | URL to refresh quote HTTP session | ${cameleon.url.public}/cart/refresh.jsp |
| cart.parentRefreshURL | Parent Refresh URL | ${cameleon.url.public}/CCS/access/eCart/refresh.jsp |
| cart.cp7ExitURL | User is redirected on this URL after quitting Designer and Configurator. | ${cameleon.url.public}/cart/processCP7.jsp |
| cart.errorPage | Redirect to this error page if the session has expired | ../cart/error.jsp |
| cart.upload.maxsize | Size limit of uploaded documents (merge in reports) in bytes | 2048000 |
| cart.message.timer | Time of display of the cart flyer message | 10 (2.4 seconds) |
| cart.enableGZIPOnWS | Disable the GZIP on WS flows | true |
| cart.edgeWebServiceTimeout | The timeout of the CPQ web service expressed in milliseconds (300000=5mn). | 300000 |
| cart.sharedSettingsPersistenceTimeout | Shared Objects token time-out (in seconds) | 600 |
| cart.lm.connectionTimeout | License token time-out (in seconds) | 600 |
| cart.sharedContext.mode cart.sharedContext.exte rnalMode cart.sharedContext.jndi DataSource | We differentiate the standard shared context and the external one (only used to initialize quote by WS, because HTTP and WS could be on different servers if cluster). In that case, we can choose the mode (MEM or DB) and if DB, use the EJB3 implementation by default (no jndi data source to give) or the native one (the jndidatasource is mandatory). And don't forget to set the corresponding timeout. | MEM |
| [DEPRECATED] cart.xpath.impl | JAXP(Xpath) implementation URI. Use http://java.sun.com/jaxp/xpath/dom for Xalan/Apache implementation (Xpath 1.0) -default (parameter missing or empty value)- or http://saxon.sf.net/jaxp/xpath/om for Saxon implementation (Xpath 2.0) | http://java.sun.com/jaxp/xpath/dom |
| QUOTE CONFIGURATION | ||
|---|---|---|
| cart.xmlTool.class | CPQ is based by default on the Saxon XML parser to support Xpath 2.0 requests. This parameter allows one to switch to the Xalan XML parser if support of Xpath 1.0 is required for backward compatibility. | com.accesscommerce.cart.xmlintegration.CartXmlToolSaxonImpl |
| cart.optimizeSyncEntries | Optimize process of re-applying user input values after editing a configuration | yes |
| cart.multiPlexing.numberOfThread | When Multi Threading is activated on quote lines refresh this parameter drives the number of threads handling the refresh actions. | 5. Please contact your PROS representative to activate this feature. |
| QUOTE DESIGNER | ||
|---|---|---|
| cartdesigner.enable.config.settings | Possibility to view/modify the configuration settings | yes |
| cartdesigner.distrib.allowedExtensions | List of file extensions authorized for upload in the distribution module of the Designer | css;ico;jpg;jpeg;gif;png;swf;ttf;svg;eot;woff;jrxml;jasper;pdf;properties |
| cartDesigner.enable.distribution | The distribution module will be activated only if this parameter is present and filled with the ‘yes’ value in cameleon.properties | no |
| CONNECTORS | ||
|---|---|---|
| connector.CartDesignerLogin.class | Connector for Quote Designer login | com.accesscommerce.cart.connector.defaultImpl.CartDesignerLoginImpl |
| connector.CartDesignerLogin.class | Connector for Quote Designer Modeler login | com.accesscommerce.cart.connector.defaultImpl.CartDesignerLoginModelerImpl |
| connector.ExternalDocumentProvider.class | Connector for reports mergeable documents | com.accesscommerce.cart.connector.defaultImpl.ExternalDocumentProviderImpl |
| connector.CartLogin.class | Connector for contextual data retrieval at login | com.accesscommerce.cart.connector.defaultImpl.CartLoginImpl |
| CONNECTORS | ||
|---|---|---|
| connector.XmlReport.class | Connector for building the XML datasource of the jasperreport template. It provides a way to change the quote language when a report is generated so that the quote lines are translated in a target language. | com.accesscommerce.cart.connector.defaultImpl.XmlReportImpl |
| connector.AfterSaveOperation.class | After Save Operation connector. It specifies interface to update the host application after a save. | com.accesscommerce.cart.connector.defaultImpl.AfterSaveOperationImpl |
| connector.CartSkeletonWS.class | Connector for the Cart Skeleton WS | com.accesscommerce.cart.connector.defaultImpl.CartStatelessSkeletonWSImpl |
| connector.ForbiddenActions.class | Forbidden Actions connector. It specifies forbidden actions in host application. | com.accesscommerce.cart.connector.defaultImpl.ForbiddenActionsImpl |
| connector.Currencies.class | Currencies connector provides an interface to get currency information from the host application. | com.accesscommerce.cart.connector.wsImpl.CurrenciesWSImpl |
| connector.InternLVA.class | Internal value list connector. It provides an interface to get value lists information from the host application. | com.accesscommerce.cart.connector.wsImpl.InternLVAWSImpl |
| connector.GUIThemes.class | GUI themes connector. It provides an interface to get available information for the GUI themes from the host application. | com.accesscommerce.cart.connector.defaultImpl.GUIThemesImpl |
| connector.IDGenerator.class | Specifies interface to get unique identifiers from the host application. | com.accesscommerce.cart.connector.defaultImpl.IDGeneratorImpl |
| connector.Languages.class | Languages connector provides an interface to get information for available languages from the host application. | com.accesscommerce.cart.connector.wsImpl.LanguagesWSImpl |
| connector.LockManager.class | It specifies interface to the lock mechanism provided by the host application. | com.accesscommerce.cart.connector.defaultImpl.LockManagerImplDB |
| connector.ConnectorJMXIdentification.class | Connector for the JMX identification | com.accesscommerce.cart.connector.defaultImpl.ConnectorJMXIdentificationImpl |
| CONNECTORS | ||
|---|---|---|
| connector.Services.class | Services connector provides interface to get information for available services in the host application. | com.accesscommerce.cart.connector.wsImpl.ServicesWSImpl |
| connector.UserGroupManager.class | Specifies the interface to get information related to user and groups provided by the user management of the host application. | com.accesscommerce.cart.connector.wsImpl.UserGroupManagerWSImpl |
| connector.ELink.class | Interface for ELink execution. | com.accesscommerce.cart.connector.defaultImpl.ELinkImpl |
| connector.Service.class | Connector for Services | com.accesscommerce.cart.connector.wsImpl.ServiceWSImpl |
| connector.ELinkPage.class | Interface for ELinkPage execution. | com.accesscommerce.cart.connector.defaultImpl.ELinkPageImpl |
| connector.CICCatalogConnector.class | The connector interface to invoke the eCatalog component. | com.accesscommerce.cart.connector.defaultImpl.CICCatalogConnectorImpl |
| connector.CICConfiguratorConnector.class | The connector interface to invoke the eConfigurator component. | com.accesscommerce.cart.connector.defaultImpl.CICConfiguratorConnectorImpl |
| connector.CICAdvancedPricerConnector.class | The connector interface to invoke the ePricer component. | com.accesscommerce.cart.connector.defaultImpl.CICAdvancedPricerConnectorImpl |
| connector.LDAPImplementationClass | Connector for the LDAP Implementation | |
| connector.CartInit.class | Connector for the Cart init. | |
| connector.CP7ConfiguratorConnector.class | The connector interface to override parameters before invocation of the eConfigurator component. | com.accesscommerce.cart.connector.defaultImpl.CP7ConfiguratorConnectorImpl |
| connector.CT7CatalogConnector.class | The connector interface to override parameters before invocation of the eCatalog component. | com.accesscommerce.cart.connector.defaultImpl.CT7CatalogConnectorExtImpl |
| CONNECTORS | ||
|---|---|---|
| connector.CT7CatalogConnectorExt.class | Extension of the CT7 catalog connector This connector is intended to provide a factorization of some of the methods of the original connector CT7CatalogConnector by grouping initialization parameters into an complex object that will be the unique input attribute of the method. | |
| connector.FieldTagAfter.class | Helper interface to implement at integration step to surcharge the html render of a field at the end of FieldTag class. | com.accesscommerce.cart.connector.defaultImpl.FieldTagAfterImpl |
| connector.Report.class | This interface constructs report data object and return it for ReportGenerator | com.accesscommerce.cart.connector.defaultImpl.ReportImpl |
| QUOTE LINES MANAGEMENT | ||
|---|---|---|
| cart.create.inside.position | Where to create/paste/move to a line when it must be put inside folder - as top or bottom element of this folder | bottom |
| cart.default.insert.mode | Default quote line(s) insert mode on folder, inside or below | INSIDE |
| cart.pagination.mode | Pagination type. Possible values: "NONE", no pagination, so, all quote lines are displayed on one page. "FIRST", pagination counts only quote lines. "TOTAL", pagination counts quote lines and sub lines. | NONE |
| cart.pagination.rownumber | Maximum number of lines per page | 5 |
| QUOTE LINES MANAGEMENT | ||
|---|---|---|
| cart.collapse.lines | Display mode for quote lines by default. Possible values: "no", the lines are expanded by default. "yes", the lines are collapsed by default. This parameter is only available if pagination mode is NONE. If a collapsed line is expanded by the user and the quote is saved, the quote will keep the line expanded next time the user will open the quote. | no |
AVALARA TAX MANAGEMENT
The following parameters available in cameleon.properties are dedicated to the integration of the Avalara Tax Management solution:
| AVATAX API INTEGRATION | ||
|---|---|---|
| avalara.url | URL of the Avatax service associated to the Quote | https://avatax.avalara.net/1.0/tax/get |
| avalara.user | Service user for requests to Avatax | |
| avalara.password | Service password for requests to Avatax | |
| avalara.mapping | Configuration file describing the mapping between Avatax required attributes and Quote elements (columns, header fields…) | ${cameleon.home}/conf/AvalaraMapping.xml |
Reference: For more details on how to integrate the Quote with the Avatax API, please refer to the Quote Designer and Customization GuideNo Content found for /db/organizations/conga/repositories/current/content/documents/Production/Smart_CPQ/user_guide/designer_getting_started/designer_getting_started.dita.
CACHE CONFIGURATION
Cache Presentation
The Configurator uses at runtime two levels of cache.
The first level of cache that we called Application Cache is a versatile cache. The use of this cache enables to gather the efforts of loading of the configuration objects between the different users that run a configuration on the same application server. Indeed, configuration objects are loaded from the database level only once: when the first user of the server is trying to access to the object, the next users are loading the objects from the cache rather than the database. This cache is said to be versatile as the lifetime of the objects in the cache is the same than the lifetime of the application server itself.
The objects in the cache are java objects already well-formed so that the work to get the data and morph them into a new object is already done for all new users.
The second level of cache called Database Cache or DB Cache is a persistent cache. This cache takes place in the loading process between the database and the Application Cache. This cache enables to gather the efforts of loading of the configuration objects between the different users running configurations on anyone server among the set of parallel application servers. All objects in this Database Cache are stored as a java serialization object.
To clearly understand how these caches work together, consider the following typical sequence of actions to be performed when a request for an object is sent by the client application:
As we can see in the figure above, the retrieval of an object from the repository for a user session consists in one or two steps:
- Obtain the Java Object from the Server Cache
When the client application uses the CPQ API during a configuration session to get a new configuration object, this object is searched into the server cache.
In the case the object is already present in this cache, then
- An instantiated copy of the object is retrieved to the client application.
In the case the object is not already present in this cache, then:
- CPQ sends a request to the DB cache to get the data of the object. The tasks related to the DB cache in order to retrieve the data of the object are described in the step 2.
- Once the DB Cache has retrieved the data of the object, CPQ converts these data (all data concerning the object are retrieved as a serialized form of the object) into a real java object. This Java Object is then injected into the server cache so that it will be available for any new request.
- An instantiated copy of the object is retrieved to the client application.
- Obtain the serialized object from the DB cache
When CPQ sends a request to get the data of an object to the DB cache, two cases can occur: the object is already present in the DB cache or the object is not present.
In the case the object is already present in the DB cache, then
- A copy of the serialized form of the object that is in the DB cache is retrieved to the client API.
In the case the object is not already present in this cache, then:
- CPQ loads the data of the object from the database and build a java version.
- Then, this java version of the object is serialized and the serialization is injected into the DB cache in order to be available for any further request.
- Once the DB Cache has retrieved the data of the object, CPQ converts these data (all data concerning the object are retrieved as a serialized form of the object) into a real java object. This Java Object is then injected into the server cache so that it will be available for any new request.
By this mechanism, CPQ ensures any object is built only one time from the database which is the most costly operation. Once the engine object is built, it is serialized and will be stored into the DB cache in an asynchronous way. Any later access to this object will get the object in the worst case from this DB cache. Obviously, in the best case the object is already present in the application server cache and directly returned from this cache.
Natively, the caches load the object in an opportunistic way: objects are loaded at each level of cache when one user needs them. The first user to access to an object is thus penalized with the loading time of the object. To prevent this, CPQ integrates mechanisms to preload the caches. The preloading is managed by two optional daemons running on the application server: the Serialization Agent, in charge of the loading of objects into the DB Cache, and the Preload & Change Detection Agent, in charge of the loading of objects into the Application Cache and also in charge of maintaining the consistency of the Application Cache with the content of the DB Cache.
Focusing on the Serialization Agent
In order to accelerate the access time to objects (and especially new objects coming from a new released version), it is necessary to have the serialized form of objects already preloaded into the DB Cache before the first access to the objects.
When importing a new version the Serialization Agent must be informed of the list of new objects
that must be loaded into the DB Cache. This action can be done through the Designer or via a call to the API serializeObject.
According to the parameters of cameleon.properties of each JBoss target, the preloading of the DB Cache can be distributed among the different JBoss server instances:
- The serializeObjects API is called on a server that is the one that leads the loading process. It adds into the database the list of primary keys of the objects to be loaded.
- On all Jboss instances if activated, the Serialization Agent is running and is in charge of verifying at fixed time intervals if the DB cache needs to be filled. If some task must be performed, the agent will participate to the effort by loading a subset of the to-be-loaded objects. The activation and actions of this agent are conditioned by the cameleon.properties file.
Thus, the above picture shows the process is launched with the call on one server of the API serializeObjects that will populate a list of primary key in the DB cache.
Then, for all the servers where the serialization agent is activated, the serialization agent will access to the primary key list and take in charge a subset of keys.
For all element of this subset, the serialize agent will load the data of the object from the database, build the java object with these data, serialize the java object and finally register the serialize form of the object into the DB cache.
Despite the use of the Serialization Agent to preload the cache, all objects of a version are not necessarily pre-loaded. Objects in the DB cache can still be loaded opportunistically on request.
Focus on the Preload & Change Detection Agent
Enabling the Preload & Change Detection Agent on each JBoss target node will automatically pre-loaded the Application Cache.
This agent will load in the Application Cache all objects from the DB Cache that belong to a valid version (meaning whose validity date is lesser or lesser or equal to) at + delayTime (the delay time is a parameter in cameleon.properties. See Cache Parameters).
For instance, if you know a complete new version of your models is loaded in the application cache in 15 minutes, the parameter should at least be valued with 15.
This agent is also in charge of reloading all objects in the application server cache as soon as they have been updated into the DB Cache (update for a fix for instance via a new call to the API serializeObjects).
The activation and actions of this second agent are conditioned by parameter(s) in cameleon.properties.
The following schema gathers the actions that can influence the loading of objects in the caches:
In the above picture, one can see the DB cache is populated by two possible actions: the preloading API call or the use of an object that was not loaded and that is loaded on the fly.
Concerning the application cache, insertion of object can be done due to the preloading agent according to the DB cache or due to the access by the user to a not loaded object.
Cache Parameters
Hereafter, can be found the complete list of parameters of the cameleon.properties file that are dedicated to the management of the cache agents:
ENGINE CACHE CONFIGURATION
| SERIALIZATION AGENT | ||
|---|---|---|
| framework.cache.preloaded | Use database cache to speed up cache access | true |
| configurator.cache.serialization.agent.serialize | Use serialization agent to pre-serialize objects | true |
| configurator.cache.serialization.agent.push | Use serialization agent to push new objects in the cache with opportunistic loading | true |
| configurator.cache.serialization.agent.interval | Serialization agent sleep time: the delay that the serialization agent waits before checking for new object to serialize. Expressed in milliseconds | 3000 |
| configurator.cache.serialization.agent.timeout | Serialization agent timeout in minutes: once a server has started to serialize an object, we consider it failed after this delay | 10 |
| SERIALIZATION AGENT | ||
|---|---|---|
| configurator.cache.serialization.agent.types | Optional list of types of elements to be serialized or pushed (separated by semicolon), This parameter can be used to limit the serialization mechanism. Examples: - Full: CP;FO;BRC;STPG;DSCM;SCG;SI;SP;BPS;RMO;BVAL;CL;LA;TEA;DW;BMAC;TPL - Light without SI and RMO for big catalogs: CP;FO;BRC;STPG;DSCM;SCG;SP;BPS;BVAL;CL;LA;TEA;DW;BMAC;TPL. An empty value on this parameter is equivalent to a “Full” mode. |
| PRELOAD & CHANGE DETECTION AGENT | ||
|---|---|---|
| configurator.cache.preloadchangedetection.agent.clean | Use preload change detection agent to clean objects in the Application cache when they are not consistent with the objects in the DB cache | true |
| configurator.cache.preloadchangedetection.agent.reload | Use preload change detection agent to reload objects | true |
| configurator.cache.preloadchangedetection.agent.interval | Preload change detection agent interval: the delay that the preload change detection agent waits before checking for new object to refresh. Expressed in seconds | 60 |
| configurator.cache.preloadchangedetection.agent.active.delta | Preload change detection agent delay (in minutes) to specify how long, before a future version become active, the agent should start to load objects of this version in application cache. | 30 |
| configurator.cache.preloadchangedetection.agent.past.delta | Preload change detection agent delay (in minutes) to specify how long, after a past version became inactive, the agent should stop to load objects of this version in application cache | 0 |
| configurator.cache.preloadchangedetection.agent.types | Optional list of types of elements to preload (separated by semicolon), according to their order. This parameter can be used to limit the size of the cache or reorder preloading mechanism. Examples: Full: CP;FO;BRC;STPG;DSCM;SCG;SI;SP;BPS;RMO;BVAL;CL;LA;TEA;DW;BMAC;TPL Light with catalog elements first: CL;LA;TEA;CP;FO;BRC;BPS;STPG;DSCM;SI;SP;RMO;BVAL;DW;BMAC;TPL. An empty value on this parameter is equivalent to a “Full” mode. | |
| configurator.cache.preloadchangedetection.agent.listener | Optional implementation of PreLoadChangeDetectionListener interface used to be notified of application cache changes due to database cache changes. |
This parameter enables external applications to be informed of cache changes.
The content of the application cache can also be parameterized with the cache.xml file that can be found in the directory : \conf.
The cache.xml file defines what kind of configuration objects are used in the cache. With the default configuration file, the following objects will be subject to cache: Forms with their Form Properties, Configurable Products, Rich Media Object, Business Rules & Constraints, CPQ Meta Data, Sales Methods, Sales Pricing Grids, Sales Custom Grids, Standard Items, Business Property Sets, and Business Values.
EXTERNAL SERVICES: SERVICES.PROPERTIES FILE
Since version 8.0, the Designer allows integrating external services:
- External Business Services : these services allow for Java classes to be called from within the Designer menu toolbar
- Document Generation Services : these services allow for reporting services called from within the Designer menu toolbar
External Business Services
In order to add a business service, proceed as follows:
com.cameleon.modelingui.services.plugins.ExternalService Set up a “business service” section in the services.properties file
The com.cameleon.modelingui.services.plugins.ExternalService interface to be implemented is the following:
package com.cameleon.modelingui.services.plugins;
/**
* The default external service behavior
*
* @author PROS
*/
public interface ExternalService
/**
* The execute method. You have to implement this method.
The input parameters implement the following interface:
The resulting output will have to implement the following interface:
}
The business service section template is the following:
BUSINESS SERVICE CONFIGURATION
| #REPEAT THE FOLLOWING INFORMATION FOR EACH NEW BUSINESS SERVICE | ||
|---|---|---|
| business.IDENTIFIER.en_US | Description of the business service for locale en_US. | |
| business.IDENTIFIER.fr_FR | Description of the business service for locale fr_FR. | |
| business.IDENTIFIER.javaClass | The java class that will be called when executing the business service. | |
| business.IDENTIFIER.refreshStep | Indicates if the business service execution requires updating the current step. If yes, the Designer user interface will be reloaded after the business service execution. | Possible values: yes, no |
| business.IDENTIFIER.logFile | The absolute URL pointing to a file into which the java class will log information. | Sample value: file:///tmp/log.txt |
| business.IDENTIFIER.showConfirmation | Indicates whether the result of the external service is shown in a popup at the end of the execution, or not. | Possible values: yes, no |
| business.IDENTIFIER.iconURL | Indicates the URL where the icons are located for the plugin. Icons should be located in the following folder: http:// /modelingUI/localresource /localresources/theme /toolbar/buttons/. | Sample URL: http:// /modelingUI/localresource /localresources/theme /toolbar/buttons /btnPlugin.gif |
External Reports
In order to add a report generation service, proceed as follows:
How-To:
- Create a new reporting model
- Set up a “business service” section in the services.properties file
REPORT SERVICE CONFIGURATION
| #REPEAT THE FOLLOWING INFORMATION FOR EACH NEW REPORT SERVICE | ||
|---|---|---|
| service.IDENTIFIER.en_US | Description of the business service for locale en_US. | |
| service.IDENTIFIER.fr_FR | Description of the business service for locale fr_FR. | |
| service.IDENTIFIER.reportTitle | The title of the report | |
| service.IDENTIFIER.reportFileURL | The absolute URL pointing to a zip file which contains the main report and all its sub-reports | Sample value: file:///reports/report.zip |
| service.IDENTIFIER.reportEntryPoint | The main report in the zip file holding the report and its sub-reports | Sample value: myMainReport.jrxml |
| #REPEAT THE FOLLOWING INFORMATION FOR EACH NEW REPORT SERVICE | ||
|---|---|---|
| service.IDENTIFIER.reportOutputFormats | The list of output formats. Currently, only “PDF” is supported. | Sample value: PDF |
| service.IDENTIFIER.customReportParamX | Identifies a parameter to pass to the report engine. This attribute can be repeated for every parameter to be taken into account. |
THE CPQ CONFIGURATION FILES
The CPQ engines (both Configurator and Catalog) can be initialized thanks to a setting file (XML format).
In addition to these settings, the CPQ User Interface engine requires another XML files detailing the layout of the different pages of the Configurator/Catalog.
Settings XML File
The settings file contains the initial data to start a catalog and/or a configuration. The default configuration.xml file can be found in the directory:
<CPQInstallDirectory>\conf\run\settings\configurator
The default catalog.xml file can be found in the directory:
<CPQInstallDirectory>\conf\run\settings\catalog
The default createCart.xml file can be found in the directory:
<CPQInstallDirectory>\conf\run\settings\cart
All details on the settings are given in the reference document CPQ Integration Guide.
Layout XML File (UI)
All details of the configuration and customization of the CPQ UI are given in the reference document CPQ Customization Guide.
THE DESIGNER CONFIGURATION FILES
These files essentially define parameters of the application that can be used by the modeling user. They can be found in the directory: <CPQInstallDirectory>\conf
These files are the following ones:
- MeasurementUnits.xml: the file that defines the different supported unit. You can create new units by adding them in the file
- modelingProcesses.xml: file for internal use only
- predefinedParameters.xml: file for internal use only
ADDITIONAL CONFIGURATION FILES
The following files are used at modeling time by the Designer but also at runtime when running the Catalog (Preferences Sticker).
- Currencies.xml: the file that defines all supported currencies in the applications. As soon as you want to add some new currencies to be supported they have to be defined in this file
- InternationalSettings.xml: the file that defines the supported international settings. You can add new international Settings when required
DATABASE POOLING
Access to the database is provided by the file cameleon-ds.xml. This file is provided with default parameters:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>eModelingDS</jndi-name>
<connection-url>jdbc:oracle:thin:@172.31.1.211:1521:EDGE</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>vmccm7prod</user-name>
<password>leon</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor
.OracleExceptionSorter</exception-sorter-class-name>
<new-connection-sql>ALTER SESSION SET NLS_SORT=BINARY NLS_COMP=BINARY
SKIP_UNUSABLE_INDEXES=TRUE</new-connection-sql>
<prepared-statement-cache-size>50</prepared-statement-cache-size>
<share-prepared-statements>true</share-prepared-statements>
<metadata>
<type-mapping>Oracle9i</type-mapping>
</metadata>
<set-tx-query-timeout>true</set-tx-query-timeout>
<application-managed-security/>
</local-tx-datasource>
</datasources>
In order to optimize database access, the following parameters have to be evaluated and added in function of the number of concurrent sessions (shown values are default values):
<!--pooling parameters-->
<!-- the minimum number of connections in the pool (default 0 - zero) -->
<min-pool-size>5</min-pool-size>
<!-- the maximum number of connections in the pool (default 20) -->
<max-pool-size>20</max-pool-size>
<!-- the length of time to wait for a connection to become available when all the
connections are checked out (default 30000 = 30 seconds) -->
<blocking-timeout-millis>30000</blocking-timeout-millis>
<!-- the number of minutes after which unused connections are closed
(default 15 minutes) -->
<idle-timeout-minutes>15</idle-timeout-minutes>
CPQ MACRO LANGUAGE SECURITY
In order to prevent the CPQ Macro Language from executing dangerous code, a certain number of parameters can be declared, in order to avoid a certain number of situations:
- Dangerous system calls (e.g. format hard drive)
- Dangerous database calls (e.g. drop user)
- Performance-impacting calls (e.g. infinite loops)
- Response-time increases (e.g. “long” java calls”Warning: In order to avoid calls that impact performances too much, the macro language offers the capability to limit the number of instructions when running a macro.
The ml.maxNbInstr parameter can be used for that purpose.
Warning: In order to avoid an increase in response times, the macro language offers the capability to check the execution time for external Java calls. The ml.maxExecTime parameter can be used for that purpose.Warning: In order to avoid “dangerous” calls, the macro language offers the capability to disable any commands or functions presenting a security risk. The ml.securityLevel parameter can be used for that purpose.
The following table shows the methods which are impacted by the securityLevel.
| ML.SECURITYLEVEL | NONE | MEDIUM | HIGH |
|---|---|---|---|
| SAVE | Enabled | Enabled | Disabled |
| ML.SECURITYLEVEL | NONE | MEDIUM | HIGH |
|---|---|---|---|
| VERSION | Enabled | Enabled | Disabled |
| DisableTrace | Enabled | Enabled | Disabled |
| EnableTrace | Enabled | Enabled | Disabled |
| EXECUTE | Enabled | Enabled | Disabled |
| FILE_ACCESS | Enabled | Enabled | Disabled |
| CopyFile | Enabled | Enabled | Disabled |
| CreateDirectory | Enabled | Enabled | Disabled |
| CreateDirectoryTree | Enabled | Enabled | Disabled |
| CreateJarFile | Enabled | Enabled | Disabled |
| CreateZipFile | Enabled | Enabled | Disabled |
| DeleteFile | Enabled | Enabled | Disabled |
| ExpandJarFile | Enabled | Enabled | Disabled |
| ExpandZipFile | Enabled | Enabled | Disabled |
| WRITE_FILE | Enabled | Enabled | Disabled |
| CLOSE_FILE | Enabled | Enabled | Disabled |
| ML.SECURITYLEVEL | NONE | MEDIUM | HIGH |
|---|---|---|---|
| FNAWK | Enabled | Enabled | Disabled |
| READ_FILE | Enabled | Enabled | Disabled |
| OPEN_FILE | Enabled | Enabled | Disabled |
| ReadFile | Enabled | Enabled | Disabled |
| RenameFile | Enabled | Enabled | Disabled |
| WriteFile | Enabled | Enabled | Disabled |
| SQL_BEGIN_TRANSACTION | Enabled | Enabled | Disabled |
| SQL_COMMIT | Enabled | Enabled | Disabled |
| SqlConnectPool | Enabled | Enabled | Disabled |
| SqlCloseCreatedPools | Enabled | Enabled | Disabled |
| SQL_QUERY | Enabled | Enabled | Disabled |
| SqlReadTable | Enabled | Enabled | Disabled |
| SqlReadTable | Enabled | Enabled | Disabled |
| SQL_ROLLBACK | Enabled | Enabled | Disabled |
| ClearCleanupsTo | Enabled | Enabled | Disabled |
| ML.SECURITYLEVEL | NONE | MEDIUM | HIGH |
|---|---|---|---|
| GetNumCleanups | Enabled | Enabled | Disabled |
| PushCleanup | Enabled | Enabled | Disabled |
| SetAnalyzeOn | Enabled | Enabled | Disabled |
| SetAnalyzeOff | Enabled | Enabled | Disabled |
| SHELL | Enabled | Disabled | Disabled |
| WINEXE32 | Enabled | Disabled | Disabled |
| SQL_CONNECT | Enabled | Disabled | Disabled |
| SQL_CREATE | Enabled | Disabled | Disabled |
| SQL_DELETE | Enabled | Disabled | Disabled |
| SQL_DROP | Enabled | Disabled | Disabled |
| SQL_INSERT | Enabled | Disabled | Disabled |
| SQL_UPDATE | Enabled | Disabled | Disabled |
| getHttpResult | Enabled | Disabled | Disabled |
| getHttpResult | Enabled | Disabled | Disabled |
| getProperty | Enabled | Disabled | Disabled |
| ML.SECURITYLEVEL | NONE | MEDIUM | HIGH |
|---|---|---|---|
| getTcpIpResult | Enabled | Disabled | Disabled |
| getCITHttpResult | Enabled | Disabled | Disabled |
| getCITJMSResult | Enabled | Disabled | Disabled |
| getCITTcpIpResult | Enabled | Disabled | Disabled |
| setCITDatabase | Enabled | Disabled | Disabled |
| setCITDataDirectory | Enabled | Disabled | Disabled |
| setCITInputFile | Enabled | Disabled | Disabled |
| setCITMLVariable | Enabled | Disabled | Disabled |
| setCITOutputFile | Enabled | Disabled | Disabled |
| setProperty | Enabled | Disabled | Disabled |
| setSystemParameter | Enabled | Disabled | Disabled |
| setCITJMSAcknowledgerQueue | Enabled | Disabled | Disabled |
| setCITJMSResponseQueue | Enabled | Disabled | Disabled |
| setCITJMSServerQueue | Enabled | Disabled | Disabled |
| setCITJMSTarget | Enabled | Disabled | Disabled |
| ML.SECURITYLEVEL | NONE | MEDIUM | HIGH |
|---|---|---|---|
| setCITPool | Enabled | Disabled | Disabled |
| setCITTimeout | Enabled | Disabled | Disabled |
| ACRegistryKey() | Enabled | Disabled | Disabled |
| OpenSubKey | Enabled | Disabled | Disabled |
| ACRegistryKey.closeKey | Enabled | Disabled | Disabled |
| ACRegistryKey.getStringValue | Enabled | Disabled | Disabled |
| TYPEVAR | Enabled | Disabled | Disabled |
| SYSTEM | Enabled | Disabled | Disabled |
| WINEXE | Enabled | Disabled | Disabled |
| ROUND | Enabled | Disabled | Disabled |
AUTOMATED VERSIONS REMOVAL
| VERSION REMOVAL | Description | Value / Example |
|---|---|---|
| modeling.api.version.workflow.scheduler.nbVersionKeep | The maximum number of active versions. If there are more, the older versions will be removed by a batch process. | Value must be greater than 0. |
| modeling.api.version.workflow.scheduler.cronExpression | Cron expression used to trigger the version removal batch process execution. If no expression is found, the batch will not execute. | Example: 0 00 13 * * |
Trademarks
All other brands and their products are trademarks or registered trademarks of their respective holders and should be noted as such. This product includes software developed by the Apache Software Foundation https://www.apache.org/
