IBM Support

PH13693: CHANGE TO ALLOW THE FACESCONTEXT OBJECT TO REMAIN OPEN AFTER LIFECYCLE METHOD EXECUTION

Subscribe

You can track all active APARs for this component.

 

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