Определение собственного VaadinServlet/VaadinServletService/VaadinSession для Vaadin 23

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

Мне это нужно, потому что мне нужно добавить поверх обычных сессий Vaadin. Простое определение моих собственных классов и их правильная настройка, похоже, не помогают.

Я также уже пытался определить их как собственный @Bean в моем классе приложений, но это дало мне только некоторые сообщения об ошибках во время запуска.

Мое приложение .java:

      package com.marcobsidian.briefmarken;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration;

import com.marcobsidian.briefmarken.base.application.ApplicationServlet;
import com.vaadin.flow.component.dependency.NpmPackage;
import com.vaadin.flow.component.page.AppShellConfigurator;
import com.vaadin.flow.server.VaadinServlet;
import com.vaadin.flow.theme.Theme;

/**
 * The entry point of the Spring Boot application.
 *
 * Use the @PWA annotation make the application installable on phones, tablets
 * and some desktop browsers.
 *
 */
@SpringBootApplication(exclude = ErrorMvcAutoConfiguration.class)
@NpmPackage(value = "@fontsource/nunito-sans", version = "4.5.0")
@Theme(value = "briefmarken")
@NpmPackage(value = "line-awesome", version = "1.3.0")
public class Application implements AppShellConfigurator {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

Мой ApplicationServlet.java:

      package com.marcobsidian.briefmarken.base.application;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;

import com.vaadin.flow.function.DeploymentConfiguration;
import com.vaadin.flow.server.*;

@WebServlet
public class ApplicationServlet extends VaadinServlet implements SessionInitListener, SessionDestroyListener {

    @Override
    protected VaadinServletService createServletService(DeploymentConfiguration deploymentConfiguration)
        throws ServiceException {
        ApplicationService service = new ApplicationService(this, deploymentConfiguration);
        service.init();
        return service;
    }

    @Override
    public void sessionDestroy(SessionDestroyEvent event) {
        //To be continued...
    }

    @Override
    public void sessionInit(SessionInitEvent event) throws ServiceException {
        //To be continued...
    }

}

Мой ApplicationService.java:

      package com.marcobsidian.briefmarken.base.application;

import com.vaadin.flow.function.DeploymentConfiguration;
import com.vaadin.flow.server.*;

public class ApplicationService extends VaadinServletService {

    public ApplicationService(VaadinServlet servlet, DeploymentConfiguration deploymentConfiguration) {
        super(servlet, deploymentConfiguration);
    }

    @Override
    protected VaadinSession createVaadinSession(VaadinRequest request) {
        return new ApplicationSession(this);
    }
}

ApplicationSession.java:

      package com.marcobsidian.briefmarken.base.application;

import com.vaadin.flow.internal.CurrentInstance;
import com.vaadin.flow.server.VaadinService;
import com.vaadin.flow.server.VaadinSession;

public final class ApplicationSession extends VaadinSession {

    public static ApplicationSession getCurrent() {
        return CurrentInstance.get(ApplicationSession.class);
    }

    public ApplicationSession(VaadinService service) {
        super(service);
    }
}

Также для простоты я убрал из классов все, что не имеет отношения к этому вопросу. На самом деле в них много чего происходит. Я знаю, почему я хочу свой собственный Session-Object :)

Пытался:

  • Определение @Bean для VaadinServlet в Application.java

  • Ручное переключение класса обслуживания с помощью VaadinService.setCurrent()

  • Исключение классов через @SpringBootApplication

  • Очевидно, что я много исследовал, но до сих пор не нашел никаких статей Vaadin23 по этой теме.

Ожидал:

  • Vaadin использует мои пользовательские объекты вместо VaadinServlet, VaadinServletService и VaadinService, но так и не сделал этого.

0 ответов

Другие вопросы по тегам