Design The main aim of Slice is to support any OpenJPA application for distributed databases without any modification to the application. OpenJPA interacts with the underlying (not necessarily relational) database via StoreManager interface. Slice design approaches the problem of distributed persistence by developing a specialized StoreManager called DistributedStoreManager. This DistributedStoreManager is responsible for fanning out database operations to the set of databases instead of a single one as in case of standard JDBCStoreManager. DistributedStoreManager requires to identify one the databases when it stores a newly persistent instance. This decision is left to the user application via DistributionPolicy interface. When DistributedStoreManager loads any existing instance from the database into memory, the instance is tagged with the database identifier so that any subsequent update can be applied to the original database record. However, when the instance is detached from its persistence context and may be serialized to another remote process, the database identifier tag is no more remembered. While the application subsequently merges the detached instance in a possibly different persistence context, DistributedStoreManager will again invoke DistributionPolicy to determine the original physical datastore. The major limitation of the current model is the closure of any object graph must reside in the same database. There is no facility to perform a query that requires evaluation across multiple databases.