Marker interface for ready functionality.
Implemented by interfaces used purely to “signal” e.g.
“state changes” during boot up for specific “functionality” offered by a
bundle. Another bundle can then await the respective “boot event” by
declaring a regular OSGi service dependency to it (using e.g.Blueprint BP, or
Declarative Services DS). This allows to order the boot sequence.
BP (or DS) of course already implicitly do service initialization ordering
according to the dependency graph (but beware of BP's use of java.lang.reflect.Proxy).
This infrastructure is therefore useful only if:
- there is no natural service interface, or
- a service does further more heavy weight initialization asynchronously
in a background thread in order not to block e.g. Blueprint, and wants to
signal when that background initialisation is really ready to anything that
must be specifically aware of that,
- you need more “fine grained” signaling than the availability of your main service interface/s can
indicate.
Some examples where this is useful include:
- Infrautils’ own system ready service signaling that all features have booted all bundles
without errors and all blueprint initialization is completed (similar to
Karaf own org.apache.karaf.features.BootFinished),
- Daexim’s import on boot completed successfully.
Interfaces extending this one typically have no methods. By convention, they are named
with a *Ready suffix.
This is just a convenience maker interface. One could
well just use the “pattern” proposed by this without implementing this
interface, nor using FunctionalityReadyNotifier
. However, using this gives a
clear indication that a “fake service” has this purpose, and allows one to
find them all by type, as well as directly refer to this documentation.