Skip to content

Latest commit

 

History

History
129 lines (94 loc) · 4.8 KB

CHANGELOG.md

File metadata and controls

129 lines (94 loc) · 4.8 KB

UNRELEASED

This release represents a major version bump: many new features have been added and large parts of the codebase have been refactored. Although a lot of effort has gone into keeping API changes minimal, this release is unfortunately not source or binary compatible with the 1.x versions.

The following is a list of major changes. Please see the git commit log git log 1.x..v2.0.0 for details.

Structural Changes

The core project has been split into many modules, as described in the README, each having distinct functionality.

In a nutshell, packages in xyz.driver.core have been moved to separate sbt projects. For example, all classes contained in xyz.driver.core.messaging have been moved to the project core-messaging, and xyz.driver.core.storage to core-storage. Thus, the modules providing utilities from the latest 1.x version are:

  • core-database
  • core-rest
  • core-messaging
  • core-storage

Along those functional modules, there are the supporting modules:

  • core-types, which contains common types, such as time, date and IDs
  • core, which contains the app initialization system and also depends on all other modules, acting as an indirection for backwards-compatibility.

Furthermore, some new modules have been added which will be explained later on:

  • core-reporting (tracing and logging utilities)
  • core-init (new initialization framework)
  • core-testkit (core-specific parts of driver-test-utils)

The split was done in order to reduce coupling between components. Our internal domain-model now only depends on core-rest and core-messaging. Services can choose if and what other parts of core to use, although it is recommended they use the core-init module.

Although the split was mostly seemless, some cyclic dependencies between packages were discovered. Since these are no longer possible in a multi-project architecture, some source-breaking changes also had to made. These will be listed later and marked as such.

New Features

Reporting Utilities

A suite of tracing and logging utilities, based on the OpenTrace specification, have been added as the core-reporting module. This module plays a central role because it greatly simplifies debugging distributed applications, and as such is depended upon by all other modules.

It embraces the "implicit context" pattern, and requires a SpanContext for all logging actions. This context can be thought of as a more type-safe "Message Diagnostic Context" and also replaces the slf4j-based MDC utilities in previous versions of core.

Typeclass-based service discovery

A type-class based service discovery has been added in xyz.driver.rest.DnsDiscovery. It allows seemless instantiation of client implementations that provide a "Service Descriptor" type class. It also does not require any configuration (except for overrides) and uses the DNS to resolve service hosts.

Initialization Framework

A trait-based initialization framework has been added in core-init. It implements common application startup procedures and initializes common utilities for cloud-based web services. It integrates all other core modules in an idiomatic way.

API-Breaking Changes

Due to the structural changes mentioned previously, some API-breaking changes were made:

  • xyz.driver.rest.errors.DatabaseException has been moved to xyz.driver.core.DatabaseException, into the project core-types. This move happened because both the rest and database module require this exception.

  • xyz.driver.core.FutureExtensions has been moved to xyz.driver.core.rest as it only contained logic that dealt with service exceptions, something that belongs into core-rest and must not be depended upon by core-types.

  • all classes but AuthStub in xyz.driver.test have been moved to xyz.driver.core.testkit and are available in th core-testkit. (AuthStub has been moved to xyz.driver.users.testkit in the project users-testkit in the users service repo)

Deprecation Notices

Several major features have been deprecated and will be removed in the future.

  • xyz.driver.core.app will stop receiving updates as xyz.driver.core.init matures

  • xyz.driver.core.time and xyz.driver.core.date will be replaced by their java 8 counterparts

  • the initial object-storage utilities in xyz.driver.core.file will be removed in favor of the ones provided in core-storage

  • the first version of the message bus api xyz.driver.core.pubsub will be replaced by core-messaging

  • xyz.driver.driver.logging will be removed as it is made obsolete by core-reporting

Deprecation of other classes in the core support module is yet to be determined. Please open an issue if you have any comments on them.

Version 1.x

Please see git commit logs for changes prior to version 2.