IBM Support

PM43205: A method annotated with @ProcessEvent in a class extending FacesPortlet isn't called if the event is published

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • A method annotated with @ProcessEvent within a class extending
    FacesPortlet isn't called if the particular event is published
    
    Step to reproduce:
    1. Create a JSR286 portlet project Event of type Faces portlet
    with portlet Sender
    2. Create a new portlet of type Faces portlet Receiver
    3. Open the portlet deployment descriptor, open section Event
    definitions, press Add... and specify Event name PublishEvent.
    Leave the default name space and event value type. Open tab
    Portlets, select portlet Sender and open section Support
    Publishing Events and select the event PublishEvent. Select
    portlet Receiver, open section Support Processing Events and
    select the event PublishEvent
    4. Open Sender.jsp. Drag from the Palette the component Input
    and a Button - Command to the .jsp
    5. Create a new class bean.Message with a field message of type
    String and accessor methods for that field
    6. Create a new Faces Managed Bean messageBean for
    bean.MessageBean in request scope. Bind the inputText to the
    field message in bean message.
    7. Code an action for the command above with the following code
        PortletResponseWrapper responseWrapper =
    (PortletResponseWrapper)(getFacesContext().getExternalContext().
    getResponse());
        ActionResponse actionResponse =
    (ActionResponse)(responseWrapper.getPortletResponse());
        String message = getMessageBean().getMessage();
        actionResponse.setEvent('PublishEvent',message);
    8. Create a new class bean.Receive with a field message of type
    String and accessor methods for that field
    9. Create a new Faces Managed Bean receiveBean for
    bean.ReceiveBean in session scope.
    10. Open Receiver.jsp. Add an outputText and bind the outputText
    to the field message in bean receiveBean.
    11. Create a new class portlet.ReceiverPortlet deriving from
    com.ibm.faces.portlet.FacesPortlet and add the following method
    @ProcessEvent(qname = '{http://Event/}PublishEvent')
    public void method(EventRequest request, EventResponse response)
        throws PortletException, java.io.IOException {
        FacesContext facesContext =
    FacesContext.getCurrentInstance();
        Event event = request.getEvent();
        if (event.getName().toString().equals('PublishEvent')) {
            try {
                String message =
    request.getEvent().getValue().toString();
                TestBean bean = (TestBean)
    facesContext.getApplication()
                            .createValueBinding('#{receiveBean}')
                            .getValue(facesContext);
                bean.setMessage(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        facesContext.release();
    }
    12. Open the portlet deployment descriptor and specify as
    portlet class for Receiver the ReceiverPortlet
    13. Add the EAR EventEAR to the Portal server
    14. Open Portal on the page Event, open the Edit Page Layout,
    tab Wires. Select source portlet Sender, sending PublishEvent,
    target page take the default, target portlet Receiver, receiving
    PublishEvent, wire type public, Hit the '+' sign at the end of
    the line to add the Wire and press Done. Once Done, make sure
    that the wire added is listed in the wires tab.
    15. Open the portlet Sender, enter a text and press the button
    to send the JSR286 event to the Receiver portlet
    Result:
    
    The message is NOT shown within the Receiver portlet
    
    Expected result:
    
    The message is shown within the Receiver portlet
    
    Workaround:
    
    None
    

Local fix

Problem summary

  • ****************************************************************
    * USERS AFFECTED:                                              *
    ****************************************************************
    * PROBLEM DESCRIPTION:                                         *
    ****************************************************************
    * RECOMMENDATION:                                              *
    ****************************************************************
    A method annotated with @ProcessEvent within a class
    extending FacesPortlet isn't called if the particular event
    is published.
    

Problem conclusion

  • Fixed by invoking processEvent() of GenericPortlet from the
    portlet bridge.
    
    The fix for this APAR is included in Rational Application
    Developer v7.5.5.5.
    

Temporary fix

Comments

APAR Information

  • APAR number

    PM43205

  • Reported component name

    RATL APP DEV WI

  • Reported component ID

    5724J1901

  • Reported release

    755

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2011-07-07

  • Closed date

    2011-11-03

  • Last modified date

    2011-11-03

  • 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

    RATL APP DEV WI

  • Fixed component ID

    5724J1901

Applicable component levels

  • R755 PSN

       UP

[{"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Product":{"code":"SSRTLW","label":"Rational Application Developer for WebSphere Software"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"7.5.5","Edition":"","Line of Business":{"code":"LOB45","label":"Automation"}}]

Document Information

Modified date:
03 November 2011