This section provides the location details, Installation information, and code examples of IPC sample portlets.
The IPC sample portlets are located at /opt/SUNWportal/samples/ipc. The portlet samples in ipc directory are divided into ipc1 and ipc2 sub-directories. This is to demonstrate eventing between portlets belonging to different web application and those belonging to the same web application. The interaction between the IPC Portlet samples is as follows:
searchportlet (ipc2) —> listportlet (ipc1)
priceportlet (ipc1) —> considerationportlet (ipc1)
priceportlet (ipc1) —> decisionportlet (ipc2)
Source code for the following samples is located at the /opt/SUNWportal/samples/ipc/ipc1/src directory.
considerationportlet
listportlet
Source code for the following samples is located at the /opt/SUNWportal/samples/ipc/ipc2/src directory.
decisionportlet
priceportlet
searchportlet
JSP files for the portlets are located at:
/opt/SUNWportal/samples/ipc/ipc1/<portletname>
/opt/SUNWportal/samples/ipc/ipc2/<portletname>
Web container deployment description files are located at:
/opt/SUNWportal/samples/ipc/ipc1/WEB-INF
/opt/SUNWportal/samples/ipc/ipc2/WEB-INF
The information on overview of portlets and how to install them are provided in Chapter 11, Overview of the Portlets.
This section provides code examples for:
Generator Portlet (ipc2)
Listener Portlet (ipc2)
sun-portlet.xml of ipc2.war
sun-portlet.xml of ipc1.war
package com.sun.portal.portlet.ipc2; import com.sun.portal.portletappengine.ipc.EventRequest; import com.sun.portal.portletappengine.ipc.EventResponse; import com.sun.portal.portletappengine.ipc.PortletEvent; import com.sun.portal.portletappengine.ipc.PortletEventBroker; import com.sun.portal.portletappengine.ipc.PortletEventListener; ... /** * The PricePortlet participates in the InterPortletCommunication. * This generates the event that is consumed by two portlets * (a)ConsiderationPortlet which is in a different web application * (b)DecisionPortlet which is in the same web application * This also consumes the event generated by the DecisionPortlet. */ public class PricePortlet extends GenericPortlet implements PortletEventListener { ... public void processAction(ActionRequest request, ActionResponse actionResponse) throws PortletException, java.io.IOException { PortletEventBroker peb = new PortletEventBroker(request); try { PortletEvent pe = peb.createEvent("priceChanged"); String price = null; Object obj = request.getParameter("price"); if (obj != null) { price = (String) obj; } else { price = "9999"; } pe.setEventData(price); pe.fire(); PortletEvent pe2 = peb.createEvent("priceChanged2"); pe2.setEventData("700"); pe2.fire(); PortletEvent pe3 = peb.createEvent("priceChanged3"); pe3.setEventData("800"); pe3.fire(); } catch (Exception e) { // Do nothing! } actionResponse.setRenderParameters(request.getParameterMap()); } ... }
package com.sun.portal.portlet.ipc1; import com.sun.portal.portletappengine.ipc.EventRequest; import com.sun.portal.portletappengine.ipc.EventResponse; import com.sun.portal.portletappengine.ipc.PortletEventListener; ... /** * The ConsiderationPortlet participates in the InterPortletCommunication. * This consumes the event generated by the PricePortlet which is in a * different web application. */ public class ConsiderationPortlet extends GenericPortlet{ implements PortletEventListener ... public void handleEvent(EventRequest ereq, EventResponse eres) { String data = (String) ereq.getEventData(); eres.setRenderParameter("price", data); } ... }
package com.sun.portal.portlet.ipc2; import com.sun.portal.portletappengine.ipc.EventNotRegisteredException; import com.sun.portal.portletappengine.ipc.EventRequest; import com.sun.portal.portletappengine.ipc.EventResponse; import com.sun.portal.portletappengine.ipc.PortletEvent; import com.sun.portal.portletappengine.ipc.PortletEventBroker; import com.sun.portal.portletappengine.ipc.PortletEventListener; ... /** * The DecisionPortlet participates in the InterPortletCommunication. * This consumes the event generated by the PricePortlet which is in the * same web application. * This also generates the event that is consumed by the PricePortlet. */ public class DecisionPortlet extends GenericPortlet{ implements PortletEventListener ... public void handleEvent(EventRequest ereq, EventResponse eres) { String name = ereq.getEventName(); if (name.equalsIgnoreCase("priceChanged")) { String data = (String) ereq.getEventData(); int price_data = Integer.parseInt(data); PortletEventBroker peb = new PortletEventBroker(ereq); if (price_data > 500) { try { PortletEvent pe = peb.createEvent("highPriceEvent"); pe.setEventData(data); pe.fire(); } catch (EventNotRegisteredException e) { e.printStackTrace(); } } else { try { PortletEvent pe = peb.createEvent("lowPriceEvent"); pe.setEventData(data); pe.fire(); } catch (EventNotRegisteredException e) { e.printStackTrace(); } } eres.setRenderParameter("price", data); } else if (name.equalsIgnoreCase("priceChanged2")) { eres.setRenderParameter("price2", name); } else if (name.equalsIgnoreCase("priceChanged3")) { eres.setRenderParameter("price3", name); } } ... }
<portlet> <portlet-name>decisionportlet</portlet-name> <events> <generates-event>decisionMade</generates-event> <generates-event>highPriceEvent</generates-event> <generates-event>lowPriceEvent</generates-event> <consumes-event>priceChanged</consumes-event> <consumes-event>priceChanged</consumes-event> <consumes-event>priceChanged</consumes-event> </events> </portlet> <portlet> <portlet-name>priceportlet</portlet-name> <events> <generates-event>priceChanged</generates-event> <generates-event>priceChanged</generates-event> <generates-event>priceChanged</generates-event> <consumes-event>highPriceEvent</consumes-event> <consumes-event>lowPriceEvent</consumes-event> </events> </portlet>
<portlet> <portlet-name>considerationportlet</portlet-name> <events> <consumes-event>priceChanged</consumes-event> </events> </portlet>