Developing portlets for the Websphere Portal Server

When creating portlets for the Websphere Portal Server (aka WPS) you have the choice between different frameworks

  • JSF (2.0)

  • Spring Portlet MVC

  • Vaadin 6 / 7

While using JSF seems to be a bit outdated, because WPS just supports an old JSF Version (MyFaces 2.0.2) Spring Portlet MVC is a good and valid options for developing portlets.

On this page I will try to collect all information to develop Vaadin portlets in a fast and easy to use way. I will also handle topics like using CDI and the navigator in a portal environment as well as some architectural ideas like using the MVP pattern for a portlet project. As an example portlet I will use a simple master / detail portlet just like the Vaadin address book application. I have developed all code examples on this wiki pages with the current Vaadin version (7.4.2 as I am writing this) and tested the portlets on WPS 8.0 and 8.5.

I use Maven for dependency management and SLF4J for logging. You can download the small zipped project in the attachments section. Please, feel free to leave comments and / or questions on the bottom of the page.

A simple Portlet

Lets start with a "Click Me" (aka "Hello World") Vaading portlet.

The UI class is identical to servlet development (create a button with a click listener and show a notification when clicking the button). The interesting part is the configuration of the portlet.xml file.

Portlet.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" id="com.gisag.vaadin.ClickMeUI">
  <portlet>
    <description>Vaadin Click Me Portlet </description>
    <portlet-name>Vaadin Click Me Portlet</portlet-name>
    <display-name>Vaadin Click Me Portlet</display-name>
    <portlet-class>com.vaadin.server.VaadinPortlet</portlet-class>

    <init-param>
      <name>UI</name>
      <value>com.gisag.vaadin.ClickMeUI</value>
    </init-param>

    <init-param>
      <name>productionMode</name>
      <value>false</value>
    </init-param>

    <init-param>
      <description>Path of all static vaadin resources (configurable from context root)</description>
      <name>vaadin.resources.path</name>
      <value>PORTLET_CONTEXT</value>
    </init-param>

    <!-- Supported portlet modes and content types. -->
    <supports>
      <mime-type>text/html</mime-type>
      <portlet-mode>view</portlet-mode>
    </supports>
  </portlet>
</portlet-app>

In the portlet tag you have to set a value for the portlet-class. For this simple we can use the default Vaadin portlet class com.vaadin.server.VaadinPortlet; you also have to name you UI class as a portlet init parameter.

To let WPS find the Vaadin javascript and theme resources you have to use the portlet init parameter vaadin.resources.path. The value PORTLET_CONTEXT is a Vaadin constant value that makes the vaadin resources available in the portlets resource path.

Run the Maven build with clean package as goals and deploy the created war file in the portal administration. Create a blank portal page and add your portlet to the page. Your "Click me" portlet should look like this: