Interportlet communication using JSR 168

Hi All
We are using JSR 168 portlets . My requirement is invoke the method of Portlet B on some event of Portlet A.
I need help on the implementation of Interportlet communication using JSR 168
Thanks

Hi,
Go through the below two discussions
Interportlet communication using JSR 168
Re: JSR 168 Portlets -- IPC with Custom Events
Thanks,
Venkat Sarvabatla

Similar Messages

  • We can use JSR-168 JPS portlet upload file,

    We can use JSR-168 JPS portlet upload file,
    here is the source for you referrence:
    upload file can use JSR168 portlet,
    1,CustomizablePortlet.java File
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ResourceBundle;
    import javax.portlet.*;
    import oracle.webdb.utils.SimpleStringBuffer;
    public class CustomizablePortlet extends GenericPortlet {
    private static final String TITLE_KEY = "title";
    protected static final String OK_ACTION = "ok_action";
    protected static final String APPLY_ACTION = "apply_action";
    protected static final PortletMode PREVIEW_MODE = new PortletMode("preview");
    protected static final PortletMode EDIT_DEFAULTS_MODE = new PortletMode("EDIT_DEFAULTS");
    protected static final PortletMode ABOUT_MODE = new PortletMode("ABOUT");
    public CustomizablePortlet() {
    public String getTitle(RenderRequest request) {
    return request.getPreferences().getValue("title", getPortletConfig().getResourceBundle(request.getLocale()).getString("javax.portlet.title"));
    public void doEdit(RenderRequest request, RenderResponse response) throws PortletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.print("<FORM ACTION=\"");
    out.print(getEditFormSubmitURL(request, response));
    out.println("\" METHOD=\"POST\">");
    out.println("<TABLE BORDER=\"0\">");
    out.println("<TR>");
    out.println("<TD WIDTH=\"20%\">");
    out.println("<P CLASS=\"portlet-form-field\" ALIGN=\"RIGHT\">Title:");
    out.println("</TD>");
    out.println("<TD WIDTH=\"80%\">");
    out.print("<INPUT CLASS=\"portlet-form-input-field\" TYPE=\"TEXT\" NAME=\"");
    out.print("title");
    out.print("\" VALUE=\"");
    out.print(getTitle(request));
    out.println("\" SIZE=\"20\">");
    out.println("</TD>");
    out.println("</TR>");
    out.println("<TR>");
    out.println("<TD COLSPAN=\"2\" ALIGN=\"CENTER\">");
    out.print("<INPUT CLASS=\"portlet-form-button\" TYPE=\"SUBMIT\" NAME=\"");
    out.print("ok_action");
    out.print("\" VALUE=\"OK\">");
    out.print("<INPUT CLASS=\"portlet-form-button\" TYPE=\"SUBMIT\" NAME=\"");
    out.print("apply_action");
    out.print("\" VALUE=\"Apply\">");
    out.println("</TD>");
    out.println("</TR>");
    out.println("</TABLE>");
    out.println("</FORM>");
    protected String getEditFormSubmitURL(RenderRequest request, RenderResponse response) {
    return response.createActionURL().toString();
    public void doHelp(RenderRequest request, RenderResponse response) throws PortletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.print("Help for <i><b>");
    out.print(getTitle(request));
    out.println("</b></i>.");
    public void doAbout(RenderRequest request, RenderResponse response) throws PortletException, IOException {
    String aboutHTML = (new SimpleStringBuffer(30)).append("/about_").append(getPortletName()).append(".html").toString();
    PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(aboutHTML);
    response.setContentType("text/html");
    if(rd != null) {
    rd.include(request, response);
    } else {
    PrintWriter out = response.getWriter();
    out.print("<p class=\"portlet-font\">This is the about page for ");
    out.print(getTitle(request));
    out.print(".</p><p class=\"portlet-font\">");
    out.print("To customize the contents of this page, create a file named '");
    out.print(aboutHTML.substring(1));
    out.print("' in the Portlet web application's root directory containing HTML ");
    out.print("to appear here. ");
    out.print("Alternatively, override the <code>CustomizablePortlet</code> ");
    out.println("class's <code>doAbout()</code> method.</p>");
    public void doDispatch(RenderRequest request, RenderResponse response) throws PortletException, IOException {
    WindowState state = request.getWindowState();
    if(!state.equals(WindowState.MINIMIZED)) {
    PortletMode mode = request.getPortletMode();
    if(mode.equals(PREVIEW_MODE))
    doView(request, response);
    else
    if(mode.equals(EDIT_DEFAULTS_MODE))
    doEdit(request, response);
    else
    if(mode.equals(ABOUT_MODE))
    doAbout(request, response);
    else
    super.doDispatch(request, response);
    } else {
    super.doDispatch(request, response);
    public void processAction(ActionRequest request, ActionResponse actionResponse) throws PortletException, IOException {
    String newTitle = request.getParameter("title");
    PortletPreferences prefs = request.getPreferences();
    prefs.setValue("title", newTitle);
    prefs.store();
    if(request.getParameter("ok_action") != null) {
    actionResponse.setPortletMode(PortletMode.VIEW);
    actionResponse.setWindowState(WindowState.NORMAL);
    2,FileUploadPortlet.java file
    import java.io.*;
    import javax.activation.DataHandler;
    import javax.mail.MessagingException;
    import javax.mail.internet.MimeBodyPart;
    import javax.portlet.*;
    import oracle.portal.portlet.sample.CustomizablePortlet;
    public class FileUploadPortlet extends CustomizablePortlet
    private static final String FILE_PARAM = "file";
    private static final String SUBMIT_PARAM = "submit";
    private static final String DEFAULT_CHARSET = "ISO-8859-1";
    private static final String uploadRoot = "";
    public FileUploadPortlet()
    public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.print("<form action=\"");
    out.print(response.createActionURL().toString());
    out.println("\" enctype=\"multipart/form-data\" method=\"post\">");
    out.println("<center><table border=\"0\">");
    out.println("<tr>");
    out.print("<td class=\"portlet-form-field\" align=\"right\">");
    out.print("Please browse to an HTML file:");
    out.println("</td>");
    out.print("<td>");
    out.print("<input class=\"portlet-form-input-field\" type=\"file\" name=\"");
    out.print("file");
    out.print("\">");
    out.println("</td>");
    out.println("</tr>");
    out.println("<tr>");
    out.println("<td colspan=\"2\" align=\"center\">");
    out.print("<input type=\"submit\" class=\"portlet-form-button\" name=\"");
    out.print("submit");
    out.print("\" value=\"Display\">");
    out.println("</td>");
    out.println("</tr>");
    out.println("</table>");
    out.println("</form>");
    String lastFile = request.getPreferences().getValue("file", null);
    if(lastFile != null) {
    out.println("<hr width=\"100%\"><br>");
    out.print(lastFile);
    public void processAction(ActionRequest request, ActionResponse actionResponse) throws PortletException, IOException {
    FormDataParser parsedRequest = new FormDataParser(request);
    MimeBodyPart mbp = parsedRequest.getMimeBodyPart("file");
    if(mbp == null)
    super.processAction(request, actionResponse);
    else
    try {
    String fileName= mbp.getFileName();
    int splash = fileName.lastIndexOf("\\");
    if(splash != -1)
    fileName = fileName.substring(splash +1, fileName.length()).trim();
    String contentType = mbp.getContentType();
    String charSet = getCharsetFromContentType(contentType);
    int sepIndex = contentType.indexOf(';');
    if(sepIndex != -1)
    contentType = contentType.substring(0, sepIndex).trim();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    mbp.getDataHandler().writeTo(bos);
    bos.close();
    String content = new String(bos.toByteArray(), charSet);
    FileOutputStream fos = new FileOutputStream(fileName);
    fos.write(bos.toByteArray());
    fos.close();
    PortletPreferences prefs = request.getPreferences();
    prefs.setValue("file", fileName + "upload ok");
    prefs.store();
    catch(MessagingException me) {
    throw new PortletException(me);
    public static String getCharsetFromContentType(String contentType) {
    int lastPos;
    if((lastPos = contentType.indexOf(';')) == -1)
    return "ISO-8859-1";
    lastPos++;
    String lowerContentType = contentType.toLowerCase();
    int nextPos;
    do {
    nextPos = lowerContentType.indexOf(';', lastPos);
    String param;
    if(nextPos == -1)
    param = lowerContentType.substring(lastPos).trim();
    else
    param = lowerContentType.substring(lastPos, nextPos).trim();
    if(param.startsWith("charset=") && param.length() > 8)
    return param.substring(8);
    lastPos = nextPos + 1;
    } while(nextPos != -1);
    return "ISO-8859-1";
    3,FormDataParser.java file
    import java.io.*;
    import java.util.*;
    import javax.activation.DataSource;
    import javax.mail.MessagingException;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMultipart;
    import javax.portlet.ActionRequest;
    import javax.portlet.PortletException;
    public class FormDataParser {
    private static final String MULTIPART_PREFIX = "multipart/";
    private static final String MULTIPART_FORM_DATA = "multipart/form-data";
    private static final String PLAIN_TEXT = "text/plain";
    private ActionRequest mWrappedRequest;
    private Map mParams;
    private Map mBodyParts;
    private boolean mIsInitialized;
    private boolean mHasMultipart;
    public FormDataParser(ActionRequest request) {
    mWrappedRequest = request;
    public String getParameter(String name) throws PortletException {
    String value = mWrappedRequest.getParameter(name);
    if(value != null)
    return value;
    initParameters();
    if(!mHasMultipart)
    return null;
    List paramList = (List)mParams.get(name);
    if(paramList != null)
    return (String)paramList.get(0);
    else
    return null;
    public String[] getParameterValues(String name) throws PortletException {
    String values[] = mWrappedRequest.getParameterValues(name);
    if(!mHasMultipart)
    return values;
    initParameters();
    List valueList = (List)mParams.get(name);
    if(valueList == null)
    return values;
    int size = valueList.size();
    if(values != null) {
    List newValueList = new ArrayList(values.length + size);
    newValueList.addAll(Arrays.asList(values));
    newValueList.addAll(valueList);
    valueList = newValueList;
    values = new String[size];
    valueList.toArray(values);
    return values;
    public MimeBodyPart getMimeBodyPart(String name) throws PortletException {
    initParameters();
    if(!mHasMultipart) {
    return null;
    } else {
    List parts = (List)mBodyParts.get(name);
    return parts != null ? (MimeBodyPart)parts.get(0) : null;
    public MimeBodyPart[] getMimeBodyParts(String name) throws PortletException {
    initParameters();
    if(!mHasMultipart)
    return null;
    List parts = (List)mBodyParts.get(name);
    if(parts == null) {
    return null;
    } else {
    MimeBodyPart mimeBodyParts[] = new MimeBodyPart[parts.size()];
    parts.toArray(mimeBodyParts);
    return mimeBodyParts;
    private void initParameters() throws PortletException {
    if(mIsInitialized)
    return;
    String contentType = mWrappedRequest.getContentType();
    if(contentType == null) {
    mIsInitialized = true;
    return;
    int sepIndex = contentType.indexOf(';');
    if(sepIndex != -1)
    contentType = contentType.substring(0, sepIndex).trim();
    if(contentType.equalsIgnoreCase("multipart/form-data")) {
    mParams = new HashMap(20);
    mBodyParts = new HashMap(20);
    DataSource ds = new DataSource() {
    public InputStream getInputStream() throws IOException {
    return mWrappedRequest.getPortletInputStream();
    public OutputStream getOutputStream() throws IOException {
    throw new IOException("OutputStream not available");
    public String getContentType() {
    return mWrappedRequest.getContentType();
    public String getName() {
    return getClass().getName();
    try {
    MimeMultipart multipartMessage = new MimeMultipart(ds);
    parseMultiPart(multipartMessage, null);
    catch(MessagingException me) {
    throw new PortletException(me);
    catch(IOException ioe) {
    throw new PortletException(ioe);
    mHasMultipart = true;
    mIsInitialized = true;
    private void parseMultiPart(MimeMultipart multipartMessage, String parentFieldName) throws MessagingException, IOException {
    int partCount = multipartMessage.getCount();
    for(int i = 0; i < partCount; i++) {
    javax.mail.BodyPart part = multipartMessage.getBodyPart(i);
    if(part instanceof MimeBodyPart) {
    MimeBodyPart mimePart = (MimeBodyPart)part;
    String disps[] = mimePart.getHeader("Content-Disposition");
    if(disps != null && disps.length != 0) {
    String disp = disps[0];
    String lcDisp = disp.toLowerCase();
    int nameStart;
    int nameEnd;
    if((nameStart = lcDisp.indexOf("name=\"")) != -1 && (nameEnd = lcDisp.indexOf("\"", nameStart + 6)) != -1)
    parentFieldName = disp.substring(nameStart + 6, nameEnd);
    if(parentFieldName != null)
    if(mimePart.getContentType().toLowerCase().startsWith("multipart/")) {
    Object content = mimePart.getContent();
    if(content instanceof MimeMultipart)
    parseMultiPart((MimeMultipart)content, parentFieldName);
    } else
    if((nameStart = lcDisp.indexOf("filename=\"")) != -1 && (nameEnd = lcDisp.indexOf("\"", nameStart + 10)) != -1) {
    List values = (List)mBodyParts.get(parentFieldName);
    if(values == null) {
    values = new ArrayList(1);
    mBodyParts.put(parentFieldName, values);
    values.add(mimePart);
    } else
    if(mimePart.getContentType().toLowerCase().startsWith("text/plain")) {
    Object content = mimePart.getContent();
    if(content instanceof String) {
    List values = (List)mParams.get(parentFieldName);
    if(values == null) {
    values = new ArrayList(1);
    mParams.put(parentFieldName, values);
    values.add((String)content);
    4.web.xml file
    <?xml version = '1.0' encoding = 'ISO-8859-1'?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
    <display-name>hanhuiwen OracleSamplePortlets</display-name>
    <description>hanhuiwen Oracle Sample Portlet Application</description>
    <servlet>
    <servlet-name>portletdeploy</servlet-name>
    <servlet-class>oracle.webdb.wsrp.server.deploy.PortletDeployServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
    <servlet-name>portletjaxrpc</servlet-name>
    <servlet-class>com.sun.xml.rpc.server.http.JAXRPCServlet</servlet-class>
    <init-param>
    <param-name>configuration.file</param-name>
    <param-value>/WEB-INF/WSRPService_Config.properties</param-value>
    </init-param>
    </servlet>
    <servlet>
    <servlet-name>portletresource</servlet-name>
    <servlet-class>oracle.webdb.wsrp.server.ResourceServlet</servlet-class>
    </servlet>
    <servlet>
    <servlet-name>ChartServlet</servlet-name>
    <display-name>Chart Servlet</display-name>
    <description>Demo image-generating servlet</description>
    <servlet-class>oracle.portal.portlet.sample.chart.ChartServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
    <servlet-name>uix</servlet-name>
    <servlet-class>oracle.cabo.servlet.UIXServlet</servlet-class>
    <init-param>
    <param-name>oracle.cabo.servlet.pageBroker</param-name>
    <param-value>oracle.cabo.servlet.xml.UIXPageBroker</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>ChartServlet</servlet-name>
    <url-pattern>/chart*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>portletjaxrpc</servlet-name>
    <url-pattern>/portlets*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>portletresource</servlet-name>
    <url-pattern>/portletresource*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>uix</servlet-name>
    <url-pattern>*.uix</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>uix</servlet-name>
    <url-pattern>/uix/*</url-pattern>
    </servlet-mapping>
    <session-config>
    <session-timeout>60</session-timeout>
    </session-config>
    <welcome-file-list>
    <welcome-file>index.uix</welcome-file>
    </welcome-file-list>
    <!--
    LogLevel controls the amount of information logged. There are 7 log levels:
    0 - logging disabled
    1 - configuration
    2 - severe error
    3 - warning
    4 - throwing exception
    5 - performance
    6 - information
    7 - debug
    The oracle.portal.log.Logger interface defines methods that map to these 7
    log levels. However, there are also 2 methods that do not map to log
    levels. These methods are included for backwards compatibility and data
    logged using these methods will always be logged regardless of the log level.
    -->
    <env-entry>
    <env-entry-name>oracle/portal/log/logLevel</env-entry-name>
    <env-entry-type>java.lang.Integer</env-entry-type>
    <env-entry-value>7</env-entry-value>
    </env-entry>
    </web-app>
    5.portlet.xml
    <?xml version = '1.0' encoding = 'UTF-8'?>
    <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
    <portlet>
    <description xml:lang="en">A portlet that demonstrates the file upload features of the Java Portlet Specification.</description>
    <portlet-name>FileUpload</portlet-name>
    <portlet-class>FileUploadPortlet</portlet-class>
    <expiration-cache>0</expiration-cache>
    <supports>
    <mime-type>text/html</mime-type>
    <portlet-mode>help</portlet-mode>
    <portlet-mode>about</portlet-mode>
    <portlet-mode>edit_defaults</portlet-mode>
    </supports>
    <supported-locale>en</supported-locale>
    <portlet-info>
    <title>File Upload Portlet</title>
    <short-title>File Upload</short-title>
    <keywords>File,Upload, Portlet</keywords>
    </portlet-info>
    </portlet>
    <custom-portlet-mode>
    <description xml:lang="en">This mode should be used by the portlet to display information on the portlet's purpose, origin, version, etc.</description>
    <portlet-mode>about</portlet-mode>
    </custom-portlet-mode>
    <custom-portlet-mode>
    <description xml:lang="en">This mode signifies that the portlet should render a screen to set the default values for the modifiable preferences that are typically changed in the EDIT screen. Calling this mode requires that the user must have administrator rights.</description>
    <portlet-mode>edit_defaults</portlet-mode>
    </custom-portlet-mode>
    <custom-portlet-mode>
    <description xml:lang="en">This mode should be used by the portlet to render output without the need of having back-end connections or user specific data available.</description>
    <portlet-mode>preview</portlet-mode>
    </custom-portlet-mode>
    <user-attribute>
    <name>user.name.given</name>
    </user-attribute>
    <user-attribute>
    <name>user.name.family</name>
    </user-attribute>
    <user-attribute>
    <name>user.name.middle</name>
    </user-attribute>
    <user-attribute>
    <name>user.name.nickname</name>
    </user-attribute>
    <user-attribute>
    <name>user.bdate</name>
    </user-attribute>
    <user-attribute>
    <name>user.business-info.online.email</name>
    </user-attribute>
    </portlet-app>

    Hello i had exactly the same error, but not with file upload.
    I'm sure you have in your application lib directory to jars which aren't compatible to each other.
    And the problem occured between my myfaces and tomahawk jars .
    See this page:
    http://wiki.apache.org/myfaces/CompatibilityMatrix
    It tells you which myfaces and tomahawk jars you can use together.
    Hope it can help.
    bye

  • Remote Inter Portlet Communication for JSR 168

    Hi All,
    We are stuck in a big problem using JSR 168 as remote portlets. We will be relieved if someone can suggest few ideas on this. I will provide the scenario which we are trying now.
    We have two portlets namely portlet A and portlet B which are Java(JSR 168) type portlets. These two portlets are offered as remote and they reside in the producer application. We have consumed these two portlets in our consumer application.
    The portlet A is triggering an event and portlet B is listening to the event triggered by portlet A. Currently we are trying to implement this functionality using Ajax. We tried to use customEventUrl tag in our jsp belonging to portlet A and we finally figured out that customEventUrl will not work in Remote portlets. We are not sure as how to pass the information from remote portlet A to remote portlet B. Please let us know your thoughts about this as whether the implementation is really possible when using Remote portlets.
    IMPORTANT NOTE: The event handling and the configuration code that we have made in the above scenario is working perfectly for non-remote java portlets. The problem is occurring only when we consume them in the consumer application.
    Thanks
    Vijay

    Hello Ashwin,
    What version of WebLogic Portal are you using? And is this the same for both the consumer and producer?
    If you are using WLP 10.3.2 I would highly recommend using JSR286 portlets (the next version of the Java Portlet (JSR168) specification) and the JSR286-standard eventing. The JSR286 eventing model is actually much cleaner and easier to understand than the WLP-proprietary support for events in JSR168 portlets.
    However, if you are using a version of WLP prior to 10.3.2 and can't upgrade, JSR168-style events are your only choice. I can give you examples, but they all look very similar to the examples in the online documentation.
    When events work between portlets locally, but not over WSRP, the usual problems are:
    - There is one or more of "onlyIfDisplayed", "sourceDefinitionLabels" or "sourceInstanceLabels" attributes declared on the handle*Event element in the .portlet file. These attributes restrict when the portlet should receive an event, and they usually don't work the way you think when running over WSRP. It is best to not use these attributes for portlets which are going to be used over WSRP.
    - A payload is being sent with the event which is not actually serializable. If serialization of the event payload (which is required for versions of WLP prior to 10.3.2 for WSRP) fails, the event will not be delivered to the portlet.
    - The producer may be configured to not accept events. Check your producer's WEB-INF/wsrp-producer-config.xml file; the "service-config" element should either not have an "offer-extensions" attribute, or this attribute's value should be "true".
    - The events may be getting sent during a portlet lifecycle other than processAction or handleEvent. There is no way for WSRP to handle events which have been sent during preRender or render, so it simply doesn't work.
    - In the case of JSR168 portlets, if you have a backing file on the portlet (in addition to the portlet implementation as well), that may not work in some circumstances over WSRP. It is best to have the event handlers be in the portlet implementation class and avoid the use of backing files for JSR168 portlets.
    If none of those things help you, my suggestion would be to post a sample .portlet file for one of the portlets that is supposed to be receiving the event, as well as the method signature in that portlet's implementation class that is supposed to be receiving the event, and the code which is sending the event that is supposed to be received.
    Kevin

  • How to do interportlet communication in JSR 286 Portlet

    HI,
    We are using webcentre portlet producer appliaction  and creating JSr 286 portlets. Using Jdeveloper 11.1.8.1 .
    Now we have two portlets one is search and another is search result.
    After the seacrh is clicked DAO should get called and search result should get refreshed with the search result.
    PLease let me know how can we do this ?
    Thanx in Advance.

    Hi ,
    You can refer below links to achieve interportlet communication.
    Inter Portlet Communication with ADF portlets | Yannick Ongena's WebCenter And Enterprise 2.0 Blog
    https://www.youtube.com/watch?v=NI2Zy6gRfF4
    Thanks

  • Inter Portlet Communication for JSR 168 Portlets

    Hi,
    I want to invoke one JSR168 Portlet from another and also pass parameters between the two.I did the same using Events for Oracle Portlets.
    I would like to know how to do the same when I build JSR 168 Portlets.
    Also Pls let me know where I can get documentation which describes all the possible options that I can try out on JSR168 Portlets
    Regards
    Yash

    Hello Yash,
    The current version of the specifications does not support Parameter and Events that allow you to create portlet 2 portlet communication using OracleAS Portal framework.
    If the reusability of the parameter is not a major requirement of your application you can simply use URL parameters and this will authorize you implement that.
    Regards
    Tugdual Grall

  • Integration between portlets using JSR 168

    I've developed 3 portlets but I want them talking with each other, in a way that is JSR 168 compliant.
    For example, I have a search box portlet, where the user can only type search expressions, a search result portlet, where the user will see search results, and a search summary portlet, where the user will see statistics about search.
    First question: how can I send data from one portlet to another? Is HttpSession a safe place to share data between portlets? Can I trust that all containers will create a single HttpSession per user?
    Second question: how can one portlet force refresh of another, or even hide or show up another portlet?

    Well it is a very smart question..
    To be more precise i don't think it is been properly answered with
    JSR 168 specification.
    However,there few best practises followed in order to achieve it.
    The idea of using HttpSession (PortletSession.getHttpSession() with Usage of AJAX) as you said it certainly one of the things which evryone would think.
    http://www.ibm.com/developerworks/websphere/library/techarticles/0604_scott/0604_scott.html
    http://www.doc.ic.ac.uk/~mo197/portlets/portlet_messaging/
    http://wiki.java.net/bin/view/Portlet/JSR168FAQ(checkout the last part of the document)
    http://www.michaelgilfix.com/techblog/2007/01/27/ajax-and-portlets
    http://www.theserverside.com/news/thread.tss?thread_id=35385
    http://blogs.jboss.com/blog/jviet/2005/07/14/The_recurring_interportlet_communication_dilemna.txt
    http://portlets.blogspot.com/2005/07/inter-portlet-communication-library.html
    http://docs.sun.com/app/docs/doc/819-5942/6n807tpc2?a=view
    http://www.oracle.com/technology/products/ias/portal/pdf/oow06_S281756_jsr168ajax.pdf
    http://docs.jboss.org/jbportal/v2.2/reference-guide/en/html/ipc.html#d0e1308
    However,SUN is trying to revise it in their next specification JSR 286.
    http://jcp.org/en/jsr/detail?id=286,
    http://blogs.sun.com/nav/entry/understanding_portlet_2_0_jsr1,
    http://apachecon.com/2006/US/presentations/FR8/FR8-JSR-286-updated.pdf
    Second Question:how can one portlet force refresh >of another, or even hide or show up another portlet?As discussed earlier Usage of AJAX / (And storing Common Credentials in a Bean which scoped to HttpSession) in the dependent portlet would be quite handy in the above discussed case.
    Hope this might help :)
    REGARDS,
    RaHuL

  • Is it possiable to use "ALI SCRIPTING FRAMEWORK API " in JSR 168 Portlets?

    Hi,
    Is it possiable to use "ALI SCRIPTING FRAMEWORK API " in JSR 168 Portlets.
    With Regards
    Dheeraj Sai

    If you want to use (let say it's possible) "ALI SCRIPTING FRAMEWORK API" in JSR 168 then these porlets are not "JSR-168" compatible anymore. So you automatically lost the main benefit of JSR-168 portlet - works over different portal vendors.
    I guess if you have decided use JSR-168 you did this for reasons. Then stay this way and don't use any proprietary technologies.
    By the way, this topic may help:
    http://forums.bea.com/bea/message.jspa?messageID=500025455&tstart=0
    Edited by Bryazgin at 05/18/2007 6:36 AM

  • Interportlet Communication

    Hi,
    Have a query with regards to the following.
    Appreciate if anyone could advise or correct my understanding:
    For the current project implementation, there are the following portlets from various vendors, using various implementations:
    1) A main portal, with a login portlet implemented using BEA workshop (BeeHive Apache NETUI)
    2) a shopping portlet (product A) implemented using MVC
    3) a checkout portlet (product B) implemented using JSR 168
    A typical user process will be to login, shop and checkout as in the above order.
    The 3 portlets above will need to communicate with each other.
    (a) Interportlet communication
    BEA allows these methods:
    (i) event handlers
    (ii) backing files
    (iii) refresh?
    Question 1: Are the above methods vendor-specific to BEA only?
    Note: Assume all 3 portlets are deployed locally, i.e. with not as remote portlets.
    Question 2: If yes, how can the login portlet "talk" to the other 2 portlets?
    Given that checkout portlet is implemented using JSR 168, does this mean portlet session is the only way of sharing information?
    Question 3: Can event handlers be used for IPC for this scenario, since its the most recommended way by BEA to implement this.
    Understand event handlers are defined in .portlet file. Is this correct?
    Question 4: Can both shopping and checkout portlet be "imported" to Workshop for development?
    Will both of them have .portlet file? If yes, then I would think event handler method can be used?
    Appreciate any advice or feedback.
    Thanks.

    BEA Weblogic Portal 9/10 i m using....
    I have wriiten the code to hide the page using PageBackingContext....
    PageBackingContext pbc = PageBackingContext.getPageBackingContext(getRequest());
    pbc.setvisible(false);

  • Java Portlet (JSR 168) development with Portal

    Hello,
    We have been trying to dive back into Portal development lately. The release of 9.0.4 with support for standards-based portlets has convinced us to begin looking at 9iAS Portal as a practical portal product. We have a development environment setup with a workin 9.0.4 portal.
    Digging through the available docs on the portal studio site, I have come across a couple documents alluding to the installation of a portlet-container. Now, I have already downloaded the JSR 168 framework files. It seems that a good portion of this 'portlet container' consists of these files.
    The problem is that the documentation that is available is nothing more than a step by step set of instructions for setting up an OC4J instance with this 'portlet container', configuring an Oracle database for portlet customizations, and deploying a sample ear into the OC4J instance.
    This does nothing for me.
    What I want is documentation that indicates the requirements necessary to make a JSR-168 compliant portlet (even a 'hello world') exposed through portal with the least amount of effort, and with no references to proprietary tools. I would like to see instructions that are tailored towards a generic J2EE provider, not an OC4J one. I already have a very functional set of tools that should be able to accomodate a JSR-168 producer. We have had many problems with OC4J leading us to try to avoid it at all costs.
    Any ideas?
    Thanks!
    -Sean

    Hello
    I am probably not clear.
    In the OracleAS Portal architecture Java portlet are remote from the portal middle tier.
    In the non standard world (JPDK Portlet), the Portal Middlet tier use SOAP over HTTP to call the portlets.
    In the Standard world (JSR-168), the Portal Middle Tier will use WSRP (Web Service Remote Portlet) to call the portlets. When you use the Oracle JSR-168 container inside OC4J, these portlets are automatically accessible over remotely using WSRP.
    So, as you can see the Portal Middle Tier needs to support WSRP to be able to use JSR-168 portlet. And OracleAS 10g 904 does not currently support WSRP registration. It is why we have the "OracleAS Portal Verification Service for WSRP", to allow you to test your portlet.
    To be able to use JSR-168 (with WSRP) portlet on you internal Portal you'll have to install the OracleAS Portal Standard Developer Preview that will be available soon.
    Hope that clarify my previous statements.
    Regards
    Tugdual Grall

  • JSR 168 with event handling

    Hi All,
    Can you please give me the samples and documentation for how to handle events in JSR 168 portlets.
    Thanks
    Manu...

    see
    IPC using JSR 168 in Weblogic Portal

  • JSR 168 Portlets with JSF Content

    Is there any news on the possibility of achieving this.
    Should I go ahead and do it myself using MyFaces and the Apache Portals JSF Bridge?  (or try and leverage the WebSphere JSF tooling using the Apache Portals JSF Bridge)?   Or use the Sun JSF-Portlet Bridge?
    Thanks,
    Don

    Don,There is a JSR-168 / JSF portlet bridge that I tested on our portal a few months ago that worked pretty well. It required a lot of changes to the faces-config.xml file and the addition of a bridge jar. I think it also had some drawbacks in regards to the use of sub-views in a JSF page.If you are not tied to using JSR-168, a better solution might be the new JSF filter, which is similar to what we do with .NET Web controls. It allows JSF applications to run as portlets and refreshes the portlet using in-place-refresh (AJAX). This filter is simple to set up, well documented, and can be found at: http://portal.plumtree.com/portal/server.pt?space=CommunityPage&cached=true&parentname=CommunityPage&parentid=0&in_hi_userid=63776&control=SetCommunity&CommunityID=2758&PageID=5913under the name "Java Portlet Tools".Let me know which solution you are interested in. The JSF / JSR-168 bridge is available from Sun as development source code but you will probably want to use some of the helper classes that I wrote for it. These classes are not publically available, but I can send you a jar if that's what you need.Andy
    ------- Don Brady wrote on 6/2/05 9:11 AM -------Is there any news on the possibility of achieving this.Should I go ahead and do it myself using MyFaces and the Apache Portals JSF Bridge? (or try and leverage the WebSphere JSF tooling using the Apache Portals JSF Bridge)? Or use the Sun JSF-Portlet Bridge?Thanks,Don

  • JSR-168 vs Page Flow question

    Hi,
    I i use JSR-168 to do my Portlets instead of page flow, which functionnality/features
    will i loose ?
    Thanks

    Two main features
    * Managing flow: WLW can help manage flow for pageflows, but with JSR168
    portlets, you need to create the flow programmatically.
    * Databinding: Pageflows support advanced databinding features, and
    these features are not part of the spec defining JSR168 portlets.
    Subbu
    Carl Samson said the following on 12/08/2003 07:12 AM:
    Hi,
    I i use JSR-168 to do my Portlets instead of page flow, which functionnality/features
    will i loose ?
    Thanks

  • JSR 168 Under WebSphere?

    If we develop portlets using JSR 168/ WSRP for Plumtree using WebSphere Studio and WebSphere (rather than WebLogic), should they work?
    If there were problems that required a Plumtree fix, would such a fix be provided under normal support?
    Thanks.

    If we develop portlets using JSR 168/ WSRP for Plumtree using WebSphere Studio and WebSphere (rather than WebLogic), should they work?
    If there were problems that required a Plumtree fix, would such a fix be provided under normal support?
    Thanks.

  • Deploy JSR 168 on oracle application portal 10.1.4

    We have Oracle Application Portal 10.1.4 and have been deploying Oracle PDK portlet on it.
    Now we decide to standardize things and use JSR 168 portlets and follow some framework.
    As a first step, I developed one JSR 168 in jdeveloper and deployed on a OC4J standalone and then register this on actual portal server through WSRP.
    Registration was successful, but the JSR 168 portlet does not work perfectly as it couldn't load/locate some resources (javascript file and image file). I even tried URL rewriting, but doesn't work!
    I then deployed the jsr168 portlet directly to oracle portal AS. the deployment was successful but I was unable to get the WSDL in the browser. when I try to access the WSDL for example http://myserver.com/application_name/portlets?WSDL it prompts me with 'resource not available'.
    Can someone put some light on this issue.
    thanks in advance.
    Best Regards
    Edited by: user9515104 on Nov 30, 2010 8:10 PM

    Make sure that you have all the required patches installed if you want to use JSR-168 portlets in the Portal container. Check Note 335911.1 - Master Note for OracleAS Portal PDK / WSRP Patches
    Thanks,
    EJ

  • JSR 168 API question

    Hi,
    How can i forward the request to another "Page" using JSR 168 ?
    Where can i find JSR-168 code examples other than the one shipped with JSR168-Struts
    bea package ?
    Thanks

    Carl,
    The portlet API does not support the use case you're looking for. The
    API has no notion of pages.
    WebLogic portlet container, however, does support this use case. Try
    using render:pageUrl as in the following example
    Click ">here</a> to to goto
    page X.</p>
    where pageX is the definition label of that page.
    Subbu
    Carl Samson said the following on 12/08/2003 08:15 AM:
    Hi,
    How can i forward the request to another "Page" using JSR 168 ?
    Where can i find JSR-168 code examples other than the one shipped with JSR168-Struts
    bea package ?
    Thanks

Maybe you are looking for

  • Where is sort by release date in itunes store?

    Taking this feature away makes it VERY difficult to find what you're looking for in the store now.  For example, if you search for GLEE, and filter media by type 'music' there are hundreds of songs.  I can't figure out how they are sorted (if at all.

  • Trying to update iphone 4 and am missing driver software, help?

    I cannot figure out how to update or reinstall the driver software for my phone.  it asks for the disk and i do not have the disk nor can the program find it online.  can anyone help?

  • How do i verify i have sufficient privileges to start system services?

    How do I verify I have sufficient privileges to start system services?  This comes up as an error when trying to install the newest iTunes version.  It says Service 'Apple Mobile Device' (Apple Mobile Device) failed to start. Verify that you have suf

  • Reg. Output tax calcultion in purchase order.

    Dear Experts I have configured VAT (Tax code,jurisdiction code,FV11 entry) but it is not calculated with total price. pls help me. I have configured Outpur tax. Thanks Rajakumar.k

  • Comparing focus of new iMac's internal iSight video

    I have a new iMac. When I view iSight's live feed in, say, Photo Booth or iMovie, it seems like the focus is not very sharp. I've tried the suggestions in Apple's tech note on iSight. Here are a few shots (posted to Picasa) I took. This is with artif