2.2.14. Release 7.5.32

This chapter contains all changes made in Release 7.5.32 of CoreMedia Digital Experience Platform 8.

Follow the CoreMedia DXP 8 Help Center section to receive release and product announcements automatically.

Modules and Tooling

Release 7.5.32 contains the following CoreMedia modules:

  • CoreMedia Blueprint

  • CoreMedia CMS

  • CoreMedia Studio

  • CoreMedia Elastic Social

In addition, CoreMedia DXP 8 uses the following tooling:

ProductKeyVersion
CoreMedia Application Maven Plug-inAPPPLUGIN2.7.9
CoreMedia Project Maven ExtensionPROJEXT1.0.5

Table 2.14. Tooling of CoreMedia DXP 8


CoreMedia CMS Changes and Improvements

  • The Freemarker integration now uses the recommended DefaultObjectWrapper as object wrapper. This leads to some changes in using Java objects, especially lists and maps in Freemarker templates. The BeansWrapper mixed map keys with method names with preference to method names. The DefaultObjectWrapper does not leak Java methods. It does not allow to use Java methods of a Map like "get()" and "keys()" directly, but requires you to use Freemarker built-ins. It only allows you to use Strings as keys of a Map.

    Here are some examples for required changes for existing templates:

    aMap.keySet() => aMap?keys aMap.size() => aMap?size aMap.get(key) => aMapkey

    The newly configured implementation is more strict about the used syntax. E.g. if your bean is a list (or sequence in Freemarker), you need to use the built-in "?seq_contains", not "?contains". It does not allow you to compare beans of different types, e.g. a list with a string. For more information look at the Freemarker documentation.

    (CMS-4167)
  • Artifacts base-nonblocking-component and cae-nonblocking-component are removed. Use base-component and cae-base-component instead. The asynchronous loading classes (servlet, filter and context loader) are configured in those base components but can be disabled at runtime using servlet context init parameter, JNDI parameter, system property or system environment parameter com.coremedia.springframework.web.context.disableAsynchronousLoading

    (CMS-4165)
  • The index field htmlDescription has been added to the Solr schema.xml for the Blueprint CAE Feeder. This field contains the value from the CMTeasable document property with the same name and can be used for search result highlighting.

    The field name has also been added to the constants defined in com.coremedia.blueprint.cae.search.SearchConstants.FIELDS

    (CMS-4119)
  • The Freemarker Library was updated to patch version 2.3.23. See Changelog for more informations: http://freemarker.org/docs/versions_2_3_23.html

    (CMS-3989)
  • Several cm command line tools have been enhanced to respect UAPI queries for content selection. The changes apply to:

    • cm query

    • cm cleanversions

    • cm publish

    • cm approve

    • cm destroy

    • -cq | --contentquery <query>

    To select contents by a content query

    • -vq | --versionquery <query>

    To select contents by a version query (not supported by all clients).

    • -R | --recyclebin

    Select contents in the recycle bin (not supported by all clients).

    • -l | --limit <limit>

    Limits the objects to run the client on.

    • -I | --id <id>

    Convenience parameter to explicitly select by id. Usage of this parameter is encouraged if you want to mix selection by id with other selection parameters.

    • -t | --path

    Selection via path.

    All content selection parameters are ORed, thus you can for example select some contents explicitly by id and others by even multiple queries.

    cm approve hid the verbose parameter because it uses \-v for specifying versions. In order not to break existing scripts a workaround for verbose flag has been added to cm approve: Use -V instead. Of course \-\-verbose works, too.

    To run unified API queries the new parameters -cq and/or -vq should be used instead. The old parameter has been kept for backward compatibility and only the arguments of -q will be respected if you want to translate legacy queries to UAPI queries.

    To straighten the behavior of -q versus for example -cq you can now also hand multiple legacy queries at once to cm query to translate (and possibly execute).

                
    $ bin/cm query -u Adam \
      -vq "TYPE Document_" \
      -cq "TYPE Folder_" \
      --recyclebin \
      --limit 10
    
    
              

    Lists all document versions, all folders and all contents of the recyclebin with up to 10 results.

                
    $ bin/cm cleanversions -u Adam \
      -cq "TYPE Document_ : NOT BELOW PATH '/Excluded'"
    
    
              

    Will run clean versions on all documents despite those in path /Excluded. Mind that because of cleanversions default behavior to traverse folders recursively you can prevent possibly unexpected results by explicitly selecting documents only inside the queries (as seen in the example above).

    For more information consult the Contentserver Manual.

    (CMS-2533)

CoreMedia Studio Changes and Improvements

  • The demo content contains a setting OpenCalais which contains the configuration for the OpenCalais service. This setting contains a struct named "openCalais" which contains optional sub structs "apiKey" and "apiUrl". This setting overwrites the given OpenCalais configuration defined in properties files when it is linked to a site.

    (CMS-4290)
  • Thomson Reuters Open Calais does not longer support its legacy OpenCalais service. In order to support this integration in Blueprint further on, the new API is supported now. The j-calais third party library has been removed completely.

    (CMS-4233)
  • The "external-library" studio plugin has been refactored into a real blueprint-extension.

    (CMS-4200)
  • removed blueprint struct editor password field and struct-editor-rest-extension

    (CMS-4186)
  • The method getMasterVersionNumber() of com.coremedia.cms.editor.sdk.sites.SitesService will now return 0 instead of -1 when no master version exists.

    (CMS-4084)

