Upgrade 13.1 to 13.2
Introduction
Goal
Upgrade a Bloomreach Experience Manager implementation project from version 13.1.x to 13.2.y.
Upgrade Steps
Perform Generic Minor Upgrade Steps
Follow the generic instructions for minor upgrades.
Changes in 13.2 that possibly impact your implementation project
Dynamic content beans are enabled by default
Content beans are now automatically enhanced with bytecode generation by default, so that default getter/setter methods are available for all properties defined in a document or compound type. However, if your project uses string-equality matching on the classname of a content bean, this can lead to unexpected behavior, since the dynamic content beans use generated classnames that do not match the existing beans. If this affects your project, you can disable dynamic bean generation globally by setting the system property dynamic.bean.generation to false. To disable dynamic bean generation, pass the property to the JVM as follows:
-Ddynamic.bean.generation=false
An alternative to the above global disabling of dynamic content beans creation is the option to disable the creation of dynamic content beans of existing bean classes individually by adding the following annotation on Type (class) level:
@HippoEssentialsGenerated( allowedModifications = false )
If you still want to use the dynamic bean generation for existing beans, and if you are hit by string-equality matching problem related to content blocks, it might be because you have for example in your Freemarker or JSP template something like below:
<#list content.contentBlocks as block> <#if block.class?ends_with("Address")> <@address "Address" block/> <#elseif block.class?ends_with("Employee")> <@employee "Employee" block/> <#else> <div class="text"> <@hst.html hippohtml=block/> </div> </#if> <br/> </#list>
The above might not work any more when using dynamically generated beans because the generated class name does not exactly match the expected name. The Freemarker template should use the existing isBeanType method as documented at Use the Content Blocks Plugin in the Delivery Tier. For example:
<#list content.contentBlocks as block> <#if hst.isBeanType(block, 'org.example.beans.Address')> <@address "Address" block/> <#elseif hst.isBeanType(block, 'org.example.beans.Employee')> <@employee "Employee" block/> <#else> <div class="text"> <@hst.html hippohtml=block/> </div> </#if> <br/> </#list>
Support for maxlength on Text fields
Document type Text fields are implemented with textarea elements. These support a maxlength attribute since HTML 5. Bloomreach Experience Manager now supports that attribute for Text fields. From version 13.2.0 it is possible to configure this property for these fields in the document type editor.
New Boolean Radio Group Configuration Options
Up to version 13.1, the default 'true' and 'false' labels in a Boolean Radio Group could be overriden using the trueLabel and falseLabel properties. These properties are deprecated in 13.2.0 and will be removed in 14.0. As of version 13.2.0, a source property is available to specify a value list document containing items with the keys 'true' and 'false' and the desired values. If your implementation project's document types contain Boolean Radio Group fields with the trueLabel and falseLabel options configured, it is recommended to already replace these with the source property pointing to a value list document containing the labels.
Also new for Boolean Radio Group fields in 13.2.0 is the orientation property. In case the labels are long, you can render the radio buttons vertically oriented. Populate this configuration property with the value "vertical" to achieve this.
See Selection Plugins Configuration for more information.
Support for hst:defaulthostname deprecated
Up until version 13.1, a default host could be configured on the hst:hosts node using the hst:defaulthostname property. The presence of the hst:defaulthostname property prevented the Projects feature from working properly. Therefore, support for the hst:defaulthostname property has been deprecated in 13.2. If your implementation project has hst:defaulthostname configured, update your project and remove the deprecated property
HstRequestContext#isCmsRequest deprecated and replaced with HstRequestContext#isChannelManagerPreviewRequest
The method HstRequestContext#isCmsRequest has been deprecated in 13.2 and will be removed in 14.0. It has been replaced with HstRequestContext#isChannelManagerPreviewRequest which provides the same functionality: to identify whether a request has a channel manager preview context or not. The name of the deprecated method was inaccurate since the introduction of the HST platform in 13.0. The new method has a more descriptive name.
If your implementation project contains any calls to HstRequestContext#isCmsRequest, it is recommended to already replace those with HstRequestContext#isChannelManagerPreviewRequest when upgrading to 13.2.
In Java code, look for code like this:
requestContext.isCmsRequest()
And update it like this:
requestContext.isChannelManagerPreviewRequest()
In Freemarker (or JSP) templates, look for code like this:
<#if !hstRequest.requestContext.cmsRequest>
And replace it like this:
<#if !hstRequest.requestContext.channelManagerPreviewRequest>
See Detect Preview or Channel Manager Request Context for more information.