Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Graceful shutdown of a server, context or connector is when existing request/connections are allowed to gracefully complete while no new requests and/or connections are accepted.

Jetty 6 does not directly support graceful shutdown, but it can be achieved by various API calls.

It is configured on the Server instance with the setGracefulShutdown(long) method. Here's an example of setting this via the jetty.xml file, where we specify a "grace" period of 1000 milliseconds:

Code Block

 <Set name="gracefulShutdown">1000</Set>

The "grace" period is the time the container will wait for requests currently inside the container to finish processing before shutting down.

As soon as the shutdown command is given, the container will close the connectors so that they do not accept any more inbound connections. This will inform most load balancers that the server is no longer part of the cluster. The contexts are closed so that they do not accept any more requests, but the requests currently inside the container will drain out and the Server instance will shutdown after the grace period expires.

APIs For Shutdown Implementation

Even though Jetty will automatically handle a controlled shutdown if you use the setGracefulShutdown(long) method on the Server instance, sometimes you may want to implement your own shutdown handling, for example, shutting down just a single context or a connector. Here's how.

Graceful context shutdown

The ContextHandler and all the classes derived from it (Context, WebAppContext) has a setShutdown(boolean) method, which if passed true will prevent the context from accepting new requests. Requests that are currently being handled by the context are not affected.

...

The ContextHandler.setShutdown(boolean) method is exposed on via an MBean and can be called from a management agent.

Graceful connector shutdown

The Connector.close() method can be called to close the server socket on which a connector is listening. This will prevent new connections from being accepted and inform most load balancers that the server is no longer part of a cluster. Existing client connections can continue to run until they timeout or stop() is called on the connector.

...

Contact the core Jetty developers at www.webtide.com
private support for your internal/customer projects ... custom extensions and distributions ... versioned snapshots for indefinite support ... scalability guidance for your apps and Ajax/Comet projects ... development services from 1 day to full product delivery