Определение собственного 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, но так и не сделал этого.