aboutsummaryrefslogtreecommitdiff
path: root/CHANGELOG.md
blob: 313e71278b34e294469f59732316d30a0dc3c522 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# 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](src/main/scala/xyz/driver/core) 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.