public abstract class BaseContext extends Object implements ObjectContext
Modifier and Type | Field and Description |
---|---|
protected DataChannel |
channel |
protected EntityResolver |
entityResolver |
protected ObjectContextGraphAction |
graphAction
Graph action that handles property changes
|
protected QueryCache |
queryCache |
protected static ThreadLocal<ObjectContext> |
threadObjectContext
A holder of a ObjectContext bound to the current thread.
|
protected Map<String,Object> |
userProperties
Stores user defined properties associated with this DataContext.
|
protected boolean |
validatingObjectsOnCommit |
FLUSH_CASCADE_SYNC, FLUSH_NOCASCADE_SYNC, GRAPH_CHANGED_SUBJECT, GRAPH_FLUSHED_SUBJECT, GRAPH_ROLLEDBACK_SUBJECT, ROLLBACK_CASCADE_SYNC
Modifier | Constructor and Description |
---|---|
protected |
BaseContext() |
Modifier and Type | Method and Description |
---|---|
protected void |
attachToChannel(DataChannel channel)
Attaches to a provided DataChannel.
|
protected void |
attachToRuntime(Injector injector)
Attaches this context to the CayenneRuntime whose Injector is passed as
an argument to this method.
|
protected boolean |
attachToRuntimeIfNeeded()
Checks whether this context is attached to Cayenne runtime stack and if
not, attempts to attach itself to the runtime using Injector returned
from the call to
CayenneRuntime.getThreadInjector() . |
<T> ResultBatchIterator<T> |
batchIterator(Select<T> query,
int size)
Creates a ResultBatchIterator based on the provided query and batch size.
|
static void |
bindThreadObjectContext(ObjectContext context)
Binds a ObjectContext to the current thread.
|
abstract void |
commitChanges()
Flushes all changes to objects in this context to the parent DataChannel,
cascading flush operation all the way through the stack, ultimately
saving data in the database.
|
abstract void |
commitChangesToParent()
Flushes all changes to objects in this context to the parent DataChannel.
|
abstract Collection<?> |
deletedObjects()
Returns a collection of objects that are registered with this
ObjectContext and have a state PersistenceState.DELETED
|
void |
deleteObject(Object object)
Schedules deletion of a persistent object.
|
void |
deleteObjects(Collection<?> objects)
Schedules deletion of a collection of persistent objects.
|
<T> void |
deleteObjects(T... objects)
Schedules deletion of one or more persistent objects.
|
protected void |
fireDataChannelChanged(Object postedBy,
GraphDiff changes) |
protected void |
fireDataChannelCommitted(Object postedBy,
GraphDiff changes) |
protected void |
fireDataChannelRolledback(Object postedBy,
GraphDiff changes) |
DataChannel |
getChannel()
Returns an DataChannel used by this context.
|
EntityResolver |
getEntityResolver()
Returns EntityResolver that stores all mapping information accessible by
this ObjectContext.
|
EventManager |
getEventManager()
Returns EventManager associated with the ObjectStore.
|
abstract GraphManager |
getGraphManager()
Returns GraphManager that manages object graph associated with this
context.
|
QueryCache |
getQueryCache() |
static ObjectContext |
getThreadObjectContext()
Returns the ObjectContext bound to the current thread.
|
protected Map<String,Object> |
getUserProperties()
Returns a map of user-defined properties associated with this
DataContext.
|
Object |
getUserProperty(String key)
Returns a user-defined property previously set via 'setUserProperty'.
|
protected void |
injectInitialValue(Object obj)
If ObjEntity qualifier is set, asks it to inject initial value to an
object.
|
void |
invalidateObjects(Collection<?> objects)
Invalidates a Collection of persistent objects.
|
<T> void |
invalidateObjects(T... objects)
Invalidates one or more persistent objects.
|
boolean |
isValidatingObjectsOnCommit()
Returns whether this ObjectContext performs object validation before
commit is executed.
|
<T> void |
iterate(Select<T> query,
ResultIteratorCallback<T> callback)
Creates a ResultIterator based on the provided query and passes it to a
callback for processing.
|
abstract <T> ResultIterator<T> |
iterator(Select<T> query)
Creates a ResultIterator based on the provided query.
|
<T extends Persistent> |
localObject(T objectFromAnotherContext)
Returns a local copy of 'objectFromAnotherContext' object.
|
abstract Collection<?> |
modifiedObjects()
Returns a collection of objects that are registered with this
ObjectContext and have a state PersistenceState.MODIFIED
|
abstract <T> T |
newObject(Class<T> persistentClass)
Creates a new persistent object of a given class scheduled to be inserted
to the database on next commit.
|
abstract Collection<?> |
newObjects()
Returns a collection of objects that are registered with this
ObjectContext and have a state PersistenceState.NEW
|
protected abstract GraphDiff |
onContextFlush(ObjectContext originatingContext,
GraphDiff changes,
boolean cascade) |
GraphDiff |
onSync(ObjectContext originatingContext,
GraphDiff changes,
int syncType)
Processes synchronization request from a child ObjectContext, returning a GraphDiff
that describes changes to objects made on the receiving end as a result of
synchronization.
|
abstract QueryResponse |
performGenericQuery(Query query)
Executes any kind of query providing the result in a form of
QueryResponse.
|
abstract List |
performQuery(Query query)
Executes a selecting query, returning a list of persistent objects or
data rows.
|
void |
prepareForAccess(Persistent object,
String property,
boolean lazyFaulting)
A callback method that child Persistent objects are expected to call
before accessing property values.
|
void |
propertyChanged(Persistent object,
String property,
Object oldValue,
Object newValue)
A callback method that child Persistent objects are expected to call from
inside the setter after modifying a value of a persistent property,
including "simple" and "arc" properties.
|
abstract void |
registerNewObject(Object object)
Registers a transient object with the context.
|
abstract void |
rollbackChanges()
Resets all uncommitted changes made to the objects in this ObjectContext,
cascading rollback operation all the way through the stack.
|
abstract void |
rollbackChangesLocally()
Resets all uncommitted changes made to the objects in this ObjectContext.
|
<T> List<T> |
select(Select<T> query)
Executes a selecting query, returning a list of persistent objects or
data rows.
|
<T> T |
selectFirst(Select<T> query)
Selects a single object using provided query.
|
<T> T |
selectOne(Select<T> query)
Executes a selecting query, returning either NULL if query matched no
objects, or a single object.
|
void |
setChannel(DataChannel channel)
Sets a new DataChannel for this context.
|
void |
setEntityResolver(EntityResolver entityResolver) |
void |
setQueryCache(QueryCache queryCache)
Sets a QueryCache to be used for storing cached query results.
|
void |
setUserProperty(String key,
Object value)
Sets a user-defined property.
|
void |
setValidatingObjectsOnCommit(boolean flag)
Sets the property defining whether this ObjectContext should perform
object validation before commit is executed.
|
abstract Collection<?> |
uncommittedObjects()
Returns a collection of MODIFIED, DELETED or NEW objects.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
hasChanges
onQuery
protected static final ThreadLocal<ObjectContext> threadObjectContext
protected transient DataChannel channel
protected transient QueryCache queryCache
protected transient EntityResolver entityResolver
protected boolean validatingObjectsOnCommit
protected ObjectContextGraphAction graphAction
public static ObjectContext getThreadObjectContext() throws IllegalStateException
IllegalStateException
- if there is no ObjectContext bound to the current thread.public static void bindThreadObjectContext(ObjectContext context)
getThreadObjectContext()
. Using null parameter will
unbind currently bound ObjectContext.protected boolean attachToRuntimeIfNeeded()
CayenneRuntime.getThreadInjector()
. If thread
Injector is not available and the context is not attached, throws
CayenneRuntimeException.
This method is called internally by the context before access to transient variables to allow the context to attach to the stack lazily following deserialization.
protected void attachToRuntime(Injector injector)
protected void attachToChannel(DataChannel channel)
public abstract void commitChanges()
ObjectContext
commitChanges
in interface ObjectContext
public abstract void commitChangesToParent()
ObjectContext
ObjectContext.commitChanges()
, but no cascading flush occurs.commitChangesToParent
in interface ObjectContext
public void deleteObject(Object object) throws DeleteDenyException
ObjectContext
deleteObject
in interface ObjectContext
DeleteDenyException
- if a DeleteRule.DENY
delete
rule is applicable for object deletion.public abstract Collection<?> deletedObjects()
ObjectContext
deletedObjects
in interface ObjectContext
public DataChannel getChannel()
ObjectContext
getChannel
in interface ObjectContext
public void setChannel(DataChannel channel)
public EntityResolver getEntityResolver()
ObjectContext
getEntityResolver
in interface DataChannel
getEntityResolver
in interface ObjectContext
public void setEntityResolver(EntityResolver entityResolver)
public boolean isValidatingObjectsOnCommit()
public void setValidatingObjectsOnCommit(boolean flag)
public <T extends Persistent> T localObject(T objectFromAnotherContext)
ObjectContext
Note that passing an object with a non-existing id, may later result in FaultFailureException on attempt to read returned object properties.
localObject
in interface ObjectContext
public abstract GraphManager getGraphManager()
ObjectContext
getGraphManager
in interface ObjectContext
public abstract Collection<?> modifiedObjects()
ObjectContext
modifiedObjects
in interface ObjectContext
public abstract <T> T newObject(Class<T> persistentClass)
ObjectContext
newObject
in interface ObjectContext
public abstract void registerNewObject(Object object)
ObjectContext
ObjectContext.newObject(Class)
is that a user creates an object herself,
before attaching it to the context, instead of relying on Cayenne to do
that.registerNewObject
in interface ObjectContext
object
- new object that needs to be made persistent.public abstract Collection<?> newObjects()
ObjectContext
newObjects
in interface ObjectContext
public abstract QueryResponse performGenericQuery(Query query)
ObjectContext
performGenericQuery
in interface ObjectContext
public abstract List performQuery(Query query)
ObjectContext
performQuery
in interface ObjectContext
public <T> List<T> select(Select<T> query)
ObjectContext
select
in interface ObjectContext
public <T> T selectOne(Select<T> query)
ObjectContext
CayenneRuntimeException
is thrown.selectOne
in interface ObjectContext
public <T> T selectFirst(Select<T> query)
ObjectContext
If it matched more than one object, the first object from the list is
returned. This makes 'selectFirst' different from
ObjectContext.selectOne(Select)
, which would throw in this situation.
'selectFirst' is useful e.g. when the query is ordered and we only want
to see the first object (e.g. "most recent news article"), etc.
Selecting the first object via "Select.selectFirst(ObjectContext)" is more comprehensible than selecting via "ObjectContext.selectFirst(Select)", because implementations of "Select" set fetch size limit to one.
selectFirst
in interface ObjectContext
public <T> void iterate(Select<T> query, ResultIteratorCallback<T> callback)
ObjectContext
iterate
in interface ObjectContext
public abstract <T> ResultIterator<T> iterator(Select<T> query)
ObjectContext
ObjectContext.iterate(Select, ResultIteratorCallback)
as an alternative.iterator
in interface ObjectContext
public <T> ResultBatchIterator<T> batchIterator(Select<T> query, int size)
ObjectContext
batchIterator
in interface ObjectContext
public void prepareForAccess(Persistent object, String property, boolean lazyFaulting)
ObjectContext
prepareForAccess
in interface ObjectContext
public void propertyChanged(Persistent object, String property, Object oldValue, Object newValue)
ObjectContext
propertyChanged
in interface ObjectContext
public abstract void rollbackChanges()
ObjectContext
rollbackChanges
in interface ObjectContext
public abstract void rollbackChangesLocally()
ObjectContext
ObjectContext.rollbackChanges()
, but rollback is local to this
context and no cascading changes undoing occurs.rollbackChangesLocally
in interface ObjectContext
public abstract Collection<?> uncommittedObjects()
ObjectContext
uncommittedObjects
in interface ObjectContext
public QueryCache getQueryCache()
public void setQueryCache(QueryCache queryCache)
public EventManager getEventManager()
getEventManager
in interface DataChannel
public GraphDiff onSync(ObjectContext originatingContext, GraphDiff changes, int syncType)
DataChannel
onSync
in interface DataChannel
originatingContext
- an ObjectContext that initiated the sync. Can be null.changes
- diff from the context that initiated the sync.syncType
- One of DataChannel.FLUSH_NOCASCADE_SYNC
, DataChannel.FLUSH_CASCADE_SYNC
,
DataChannel.ROLLBACK_CASCADE_SYNC
.protected abstract GraphDiff onContextFlush(ObjectContext originatingContext, GraphDiff changes, boolean cascade)
protected void fireDataChannelCommitted(Object postedBy, GraphDiff changes)
protected void fireDataChannelRolledback(Object postedBy, GraphDiff changes)
protected void fireDataChannelChanged(Object postedBy, GraphDiff changes)
public void invalidateObjects(Collection<?> objects)
ObjectContext
invalidateObjects
in interface ObjectContext
public <T> void invalidateObjects(T... objects)
ObjectContext
ObjectContext.invalidateObjects(Collection)
only with a vararg argument list
for easier invalidation of individual objects. If no arguments are passed
to this method, it does nothing.invalidateObjects
in interface ObjectContext
protected Map<String,Object> getUserProperties()
public Object getUserProperty(String key)
getUserProperty
in interface ObjectContext
public void setUserProperty(String key, Object value)
setUserProperty
in interface ObjectContext
protected void injectInitialValue(Object obj)
public <T> void deleteObjects(T... objects) throws DeleteDenyException
ObjectContext
ObjectContext.deleteObjects(Collection)
only with a vararg argument list for
easier deletion of individual objects.deleteObjects
in interface ObjectContext
DeleteDenyException
- if a DeleteRule.DENY
delete
rule is applicable for object deletion.public void deleteObjects(Collection<?> objects) throws DeleteDenyException
ObjectContext
deleteObjects
in interface ObjectContext
DeleteDenyException
- if a DeleteRule.DENY
delete
rule is applicable for object deletion.Copyright © 2001–2018 Apache Cayenne. All rights reserved.