Modify default passwords for WebSphere Portal

The userid and password information for users is stored in underlying user repository (LDAP or cloudscape). So if you want to change password of the user you have two options
  1. Edit Profile Portlet Users can change their password using Edit Profile portlet. This is the only way of changing password if your using database as user repository. But if your using LDAP as user repository then make sure that the user that your using for binding to LDAP has write access
  2. Using LDAP Admin Tools:You can change the password directly in the LDAP either using the LDAP Admin tool, or one of the change/reset password tool provided by your organization
If your changing password for non admin user then you dont have to make any other changes. But if your changing password for PortalAdminId user then you will have to take some additional steps
  • You will have to change the password in configuration files like wpsconfig.properties. You can take alternate route by deleting passwords from configuration files. Execute WPSConfig.sh delete-password command to delete password from all the configuration files
  • Change password using Edit Profile Portlet or LDAP and then restart the Portal server.
  • When you restart the portal server you will notice that some of the applications failed to initialize. You should see errors like this in SystemOut.log
    [10/5/08 13:06:21:564 EDT] 00000037 ApplicationMg A   WSVR0200I: Starting application: LWP_Security_Ext[10/5/08 13:06:21:762 EDT] 00000037 EJBContainerI I   WSVR0207I: Preparing to start EJB jar: accessEJB.jar[10/5/08 13:06:21:814 EDT] 00000037 EJBContainerI I   WSVR0037I: Starting EJB jar: accessEJB.jar[10/5/08 13:06:22:056 EDT] 00000037 LTPAServerObj E   SECJ0369E: Authentication failed when using LTPA. The exception is WMM-UR: The password check for user security name "uid=wpsadmin,cn=users,dc=ibm,dc=com" failed. Root cause is: "javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]"..[10/5/08 13:06:22:061 EDT] 00000037 MethodDelegat A   SECJ0055E: Authentication failed for uid=wpsadmin,cn=users,dc=ibm,dc=com. The user id or password may have been entered incorrectly or misspelled.  The user id may not exist, the account could have expired or disabled.  The password may have expired.[10/5/08 13:06:22:124 EDT] 00000037 LTPAServerObj E   SECJ0369E: Authentication failed when using LTPA. The exception is WMM-UR: The password check for user security name "uid=wpsadmin,cn=users,dc=ibm,dc=com" failed. Root cause is: "javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]"..
    [10/5/08 13:06:22:136 EDT] 00000037 MethodDelegat A SECJ0055E: Authentication failed for uid=wpsadmin,cn=users,dc=ibm,dc=com. The user id or password may have been entered incorrectly or misspelled. The user id may not exist, the account could have expired or disabled. The password may have expired.

    Problem is the wpsadmin users password is stored in ibm-applicaiton-bnd.xmi file in XOR encoded format and this password does not get changed to new password. Follow Instruction in this tech note to fix this problem

Finding out Portal Version, Fixes installed