CoreMedia Blueprint Changes and Improvements

  • Chef v12 updates as of August 2015

    • CoreMedia strongly recommends to use Chef Development Kit 0.7.0 or later (a major version bump to 1.0 coming soon)

    • The preconfigured Chef Client in our Vagrant test setup is now 12.4.1 (bundled with Chef DK 0.7.0)

    • A dedicated Chef Server 12.1.2 or later is recommended for production deployments

    • A dedicated private Chef Supermarket server 2.0.0 or later is recommended to improve your Chef Cookbook release process

    (CMS-4266)
  • The plugin had only one class that has been moved to the blueprint-form studio plugin.

    (CMS-4262)
  • CMLinkable gets a new string property called "htmlTitle" which describes the text to be rendered for the "title" tag/to be displayed for the browser tab.

    If no value has been defined, the "title" property value will be used as fallback.

    (CMS-4049)
  • Vagrant 1.7 and Virtualbox 5.0 updates as of August 2015

    • CoreMedia recommends to use Virtualbox 5.0.2

    • The preconfigured test setup requires Vagrant 1.7.4 and uses the updated CentOS 6.7 coremedia/base box 1.16 (https://atlas.hashicorp.com/coremedia/boxes/base)

    • Required Vagrant plugin versions are now checked automatically

    • Please refer to the Vagrantfile for the required plugin versions and further details

    (CMS-3190)

CoreMedia Elastic Social Changes and Improvements

  • The Elastic Social Studio Plugin now contains information about the number of comments and users that require information. You also get information about the number of comments that are online and the number of activated users. These numbers are calculated using the configured search engine. You need to reindex the search indexes 'comments' and 'users' using JMX. Please see the Elastic Social manual for further instructions.

    (CMS-3721)

Miscellaneous Changes and Improvements

  • Added property

        
    lc.contracts.processing.enabled
    
    
      

    to LC CAE component. Defaults to true to support B2B scenario. Set to false to disable contract processing.

    (CMS-4325)
  • The FragmentConnector's "environment" parameter (determing a concrete CMS site, instead of a lookup by storeId and language) can now be set on a per-store basis in the STORECONF table. For example you set the environment to "site:Aurora" for Store with ID 10303 by using: INSERT INTO WCUSER.STORECONF (STOREENT_ID, NAME, VALUE, OPTCOUNTER) VALUES (10303, 'com.coremedia.fragmentConnector.environment ', 'site:Aurora', 0); Do not forget to refresh the IBM WCS Storeconf Registry (see http://www-01.ibm.com/support/knowledgecenter/SSZLC2_7.0.0/com.ibm.commerce.admin.doc/tasks/ttfregistry.htm?lang=en) afterwards or restart your WCS.

    (CMS-4323)
  • Guava (com.google.guava:guava) got updated from 14.0.1 to 18.0. If you happen to have used Guava in your project you might experience migration efforts as some Guava API has changed, as for example Stopwatch and Objects. The latter one especially deprecates methods which are either replaced by java.util.Objects or Guava's MoreObjects. For a complete list please refer to Guava's change notes.

    (CMS-4321)
  • The pageId parameter for the lc:include tag can now be overwritten from within a JSP file. If omitted, the pageId is automatically retrieved from the current URL, as before.

    (CMS-4305)
  • The recommended way to use custom fragment keys in the CAE Feeder or in Persistent Cache applications is to wrap calls to PersistentCache#get with such a key in an in-memory CacheKey. The Blueprint implemented this pattern for the CAE Feeder in class com.coremedia.blueprint.caefeeder.WrappedPersistentCache of module caefeeder-lib.

    The WrappedPersistentCache class and its Spring bean wrappedPersistentCache have been removed now and replaced with functionality of the core Persistent Cache implementation. To this end, the new extended interface com.coremedia.cap.persistentcache.PersistentCache2 provides the method getCached, which basically calls PersistentCache#get but wraps the call in an in-memory cache key just as the WrappedPersistentCache did before. The Spring bean with name persistentDependencyCache implements the new PersistentCache2 interface.

    The standard Blueprint has been adapted to use PersistentCache2 instead of WrappedPersistentCache. However, if you use WrappedPersistentCache in your own code, you should change it to call PersistentCache2#getCached instead, or alternatively keep the WrappedPersistentCache implementation from the previous Blueprint version in your workspace.

    (CMS-4129)
  • com.coremedia.cap.content.ContentRepository The interface ContentRepository provides a new method copyCheckedInVersionsRecursivelyTo(...), which copies the latest checked-in versions skipping content that has never been checked-in.

    com.coremedia.cap.content.results.CopyResultItem The class CopyResultItem provides the new method getVersion() that allows to retrieve the version of the source content which the content has been copied from.

    (CMS-4030)
  • The Corporate Blueprint provides website search functionality now. It supports searching for pages based on page grids of CMChannel documents. To this end, the CAE Feeder is configured to feed parts of the page grid with CMChannel documents.

    The CoreMedia 8 manual describes website search in a new section in the "CoreMedia 8 Corporate Blueprint" chapter.

    (CMS-3929)
  • The "quick create" dialog in Studio suggests a folder for the new content item - this was previously determined by a property in the bundle files. Thus, you could only have one default target folder per document type, which would apply to all sites in the system. Therefore, when you have differing folder layouts for different sites, the suggested path wouldn't be very helpful.

    Therefore, you can now specify a default folder per document type on a site-level. To that end, create a setting in <site_root/Options/Settings/Content Creation named according to the pattern paths.<document_type_name> which, when present, will override the default folder from the properties bundle

    (CMS-3757)

Fixed Issues

  • CMS-4291: LC2 only uses language and ignores Locale in Communication with IBM WCS

    The CoreMedia-custom LanguageMapHandler (REST) on IBM Commerce side and the Store Context on CMS side now use the locales (country and language) from IBM Commerce LanguageRegistry instead of languages, only. Thus you can have two different Sites in CMS for the same store (e.g. 10301), one with locale en_GB and one for en_US.

  • CMS-4168: Taxonomy still includes old SAP tags

    Removed unused Taxonomy tags "Monitors", "Notebook", "Printers", "Software" and "Content Class"

  • CMS-4163: "Editorial Blog" teaser on Aurora B2C Women's Apparal Page shows non-editorial content

    Editorial Blog" teaser on Aurora B2C Women's Apparal Page now only shows Content tagged with "Apparel

  • CMS-4145: Remove extras parameter for cm.include

    Removed the extra parameters of the Freemarker macros cm.include and cm.hook. Use the "params" parameter to add any additional parameters.

  • CMS-4133: cms worksapce build fails on corporate-theme module because of npm dependency

    Update node.js to latest version 0.12.7 and npm to 2.13.4 in corporate-theme.

  • CMS-4130: PersistentCache API RevalidatingFragmentPersistentCacheKey

    The signature of method getBytesForHashing in class com.coremedia.cap.persistentcache.RevalidatingFragmentPersistentCacheKey has been fixed to match the generics type parameter of the interface.

  • CMS-4047: ExternalLink has no validator for url

    Add validator in Studio to check for empty property url of CMExternalLink.

  • CMS-3876: Upload Files fails with "Not enough storage is available to complete this operation." and freezes afterwards

    Added error handling for possible preview error caused by insufficient memory.

  • CMS-3809: Sitemaps

    Sitemap generation had been a little untended over the last few releases and was recently working only for one site of the Blueprint. In order to support sitemaps for multiple sites, we had to rework the sitemap package in the blueprint quite largely. The major benefits are:

    • Out of the box sitemaps for all perfectchef and corporate sites.

    • Automatic robots.txt entries, no content configuration required any longer.

    • Easy activation of sitemaps for new sites, requires only one string setting at the root channel, no more subtle request parameters.

    • The cron job to generate the sitemaps has been replaced by a CAE internal scheduled executor, which reduces deployment complexity.

    For details see the Sitemap section in the Platform Developer Manual.

  • CMS-3374: Custom Inline Styles

    Handling of custom inline styles such as font-size, color in the rich text editor has been improved. The current style is correctly shown as the selected menu item, and "remove" is only enabled when there a style is currently defined.

  • CMS-3129: Create tomcat temporary folder also on rpm update

    If the temporary folder for tomcat, by default /var/tmp/coremedia/<APPLICATION_NAME was deleted before an update, the update process was not recreating it. Now the folder will be recreated in any postinstallation case.

  • CMS-2976: Change source-token JAVA_HOME to CM_JAVA_HOME

    To prevent jenkins jobs configured as maven projects to replace @JAVA_HOME@ with the JAVA_HOME configured in Jenkins, the source-token has been renamed from JAVA_HOME to CM_JAVA_HOME. The Chef and RPM configuration facade is not affected by this change as the target-token remains configure.JAVA_HOME. Only projects that use preconfigured artifacts need to change their JAVA_HOME value to CM_JAVA_HOME in packages/src/main/filters/preconfigure.properties.

  • CMS-1154: Using RedirectAttributes

    The Content Application Developer Manual describes in section Working with Forms how to preserve attributes on a redirect using RedirectAttributes.

    Unfortunately, as soon you use this pattern, LinkHandlers cannot be selected by type anymore. This is because of the behavior described in Spring Bug SPR-10516 that all objects in ModelAndView get transformed to Strings very early in the redirect process as soon as you make use of the RedirectAttributes.

    You might experience two consequences:

    • the redirect will cause a 500 Internal Server Error if the bean cannot be transformed to a String

    • LinkHandler filtering by type does not work anymore as the bean will be of type String.

    To get around this the section mentioned above got extended by a note which describes an approach using the newly introduced method in HandlerHelper: redirectBuilder(bean). Mind that in addition to this (also described in the note) you might need to add a converter to bindingConverters to prevent the Internal Server Error.