Fixes are available
8.5.5.17: WebSphere Application Server V8.5.5 Fix Pack 17
8.5.5.20: WebSphere Application Server V8.5.5.20
8.5.5.18: WebSphere Application Server V8.5.5 Fix Pack 18
8.5.5.19: WebSphere Application Server V8.5.5 Fix Pack 19
8.5.5.16: WebSphere Application Server V8.5.5 Fix Pack 16
8.5.5.21: WebSphere Application Server V8.5.5.21
APAR status
Closed as program error.
Error description
In specific cases user applications can experience a NullPointerException when referencing the FacesContext. This will occurs when a class in the application overrides the FacesPortlet#processEvent(EventRequest, EventResponse) method after extending the FacesPortlet class. When the application code calls super.processEvent(EventRequest, EventResponse), the FacesPortlet code drives the JSF lifecycle to completion in the same manner as it does for FacesPortlet#processAction(ActionRequest, ActionResponse) and releases the FacesContext after it does so. This means that any code executing after super.processEvent(EventRequest,EventResponse) will not have access to the FacesContext object. This APAR will implement a switch that can be set using a portlet init parameter that will allow the context to remain open after completion of the JSF lifecycle. Note that with the switch activated, the customer code will be responsible for releasing the FacesContext. If customer code fails to do so, it will result in memory leaks.
Local fix
The best solution would be to change the bean logic so as to process the event during JSF lifecycle execution. Note that during the JSF lifecycle execution, we expect customers to be able to obtain the EventRequest object from the FacesContext, which would allow you to access the event payload.
Problem summary
**************************************************************** * USERS AFFECTED: All users of IBM WebSphere Application who * * use the JSF Portlet Bridge * **************************************************************** * PROBLEM DESCRIPTION: A switch is implemented that * * allows the FacesContext object to * * remain open after lifecycle method * * execution. * **************************************************************** * RECOMMENDATION: This fix has already been tested and * * provided to the customer as an iFix. * **************************************************************** The init parameter name is "com.ibm.faces.portlet.open.context.phases". Its value is a comma separated list of portlet lifecycle phase names for which the Faces context is to be left open. Example: <init-param> <name>com.ibm.faces.portlet.open.context.phases</name> <value>RENDER_PHASE,RESOURCE_PHASE</value> </init-param> The portlet lifecycle phase names and the corresponding lifecycle methods in the FacesPortlet class: Lifecycle phase FacesPortlet lifecycle method =============== ============================= HEADER_PHASE doHeaders RENDER_PHASE doRender ACTION_PHASE processAction EVENT_PHASE processEvent RESOURCE_PHASE serveResource The switch must be activated for each portlet individually by setting a portlet init parameter in the portlet deployment descriptor. The switch cannot be activated globally for all JSF portlets. Note that if RENDER_PHASE is specified, the doRender method must be overridden. It is NOT sufficient to override only the doView method, unless you are certain that the portlet is only rendered in VIEW mode. This init parameter setting will cause the faces context to remain open for the render and serve resource phases. The context will be released for the action, event, and header phases. The portlet must extend FacesPortlet and override the doRender and serveResource methods in order to assure release of the FacesContext object during execution of those phases. If the switch is not activated, then the JSF portlet bridge closes the faces context at the end of each lifecycle method.
Problem conclusion
This APAR implements a switch that can be set using a portlet init parameter that will allow the context to remain open after completion of the JSF lifecycle. An interim fix is available.
Temporary fix
The best local solution would be to change application bean logic so as to process the event during JSF lifecycle execution. Note that during the JSF lifecycle execution, we expect customers to be able to obtain the EventRequest object from the FacesContext, which would allow you to access the event payload.
Comments
APAR Information
APAR number
PH13693
Reported component name
WEBS APP SERV N
Reported component ID
5724H8800
Reported release
850
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt / Xsystem
Submitted date
2019-06-21
Closed date
2019-08-30
Last modified date
2019-09-20
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Fix information
Fixed component name
WEBS APP SERV N
Fixed component ID
5724H8800
Applicable component levels
R800 PSY
UP
R850 PSY
UP
[{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SSEQTP","label":"WebSphere Application Server"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"8.5","Line of Business":{"code":"LOB45","label":"Automation"}}]
Document Information
Modified date:
28 April 2022