If you want to open a PMR with IBM support then you should also mention what is the version of the product that you have installed. Now question is how to figure out the current version of portal and what all fixes are installed in your environment. There are several ways to do that.1) From SystemOut.log file -> At the time of starting websphere portal server writes current version of the portal and names of the fixes installed in SystemOut. This is sample from my environment-------------------------------------------------------------------------------- IBM WebSphere Portal 6.0.1.4 Licensed Materials - Property of IBM 5724-E76 and 5655-R17 (C) Copyright IBM Corp. 2001, 2006 - All Rights Reserved. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. -------------------------------------------------------------------------------- Build Level: wp6014_010_01 (2008-08-01 12:24) --------------------------------------------------------------------------------[10/4/08 1:10:34:486 EDT] 00000014 ProductServic I com.ibm.wps.services.product.ProductServiceImpl findInstalledFixes EJPFD0051I: The following fix packs have been installed: WP_PTF_6014 (IBM WebSphere Portal, Version 6.0.1.4 Fix Pack)[10/4/08 1:10:34:770 EDT] 00000014 ProductServic I com.ibm.wps.services.product.ProductServiceImpl findInstalledFixes EJPFD0053I: The following fix packs have been installed: PK65130 (Invalid transaction sequence error when administering composite applications) PK70764 (Incorrect Policy type error is not propogated to UI.) PK68128 (Fix for PK68128) PK68469 (XMLAccess does not maintain ObjectIDs of WSRP consumed portlets) PK70141 (UNABLE TO CREATE A DRAFT FROM PUBLISH CONTENT WITH WCM DUE TO JCR EXCEPTION. PROBLEM OCCURS WITH SQL SERVER 2005 ONLY) PK64433 ( RCSS - Support displaying scope locations label in Manage Search admin portlet) PK70179 (ReleaseBuilder does not remove skinref definitions) PK68184 (Theme Policy Tracing needs improvement) PK68030 (Siteminder prevents managepages search URL being accepted) PK68278 (Improve hash code computation for ObjectIDs of migrated resources) PK68669 (Memory leak in XMLAccess)
2) There are some command line utilities that you can use
  1. portal_base/bin/WPVersionInfo.sh: This command will print current version of portal on as output on command line. You can use it for finding it out the fix pack or portal version level Ex. 6.0.1.4. This utility does not specify name of the individual fixes ex. PK68278 installed in your environment
  2. portal_base/bin/genVersionReport.sh: This command will generate a html report in your bin directory. This html file will list all the fix packs and fixes that are installed in your environment along with the time of installation. Take a look at sample versionReport.html
  3. portal_base/bin/genHistoryReport.sh: This command will generate a html report in your bin directory. This html file will list all the fix packs and fixes that are installed/uninstalled in your environment along with the time of installation/uninstallation. This file provides you good feedback on what fixes you installed and then uninstalled. Take a look at sample historyReport.html

Troubleshooting installation issues

The WebSpher Portal server generates log files in four different locations during installation. If your installation fails for some reason, the you will have to figure out which step did installation fail and based on that look into corresponding log files to get more details about failure
  1. WAS_ROOT\logs\install: Has log files generated during the WebSphere Application server installation and profile creation
    1. log.txt: Contains the trace information generated during the installation of WebSphere Application Server. Check this log if you have problems with the installation of WebSphere Application Server

  2. WPS_ROOT\log directory has the log files generated during the WebSphere Portal Server configuration.
    1. wpinstalllog.txt: Contains the trace information that was generated during the installation of websphere portal server. Check this file if WebSphere Portal Server installation stops before successful completion
    2. installmessages.txt: Contains messages that are generated during installation. The messages in this file are translated for the language that is specified during installation. Check this log for errors generated during installation.
    3. LocalizeTrace.archiveX.log,: LocalizeTrace.archive1.log to LocalizeTrace.archive5.log files are generated during the archive installation/fixup.
    4. responselog.txt: Installation response file. Irrespective of how you install WebSPhere Portal, the portal server installation program would collect all the user responses and such as location of WebSphere Portal Server installation directory, WAS installation directory,.. and save them in responselog.txt file. You can check this file to verify your inputs on wizard or console
  3. WPS_PROFILE_ROOT\log directory has the log files that were generated during
    1. wpinstalllog_base.txt:Contains trace information that is generated by the installation program. This file contains a copy of wpinstalllog.txt prior to the launch of the installation program, which then deletes wpinstalllog.txt.Check this log if the WebSphere Portal installation onto a WebSphere Application Server base profile stops before successful completion.
  4. Temp directory: The installation program generates log files in temp directory before actual installation starts and the portal installation directory structure gets created.
    1. installtraces1.txt installtraces2.txt installtraces3.txt :Contain trace information generated by the dependency checking function. Output is added to installtraces1.txt until it reaches a predefined size, at which point output goes into installtraces2.txt and then into installtraces3.txt. When installtraces3.txt is full, output reverts to installtraces1.txt and overwrites previous trace information.Check these files if there are problems with component discovery and dependency checking.

Dynamic Caching

