Version 0.3.0 of Kafka for JUnit released

Version 0.3.0 of Kafka for JUnit has been released. It features a couple of small improvements to the code and introduces metadata acquisition as well as seek-semantics when reading or observing topics.

more ...

Version 0.2.0 of Kafka for JUnit released

Version 0.2.0 of Kafka for Junit has been released. It features a couple of small improvements to the code and documentation, as well as the addition of ExternalKafkaCluster, which is an abstraction that allows you to use the same convenient accessor interfaces that you are already familiar with when interacting with embedded Kafka clusters, against external Kafka clusters.

more ...

Version 0.1.0 of Kafka for JUnit released

The first version of Kafka for JUnit has been released. It features a customizable embedded Kafka broker setup with Kafka Connect and a rich set of convenient accessors to interact with the cluster.

more ...

Using a default service provider

What if there is no module on the module path that provides a suitable implementation of Matcher? What if there is no implementation of that interface at all? In this case, it is possible to provide a default implementation alongside the public API. The benefit is, that once the API module is distributed, it can definitely be put to use, even if the default implementation does not exhibit the quality aspects that we aimed for. Providing a default implementation is quite simple.

more ...

Selecting services based on quality aspects

One of the shortcomings of the previous solution is that we are yet unable to select a provided service based on non-functional characteristics. As a user, I do not care if the chosen string matcher follows the design of the Knuth-Morris-Pratt or the Boyer-Moore algorithm. Instead, I want it to be stable and fast. If there is a new, but yet not thoroughly tested matcher available, I may want to use that for an experimental client. When we think in terms of suitable implementations for the problem we try to solve, we do not think about implementation internals at first, but rather about the non-functional requirements that govern the process of finding a suitable solution.

more ...