Jakarta EE with Vaadin

Vaadin runs on Jakarta EE 11 (formerly Java EE). It requires Java 21 or later, Jakarta Servlet 6.1, and a Jakarta EE 11-compatible application server or CDI container.

Jakarta EE integration overview

Vaadin has official integration support for the following Jakarta EE technologies in Vaadin 25:

Jakarta Servlet 6.1

Vaadin applications are packaged and deployed as servlets. You can customize the servlet with your own implementation and share state across sessions via VaadinSession.getAllSessions(HttpSession). 

Jakarta WebSocket 2.2

Vaadin uses WebSocket for live UI updates. Activate it with @Push on your AppShellConfigurator class. If the server does not support WebSocket, long polling is used as a fallback. 

Server Push configuration →

Contexts and Dependency Injection (CDI) 4.1

Vaadin has an official CDI add-on (vaadin-cdi) that makes your views and layouts CDI managed beans. It supports custom scopes, navigation events, EJB injection, and interceptors.

Using CDI with Vaadin →
CDI starter project on GitHub →

Jakarta Bean Validation 3.1

Vaadin supports Bean Validation through BeanValidationBinder. Annotate your domain classes with validation constraints and the binder enforces them on the server as the user edits the form.

Validating user input →

Jakarta Persistence (JPA) 3.2

JPA is fully supported in Vaadin applications via CDI or Spring. Inject an EntityManager or use a repository abstraction from your Jakarta EE stack. Jakarta Data 1.0 is available in Jakarta EE 11 environments that support it.

Jakarta Enterprise Beans (EJB) 4.0 and Interceptors 2.2

EJBs can be injected directly into Vaadin views via the CDI integration. Interceptors are fully supported.

Jakarta Transactions 2.0 and Jakarta Messaging 3.1

Typically used in service classes rather than UI code. Inject UserTransaction or JMSContext into CDI-managed Vaadin views when needed.


Application server compatibility

Vaadin 25 requires a Jakarta EE 11 (Servlet 6.1) compatible runtime. The following servers are tested in Vaadin's CI:

  • WildFly
  • Apache TomEE
  • Payara Server and Payara Micro
  • Open Liberty

Start a Jakarta EE project

Option 1 — CDI starter (recommended):

Clone  github.com/vaadin/skeleton-starter-flow-cdi

Option 2 — Spring Boot starter:

If your team uses Spring Boot, see vaadin.com/hello-world-starters