Caching is common requirement for J2EE application. If you want to cache a common object, that will be available across different servers of cluster then you should think about Dynamic Caching service provided by WAS.
Attaching a DynaCacheSamplePortlet that has sample on how to use dyna cache.

Parallel Rendering of Portlet Sample

Attaching sample potlet application that you can use for playing with Parallel Rendering of portlet. First Install PrallelRenderingTest.war file as portlet application. It has 4 portlets. Add all of them on one page say Parallel rendering Test Page.
In the sample portlet i am printing name of the current thread and for parallel rendering 1 and 2 portlet i have Thread.sleep() statement to put current render() request in sleep.
When you try to access the Parallel rendering test page you should see output like this[9/26/08 6:15:33:549 EDT] 000000ab SystemOut O Entering ParallelRenderingPortlet1 WebContainer : 6 Fri Sep 26 06:15:33 EDT 2008[9/26/08 6:15:35:164 EDT] 000000ab SystemOut O Exiting ParallelRenderingPortlet1 Fri Sep 26 06:15:35 EDT 2008[9/26/08 6:15:35:170 EDT] 000000a9 SystemOut O Entering ParallelRenderingPortlet 2 WebContainer : 6 Fri Sep 26 06:15:35 EDT 2008[9/26/08 6:15:38:673 EDT] 000000a9 SystemOut O Exiting ParallelRenderingPortlet 2 Fri Sep 26 06:15:38 EDT 2008[9/26/08 6:15:38:677 EDT] 000000a9 SystemOut O Entering Sequential rendering portlet 2 WebContainer : 6 Fri Sep 26 06:15:38 EDT 2008[9/26/08 6:15:38:677 EDT] 000000a9 SystemOut O Exiting Sequential rendering portlet 2 Fri Sep 26 06:15:38 EDT 2008[9/26/08 6:15:38:681 EDT] 000000a9 SystemOut O Entering Sequential rendering portlet 1 WebContainer : 6 Fri Sep 26 06:15:38 EDT 2008[9/26/08 6:15:38:681 EDT] 000000a9 SystemOut O Exiting Sequential rendering portlet 1 Fri Sep 26 06:15:38 EDT 2008As you can see the Thread Name for all 4 portlets is WebContainer : 6.
Now enable the parallel rendering at portla server level and at the portlet container level and try to access the page again[9/26/08 6:26:10:246 EDT] 000000ab SystemOut O Entering ParallelRenderingPortlet 2 WorkManager.wpsWorkManager : 0 Fri Sep 26 06:26:10 EDT 2008[9/26/08 6:26:10:295 EDT] 000000a7 SystemOut O Entering ParallelRenderingPortlet1 WebContainer : 4 Fri Sep 26 06:26:10 EDT 2008[9/26/08 6:26:25:296 EDT] 000000a7 SystemOut O Exiting ParallelRenderingPortlet1 Fri Sep 26 06:26:25 EDT 2008[9/26/08 6:26:27:306 EDT] 000000a7 AbstractRende E com.ibm.wps.pe.ext.render.AbstractRenderManager performService EJPPG1110E: A timeout occurred when reading the output for portlet window Control (ParallelRenderingPortlet2, [ObjectIDImpl '7_32DSUKG100GBC027P3ULPA00G0', NAVIGATION_NODE, VP: 0, [Domain: rel], DB: 0000-4334EE290C00C0C5803879F89A150010], [ObjectIDImpl '6_32DSUKG100GBC027P3ULPA0000', CONTENT_NODE, VP: 0, [Domain: rel], DB: 0000-4334EE290C00C0C5803879F89A150000], 200 that is rendered in a parallel thread. The portlet output will not be displayed. [9/26/08 6:26:45:244 EDT] 000000ab SystemOut O Exiting ParallelRenderingPortlet 2 Fri Sep 26 06:26:45 EDT 2008[9/26/08 6:51:27:264 EDT] 000000a7 SystemOut O Entering Sequential rendering portlet 2 WebContainer : 4 Fri Sep 26 06:51:27 EDT 2008[9/26/08 6:51:27:265 EDT] 000000a7 SystemOut O Exiting Sequential rendering portlet 2 Fri Sep 26 06:51:27 EDT 2008[9/26/08 6:51:27:334 EDT] 000000a7 SystemOut O Entering Sequential rendering portlet 1 WebContainer : 4 Fri Sep 26 06:51:27 EDT 2008[9/26/08 6:51:27:334 EDT] 000000a7 SystemOut O Exiting Sequential rendering portlet 1 Fri Sep 26 06:51:27 EDT 2008
As you can see Parallel Rendering Portlet 2 was called in WorkManager.wpsWorkManager : 0 where Parallel rendeing portlet 2 was called in WebContainer :4 thread, sequential portlet 1 and 2 were also called in WebContainer :4 thread.
You can also see "A timeout occurred when reading the output for portlet window Control" message in the SystemOut.log that message is because Parallel rendering portlet 2 is sleeping for 35000 milliseconds which is more than the parallel rendering timeout value. So the WPS server will abort rendering of Parallel Rendering 2 portlet and write this message in log. On the user output side it will render output of all 3 portlets except Parallel rendering portlet 2 and for that portlet it will display error message to the user.
The PortletContainer Service Link has further information about parallel rendering

Parallel Rendering of Portlet

By default the WebSphere Portlet tries to render all the portlets on page sequentially. For example if you have 4 different portlets on one page, then websphere portal will create one thread for handling the request and call render() method of each of the portlets sequentially one after another. So the total response time is Sum of execution time of all the portlets. One important point to remember is that result page wont get displayed to user until render() method of all the portlets is finished
This is acceptable behavior in most of the cases but what if you have a portlet that accesses a database/ file system and takes long time to get result in that case the page my timeout. Example one of my client had a issue that when they the portal was serving blank white page. When we debugged the issue we realized that one of the portlets was trying to access a db process which for some reason was taking very long time and as a result the Connection from ODR to Portal server was getting timed out and as a result user was getting blank page. In the same case if you try to access the portal directly then it used to take long time but it used to display output finally.
In cases like this you might want to enable parallel rendering. When you enable parallel rendering the portal server will try to create different threads and call render() methods of the portlet from different threads in parallel. One other advantage of this approach is you can set a time out by default it is 2000 milli seconds. The portal server will wait for this time and if the render() method does not finish executing in that time, the portal server will ignore that portlet and display rest of the page. Make sure that this timeout is less than your ODR or Http Server Connection timeout so that portal server does not show blank page to user.

Enabling Parallel rendering


By default the parallel rendering is disabled and you will have to enable the parallel rendering first globally at portal server level then you have to enable it at portlet level. When you enable parallel rendering at portal server level it will not open different threads for each of the portlets on the page instead it will render only portlets that have parallel rendering enabled in separate thread and other portlets on the page are still rendered sequentially.
Second important point to note is that enabling parallel portlet rendering is just a hint to WPS and it is not necessary that WPS will create separate thread for each of the portlets that are enabled for parallel rendering. It is recommended that do not enable parallel rendering for every portlet instead enable it for the portlets which really need them ex. Portlet which needs to access external resource that might take time and WSRP consumer portlet. This way WPS can use the separate threads more efficiently.

Enabling Parallel rendering at the level of Portal Server



You can change the portal wide settings for parallel portlet rendering in the PortletContainerService. You can use two different parameters for configuring parallel portlet rendering, depending on the type of portlets you want to have rendered parallel.
1)For IBM portlets enable the following parameter

