Thursday, 1 July 2010

"No content resource collections available" when attempting to use Personalization and Lotus Web Content Management together

I've been working with a client who is making heavy use of Personalization (PzN) in WebSphere Portal 6.1.0.3 (WP) on AIX, using the "Select Action" rule type against Lotus Web Content Management (WCM).

However, when they attempted to create a new rule, they were hitting the message"No content resource collections available" where ordinarily one would expect to see three default resource collections: -
  • Federated Documents
  • Web Components
  • Web Content
Enabling tracing in WP via the com.ibm.websphere.personalization.*=all trace package showed us exceptions such as: -

[29/06/10 18:04:53:200 BST] 0000004a SystemErr     R
com.ibm.websphere.personalization.PersonalizationException: The collection was not found: null
[29/06/10 18:04:53:214 BST] 0000004a PznXMLInterpr >
com.ibm.websphere.personalization.rules.PznXMLInterpreter handleException ENTRY
[com.ibm.websphere.personalization.PersonalizationException: ResourceCollection not found for ,"Exception Thrown in PznXMLActionInterpreter.doQuery()",com.ibm.websphere.personalization.context.PersonalizationContext@7c6b7c6b]
[29/06/10 18:04:53:214 BST] 0000004a SystemErr     R
com.ibm.websphere.personalization.PersonalizationException: ResourceCollection
not found for


etc.

Following a timely blog post from Graham Bucknell ( aka Tork Wrench ): -

Why doesn’t the WCM authoring portlet come up after installing Portal?

I confirmed that this was definitely a WP/WCM installation e.g. an installation of WebSphere Portal that includes WCM, by checking /opt/IBM/WebSphere/PortalServer/wps.properties for WPFamilyName=content rather than, say, WPFamilyName=server.

However, the wps.properties did give me another clue, WPInstallType=admin, which indicates that the client was using the slimmed-down ( but *NOT* cut-down ) installation option.

This gave me a clue to check the Information Centre here: -

Adding features to an administration installation

and, more specifically, this: -

Adding Personalization features to an administration installation

and this: -

Adding Web Content Management to an administration installation

These two sections describe how to use ConfigEngine to add PzN and WCM to your installation: -

./ConfigEngine.sh action-deploy-portlets-prereq.pzn -DPortalAdminPwd=password -DWasPassword=password
./ConfigEngine.sh configure-wcm-authoring -DPortalAdminPwd=password -DWasPassword=password

I replicated the problem by performing an Administration installation on my own box ( my trusty Thinkpad ) and then ran the two ConfigEngine tasks, one at a time, testing as I went along.

PS I DID have the Federated Documents collection under PzN, before running either task, but not the WCM-related ones.

The action-deploy-portlets-prereq.pzn task doesn't seem to do much, as the PzN portlets are already deployed out-of-the-box, even on an Administration install, but it did create a nice little page group which I could then use.

However, the magic trick was to run the configure-wcm-authoring task, which did the job nicely. Watching the log as the task ran, I saw the following two important lines: -


...
Calling JCRInitializer for file:
/opt/IBM/WebSphere/PortalServer/pzn/prereq.pzn/config/nodes/pznwcmcontentrc.nodes
Calling JCRInitializer for file:
/opt//IBM/WebSphere/PortalServer/pzn/prereq.pzn/config/nodes/pznwcmcomponentrc.nodes

...

These two files, respectively, create the two missing Resource Collections: -

  • Web Content
  • Web Components
The moral of the story ? If you get the exception "No content resource collections available" on an Admin. install of WebSphere Portal *AND* you've definitely got a deployment that includes WCM, then run the configure-wcm-authoring task via ConfigEngine, and you'll be in like Flynn.

Seemples !

2 comments:

Brion Goudreau said...

Thanks David. This solved our exact problem.

Dave Hay said...

Hi Brian, cool, glad to be of help, regards, Dave

Note to self - use kubectl to query images in a pod or deployment

In both cases, we use JSON ... For a deployment, we can do this: - kubectl get deployment foobar --namespace snafu --output jsonpath="{...