Limitations of MPR
- It’s possible to add a legacy component to a Flow layout, but not a Flow component to a legacy layout.
- Custom UIs are supported, but not building the application in there.
- Multiple UIs aren’t supported.
- Custom legacy VaadinServlets aren’t supported.
- Latest Vaadin 7 or Vaadin 8 Extended Maintenance Version Is Required.
- CDN and FETCH aren’t supported for the widget set mode.
- Runtime changing of the legacy theme isn’t supported.
- No ViewScope in Flow Spring add-on.
UI.getCurrent()
is no longer automatically inherited into the spawned thread.- PhantomJS isn’t supported.
- Java 8+ is required.
- Old browsers aren’t supported
- Vaadin Board 1.1.0 isn’t supported.
- Z-indexes of the modern Vaadin Design System aren’t aligned with legacy.
Using MPR in your project to port a legacy application to Vaadin Flow has some known limitations. This is the current list of those limitations. However, these limits and list may change over time as new features are implemented.
It’s possible to add a legacy component to a Flow layout, but not a Flow component to a legacy layout.
The LegacyWrapper
class and the HasLegacyComponents
mixin interface only work for adding legacy components or views in a Flow layout, and not the other way around.
Custom UIs are supported, but not building the application in there.
Custom legacy UIs can be used to host configuration settings, but can’t be used as a layout. You need to convert your UIs layouts to be in components, and then wrap them with a LegacyWrapper
and add them to a Flow layout.
Custom UIs can be used as long as they extend MprUI, the root navigation target is annotated with @LegacyUI(*.class)
and you don’t use UI.setContent();
.
Multiple UIs aren’t supported.
Additionally, because of the need of the MprUI
, multiple legacy UIs aren’t supported. They need to be converted to a legacy layout and then wrapped in a LegacyWrapper
for Flow to use them.
Custom legacy VaadinServlets aren’t supported.
MPR has a special servlet called, MprServlet
. It knows how to map each request to the appropriate framework. This makes legacy VaadinServlets unusable in an application controlled by the MPR. If you need custom functionality, you can use the VaadinServlet provided by Flow instead. See Flow documentation on Dynamic content for details.
CDN and FETCH aren’t supported for the widget set mode.
When using MPR, you can’t use a Content Delivery Network (CDN) for the widget set.
As a result, the following configuration should be removed from the pom.xml
:
-
<vaadin.widgetset.mode>cdn</vaadin.widgetset.mode>
or -
<vaadin.widgetset.mode>fetch</vaadin.widgetset.mode>
Runtime changing of the legacy theme isn’t supported.
When using the @MprTheme
annotation, the legacy theme is set at startup time. It can’t be changed dynamically after the application has been started.
No ViewScope in Flow Spring add-on.
The Vaadin 14 Spring add-on doesn’t have a feature comparable with @ViewScope
. When using MPR with Spring, that scope isn’t supported.
UI.getCurrent()
is no longer automatically inherited into the spawned thread.
This code no longer works when running with MPR:
button.addClickListener(event -> {
new Thread(() -> {
UI.getCurrent()
.access(() -> Notification.show("Hello from thread"));
}).start();
});
As a workaround, store the value of UI.getCurrent()
in a variable inside the click listener, which the thread can then use:
button.addClickListener(event -> {
UI ui = UI.getCurrent();
new Thread(() -> {
ui.access(() -> Notification.show("Hello from thread"));
}).start();
});
PhantomJS isn’t supported.
The PhantomJS project is no longer maintained, and Flow doesn’t officially support it. Old Vaadin projects that rely on PhantomJS should use alternatives when using MPR, such as headless browsers.
Java 8+ is required.
Since the application managed by the MPR is a Flow application, it requires Java 8+ runtime to work.
Old browsers aren’t supported
Browser support for MPR applications is based on the running Vaadin version. For Vaadin 14, those include Internet Explorer 11 with transpilation, and evergreen browsers (the latest versions of Chrome, Firefox, Opera, Safari and Edge). For Vaadin 15 and newer, IE11 and Safari versions older than 13 are no longer supported.
Vaadin Board 1.1.0 isn’t supported.
Since Vaadin Board 1.1.0 requires Polymer 2, and Vaadin 23.5.14 requires Lit, Vaadin Board isn’t compatible with Vaadin 23.5.14 and can’t be used as a legacy component.
Z-indexes of the modern Vaadin Design System aren’t aligned with legacy.
Components using overlays and popups in Vaadin 7 and Vaadin 8 are organized in different z-indexes from similar components in the modern Vaadin Design System. Thus it’s possible that some combinations of them don’t work. For example, using such Vaadin 7 and 8 components with LegacyWrapper in Dialog may not work as expected.
A05C0162-8020-48AA-BF0D-D29D1F6CAEF1