legacy.useParallelRendering.html=true

2) For standard portlets or for remote portlets that you integrated in a WSRP Consumer portal, enable the following parameter

std.useParallelRendering.html=true

Please note that .html part is optional which says that enable parallel rendering only for HTML markup. In markups like WML there would be only one portlet on page so parallel rendering does not make sense
In addition there are couple of more parameters that you can set at PortletContainerService level

  • parallelRenderingTimeOut:Use this parameter to specify the timeout in milliseconds after which the render process of a portlet is aborted. Default value is 2000(2 seconds)

  • parallelRenderingWaitTimeOut:Use this parameter to specify the waiting time in milliseconds for parallel threads to finish the render process of portlet. A low value can result in exceptions caused by portlets that could not finish their parallel rendering process. A high value can cause an increase of the response time. The value 0 (zero) specifies that no timeout occurs and the main thread waits for all portlets to finish.

  • parallelRenderingWaitTimeOut:Use this parameters to specify the waiting time in milliseconds for parallel threads to finish the render process of portlets. The default is 1 millisecond. A low value can result in exceptions caused by portlets that could not finish their parallel rendering process. A high value can cause an increase of the response time. The value 0 (zero) specifies that no timeout occurs and the main thread waits for all portlets to finish.

  • parallelRenderingChunkSize:Specifies the size of the chunks in bytes that are read from the queue. The default value is 1024 bytes.


