Interface Service<T>
-
- Type Parameters:
T
- the type of value that this service provides; may beVoid
- All Known Implementing Classes:
AbstractService
,ValueInjectionService
,ValueService
@Deprecated public interface Service<T> extends Service, Value<T>
Deprecated.useService
instead. This class will be removed in a future release.A service is a thing which can be started and stopped. A service may be started or stopped from any thread. In general, injections will always happen from the same thread that will callstart()
, and uninjections will always happen from the same thread that had calledstop()
. However no other guarantees are made with respect to locking or thread safety; a robust service implementation should always take care to protect any mutable state appropriately.The value type specified by this service is used by default by consumers of this service, and should represent the public interface of this service, which may or may not be the same as the implementing type of this service.
When writing MSC service implementations, your
start(StartContext)
andstop(StopContext)
methods must never block. This means these methods must not:- Use network connections
- Wait for network connections
- Sleep
- Wait on a condition
- Wait on a count down latch
- Call any method which may do any of the above
- Wait for termination of a thread pool or other service
- Wait for another service to change state
LifecycleContext.asynchronous()
) and do one of the following:- Initiate your task in start()/stop(), and utilize a callback (NIO, ThreadPoolExecutor.terminated(), etc.) to call
LifecycleContext.complete()
when your start/stop completes instead of blocking - Delegate your blocking task to a thread pool (
Executor
) which callsLifecycleContext.complete()
when done - Use proper dependencies instead of explicitly waiting for services in your start/stop
Note that using
LifecycleContext.execute(Runnable)
to execute the blocking task is also not permissible.- Author:
- David M. Lloyd, Richard Opalka
-
-
Field Summary
Fields Modifier and Type Field Description static Service<Void>
NULL
Deprecated.A simple null service which performs no start or stop action.static Value<Service<Void>>
NULL_VALUE
Deprecated.A value which resolves to thenull service
.
-
Method Summary
All Methods Instance Methods Abstract Methods Deprecated Methods Modifier and Type Method Description void
start(StartContext context)
Deprecated.Start the service.void
stop(StopContext context)
Deprecated.Stop the service.
-
-
-
Method Detail
-
start
void start(StartContext context) throws StartException
Deprecated.Start the service. Do not return until the service has been fully started, unless an asynchronous service start is performed. All injections will be complete before this method is called.If the service start involves any activities that may block, the asynchronous mechanism provided by the
context
should be used. See theclass javadoc
for details.- Specified by:
start
in interfaceService
- Parameters:
context
- the context which can be used to trigger an asynchronous service start- Throws:
StartException
- if the service could not be started for some reason
-
stop
void stop(StopContext context)
Deprecated.Stop the service. Do not return until the service has been fully stopped, unless an asynchronous service stop is performed. All injections will remain intact until the service is fully stopped. This method should not throw an exception.If the service start involves any activities that may block, the asynchronous mechanism provided by the
context
should be used. See theclass javadoc
for details.
-
-