The AbstractBundlePersistenceManager acts as base for all
persistence managers that store the state in a NodePropBundle.

The state and all property states of one node are stored together in one
record. Property values of a certain size can be store outside of the bundle.
This currently only works for binary properties. NodeReferences are not
included in the bundle since they are addressed by the target id.

Some strings like namespaces and local names are additionally managed by
separate indexes. only the index number is serialized to the records which
reduces the amount of memory used.

Special treatment is performed for the properties "jcr:uuid", "jcr:primaryType"
and "jcr:mixinTypes". As they are also stored in the node state they are not
included in the bundle but generated when required.

In order to increase performance, there are 2 caches maintained. One is the
BundleCache that caches already loaded bundles. The other is the
LRUNodeIdCache that caches non-existent bundles. This is useful
because a lot of exists(NodeId) calls are issued that would result
in a useless SQL execution if the desired bundle does not exist.

getBinding

init

Initializes the persistence manager. The persistence manager is
permanently bound to the given context, and any required external
resources are acquired.

An appropriate exception is thrown if the persistence manager
initialization fails for whatever reason. In this case the
state of the persistence manager is undefined and the instance
should be discarded.
Initializes the internal structures of this abstract persistence manager.

store

Right now, this iterates over all items in the changelog and
calls the individual methods that handle single item states
or node references objects. Properly implemented, this method
should ensure that changes are either written completely to
the underlying persistence layer, or not at all.
Atomically saves the given set of changes.