In this blog I will lay out some Administration Tips and Tricks around Digital Experience, WebSphere Portal and Web Content Manager:
Optimize Performance if not using Intelligent Management Features in 8.5:
If not leveraging the Intelligent Management features introduced in WebSphere Application Server ND 8.5.5 like Health Policies or Service Management, it is possible to disable those features to improve performance. By setting the flag LargeTopologyOptimization=false for the cell.
Solving Reference Errors during Syndication:
When seeing errors during syndication of items between systems like the one below:
Caused by: com.ibm.icm.ci.data.CDMReferentialIntegrityException: RT0002E: Error while calling a function updateItems of PLS data manager
the issue is often caused by missing references caused by doing manual changes on the subscriber.
To solve the issue and getting the environments back in synch with version 8.5 and a recent CF the Syndication Mirror Mode can be leveraged. When syndicating with mirror mode every library on the subscriber will match the syndicator.
For more information see Rebuild with Mirror here: http://www.ibm.com/support/knowledgecenter/SSYJ99_8.5.0/wcm/wcm_syndication_overview.html
Writing a simple custom workflow action:
The use case for writing a custom workflow action was to set the general date one field to the published date in case it was not set by the author.
To do so two classes had to be implemented, one implementing the CustomWorkflowAction interface and representing the code for the workflow action and another class implementing the CustomWorkflowActionFactory interface that is responsible for returning the custom workflow action based on an translatable action name.
The classes are registered via a plugin.xml file that is located inside the project.
To package the custom workflow action I wrapped the classes into an ear file.
You can download the war file here including the source code: https://www.ibm.com/developerworks/community/blogs/portalops/resource/DateWCMWorkflowAction.zip
After deploying the war file via the WAS Admin Console and starting it, use the WCM authoring interface and create a new custom workflow action. Leveraging the "Select Action" button one can now select setGeneralDateOneIfEmpty as factory and setGeneralDateOneIfEmpty as action. The new action can then be added to the workflow stages to be run for instance in the Publish action.
As always the usual legal disclaimer for sample source code applies:
DISCLAIMER OF WARRANTIES:
The following [enclosed] code is sample code created by IBM Corporation.
This sample code is provided to you solely for the purpose of assisting
you in the development of your applications.
The code is provided "AS IS", without warranty of any kind. IBM shall
not be liable for any damages arising out of your use of the sample code,
even if they have been advised of the possibility of such damages.
WCM Friendly URLs:
With CF8 it is possible to enable friendly Portal URLs without state.
When rendering content on a page with WCM portlets the URL is built with the friendly path of the page (e.g. /Home/MyPage) and then following the default mapped site area to the content (e.g. SA1 being mapped to the page and having a child site area SA11 with child content mycontent the path would be /Home/MyPage/SA11/mycontent).
Note that the URL is only build for the default content mapping and not for other mappings so you need to structure the default content mappings accordingly to pages.
For details see:
Themes stop to render after CF12?
With CF12 we introduced a security fix as documented here: http://www-01.ibm.com/support/docview.wss?uid=swg21963226
With the cumulative fix in place in case an ear based theme that stores files in a dynamic war will stop working unless the whitelist/blacklist parameters have already been set.
In addition to the custom themes also when downloading older themes like for instance some of the themes on the catalog also do not have the parameters set and will stop working.
A typical Exception when hitting this issue looks like the following:
AbstractRequestDispatcherFactory matchesWebAppDefault(aResource) Servlet context [/angularBootstrap] does not specify a blackwhite list when accessing resource [themes/html/dynamicSpots/head.jsp]