Below is the code to start Grizzly Http Server. If I press any key the server stops. Is there any way to keep it alive.
Jetty has join() method, which will not exit
I use a shutdown hook. Here's a code example:
public class ExampleServer {
private static final Logger logger = LoggerFactory
.getLogger(ExampleServer.class);
public static void main(String[] args) throws IOException {
new Server().doMain(args);
}
public void doMain(String[] args) throws IOException {
logger.info("Initiliazing Grizzly server..");
// set REST services packages
ResourceConfig resourceConfig = new PackagesResourceConfig(
"pt.lighthouselabs.services");
// instantiate server
final HttpServer server = GrizzlyServerFactory.createHttpServer(
"http://localhost:8080", resourceConfig);
// register shutdown hook
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
logger.info("Stopping server..");
server.stop();
}
}, "shutdownHook"));
// run
try {
server.start();
logger.info("Press CTRL^C to exit..");
Thread.currentThread().join();
} catch (Exception e) {
logger.error(
"There was an error while starting Grizzly HTTP server.", e);
}
}
}
The server stops because you call the httpServer.stop()
method after the input stream. When the execution reachs the System.in.read();
it hangs till you enter a letter and then moves on to the server stop.
You can just comment httpServer.stop()
because that code example is exactly to hang up the server when a key is pressed.
But if you want to create a Webserver instance I would suggest that you run a Thread in main() that starts an instance of the Grizzly Webserver.
Try something like:
try {
server.start();
Thread.currentThread().join();
} catch (Exception ioe) {
System.err.println(ioe);
} finally {
try {
server.stop();
} catch (IOException ioe) {
System.err.println(ioe);
}
}