Hi all,
I’m trying to embed Vaadin UI from a Spring Boot Application into another Vaadin Spring Boot Application.
I found Alejandro Duartes add-on VaadinUIComponent, which seems to make this case simple.
I used his example for the add-on and modified it for Spring Boot.
But unfortunately I don’t get it running. At the moment the primary problem is, that I always get the message “This application requires cookies to function. Please enable cookies …”
I looked around in web tried different thinks but didn’t get it running.
At the moment I’m a little bit lost.
So, any help would be appreciate.
As already mentioned the Example is based on Alejandros example and I made it as simple as possible.
There are two applications Embedded 1 and Embedded 2, which are identical. They only output a different label text for identification.
EmbeddedUI1.java looks like following:
[code]
package org.test;
import com.vaadin.annotations.Theme;
import com.vaadin.server.VaadinRequest;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.ui.Button;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
@SuppressWarnings({ “serial” })
@SpringUI
@Theme(“valo”)
public class EmbeddedUI1 extends UI
{
@Override
protected void init(VaadinRequest request)
{
final VerticalLayout layout = new VerticalLayout();
final Label app = new Label("This is Embedded 1");
final TextField name = new TextField();
name.setCaption("Type your name here:");
Button button = new Button("Click Me");
button.addClickListener(e ->
{
layout.addComponent(new Label("Thanks " + name.getValue() + ", it works!"));
});
layout.addComponents(app, name, button);
layout.setMargin(true);
layout.setSpacing(true);
setContent(layout);
}
}
[/code]EmbeddedUI2.java looks the same with the only exception that the label text is “This is Embedded 2” instead of “This is Embedded 1”.
Application.java is the following:
[code]
package org.test;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.context.annotation.Bean;
import com.thetransactioncompany.cors.CORSFilter;
import com.vaadin.spring.annotation.SpringComponent;
@SpringBootApplication
public class Application
{
public static void main(String args)
{
SpringApplication.run(Application.class, args);
}
@SpringComponent
@WebFilter(urlPatterns = "/*", initParams = @WebInitParam(name = "cors.allowOrigin", value = "*"))
public static class EmbeddedUICorsFilter extends CORSFilter
{
}
@Bean
public ServletContextInitializer sessionCookieConfigListener()
{
return context -> context.getSessionCookieConfig().setName("bootapp-session-id");
}
}
[/code]So, Application.java is the same for Embedded 1 and 2.
application.properties for Embedded 1 is:
spring.application.name=embedded-ui-1
server.port=800
And application.properties for Embedded 2 is:
spring.application.name=embedded-ui-2
server.port=8002
The Maven POM is:
[code]
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
<groupId>org.test</groupId>
<artifactId>embedded1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>embedded-ui-1</name>
<description>Demo embedded project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<repositories>
<repository>
<id>vaadin-addons</id>
<url>http://maven.vaadin.com/vaadin-addons</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-bom</artifactId>
<version>8.1.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
[/code]The POM for both Embedded UI application is identical except for .
The Host application UI (HostUI.java) is the following:
[code]
package org.test;
import com.vaadin.annotations.Theme;
import org.vaadin.embedded.VaadinUIComponent;
import com.vaadin.server.VaadinRequest;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.ui.HorizontalSplitPanel;
import com.vaadin.ui.UI;
import com.vaadin.ui.themes.ValoTheme;
@SuppressWarnings(“serial”)
@SpringUI
@Theme(ValoTheme.THEME_NAME)
public class HostUI extends UI
{
@Override
protected void init(VaadinRequest request)
{
VaadinUIComponent ui1 = new VaadinUIComponent(“http://localhost:8001”);
ui1.setSizeFull();
VaadinUIComponent ui2 = new VaadinUIComponent(“http://localhost:8002”);
HorizontalSplitPanel split = new HorizontalSplitPanel(ui1, ui2);
split.setSizeFull();
setContent(split);
}
}
[/code]And the Application.java for the host application is:
[code]
package org.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application
{
public static void main(String args)
{
SpringApplication.run(Application.class, args);
}
}
[/code]application.properties is:
spring.application.name=host-ui
server.port=8080
and POM is:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.test</groupId>
<artifactId>host</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>host-ui</name>
<description>Demo embedded project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<repositories>
<repository>
<id>vaadin-addons</id>
<url>http://maven.vaadin.com/vaadin-addons</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.vaadin.embedded</groupId>
<artifactId>embedded-ui</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-bom</artifactId>
<version>8.1.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
I’m running everything in the STS Editor 3.9.
I attached a ZIP file with all the sources in.
Even everything is simple it seems I’m missing something to get it running. Any Help?
34701.zip (12.1 KB)