@Beta public abstract class AbstractService extends Object implements Service
doStart()
and
doStop()
requests, responding to them with notifyStarted()
and notifyStopped()
callbacks. Its subclasses must manage threads
manually; consider AbstractExecutionThreadService
if you need only a
single execution thread.Service.State
Constructor and Description |
---|
AbstractService() |
Modifier and Type | Method and Description |
---|---|
protected abstract void |
doStart()
This method is called by
start() to initiate service startup. |
protected abstract void |
doStop()
This method should be used to initiate service shutdown.
|
boolean |
isRunning()
Returns
true if this service is running. |
protected void |
notifyFailed(Throwable cause)
Invoke this method to transition the service to the
Service.State.FAILED . |
protected void |
notifyStarted()
Implementing classes should invoke this method once their service has
started.
|
protected void |
notifyStopped()
Implementing classes should invoke this method once their service has
stopped.
|
ListenableFuture<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.
|
ListenableFuture<Service.State> |
stop()
|
Service.State |
stopAndWait()
Initiates service shutdown (if necessary), returning once the service has
finished stopping.
|
String |
toString() |
protected abstract void doStart()
start()
to initiate service startup. The
invocation of this method should cause a call to notifyStarted()
,
either during this method's run, or after it has returned. If startup
fails, the invocation should cause a call to notifyFailed(Throwable)
instead.
This method should return promptly; prefer to do work on a different
thread where it is convenient. It is invoked exactly once on service
startup, even when start()
is called multiple times.
protected abstract void doStop()
notifyStopped()
, either
during this method's run, or after it has returned. If shutdown fails, the
invocation should cause a call to notifyFailed(Throwable)
instead.
This method should return promptly; prefer to do work on a different
thread where it is convenient. It is invoked exactly once on service
shutdown, even when stop()
is called multiple times.
public final ListenableFuture<Service.State> start()
Service
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.start
in interface Service
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 this future has
no effect on the service.public final ListenableFuture<Service.State> stop()
Service
stop
in interface Service
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 has no effect on the service.public Service.State startAndWait()
Service
start().get()
, this method throws
no checked exceptions, and it cannot be interrupted.startAndWait
in interface Service
public Service.State stopAndWait()
Service
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.stopAndWait
in interface Service
protected final void notifyStarted()
Service.State.STARTING
to Service.State.RUNNING
.IllegalStateException
- if the service is not
Service.State.STARTING
.protected final void notifyStopped()
Service.State.STOPPING
to Service.State.TERMINATED
.IllegalStateException
- if the service is neither Service.State.STOPPING
nor Service.State.RUNNING
.protected final void notifyFailed(Throwable cause)
Service.State.FAILED
. The service will not be stopped if it
is running. Invoke this method when a service has failed critically or
otherwise cannot be started nor stopped.public final boolean isRunning()
Service
true
if this service is running.public final Service.State state()
Service
Copyright © 2010-2012. All Rights Reserved.