Running Applications
Running a SeedStack application is done by using the SeedMain
class
as entry point. This main class searches for a launcher on the classpath and delegates the startup and shutdown
logic to it. A launcher is a class implementing SeedLauncher
.
SeedStack provides two built-in launchers:
- In the
seed-cli
module, for command-line applications. - In the
seed-web-undertow
, for Web applications embedding their own server.
Web applications executed in a Servlet container don’t require a launcher as they are completely managed by the container. See this page for more information.
Startup
Plain command-line
A standalone application is run from the command-line using the SeedMain
class:
java [jvm-args] -cp ... org.seedstack.seed.core.SeedMain [app-args]
Capsule
One difficulty of running a Java application from the command line is to properly set its classpath. To simplify this task, SeedStack provides the ability to package any project in a Capsule, which is a sophisticated one-JAR packager and launcher. With a Capsule, launching the application becomes as simple as:
java [jvm-args] -jar app-capsule.jar [app-args]
SeedStack projects created by the generator always provide a Capsule JAR in the target
directory. Check the
package goal of the SeedStack maven plugin for more information.
Maven run goal
In development, you have the ability to run a standalone application directly from Maven with the run goal of the SeedStack Maven plugin:
mvn [-Dargs="app-args"] seedstack:run
This will automatically build the classpath from the project dependencies and create an isolated classloader to run the application.
Shutdown
To shutdown a standalone application, you simply have to gracefully stop the JVM. You can do this on any operating system
this by hitting CTRL+C
if the JVM is a foreground process. You can also do this on UNIX systems if the JVM is a
background process by issuing a SIGINT
signal to the JVM process:
kill -2 pid
Before the JVM stops, the shutdown logic of the SeedStack application will be invoked.
Warning! If you abruptly terminate or kill the JVM process, the application will NOT gracefully shutdown.
Tool mode
A SeedStack application can be run in tool mode. In this case a special launcher is invoked and will execute the specified
tool. You can run any module in tool mode by specifying the seedstack.tool
system property:
java [jvm-args] -Dseedstack.tool=toolName -cp ... org.seedstack.seed.core.SeedMain [tool-args]
or with a Capsule:
java [jvm-args] -Dseedstack.tool=toolName -jar app-capsule.jar [tool-args]
Lifecycle listener
You can implement the LifecycleListener
interface to be notified about the application
lifecycle events:
public class MyLifecycleListener implements LifecycleListener {
@Logging
private Logger logger;
@Override
public void started() {
logger.info("Application has been started");
}
@Override
public void stopping() {
logger.info("Application is about to be stopped");
}
}
Such classes are injectable and can be used to implement initialization and shutdown logic.