Xoom 3.11 has been released

We are very proud to announce the release of Xoom 3.11. This release contains significant performance improvements and many new features, as well as a number of stability enhancements and bug fixes. It consolidates the functionality offered by Xoom 3, including the capabilities needed for Service Optimization Tuning Toolkit, as development moves towards cloud-friendly and truly multi-product Xoom 4 and beyond.

Performance improvements

  • Wide-ranging changes to the way configuration retrieval works have been introduced, resulting in significant performance improvements on Xoom side and the decrease in the number of requests to managed Service Optimization servers.
  • Extensive performance and cache efficiency monitoring has been introduced, resulting in easier identification and support of performance problems. See the section on diagnostic snapshot below for some more information.
  • The analysis of dependencies during the process of saving the configuration in Settings Migration Tool and Xoom Console is now virtually instantaneous.
  • Pre-deployment analysis and all forms of configuration comparison are now several times faster and consume less memory as both dependency analysis and XML comparison code have been re-written from scratch with the objective of optimising performance while improving the functionality. See also XoomXML processing below for some more detail.

New PowerShell CmdLets


Copies files and/or folders from a local location to a specified location on any number of other hosts. Only the files that are different or that do not exist on the target host get copied. Nothing gets deleted. The Cmdlet also exposes the ability to define actions that will be performed before a server is processed, when the copying of a file fails, or after the server has been processed.

The Cmdlet supports a -WhatIf switch which allows the functionality to be tested before any copying actually happens.

The Cmdlet has two main use cases. When used with a -WhatIf flag, it can be used to verify whether the files on a number of hosts are the same as the files on the local host and, if not, which ones differ. This can be used for example to verify that the installations on all servers contain the right files, including extensions and customisations.

The second use case is to distribute files over a number of development environment or in cases where building an installer would be a significant overhead. An example would be extension files associated with ClickMobile clients.


Similar to Copy-FilesToServers, but this time a Xoom server is specified and a list of Service Optimization servers connected to that Xoom server to which the files will be copied. If a file initially fails to copy, then the following actions will be taken in order to increase the probability of the copying ultimately being successful:

  1. If Service Optimization is running on the target server, the Cmdlet stops it.
  2. If there are additional Service Optimization-related processes, they get terminated as well.
  3. If a Xoom server is running on the target server, it gets stopped too.

Anything that gets stopped by the Cmdlet in the process of copying is restarted after the copying has completed. However, the user needs to be aware that using this Cmdlet will potentially result in the outage of Service Optimization and Xoom availability on target servers.

The Cmdlet is implemented in terms of Copy-FilesToServers and hence supports a -WhatIf switch which allows the functionality to be tested before any copying actually happens.


Exposes the Zany Ants XML pretty-printing capabilities, including the standardised ordering of attributes, the consolidation of namespace declarations, and the ability to limit the depth to which the XML content is serialised.


The Cmdlet is used to calculate a SHA1 hash for the given file. PowerShell 5 introduced a built-in Cmdlet Get-FileHash which deprecates this Cmdlet, but Xoom supports PowerShell 3 and later so this Cmdlet was introduced to bridge the gap.

XoomXML processing

XML comparison capabilities were re-implemented from scratch. The new code is about three times faster and has half the memory consumption of the old one, resulting in decreased load on both the client and the server, and significantly faster pre-deployment analysis, especially where large XoomXML files are involved.

XML serialisation capabilities have also been re-written and standardised. The new implementation is significantly faster and ensures consistent output. This means that pure text comparison using off-the-shelf file comparison tools and revision control systems is a useful means of comparing XoomXML files across a larger set of use cases than was previously possible.

Technical note: Because of the standardisation and centralisation of XML processing code, comparer configuration (for example in XoomConfig_Compare.xml) now uses a new namespace urn:zanyants-api:directive-content:o=any;c=any;v=0.0; with default prefix zdc instead of the old namespace urn:zanyants-xoom:directive-content:o=any;c=any;v=0.0; with default prefix xdc. The same applies to sort tweaky configuration which now also uses the centralised functionality.

Diagnostic snapshot and corpus playback

