| Improvement | onConfigSet()/onConfigChanged() called after Ready objects become readyIf aConfigAware object also implements Ready, onConfigSet() will
be
deferred until the object becomes ready. By default, onConfigSet() simply calls onConfigChanged() so in most cases this means that the first call to onConfigChanged() will occur after the object is ready. This eliminates the need to put ready checks in onConfigChanged() to avoid race conditions during startup. Note: If you override |
| New feature | New annotations to control callback policy for objects that implement ReadyThe newListenerPolicy and ListenerPolicies annotations can be used to
configure when
a listener that implements Ready receives callbacks. By default, a listener will receive a
callback
when the associated event occurs. For listeners that implement Ready, this can result in a
race
condition where callbacks are delivered before the object is in a ready state. These new annotations
allow the
listener to change how callbacks are processed during this window. The new
This annotation provides the ability to bind the policy to a particular interface name, providing
the ability
to configure different listener interfaces on the same object with different policies. The |
| Deprecated | Deprecated ListenerList apiListenerList contains multiple fireEvent() methods. The fireEvent(ListenerCaller version has been deprecated as it does not contain class
information about the caller which is required to evaluate listener policies. Using this method prevents
listeners of your services from leveraging callback policies. |
| New feature | Side loading manifest content from local filesystemIn support of running test/diagnostic applications on a production-ready device, there is now support for side-loading from the local disk. This allows users to copy kabs to the local filesystem and have them added to the manifest on next boot, effectively providing a way to replace content, add applications or even disable parts of the existing manifest. This is a restricted feature. It is only available for use while running in test mode and it requires a digitally signed grant from the KOS team to enable this feature. Please contact the KOS development team for more information. |
| New feature | Easy access to |
| New feature | Device type can now be set at runtimeWhile previously the device type of a device was defined as the node type of the primary node, it is now possible to set the device type dynamically at runtime. This allows more flexibility in application design, such as a single application that represents multiple device types in the field. In addition to the default primary node type method, there are now two alternate ways to specify an alternate device type:
|
| New feature | Compatibility checks between applicationsAs a collaborative application based platform, it is a common pattern for devices to be made up of many applications that rely on each other. The most common pattern of integrating applications is via an appliation SDK. However, issues can arise when one application uses an outdated SDK to access another application. As KOS 1.9 introduced SDK meta data embedding at compile time, KOS now uses this information to compare compatibility between applications at startup. When mismatches are found, KOS will log these gaps for easy visibility. This can also be used to check applications against KOS core and any installed extensions. However, to enable these checks, users must include the api-info maven dependncy from the KOS bom:If this dependency is not included for an application, a warning will be included in the log when the
application is loaded. |
| Deprecated | Improved KOS relies heavily on the configuration system and all configuration changes are automatically logged
for
traceability. However, while configuration changes are visible, it is not easy to determine where the
configuration change originated. In order to improve log data, |
| New feature | Spawn service rewriteSpawnService was originally designed to dynamically spawn long running native applications
such as
device adapters. These adapters are typically spawned in response to hardware detection events and the
adapters
need to remain runningas long as the hardware is avaialble. SpawnService monitors processes
and
will automatically restart them if they exit unexpectedly, including support for respawn throttling and
lifecycle monitoring. In multi-node environments, SpawnService can even spawn and monitor
on
different nodes across the network. However, SpawnService has been limited to daemon
processes and
cannot practically be used for running ad-hoc processes to completion. While developers can use java's ProcessBuilder to run ad-hoc processes, they cannot run as root and ProcessBuilder cannot be used to run processes on other nodes. In order to address these limitations, |
| Improvement | Improved Troubles are a core feature of KOS and are used to identify abonormal conditions and state changes.
However,
troubles have relied on |
| New feature | Callback monitoring and loggingKOS is designed for devices which tends to generate asynchronous events which are propagated via callbacks to listeners. Listeners effectively represent unknown code to the caller and this introduces two major risks:
TimedCallback.call() which is
series of static methods designed to perform callbacks. These methods automatically handle exceptions
with
logging and also time every callback, logging any listeners that take longer than the configured
timeout. |
| New feature | Boards can now receive assembly lifecycle eventsForBoard classes that need to perform setup or tear down on Assembly install
or
uninstall events, they can simply implement the AssemblyInstallAware interface to receive
callbacks. |
| New feature | Reverse linked chained manifests make dynamic manifest injection easierKOS is designed around immutability and determinism rooted in a manifest that describes the state of the device. Dynamic content and other changes to a device are accomplished through the use of digitally signed chained manifests. While KOS has supported chained manifests from it's inception, it now introduces reverse linked chained manifests which allow for a hub and spoke automation process to query multiple parties for dynamic additions for a given device. If you're building a device managment system or dynamic content system for KOS, let us know so we can explain how this new feature can simplify content distribution. |
| New feature | Complete rewrite of |
