ShowTable of Contents
WebSphere Portal Personalization feature allows personalizing the content based on user selection and user profile. This is achieved using various Personalization Artifacts such as rules, content spots, campaigns and Application objects.
The following diagram explains the flow of events when a Personalization rule is executed.
Troubleshooting common Install & Configuration Issues
Is the issue with Personalization immediately following the installation of WebSphere Portal?
Problems in personalization portlets immediately following the installation of WebSphere Portal have been attributed to a configuration issues.
Personalization portlets have been added manually to a page and the rule authors are unable to create rules.
If Personalization portlets have been added manually to a page then please ensure that the rule authors have the appropriate access to create the rules.
1. Navigate to Personalization navigator portlet , logged in as wpsadmin.
2. Click on the workspace on the navigation panel on the left.
3. Click on Extra Actions.
4. Choose Edit access
5. Grant manager/editor access to the users who need to create the rules
6. Click Apply and done
7. Log in as a regular user and you should be able to create rules.
Additionally, Review the section - Table 5. Access rights for Business Rules at http://publib.boulder.ibm.com/infocenter/wpdoc/v6r1/index.jsp?topic=/com.ibm.wp.ent.doc_v615/admin/sec_acc_rights.html
The issue exists on one environment and not in the other.
The chances are that it could be related to configuration. In this case, check the PersonalizationService.properties file on all the environments.
Personalization rules are not working with a custom theme?
Try the failing scenario with the default theme. If the issue still prevails then collect the personalization Mustgather and engage IBM Support for problem analysis.
After executing setup-pzn task following an Admin install of WebSpere Portal, Personalization portets are not available.
Refer to the following technote.
(Support statement for 'setup-pzn' and 'remove-pzn')
Are Personalization features available after performing an Administration Installation of WebSphere Portal ( 6.1.5)?
No. However, Personalization portlets can be manually added to a page.
The IBM® WebSphere® Portal 6.1 configuration task modify-servlet-path may fail with a EJPXB0015E error code during the action-remove-pznauthor-portlet subtask.
Review the technote –
(EJPXB0015E failure during modify-servlet-path configuration task)
Personalization Portlets are unavailable. Both the Personalization navigator and the Personalization Editor portlets show as "Unavailable". When this occurs, we see the following Exception in the SystemOut.log
00000049 WpsStrutsPort E
com.ibm.wps.portlets.struts.WpsStrutsPortlet error init - EJPYE0003E:
Could not initialize from the configuration. An exception has been caught.
Make sure that the Editor portlet and the Authoring portlet have all the files and proper folder structure as it is possible that these files might be missing sometimes. Replacing the correct version of the missing files should correct this situation.
What are the Resource collections available in WebSphere Portal Personalization ?
The collections available are Portal User Collection, Federated Resource collection ( available only with Feature pack 6.1.5 for WebSphere Portal 18.104.22.168/22.214.171.124) and Web Content Collection ( available only on content build of WebSphere Portal )
What is the default Application Objects available in WepSphere Personalization?
The Action Bean, Action Count, Browser Capability, Category Bean, Category Count, Date, Portlet Attributes, Request and Session objects are the default Application objects.
Troubleshooting common Authoring Issues
ConstraintViolationException while saving large Personalization rule on WebSphere Portal 6.1 and higher. In SystemErr.log following exceptions are thrown.
00000037 SystemErr R javax.jcr.nodetype.ConstraintViolationException: The value for the binary property ibmpersonalization:contents on node /New Business Roles and Categories exceeds its max length. The max length is 32000 while the value is of length 32074
00000037 SystemErr R at com.ibm.icm.jcr.ConstraintChecker.validateMaxLength(ConstraintChecker.java:713)
Addressed through technote at
(ConstraintViolationException while saving large Personalization rule.)
Non-administrator users receive an error when creating a rule for New Personalization Element in the Personalization Picker
Granting proper access rights to the non-administrator should resolve the issue. Please refer to the section ‘Access rights for Business Rules’ in the Infocenter.
Cannot edit or delete a Personalization rule in personalization editor or navigator
POSSIBLE CAUSE: User editing the rule then walks away without saving and session times out.
Use Support Tools Portlet available at Lotus Greenhouse portlet catalog (https://greenhouse.lotus.com/home/login.jsp?ibmsst=LotusBtn
)to identify the UUID of the rule (in the RULESWORSPACE). Then use selectableUnlock.JSP to unlock the node. ( Please open a PMR with IBM Support to obtain this JSP ).
Not able to create a new Business Rule on WebSphere Portal 126.96.36.199. No page is displayed when clicking New Rule.
Personalization Navigator shows the message:
"The current view cannot be displayed"
Errors received when starting the application:
00000888 RegistryFacto W
com.ibm.wps.caf.config.RegistryFactory getPluginRegistry plugin added twice
00000888 RegistryFacto W
com.ibm.wps.caf.config.RegistryFactory getPluginRegistry <Null Message>
plugin com.ibm.websphere.personalization.ui is not enabled
Install PK86042: PZN CUMULATIVE FIX 1 FOR VERSION 188.8.131.52 .
Even the Portal administrator is unable to release the lock on a rule which is currently being held by another user.
Please open a PMR with IBM Support to obtain the SelectableUnlock.jsp to release the lock.
Unable to register new PZN resource collection through Personalization Editor Portlet. ( WebSphere Portal 6.1 )
Install PK68613 ( Please open a PMR with IBM Support to obtain this ifix ).
When trying to add a new Personalization rule or edit an existing rule by selecting a value, the information is not saved and the following error is printed to the Systemout.log:
00000204 ActionManager W com.ibm.wps.state.accessors.action.manager.ActionManagerImpl internalExecuteAction id = n6jfN77400008 is invalid.
00000204 WPActionPhase W com.ibm.wps.engine.phases.WPActionPhase processPortlets EJPEI0169E: Cannot execute the received action
com.ibm.wps.engine.commands.LegacyActionDispatcher@4bc04bc due to a security violation. The assigned action ID n6jfN77400008 is invalid.
Install PK82601 which has a corequisite of PK79235. (WebSphere Portal 6.1.x) - ( Please open a PMR with IBM Support to obtain these ifixes.)
Is it possible to extract cookie information from a Personalization artifact?
Personalization doesn't read directly from a cookie for personalization support. You could create an application object bean and that could be referenced within Personalization. So you build it from the cookie, define it to Personalization and reference in a rule.
Troubleshooting common Runtime Issues
The following Exception is seen in the logs when a Personalization rule is executed.
javax.jcr.nodetype.NoSuchNodeTypeException: Node Type clb:clbLibrary not found.
Please review the technote –
(JCR troubleshooting topic: troubleshooting common exceptions)
Also apply - PK52204 and PK69027. Please open a PMR with IBM Support to obtain these ifixes.
Personalization Component in Web Content Management is not displaying any data.
Verify whether the rule that is associated with the Personalization component still exists in the personalization navigator portlet. If it does not exist then create a new instance of that rule and associate this rule with the Personalization component. If the rule exists on the Personalization navigator then resave the Personalization component to see if displays any data, If the issue still persists, please open a PMR with IBM Support.
How to set an attribute in a portlet for Personalization to pick up ?
Since we don't have access to the session being modified before the rule would be executed and the page rendered, it would be better to use an application object.
When giving the exact value for LDAP groups in a personalization rule, no results are being returned.
While specifying the LDAP groups in a Personalization rule ensure that they are entered in lower case as the PUMA API( Portal User Management ) returns the groups of the user in lower case.
Troubleshooting common Publishing Issues
The following error is shown in the SystemOut.log while importing Personalization rules. EJPVP10606E Items to be imported already exist in the workspace
If you had exported the entire workspace including the root node and were attempting to import to target server using the "Import" button, this will not work since the root node already exists. You need to export from a folder if you wish to use the import option.
Note: Simply moving the nodes from root to a folder will not work since the configured portlets expect the rule to be at the root location. You would need to reconfigure the portlets.
pznload script fails with javax.net.ssl.SSLHandshakeException
Please refer to the technote –
(pznload script fails with javax.net.ssl.SSLHandshakeException)
pznload script fails with java.io.IOException: HTTPS hostname wrong exception
This error occurs when the serverUrl is configured to utilize SSL.
--username wpsadmin --password xxxxx c:\rule\SampleRule.nodes
Publishing file: 'c:\rule\SampleRule.nodes'
Server url: 'https://wpsupport.xxx.xxx.xxx:10035/wps/pznpublish/pznpublishtarget'
Destination workspace: 'The default workspace for rules on the target server.'
Destination path: '/'
Published objects will only overwrite existing objects
Publish started [Thu May 08 11:29:25 EDT 2008] Connecting to the publish server
May 8, 2008 11:29:26 AM com.ibm.websphere.personalization.publish.command.AbstractPublishExecutor execute
WARNING: could not send the request data
java.io.IOException: HTTPS hostname wrong: should be <wpsupport.xxx.xxx.xxx>
at com.ibm.net.ssl.www.protocol.https.b.b(Unknown Source)
at com.ibm.net.ssl.www.protocol.https.b.o(Unknown Source)
at com.ibm.net.ssl.www.protocol.https.q.connect(Unknown Source)
at com.ibm.net.ssl.www.protocol.https.t.connect(Unknown Source)
Publish failed [Thu May 08 11:29:26 EDT 2008] The publish job could not be started: Unable to communicate with the remote serverWebSphere\PortalServer\pzn\v6.0\publish>
Is it possible to publish security with personalization rules?
- Ensure WebSphere Application Server (WAS) on the target node is configured to use SSL.
- Ensure the certificate has the same common name as the hostname.
NOTE: If you are using the default certificates that is shipped with WebSphere Application Server, then the common name for this host is "jserver: and you will receive the above error.
If you need assistance with configuring the certificates in WebSphere Application Server (WAS), please open a PMR with WAS Support.
Since personalization rules are not part of the core portal artifacts it is not possible to export these rules using xmlaccess which could potentially include the PAC info.
Can Personalization Publish process be automated?
Unfortunately the entire process cannot be automated.
In order to publish the rules to the target environment there are 2 ways
1. Using the Personalization Navigator portlet, Use the Publish feature and publish the rules to the target server.
2. Using Command Line publish - This is a 2 step process. First, you need to export the rules and Second, you can use the pznload script to publish the rules to the target server.
If you want to export the entire workspace, then you need to select the workspace and then click on 'More Actions' -> Export. This will export ALL the Personalization Artifacts.
Unable to publish the rules using a custom port and firewall enabled.
Ensure the port that is being used for publishing is opened through the firewall.
When publishing to a server with a different username and password than the source, the following error occurs:
EJPVP20003E: The publish job could not be started: 'The username or password you specified was not valid'
This causes the publish action to fail.
Have the two servers to use the same username and passwords.
Troubleshooting common Visibility rule Issues
Administrator is not able to attach any visibility rules to the portal page
Note: This issue was reported on PZN 184.108.40.206; however it's believed to exist in version 6.0 as well.
The log shows the following error:
0000005d ActionManager W com.ibm.wps.state.accessors.action.manager.ActionManagerImpl internalExecuteAction id = E::fL75640004 is invalid.
0000005d WPActionPhase W com.ibm.wps.engine.phases.WPActionPhase processPortlets EJPEI0169E:
Cannot execute the received action com.ibm.wps.engine.commands.LegacyActionDispatcher@788c788c due to a
security violation. The assigned action ID E::fL75640004 is invalid
Install PK82601. ( Please open a PMR with IBM Support to obtain this ifix )
Visibility Rules are not called / invoked by Portal Engine
Collect a trace with tracestring com.ibm.websphere.personalization.*=all. If there are no entries in the trace for com.ibm.websphere.personalization classes, the pzn rules are not being invoked by the portal engine.
Find the resources.xml that contains
Possible locations for the file:
Check if this config property is set:
You can remove this property completely from the file since the default value is true.
The property content.topology.dynamic controls if the Portal dynamic content model is enabled or not. The dynamic content model is the plug point for visibility rules. If it is disabled the rules will not be executed.
Does Visibility rules support Anonymous users?
No. Please refer to technote –
(Visibility Rules are not applicable to Portal Anonymous Users)
Attributes set in the session from one portlet are not available for visibility rules on another portlet ?
Attributes that are set in the session is available to visibility rule if it is in the same portlet or the scope is set to application.
Visibility rules are not getting re-executed or somehow retaining the previous state for that session even if we refresh the page many times.
Install PK67945 (Visibility rule cache does not always invalidate when cleared. ). Please open a PMR with IBM Support to obtain this ifix.
Troubleshooting common Caching Issues
Is there a way in which we can invalidate cache for a particular Application object and Resource collection on demand through portlets ?
Yes, If you are using the Application object in a visibility rule then disabling the visibility rule cache should address this issue.
These are the methods that you could use to invalidate the entire visibility rule cache or a particular rule within the visibility rule cache
-request is the PortletRequest and
-ruleName is a String relative to the Personalization Workspace. ( RULESWORKSPACE).
public static void invalidate(HttpServletRequest req) - Invalidates all visibility rule caching for the current user
public static void invalidate(HttpServletRequest req, String rule) -
Invalidates visibility cache for the rule specified for the current user
You might need to programmatically flush the Personalization cache, for example when a resource is updated outside of Personalization rules through some other application. A programming interface is provided to flush the cache. Since the timeout interval for the cache can be specified in the PersonalizationService.properties file, in many cases it may be adequate to wait for the cache timeout before updates are seen.
The class com.ibm.websphere.personalization.resources.cache.CacheManager can be used to invalidate the cache for a particular resource, a particular resource collection, or the entire cache. Personalization uses this class internally to flush the cache when updates occur.
Flushing the cache for a particular resource may require that all cached queries be flushed. Flushing the cache on a collection may flush the cache for all collections using the same dynamic cache map. When the application frequently flushes the cache for a particular collection, isolating that collection in its own cache map through the use of the ruleEngine.cache.jndiName.resourceCollectionName property will result in better cache utilization.
Caching occurs before any rule exits are called.
For more information about using the DistributedMap and DistributedObjectCache interfaces for the dynamic cache, refer to the IBM WebSphere Application Server Information Center.
Does Caching need to be disabled at the master level in order to disable any particular resource collection?
You don't have to disable the master level caching at rulesEngine.cache.enabled = false as it will cause performance impact.
A sample is as follows
The resource collection that is cached is wcmWebContentCollection and it is being cached under the default distributedMap dynacache instance
Another good resource is
(Page visibility rules and unreachable Search results)
We have a scenario in which data fetched by the resource collection is liable to change at runtime within the same session and same goes for the application object as well. What is the best practice to be followed with respect to performance without Compromising the functionality ?
You could always invalidate the cache for a particular rule.
com.ibm.websphere.personalization.resources.cache.CacheManager can be used to invalidate the cache for a particular resource, a particular resource collection, or the entire cache. Personalization uses this class internally to flush the cache when updates occur.
Are the personalization caches in Portal 6.x based on something other than Dynacache?
Personalization cache is stored in dynacache.
Are there any tools to see if they are used other than performance testing after changing the configuration file?
Its an object cache, so you need the extended cache monitor to view the cache.
The PersonalizationService.properties file contains the JNDI name for the dynacache that is used by Personalization.
Can we set the personalization visibility rule to a mode like NOT_SHARED for the Dynacache implementation? If so, how is this set and should it be set?
Visibility rules cache is per session, so that does not use dynacache.
The visibility rules and personalization engine gets fired only once at the time of login. It should be fired every time the user goes to the page on which they have applied visibility rules.
Disable visibility rule caching by setting the following property to false in PersonalizationService.properties and restart the server.
For more information please refer to the following articles:
Troubleshooting common Application object Issues
java.lang.ClassNotFoundException: int is seen in the SystemOut.log while executing a visibility rule that uses an Application object.
The ClassNotfoundException is being caused by the use of an application object that is of type int. Personalization supports only java classes, thus the customer needs to change their application object to Integer.
How to get the sessionID off the RequestContext object that is passed to the init() method in the ApplicationObject?
Call a method getRequestObject(). This is implemented through com.ibm.websphere.personalization.context.PersonalizationContext.
That will return a com.ibm.websphere.personalization.PznRequestObjectInterface which can be used to access various attributes.
If the interface is an Http type (com.ibm.websphere.personalization.PznHttpRequestObjectInterface), you should call getServletRequest.
If the type is portlet (com.ibm.websphere.personalization.PznPortletRequestObjectInterface), then you will need to call getPortletRequest.
In the ApplicationObject class there is public void init(RequestContext context) method and
the com.ibm.websphere.personalization.RequestContext object. How do we access the PortletRequest object and from there the User object.
If you need to access an attribute on the user in a rule, you could create a condition in the rule to access the included portal user collection.
If it’s necessary to access the user outside of the included portal user collection to do some processing on that value, then the user object can be accessed from the RequestContext object by calling get("pzn.user./.personalization/collections/ibmpzn:wpsUser")
There is no public API way to access the underlying PortletRequest.
Troubleshooting common Performance Issues
Please refer to the Personalization best practices guide at the following location that will address the common performance issues.
Collecting the traces for WebSphere Portal Personalization
NOTE: Clients who are on WebSphere Portal version 220.127.116.11 up until 18.104.22.168 and 6.1 to 22.214.171.124 need to install PK80778 ( available on IBM fix Central ) to collect the WebSphere Portal Personalization traces.
Personalization Mustgather 6.0 -
Personalization Mustgather 6.1 -
Extending WebSphere Portal V6 personalization capabilities: Part 1. Including external data in personalization applications
Extending WebSphere Portal V6 personalization capabilities: Part 2. Creating a Hello World application object
Extending WebSphere Portal V6 personalization capabilities: Part 3. Creating a Web service application object
Extending WebSphere Portal V6 personalization capabilities: Part 4. Deploying a resource collection that uses an ATOM feed
Deploying and publishing WebSphere Portal Personalization artifacts
Manually repairing your personalization rules after migrating
When selecting a custom application object in personalization, no properties display or not all expected properties are included
How to prevent Personalization cache query timeout messages