Package org.apache.cayenne.access
Class ObjectStore
java.lang.Object
org.apache.cayenne.access.ObjectStore
- All Implemented Interfaces:
Serializable
,EventListener
,SnapshotEventListener
,GraphChangeHandler
,GraphManager
- Direct Known Subclasses:
NoSyncObjectStore
public class ObjectStore
extends Object
implements Serializable, SnapshotEventListener, GraphManager
ObjectStore stores objects using their ObjectId as a key. It works as a dedicated
object cache for a DataContext. Users rarely need to access ObjectStore directly, as
DataContext serves as a facade, providing cover methods for most ObjectStore
operations.
- Since:
- 1.0
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected Map
<Object, ObjectDiff> protected DataContext
The DataContext that owns this ObjectStore.protected DataRowStore
Stores a reference to the DataRowStore.protected boolean
protected Map
<Object, Persistent> Map that tracks flattened paths for given object Id that is present in db. -
Constructor Summary
ConstructorDescriptionObjectStore
(DataRowStore dataRowCache, Map<Object, Persistent> objectMap) Creates an ObjectStore withDataRowStore
and a map to use for storing registered objects. -
Method Summary
Modifier and TypeMethodDescriptionvoid
arcCreated
(Object nodeId, Object targetNodeId, ArcId arcId) Notifies implementing object that a new arc was created between two nodes.void
arcDeleted
(Object nodeId, Object targetNodeId, ArcId arcId) Notifies implementing object that an arc between two nodes was deleted.Returns a snapshot for ObjectId from the underlying snapshot cache.Returns a DataRowStore associated with this ObjectStore.getFlattenedId
(ObjectId objectId, String path) getFlattenedIds
(ObjectId objectId) getFlattenedPathIdMap
(ObjectId objectId) Returns a registered DataObject or null of no object exists for the ObjectId.Returns an iterator over the registered objects.getSnapshot
(ObjectId oid) Returns a snapshot for ObjectId from the underlying snapshot cache.boolean
Returnstrue
if there are any modified, deleted or new objects registered with this ObjectStore,false
otherwise.void
markFlattenedPath
(ObjectId objectId, String path, ObjectId id) Mark that flattened path for object has data row in DB.void
nodeCreated
(Object nodeId) Notifies implementing object that a new node was created in the graph.void
nodeIdChanged
(Object nodeId, Object newId) Does nothing.void
nodePropertyChanged
(Object nodeId, String property, Object oldValue, Object newValue) Records dirty object snapshot.void
nodeRemoved
(Object nodeId) Notifies implementing object that a node was removed from the graph.objectsInState
(int state) Return a subset of registered objects that are in a certain persistence state.void
Reverts changes to all stored uncomitted objects.void
objectsUnregistered
(Collection objects) Evicts a collection of DataObjects from the ObjectStore, invalidates the underlying cache snapshots.void
postprocessAfterCommit
(GraphDiff parentChanges) Internal unsynchronized method to process objects state after commit.Returns all registered DataObjects.int
Returns a number of objects currently registered with this ObjectStore.void
registerNode
(Object nodeId, Object nodeObject) "Registers" a graph node, usually storing the node in some internal map using its id as a key.void
setContext
(DataContext context) void
setDataRowCache
(DataRowStore dataRowCache) Sets parent DataRowStore.void
snapshotsChanged
(SnapshotEvent event) SnapshotEventListener implementation that processes snapshot change event, updating DataObjects that have the changes.unregisterNode
(Object nodeId) "Unregisters" a graph node, forgetting any information associated with nodeId.
-
Field Details
-
objectMap
-
changes
-
trackedFlattenedPaths
Map that tracks flattened paths for given object Id that is present in db. Presence of path in this map is used to separate insert from update case of flattened records.- Since:
- 4.1
-
dataRowCache
Stores a reference to the DataRowStore.Serialization note: It is up to the owner of this ObjectStore to initialize DataRowStore after deserialization of this object. ObjectStore will not know how to restore the DataRowStore by itself.
-
dataRowCacheSet
protected boolean dataRowCacheSet -
context
The DataContext that owns this ObjectStore.
-
-
Constructor Details
-
ObjectStore
Creates an ObjectStore withDataRowStore
and a map to use for storing registered objects. Passed map doesn't require any special synchronization behavior, as ObjectStore is synchronized itself.- Since:
- 3.0
-
-
Method Details
-
registeredObjectsCount
public int registeredObjectsCount()Returns a number of objects currently registered with this ObjectStore.- Since:
- 1.2
-
getDataRowCache
Returns a DataRowStore associated with this ObjectStore. -
setDataRowCache
Sets parent DataRowStore. Registers to receive SnapshotEvents if the cache is configured to allow ObjectStores to receive such events. -
objectsUnregistered
Evicts a collection of DataObjects from the ObjectStore, invalidates the underlying cache snapshots. Changes objects state to TRANSIENT. This method can be used for manual cleanup of Cayenne cache. -
objectsRolledBack
public void objectsRolledBack()Reverts changes to all stored uncomitted objects.- Since:
- 1.1
-
postprocessAfterCommit
Internal unsynchronized method to process objects state after commit.- Since:
- 1.2
-
getCachedSnapshot
Returns a snapshot for ObjectId from the underlying snapshot cache. If cache contains no snapshot, a null is returned.- Since:
- 1.1
-
getSnapshot
Returns a snapshot for ObjectId from the underlying snapshot cache. If cache contains no snapshot, it will attempt fetching it using provided QueryEngine. If fetch attempt fails or inconsistent data is returned, underlying cache will throw a CayenneRuntimeException.- Since:
- 1.2
-
getObjectIterator
Returns an iterator over the registered objects. -
hasChanges
public boolean hasChanges()Returnstrue
if there are any modified, deleted or new objects registered with this ObjectStore,false
otherwise. This method will treat "phantom" modifications are real ones. I.e. if you "change" an object property to an equivalent value, this method will still think such object is modified. Phantom modifications are only detected and discarded during commit. -
objectsInState
Return a subset of registered objects that are in a certain persistence state. Collection is returned by copy. -
snapshotsChanged
SnapshotEventListener implementation that processes snapshot change event, updating DataObjects that have the changes.Implementation note: This method should not attempt to alter the underlying DataRowStore, since it is normally invoked *AFTER* the DataRowStore was modified as a result of some external interaction.
- Specified by:
snapshotsChanged
in interfaceSnapshotEventListener
- Since:
- 1.1
-
getContext
- Since:
- 1.2
-
setContext
- Since:
- 1.2
-
getNode
Returns a registered DataObject or null of no object exists for the ObjectId.- Specified by:
getNode
in interfaceGraphManager
- Since:
- 1.2
-
registeredNodes
Returns all registered DataObjects. List is returned by copy and can be modified by the caller.- Specified by:
registeredNodes
in interfaceGraphManager
- Since:
- 1.2
-
registerNode
Description copied from interface:GraphManager
"Registers" a graph node, usually storing the node in some internal map using its id as a key.- Specified by:
registerNode
in interfaceGraphManager
- Since:
- 1.2
-
unregisterNode
Description copied from interface:GraphManager
"Unregisters" a graph node, forgetting any information associated with nodeId.- Specified by:
unregisterNode
in interfaceGraphManager
- Since:
- 1.2
-
nodeIdChanged
Does nothing.- Specified by:
nodeIdChanged
in interfaceGraphChangeHandler
- Since:
- 1.2
-
nodeCreated
Description copied from interface:GraphChangeHandler
Notifies implementing object that a new node was created in the graph.- Specified by:
nodeCreated
in interfaceGraphChangeHandler
- Since:
- 1.2
-
nodeRemoved
Description copied from interface:GraphChangeHandler
Notifies implementing object that a node was removed from the graph.- Specified by:
nodeRemoved
in interfaceGraphChangeHandler
- Since:
- 1.2
-
nodePropertyChanged
Records dirty object snapshot.- Specified by:
nodePropertyChanged
in interfaceGraphChangeHandler
- Since:
- 1.2
-
arcCreated
Description copied from interface:GraphChangeHandler
Notifies implementing object that a new arc was created between two nodes.- Specified by:
arcCreated
in interfaceGraphChangeHandler
- Since:
- 1.2
-
arcDeleted
Description copied from interface:GraphChangeHandler
Notifies implementing object that an arc between two nodes was deleted.- Specified by:
arcDeleted
in interfaceGraphChangeHandler
- Since:
- 1.2
-
getFlattenedId
- Since:
- 4.2
-
getFlattenedIds
- Since:
- 4.2
-
getFlattenedPathIdMap
- Since:
- 4.2.1
-
markFlattenedPath
Mark that flattened path for object has data row in DB.- Since:
- 4.1
-