| Interface | Description |
|---|---|
| DependencyInfo |
Описывает зависимость
|
| ServiceEvent | |
| ServiceEventPublisher |
Издатель уведомлений службы
|
| ServiceListener | |
| StartService |
Запуск/Остановка сервиса
|
| Class | Description |
|---|---|
| AbstractService |
Абстрактный сервис.
|
| BaseService | |
| DependencyInfoImpl | |
| FieldDependencyController | |
| InitServicesBegin | |
| InitServicesEnd | |
| Resolver |
Задает конфигурацию разрешения зависимостей
|
| ServiceInstalled | |
| ServiceStarted | |
| ServiceStarting | |
| ServiceStopped | |
| ServiceStopping | |
| ServiceUninstalled | |
| StartableService |
Сервис с поддержкой start/stop
|
| Annotation Type | Description |
|---|---|
| BaseService.OnStart | |
| BaseService.OnStop | |
| BaseService.UiAction | |
| BaseService.UiMenu | |
| Dependency |
Описывает зависимость сервиса
|
| FieldDependency |
Указывает зависимость поля
|
Концепт служб/сервисов построена на частичной аналогии служб windows / демонов linux.
Служба/Сервис в данном случаи это некий Java-объект предоставляющий необходимую функциональность клиенту.
Клиент в данном случаи то же прдествляет из себя службу/сервес - экземпляр интерфейса ConsoleService и/или подтип AbstractService.
Реализация клиента примерно такая:
class SrvcC extends AbstractService {
// Так объявлется зависимость
@Dependency protected TargetService instance;
..
}
При вызове метода AbstractService.initDependencies() - среди списка сервисов (переданных через метод init(Console console)
для каждого поля (с null ссылкой) помеченного аннотацией @Dependency находится подходящая реализация,
найденная реализация записывается в значение поля.
Разрешением зависимостей занимается базовые классы как AbstractService и Resolver.
Результатом разрешения зависимостей - является направленный граф (возможно даже циклический) между службами.
Службы в свою очередь могут выступать как просто объекты, так и службы которые зависят от других служб.
Служба может быть также "стартуемой" - т.е. для выполнения необъодимой функциональности необходимо вызвать метода start().
Служба передет в состояние запущенна, тогда когда все службы от которых она зависит тоже будут запущены.
При остановке службы, все зависимые службы будут остановлены.
Copyright © 2018. All rights reserved.