Eclipse Ditto 2.4.0

2.4.0

Description

Eclipse Ditto 2.4.0 includes the following topics/enhancements:

  • W3C WoT (Web of Things) integration
  • SSE (ServerSentEvent) API for subscribing to messages
  • Recovery status for connections indicating when e.g. recovery is no longer tried after max backoff
  • Enhance placeholders to resolve to multiple values
  • Advanced JWT placeholder operations
  • Support for a wildcard/placeholder identifying the changed feature in order to enrich e.g. its definition

The following notable fixes are included:

  • Several fixes and improvements regarding consistency and performance of search updates
  • Don't publish messages with failed enrichments and issue failed ack
  • Filter for incorrect element types in jsonArray of feature definitions
  • Fix of placeholder resolvment in "commandHeaders" of "ImplicitThingCreation" mapper
  • Fix fn:substring-after() function returning incorrect data

The following non-functional work is also included:

  • Upgrade of compiler target level for service modules from Java 11 to Java 17
  • Switch of used Java runtime in pre-built Docker containers from OpenJ9 to Hotspot
  • Publication of pre-built multi-architecture Docker images for `linux/amd64` (as always) and now in addition `linux/arm64`
  • Removal of rate limiting / throttling limits as default
  • Update of several used dependencies
Architectural Issues

Ditto's codebase is implemented in Java. By default Java objects are mutable which does not work well in highly scalable, message driven architectures, as possible side-effects during runtime may occur when concurrently modifying objects. Because of that the Ditto team decided to use immutable objects wherever and whenever possible. Immutablity of the objects is ensured in unit tests.

Ditto's model modules and also the Ditto Java client are OSGi bundles so that they may be used in OSGi environments without much effort. The model modules are configured to be checked by a "binary compatibility checker" in the Maven build so that APIs are not broken unintentionally.

On a level higher than the model, Ditto uses a microservice based architecture. As Ditto's microservices are interacting via an event driven approach, Ditto provides a very modular setup on the microservice level meaning that single services must be not started at all if their functionality is not needed. Another benefit from this architecture is that the services may be scaled horizontally if more resources are required.

Ditto utilizes the CQRS and EventSourcing pattern and mainly uses "inserts" (append only) into the database in favor to "updates" in order to get a better performance when doing database writes. The only exception is the "search" microservice which uses traditional CRUD in order to update its search index.

Security Issues

There are no security issues known at the time of this writing.

Non-Code Aspects

Ditto comes with:

Conforms To UI/UX Guidelines
Not applicable (project doesn't provide UI)
Usability Details

Ditto does not provide a UI.

End of Life

None.

Standards

Ditto is able to process AMQP 1.0, AMQP 0.9.1, MQTT 3.1.1 and MQTT 5 messages which are all standardized (IoT) protocols.

Ditto can use JSON Web Tokens specified by RFC 7519 in order to extract "subjects" (e.g. a user-id) to use for the access control to twins.

Ditto's API documentation is defined using the OpenAPI specification 3.0.0 allowing both creation of an interactive HTML-based documentation and creation of skelettons for various programming languages based on that specification.

Starting with Ditto 2.4.0, Ditto supports the W3C Web of Things (WoT) Thing Description 1.1 standard.

Communities

Users of Ditto ask their questions via these channels:

  • The Gitter chatroom of Ditto
  • Via GitHub discussions for questions and general discussions
  • A Stackoverflow tag "eclipse-ditto" on which community quersions are answered by our committers
  • The mailing-list (ditto-dev@eclipse.org) is not actively used and watched

Ditto seeks for a good integration with Eclipse Hono in order to being able to create digital twins for all devices connected via Hono. The Ditto team is also in regular discussion with the Hono team.

Some of the Ditto team are committers in the Eclipse IoT Packages project aiming to simplify deployment and integration between Eclipse Hono and Ditto and additionally to showcase the integration with other OSS IoT projects.

In order to adopt the W3C WoT (Web of Things) Thing Description standard, the Ditto team also collaborates with the W3C WoT Working Group, evolving the standard and providing feedback.