Enabling Parallel rendering at portlet level


Once the parallel rendering is enabled at portal level. You can enable it at portlet level. There are different methods for doing that depending on your role

  • Developer: If your portlet developer then you can enable the parallel rendering by using the the following parameter. You set this parameter as a configuration parameter in IBM portlets or as a read-only preference in standard portlets.parallel = (false)

  • Administrator: If your administrator you can change the setting for a portlet to parallel rendering in the Manage Portlets portlet.


Proceed by the following steps:

  1. Select Portal Administration > Portlet Management > Portlets.

  2. Select the desired portlet and click on the Configure (wrench) icon. The portal displays the panel for configuring the portlet.

  3. Mark the Enable parallel rendering checkbox to enable parallel rendering for the portlet.


When you enable a portlet for parallel rendering it should look like this.



Take a look at Infocenter for more information on Parallel portlet rendering

Creating VMWare Image for WebSphere Portal

In order to prepare for my WebSphere Portal Server 6.0 Admin Test, i thought first i will create a VMWare image and then i will use it for all my experiments without disturbing my Windows Machine Laptop setup. This allows me to try lot of things without going through uninstall/install cycle
I am following these steps for setting up the VMWare Image
1) Download the CentOs 5.2 VMWare Image from http://www.thoughtpolice.co.uk/. The CentOS is free and based on Red Hat Linux and it is very user friendly
2)After downloadig the VMWare Image unzip it on disk and start it. On the first startup it will ask you for initial setup things like timezone,..
3) Once the OS is started you can login using root/thoughtpolice password.
4) It will show you list of updates that are avilable for the CentOS, i decided to apply all the updates and restarted system.
One issue with CentOS is by default it has only 8 GB disk which is not sufficient for portal installation. So i used http://www.matttopper.com/?p=25 instructions in this article to add a new disk of 12 GB to a my Cent OS virtual machine. At this point also change the Memory size of the VMWare to 2 GB(You will need this when you try to apply fixpack to WPS). I also made changes in the .bashrc to add "ulimit -n 10240" line

Installing WPS

Note that you wont be able to use wizards for installing WebSphere Portal or applying WAS or WPS fix packs on CentOS 5, it keeps complaining about missing libraries. So i had to use -console option for installing WPS and then change response files and use them for installation. I like that approach now because the response files have nice description for each of the options and its good learning experience.

Preparing Cent OS for WPS

After Installing WPS i tried to install a sample portlet but whenever i used to go to Manage Portlets Portlet it was throwing some this cryptic exception[9/25/08 13:35:15:837 EDT] 00000044 ServletWrappe E SRVE0014E: Uncaught service() exception root cause /WEB-INF/jsp/html/webModuleList.jsp: java.lang.NoClassDefFoundError: com/ibm/psw/wcl/components/marquee/WMarqueeInitially i thought this might be because of some missing jars but it turns out that the OS is missing some packages so i had to follow these instructions
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/topic/com.ibm.websphere.express.doc/info/exp/ae/tins_linuxsetup_rhel5.html
If you want to install compat-libstdc++-33-3.2.3-61 package then executeyum install compat-libstdc++-33-3.2* command and CentOs takes care of downloading and installing the package