Vaadin сервлет приложение внутри портлета

Это всего-лишь небольшой трюк, который кому-то пригодится, а кому-то нет. Речь пойдет о Liferay портале, портлетах и Vaadin приложении.

Как известно, Vaadin позволяет создать как сервлетное так и портлетное приложение. Портлеты же позволяют создавать внутри себя сервлеты. Предлагаемый трюк можно представить себе как Vaadin сервлет приложение врнутри портлета. То есть именно сервлетное приложение.

Что для этого надо:

  1. Создать портлет используя liferay-sdk;
  2. В файле liferay-plugin-package.properties указать зависимость для библиотеки vaadin.jar:
    portal-dependency-jars=vaadin.jar
    
  3. Описать приложения в web.xml:
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://java.sun.com/xml/ns/javaee"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
       id="WebApp_ID" version="2.5">
    
       <display-name>dashboard</display-name>
    
       <context-param>
          <description>Vaadin production mode</description>
          <param-name>productionMode</param-name>
          <param-value>false</param-value>
       </context-param>
    
       <servlet>
          <display-name>Dashboard</display-name>
          <servlet-name>dashboardServlet</servlet-name>
          <servlet-class>
             com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>
    
          <init-param>
             <param-name>application</param-name>
             <param-value>org.demo.dashboard.DashboardApplication</param-value>
          </init-param>
       </servlet>
    
       <servlet-mapping>
          <servlet-name>dashboardServlet</servlet-name>
          <url-pattern>/*</url-pattern>
       </servlet-mapping>
    </web-app>
    
  4. Написать само приложение:
    package org.demo.dashboard;
    
    import com.vaadin.Application;
    import com.vaadin.ui.Label;
    import com.vaadin.ui.Window;
    
    public class DashboardApplication extends Application {
       @Override
       public void init() {
          Window mainWindow = new Window("Dashboard Application");
          setMainWindow(mainWindow);
    
          String AE = "Make everything as simple as possible, but not simpler.";
          mainWindow.addComponent(new Label(AE));
        }
    }
    
  5. Ну и собственно url — {host}/dashboard-portlet, например:
    http://localhost:7080/dashboard-portlet
    

К такому приложению можно обращаться по фиксированной линке, вход на сайт не нужен, это не часть страницы портала, не надо ломать голову со стилями портала и размерами занимаемого пространства, это просто vaadin приложение. Плюс еще в том, что приложение разворачивается внутри портлета, а это дает возможность использовать весь функционал портала, который доступен в портлете.

Как использовать пусть каждый придумает сам, в моем случае это некий dashboard-portlet, который позволяет быстро выполнять рутинные задачи. Как я уже говорил — это всего-лишь небольшой трюк, который кому-то пригодится, а кому-то нет.