# Changelog

{% hint style="warning" %}
**This is the manual for older MicroStream versions (Version < 5.0).**

**The new documentation (Version >= 5.0) is located at:**

[https://docs.microstream.one/](https://docs.microstream.one/manual)
{% endhint %}

## 2.2

### Features

* Removed `SelfStoring` without replacement since it could not be used recursively and has no advantages over just creating a static storing utility method for a certain entity.
* Added state validation of value type objects (e.g. String, Integer, BigDecimal, etc.) upon loading. This is hardly relevant in practice, but not having it can lead to confusing hello-world-like test applications.
* `EmbeddedStorageManager` now implements `java.lang.AutoClosable`.
* Replaced all provisional `RuntimeException`s with either `PersistenceException` or `StorageException`, depending on the architectural level the corresponding source code it located.
* The two technically different root handling concepts ("default" and "custom") have been consolidated in a way that they are the same thing on the API level and interchangeable, meaning no more confusion with those root exception messages.
* All entity fields of type `transient EmbeddedStorageManager` now get a reference to the used `EmbeddedStorageManager` instance set upon loading/updating.
* The interfaces around storage managing have been enhanced so that it is now equally valid to just write `StorageManager` instead of `EmbeddedStorageManager`. (An `EmbeddedStorageManager` "is a" `StorageManager`)
* Slight technical consolidation of Lazy reference handling caused the type Lazy to be moved from the package `one.microstream.persistence.lazy` to `one.microstream.reference`. The reason is that the lazy handling has actually no inherent connection to persistence or storage. It's actually just a generic concept that can be used by those layers. See [Migration Guide](#migration-guide) below on how to adjust existing projects.

### Bugfixes

* Fixed an off-heap memory leak when restarting the storage multiple times in the same process.
* Fixed a bug where changing the fields of an entity type caused an exception. This was a regression bug from fixing a similar problem for another case in version 2.1. Now, both cases work correctly.

### Migration Guide

&#x20;All occurrences in user code of `one.microstream.persistence.lazy.Lazy` have to be refactored to `one.microstream.reference.Lazy`. Modern IDEs provide a functionality to "auto-import" missing types or automatically "organize imports", so this should be resolved with a proverbial push of a button.

## 2.1

### Features

* Android support\
  MicroStream is now Java-wise fully compatible with Android.
* Replaced all usages of `java.util.File` with `java.nio.file.Path` to allow using custom file implementations.
* Improved skipping functionality of Storers (see `EmbeddedStorageManager#createStorer` and `Storer#skip`).
* The class Lazy is now an interface to allow custom implementations. See Migration guide below.

### Bugfixes

* Fixed a few minor bugs in the skipping functionality of Storers.
* Fixed a bug where files remained locked after the storage was shut down.
* Fixed a bug where files remained locked after an exception in storage initialization.
* Enums defining an abstract method are now handled correctly.
* By default, all threads created by MicroStream now start with the prefix "MicroStream-". This can be customized by the new interface `StorageThreadNameProvider`.
* Fixed a NullPointerException in import.
* Fixed a bug that caused enums with a certain field layout to be loaded inconsistently.
* `java.util.Locale` is now persisted and created using Locale's `#toLanguageTag` and `#forLanguageTag`.

### Migration Guide

In the directory of an existing storage, in the TypeDictionary file (default name "PersistenceTypeDictionary.ptd"), all occurances of "one.microstream.persistence.lazy.Lazy" must be replaced with "one.microstream.persistence.lazy.Lazy$Default".
