> For the complete documentation index, see [llms.txt](https://manual.docs.microstream.one/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://manual.docs.microstream.one/3.0/changelog.md).

# 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 %}

## 3.0.1

Bugfix release for projects using an old non public version.

### **Bugfixes**

* Fixed bug in type dictionary parser for old legacy type handlers

## 3.0

### **Features**

* Added a convenience layer for defining [custom type handlers](/3.0/data-store/customizing/custom-type-handler.md)
* Fully automatic [lazy reference managing](/3.0/data-store/loading-data/lazy-loading/clearing-lazy-references.md#automatically) for clearing older `Lazy` references as free memory gets lower.
* Completed optimized persistence handling for [remaining types in JDK](/3.0/data-store/addendum/specialized-type-handlers.md) that are reasonable to appear in entity graphs. E.g. `Currency`, `Locale`, `URI`, `URL`, `Path`
* Compatibility with projects using java modules ("jigsaw")
* Added JavaDoc for common types like `StorageConnection`, `StorageManager`, `StorageController`, etc.
* Auto-recognition for CSV separator character in configuration files (e.g. legacy type mapping)
* JSR-107 compatible [JCache provider](/3.0/cache/overview.md) with additional [Hibernate cache region factory](/3.0/cache/use-cases/hibernate-second-level-cache.md)
* [Storage REST Service and Client](/3.0/data-store/rest-interface.md) are available to access the storage data via REST, a Java-Wrapper thereof and a Web-UI

### **Bugfixes**

* Fixed a potential race condition during loading
* Fixed a potential race condition and robustness issue during storing
* `StorageConnectionFoundation` instance is now properly created on demand.
* Removed unnecessary memory consumption exponential to channel count.
* Improved exception messages on invalid configuration values (file sizes etc.)
* Workarounded a JDK bug regarding file locking when importing files (JDK exception says another process is locking the file which is outright wrong)
* Fixed type resolving problems when different ClassLoaders are involved.
* Fixed a bug that caused loading of zero-length arrays to throw an exception despite everything being fine.
* Various smaller bugfixes for unnecessary exceptions in special cases and state robustness after exceptions.

### **Migration guide**

From 2.2 no actions necessary, for older versions see below.

## 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](/3.0/changelog.md#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".
