Class AbstractDevServerRunner

java.lang.Object
com.vaadin.base.devserver.AbstractDevServerRunner
All Implemented Interfaces:
DevModeHandler, RequestHandler, Serializable
Direct Known Subclasses:
ViteHandler

public abstract class AbstractDevServerRunner extends Object implements DevModeHandler
Deals with most details of starting a frontend development server or connecting to an existing one.

This class is meant to be used during developing time.

For internal use only. May be renamed or removed in a future release.

See Also:
  • Field Details

  • Constructor Details

    • AbstractDevServerRunner

      protected AbstractDevServerRunner(Lookup lookup, int runningPort, File npmFolder, CompletableFuture<Void> waitFor)
      Craete an instance that waits for the given task to complete before starting or connecting to the server.
      Parameters:
      lookup - a lookup instance
      runningPort - the port that a dev server is already running on or 0 to start a new server
      npmFolder - the project root
      waitFor - the task to wait for before running the server.
  • Method Details

    • validateFiles

      protected void validateFiles() throws ExecutionFailedException
      Validates that the needed server binary and config file(s) are available.
      Throws:
      ExecutionFailedException - if there is a problem
    • getServerBinary

      protected abstract File getServerBinary()
      Gets the binary that starts the dev server.
    • getServerConfig

      protected abstract File getServerConfig()
      Gets the main configuration file for the dev server.
    • getServerName

      protected abstract String getServerName()
      Gets the name of the dev server for outputting to the user and statistics.
    • getServerStartupCommand

      protected abstract List<String> getServerStartupCommand(FrontendTools tools)
      Gets the commands to run to start the dev server.
      Parameters:
      tools - the frontend tools object
    • updateServerStartupEnvironment

      protected void updateServerStartupEnvironment(FrontendTools frontendTools, Map<String,String> environment)
      Defines the environment variables to use when starting the dev server.
      Parameters:
      frontendTools - frontend tools metadata
      environment - the environment variables to use
    • getServerSuccessPattern

      protected abstract Pattern getServerSuccessPattern()
      Gets a pattern to match with the output to determine that the server has started successfully.
    • getServerFailurePattern

      protected abstract Pattern getServerFailurePattern()
      Gets a pattern to match with the output to determine that the server has failed to start.
    • getServerRestartingPattern

      protected Pattern getServerRestartingPattern()
      Gets a pattern to match with the output to determine that the server is restarting. Defaults to null, meaning that server restart is not monitored. Server restart is monitored only if both this method and getServerRestartedPattern() provides a pattern.
    • getServerRestartedPattern

      protected Pattern getServerRestartedPattern()
      Gets a pattern to match with the output to determine that the server has been restarted. Defaults to null, meaning that server restart is not monitored. Server restart is monitored only if both this method and getServerRestartingPattern() provides a pattern.
    • doStartDevServer

      protected Process doStartDevServer()
      Starts the dev server and returns the started process.
      Returns:
      the started process or null if no process was started
    • onDevServerCompilation

      protected void onDevServerCompilation(DevServerOutputTracker.Result result)
      Called whenever the dev server output matche the success or failure pattern.
    • getFailedOutput

      public String getFailedOutput()
      Description copied from interface: DevModeHandler
      Return the dev server console output when a compilation error happened.
      Specified by:
      getFailedOutput in interface DevModeHandler
      Returns:
      console output if error or null otherwise.
    • getWatchDog

      protected com.vaadin.base.devserver.DevServerWatchDog getWatchDog()
      Gets the server watch dog.
      Returns:
      the watch dog
    • triggerLiveReload

      protected void triggerLiveReload()
      Triggers live reload.
    • getProjectRoot

      public File getProjectRoot()
      Description copied from interface: DevModeHandler
      Gets the project root folder.
      Specified by:
      getProjectRoot in interface DevModeHandler
      Returns:
      the project root folder
    • getApplicationConfiguration

      protected ApplicationConfiguration getApplicationConfiguration()
      Gets the application configuration.
      Returns:
      the application configuration
    • checkConnection

      protected boolean checkConnection()
      Check the connection to the dev server.
      Returns:
      true if the dev server is responding correctly, false otherwise
    • getPort

      public int getPort()
      Description copied from interface: DevModeHandler
      Get the listening port of the dev server.
      Specified by:
      getPort in interface DevModeHandler
      Returns:
      the listening port
    • waitForDevServer

      public void waitForDevServer()
      Waits for the dev server to start.

      Suspends the caller's thread until the dev mode server is started (or failed to start).

    • stop

      public void stop()
      Description copied from interface: DevModeHandler
      Stop the dev-server.
      Specified by:
      stop in interface DevModeHandler
    • prepareConnection

      public HttpURLConnection prepareConnection(String path, String method) throws IOException
      Description copied from interface: DevModeHandler
      Prepare a HTTP connection against the dev server.
      Specified by:
      prepareConnection in interface DevModeHandler
      Parameters:
      path - the file to request, needs to be safe
      method - the http method to use
      Returns:
      the connection
      Throws:
      IOException - on connection error
    • handleRequest

      public boolean handleRequest(VaadinSession session, VaadinRequest request, VaadinResponse response) throws IOException
      Description copied from interface: RequestHandler
      Called when a request needs to be handled. If a response is written, this method should return true to indicate that no more request handlers should be invoked for the request.

      Note that request handlers by default do not lock the session. If you are using VaadinSession or anything inside the VaadinSession you must ensure the session is locked. This can be done by extending SynchronizedRequestHandler or by using VaadinSession.accessSynchronously(Command) or UI.accessSynchronously(Command).

      Specified by:
      handleRequest in interface RequestHandler
      Parameters:
      session - The session for the request
      request - The request to handle
      response - The response object to which a response can be written.
      Returns:
      true if a response has been written and no further request handlers should be called, otherwise false
      Throws:
      IOException - If an IO error occurred
    • serveDevModeRequest

      public boolean serveDevModeRequest(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws IOException
      Serve a file by proxying to the dev server.

      Note: it considers the HttpServletRequest.getPathInfo() that will be the path passed to the dev server which is running in the context root folder of the application.

      Method returns false immediately if dev server failed on its startup.

      Specified by:
      serveDevModeRequest in interface DevModeHandler
      Parameters:
      request - the servlet request
      response - the servlet response
      Returns:
      false if the dev server returned a not found, true otherwise
      Throws:
      IOException - in the case something went wrong like connection refused
    • writeStream

      protected void writeStream(jakarta.servlet.ServletOutputStream outputStream, InputStream inputStream) throws IOException
      Throws:
      IOException