A number of improvements have been made to the diagnostic snapshot utility and the ability to use the captured information off-site:

  • A short XML file called CorpusInfo.xml is now created in the root folder of the corpus. The file summarises the Xoom version, Service Optimization version and quite detailed environment information. The existence of this file makes it easy to identify the circumstances under which the corpus was created, including when that happened and to what server the corpus belongs.
  • A more accessible log file is now created to log the events during the corpus capture. As part of this change, much more detail is now also logged in case of an error. This additional information is invaluable in trying to understand the source of the error, in particular in support scenarios where such an error may itself be the target of the investigation.
  • Counters and run times for the use of various tweakies and item lookups are now collected and saved as part of the corpus generation. This is invaluable information in resolving performance bottlenecks and identifying knowledge base problems. All Xoom internal parameters are also collected. This information is saved in encrypted files as it may contain sensitive information.
  • FIXED: Replay of user settings with empty names previously didn’t work for SQLite-based corpora, resulting in false missing bodies. This problem has been fully addressed in this release.

Other changes

  • Audit and AuditEngineer collections are now excluded from retrieval by default. This behaviour can be changed by modifying the Product.W6.Objects.Retrieval.ExcludedCollections parameter.
  • Clicking Load in Settings Migration Tool’s Deployment tab now creates a new session which forces the reload of the whole configuration. This behaviour was introduced in order to ensure that all changes resulting from structure deployments, in particular type and identity changes, are reflected in the reloaded configuration.
  • A separate file called root.xml is now created in a XoomXML folder. This file contains Xoom version information and nothing else. At the same time, the other files that are created no longer contain Xoom version information. This change is particularly useful for configuration versioning, because upgrading Xoom no longer looks like every single item in the whole configuration has changed just because its Xoom version is different, although the Xoom upgrade is still noted in the revision control system via the change to root.xml.
  • Added a transformation ExtractAllAttributesAndIndexes.xsl which represents every collection’s properties and indexes using a xoom:set special form which makes it easy to manually select which ones should be transported to the target environment while leaving everything else intact.
  • Destination credentials in Service Optimization’s Mapper settings are now preserved as a whole (using the keep-target directive) as opposed to only each destination’s password in the past.
  • Added the interpretation of Audit Client settings.
  • Added the interpretation of all Rule and Objective virtual collections up to Service Optimization 8.3.
  • Refined the interpretation of ClickSchedule Web Client and ClickMobile user settings.

Other bug fixes

  • FIXED: Deployment exclusions now also automatically include all retrieval exclusions. Previous failure to do so meant that, upon every deployment, multiple copies of items that were excluded from retrieval but were not explicitly excluded from deployment, were created because they always looked as though they didn’t exist in the target system due to them being excluded from retrieval to verify their deployment.
  • FIXED: The processing of keep-target directives in pre-deployment analysis was mistakenly disabled when hierarchical tweaky processing was introduced. The full functionality has now been reinstated.
  • FIXED: When Key is the only property that is defined as a particular collection’s object reference (which is itself a misconfiguration from integration point of view because keys are not assignable in Service Optimization), Service Optimization uses a Key element to represent that particular situation, resulting in a Xoom error messages complaining about misconfiguration. (In all other cases, a single key for a type will result in the value of the corresponding key value simply being inserted as text, without its corresponding element.) Due to the rarity of this situation, this problem was only discovered during the development of this release of Xoom.
  • FIXED: When base items for virtual collections in use were previously excluded from retrieval (see the explanation of the parameter Product.W6.Objects.Retrieval.ExcludedCollections here), Xoom still tried to retrieve the matching virtual collection item and then failed to match it to the base item that was retrieved in accordance with the parameter. This previously resulted in an error message, while now those items are simply ignored as expected.
  • FIXED: Audit Client UI has been excluded from items excluded by default as it was prematurely deemed to be transactional, which it turns out it is not.
  • FIXED: OQL tweaky is no longer applied to empty GroupBody elements inside reports, eliminating resulting pointless error messages.
  • FIXED: The identities of Rule and Objective virtual collections have been misconfigured. The problem has been resolved, and using virtual collections is now a fully functional option that can be used to replace data-entry based rule and objective representation. (This still requires a sufficiently mature implementation on the Service Optimization side, as it has been known that misconfigured virtual collections could crash the whole Service Optimization server in versions 8.1.7 to 8.1.9.)
  • FIXED: Name property was previously assumed to be empty for user settings (i.e. only Owner, Category and SubCategory were deemed to be relevant). This was a wrong assumption that has been addressed now.
  • FIXED: In a few very special cases, the inclusion of certain strings of characters in the file name results in the whole path being interpreted as directing certain built-in hardware ports by Win32 system code. The code for saving XoomXML folders now correctly handles those very rare situations.