[id='persistent-spi_{context}']
= {brandname} Persistence SPI

The {brandname} Service Provider Interface (SPI) enables read and write
operations to external storage through the `NonBlockingStore` interface and has
the following features:

Portability across JCache-compliant vendors::
{brandname} maintains compatibility between the `NonBlockingStore` interface
and the `JSR-107` JCache specification by using an adapter that handles
blocking code.

Simplified transaction integration::
{brandname} automatically handles locking so your implementations do not need
to coordinate concurrent access to persistent stores. Depending on the locking
mode you use, concurrent writes to the same key generally do not occur.
However, you should expect operations on the persistent storage to originate
from multiple threads and create implementations to tolerate this behavior.

Parallel iteration::
{brandname} lets you iterate over entries in persistent stores with multiple
threads in parallel.

Reduced serialization resulting in less CPU usage::
{brandname} exposes stored entries in a serialized format that can be
transmitted remotely. For this reason, {brandname} does not need to deserialize
entries that it retrieves from persistent storage and then serialize again when
writing to the wire.

[role="_additional-resources"]
.Additional resources
* link:{javadocroot}/org/infinispan/persistence/spi/package-summary.html[Persistence SPI]
* link:{javadocroot}/org/infinispan/persistence/spi/NonBlockingStore.html[NonBlockingStore]
* link:http://jcp.org/en/jsr/detail?id=107[JSR-107]
