Best Practice

Storing Hidden Encapsulated Objects

In some cases, it can be necessary to store modified encapsulated objects that cannot be a accessed from your code.

public class ForeignObject
{
...
private HiddenObject hidden;
...
}

In the upper code snippet the "hidden" object cannot be accessed by store(myForeignObject.hidden) if no getter is available. To allow such hidden objects to be stored after they have been modified you have to options:

  1. Set the global storing strategy of the MicroStream instance to eager storing or

  2. Implement and set a custom PersistenceEagerStoringFieldEvaluator for this field.

EmbeddedStorageManager storage = EmbeddedStorage.Foundation()
.onConnectionFoundation(
f -> f.setReferenceFieldEagerEvaluator(
new CustomEagerStoringFieldEvaluator()
)
)
.start();

Use Immutable data models

To increase performance use immutable sub-graphs as often as possible. Storing those with the provided convenience storing methods or using a thread local storer to insert those sub-graphs concurrently can give a great performance boost.