com.google.common.base
Interface Service

All Known Implementing Classes:
AbstractExecutionThreadService, AbstractIdleService, AbstractService, ForwardingService

public interface Service

An object with an operational state, plus asynchronous start() and stop() lifecycle methods to transfer into and out of this state. Example services include webservers, RPC servers and timers. The normal lifecycle of a service is:

If the service fails while starting, running or stopping, its state will be Service.State.FAILED, and its behavior is undefined. Such a service cannot be started nor stopped.

Implementors of this interface are strongly encouraged to extend AbstractService or AbstractExecutionThreadService, which make the threading and state management easier.

Since:
2009.09.15 tentative
Author:
Jesse Wilson

Nested Class Summary
static class Service.State
          The lifecycle states of a service.
 
Method Summary
 boolean isRunning()
          Returns true if this service is running.
 Future<Service.State> start()
          If the service state is Service.State.NEW, this initiates service startup and returns immediately.
 Service.State startAndWait()
          Initiates service startup (if necessary), returning once the service has finished starting.
 Service.State state()
          Returns the lifecycle state of the service.
 Future<Service.State> stop()
          If the service is Service.State.STARTING or Service.State.RUNNING, this initiates service shutdown and returns immediately.
 Service.State stopAndWait()
          Initiates service shutdown (if necessary), returning once the service has finished stopping.
 

Method Detail

start

Future<Service.State> start()
If the service state is Service.State.NEW, this initiates service startup and returns immediately. If the service has already been started, this method returns immediately without taking action. A stopped service may not be restarted.

Returns:
a future for the startup result, regardless of whether this call initiated startup. Calling Future.get() will block until the service has finished starting, and returns one of Service.State.RUNNING, Service.State.STOPPING or Service.State.TERMINATED. If the service fails to start, Future.get() will throw an ExecutionException, and the service's state will be Service.State.FAILED. If it has already finished starting, Future.get() returns immediately. Cancelling the returned future is unsupported and always returns false.

startAndWait

Service.State startAndWait()
Initiates service startup (if necessary), returning once the service has finished starting. Unlike calling start().get(), this method throws no checked exceptions.

Returns:
the state of the service when startup finished.
Throws:
InterruptedRuntimeException - if the thread was interrupted while waiting for the service to finish starting up.
RuntimeException - if startup failed

isRunning

boolean isRunning()
Returns true if this service is running.


state

Service.State state()
Returns the lifecycle state of the service.


stop

Future<Service.State> stop()
If the service is Service.State.STARTING or Service.State.RUNNING, this initiates service shutdown and returns immediately. If this is Service.State.NEW, it is terminated without having been started nor stopped. If the service has already been stopped, this method returns immediately without taking action.

Returns:
a future for the shutdown result, regardless of whether this call initiated shutdown. Calling Future.get() will block until the service has finished shutting down, and either returns Service.State.TERMINATED or throws an ExecutionException. If it has already finished stopping, Future.get() returns immediately. Cancelling this future is unsupported and always returns false.

stopAndWait

Service.State stopAndWait()
Initiates service shutdown (if necessary), returning once the service has finished stopping. If this is Service.State.STARTING, startup will be cancelled. If this is Service.State.NEW, it is terminated without having been started nor stopped. Unlike calling stop().get(), this method throws no checked exceptions.

Returns:
the state of the service when shutdown finished.
Throws:
InterruptedRuntimeException - if the thread was interrupted while waiting for the service to finish shutting down.
RuntimeException - if shutdown failed