Class AbstractDevServerRunner
- java.lang.Object
-
- com.vaadin.base.devserver.AbstractDevServerRunner
-
- All Implemented Interfaces:
DevModeHandler
,RequestHandler
,Serializable
- Direct Known Subclasses:
ViteHandler
,WebpackHandler
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:
- Serialized Form
-
-
Constructor Summary
Constructors Modifier Constructor Description 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.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected boolean
checkConnection()
Check the connection to the dev server.protected Process
doStartDevServer()
Starts the dev server and returns the started process.protected ApplicationConfiguration
getApplicationConfiguration()
Gets the application configuration.String
getFailedOutput()
Return the dev server console output when a compilation error happened.int
getPort()
Get the listening port of the dev server.File
getProjectRoot()
Gets the project root folder.protected abstract File
getServerBinary()
Gets the binary that starts the dev server.protected abstract File
getServerConfig()
Gets the main configuration file for the dev server.protected abstract Pattern
getServerFailurePattern()
Gets a pattern to match with the output to determine that the server has failed to start.protected abstract String
getServerName()
Gets the name of the dev server for outputting to the user and statistics.protected abstract List<String>
getServerStartupCommand(FrontendTools tools)
Gets the commands to run to start the dev server.protected abstract Pattern
getServerSuccessPattern()
Gets a pattern to match with the output to determine that the server has started successfully.protected com.vaadin.base.devserver.DevServerWatchDog
getWatchDog()
Gets the server watch dog.boolean
handleRequest(VaadinSession session, VaadinRequest request, VaadinResponse response)
Called when a request needs to be handled.protected void
onDevServerCompilation(DevServerOutputTracker.Result result)
Called whenever the dev server output matche the success or failure pattern.HttpURLConnection
prepareConnection(String path, String method)
Prepare a HTTP connection against the dev server.boolean
serveDevModeRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
Serve a file by proxying to the dev server.void
stop()
Stop the dev-server.protected void
triggerLiveReload()
Triggers live reload.protected void
updateServerStartupEnvironment(FrontendTools frontendTools, Map<String,String> environment)
Defines the environment variables to use when starting the dev server.protected void
validateFiles()
Validates that the needed server binary and config file(s) are available.void
waitForDevServer()
Waits for the dev server to start.protected void
writeStream(javax.servlet.ServletOutputStream outputStream, InputStream inputStream)
-
-
-
Constructor Detail
-
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 instancerunningPort
- the port that a dev server is already running on or 0 to start a new servernpmFolder
- the project rootwaitFor
- the task to wait for before running the server.
-
-
Method Detail
-
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 metadataenvironment
- 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.
-
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 interfaceDevModeHandler
- 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 interfaceDevModeHandler
- 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 interfaceDevModeHandler
- 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 interfaceDevModeHandler
-
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 interfaceDevModeHandler
- Parameters:
path
- the file to request, needs to be safemethod
- 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 returntrue
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 usingVaadinSession.accessSynchronously(Command)
orUI.accessSynchronously(Command)
.- Specified by:
handleRequest
in interfaceRequestHandler
- Parameters:
session
- The session for the requestrequest
- The request to handleresponse
- 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(javax.servlet.http.HttpServletRequest request, javax.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 interfaceDevModeHandler
- Parameters:
request
- the servlet requestresponse
- 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(javax.servlet.ServletOutputStream outputStream, InputStream inputStream) throws IOException
- Throws:
IOException
-
-