The first minor (feature adding) release of Eclipse Ditto 1 is finally here: 1.1.0.
It is API and binary compatible to Eclipse Ditto 1.0.0.
Changelog
Compared to the latest release 1.0.0, the following changes, new features and bugfixes were added.
Changes
Java 11 as runtime environment
The default Java runtime for Ditto’s Docker containers was switched from Java 8 to Java 11 which should have some benefits in storing Strings in memory (this was already added in Java 9).
Language features of newer Java versions can now be used in the “services” part of Ditto, the Java APIs and models relevant for semantic versioning are still compatible to Java 8.
CBOR as Ditto internal serialization provider
As a bachelor thesis, Erik Escher evaluated mechanisms to improve the serialization overhead done in Ditto clusters.
His findings using CBOR as an alternative to plain JSON resulted an approximate 10% improvement on roundtrip times and throughput. The Ditto team was happy to accept his pull request, again improving overall performance in Ditto.
More strict Content-Type parsing for HTTP request payload
In the past, Ditto did not evaluate the HTTP Content-Type
header of HTTP requests sending along payload. As this
can be a potential security issue (e.g. in scope of CORS requests), the Content-Type
is now strictly enforced to
be of application/json
wherever Ditto only accepts JSON request payload.
New features
Management of policies via Ditto Protocol and in Java client
The policy entities can now - in addition to their HTTP API - be managed via the Ditto Protocol. That means also via WebSocket and connections (e.g. AMQP, MQTT, ..).
APIs for policy management were also added to the Ditto Java Client.
Searching things via Ditto Protocol and in Java client
New Ditto Protocol for search was added in order to define a search query via the Ditto Protocol and also get results via an asynchronous channel. As a result, searching for things is now also possible via WebSocket and connections (e.g. AMQP, MQTT, ..).
APIs for searching things were also added to the Ditto Java Client.
Enriching messages and events before publishing to external subscribers
When subscribing change notifications or for messages to publish to external system or deliver via WebSocket it is now possible to enrich the payload with additional “extra fields” from the thing which was affected by the change.
This can be useful when e.g. only a sensor value of a device changes, but your application also needs to be aware of additional context of the affected thing (e.g. a location which does not change with each sensor update).
APIs for enriching changes were also added to the Ditto Java Client.
Establish connections to MQTT 5 brokers
The Ditto community (namely Alexander Wellbrock (w4tsn) from
othermo GmbH) contributed MQTT 5 support to Ditto’s connectivity capabilities.
With that is is possible to also establish connections to MQTT 5 brokers and even apply
header mapping and e.g. responses via MQTT 5’s user properties
approach.
Thank you very much for this great contribution.
End-2-end acknowledgements
Until now, messages consumed by Eclipse Ditto were processed without a guarantee. That is being addressed with this first feature addition, the model and logic in order to request and emit acknowledgements.
The follow-up issue #661 will automatically handle acknowledgements in Ditto managed connections, configured for connection sources and targets, providing QoS 1 (at least once) semantic for message processing in Ditto via connections.
APIs for requesting and issuing acknowledgements were also added to the Ditto Java Client.
Pre-authenticated authentication mechanism
Officially added+documented support of how Ditto external authentication providers may be configured to authenticate users in Ditto by adding them as an HTTP reverse proxy in front of Ditto.
Deprecations
API version 1 deprecation
Now that Ditto has a full replacement for ACLs, namely policies which now can also be managed via the Ditto Protocol and the Ditto Java client, it is time to deprecate the APIs around the ACL mechanism.
Starting with Ditto 1.1.0, usage of the API in version 1
(e.g. contained in HTTP URLs as /api/1/things...
) is
deprecated.
API version 1 and ACLs will very likely be removed in Ditto 2.0
.
So when you start using Ditto, please make sure to use API version 2
(using policies as
authorization mechanism) from the very beginning.
Bugfixes
Several bugs in Ditto 1.0.0 were fixed for 1.1.0.
This is a complete list of the
merged pull requests, including the fixed bugs.
Migration notes
Do not apply when updating from Eclipse Ditto 1.0.0 to 1.1.0.