Class BrowserlessApplicationContext

  • All Implemented Interfaces:
    java.lang.AutoCloseable

    
    public class BrowserlessApplicationContext
     implements AutoCloseable
                        

    Application-level context for multi-user browserless testing.

    Manages a shared VaadinServletService and servlet that are shared across all users and their windows. This models the application level of the Vaadin hierarchy: one application contains multiple user sessions, each with multiple UI instances (browser windows).

    Instances of this class are thread-affine: they must be created, used, and closed on the same thread. The active context is held in a ThreadLocal and is not visible to other threads. This class is not safe for concurrent access from multiple threads; driving the same context from parallel test threads is unsupported.

    This base class is unsecured: it has no SecurityContextHandler. For multi-user security isolation, configure a handler via withSecurityContextHandler — the builder transitions to SecuredBrowserlessApplicationContext.Builder and build() returns the typed SecuredBrowserlessApplicationContext, which exposes credential-aware newUser(...) overloads. Framework-specific modules (Spring, Quarkus) provide convenience factory methods for both paths.

    var app = BrowserlessApplicationContext.create(MyView.class);
    var user1 = app.newUser();
    var window1 = user1.newWindow();
    window1.navigate(MyView.class);
    // ...
    app.close();
    
    Since:

    1.1

    • Constructor Detail

    • Method Detail

      • create

         static BrowserlessApplicationContext create(Array<String> viewPackages)

        Creates a plain Java application context, scanning the given packages for @Route-annotated views.

        Parameters:
        viewPackages - package names to scan for views; an empty array falls back to a full classpath scan
        Returns:

        a new application context

      • create

         static BrowserlessApplicationContext create(Array<Class<out Object>> viewPackageClasses)

        Creates a plain Java application context, scanning the packages of the given classes for @Route-annotated views.

        Parameters:
        viewPackageClasses - classes whose packages should be scanned for views
        Returns:

        a new application context

      • forComponent

         static BrowserlessApplicationContext forComponent(Supplier<Component> componentFactory)

        Creates a self-contained application context for ad-hoc testing of a single component, without requiring a @Route view. No route discovery is performed (see withoutRoutes), so creation skips the classpath scan and the component is the sole content of each window's UI.

        The given factory is invoked once per window: each newUser().newWindow() call attaches a freshly produced component to that window's UI. The factory runs from UI.init(), after the Vaadin thread-locals (com.vaadin.flow.component.UI, session, security context) are installed, so a component whose constructor reads UI.getCurrent() observes the live environment. Supply a factory that returns a new instance per call if you intend to open more than one window; reusing a single instance across windows re-parents it and leaves the earlier window empty.

        The returned context closes itself when its window's UI is detached, so a single try-with-resources — on the returned context, or on the window via forComponent — tears everything down.

        Parameters:
        componentFactory - supplies the component to attach to each window; must not be null
        Returns:

        a new self-closing application context with no routes

      • close

         void close()

        Closes this application context and all its user contexts.

        Closes every BrowserlessUserContext created by this application (which in turn closes their windows), fires service destroy listeners, and resets the VaadinService thread-local. This method is idempotent: subsequent invocations have no effect.