EOObjectStoreCoordinator
- Inherits from:
- EOObjectStore : NSObject
- Package:
- com.apple.yellow.eocontrol
Class Description
EOObjectStoreCoordinator is a part of the control layer's object storage abstraction. An EOObjectStoreCoordinator object acts as a single object store by directing one or more EOCooperatingObjectStores in managing objects from distinct data repositories.
Note: This class doesn't exist in the com.apple.client.eocontrol package. |
For more general information on the object storage abstraction, see "Object Storage Abstraction" in the introduction to the EOControl Framework.
EOObjectStore Methods
EOObjectStoreCoordinator overrides the following EOObjectStore methods:
- objectsWithFetchSpecification
- objectsForSourceGlobalID
- faultForGlobalID
- arrayFaultWithSourceGlobalID
- refaultObject
- saveChangesInEditingContext
- invalidateAllObjects
- invalidateObjectsWithGlobalIDs
With the exception of saveChangesInEditingContext
,
EOObjectStoreCoordinator's implementation of these methods simply
forwards the message to an EOCooperatingObjectStore or stores. The
message invalidateAllObjects
is forwarded
to all of a coordinator's cooperating stores. The rest of the
messages are forwarded to the appropriate store based on which store
responds true to the messages ownsGlobalID, ownsObject, and handlesFetchSpecification (which
message is used depends on the context). The EOObjectStore methods
listed above aren't documented in this class specification (except for saveChangesInEditingContext
)-for
descriptions of them, see the EOObjectStore and EODatabaseContext
(EOAccess) class specifications
For the method saveChangesInEditingContext, the coordinator guides its cooperating stores through a multi-pass save protocol in which each cooperating store saves its own changes and forwards remaining changes to the other of the coordinator's stores. For example, if in its recordChangesInEditingContext method one cooperating store notices the removal of an object from an "owning" relationship but that object belongs to another cooperating store, it informs the other store by sending the coordinator a forwardUpdateForObject message. For a more details, see the method description for saveChangesInEditingContext.
Although it manages objects from multiple repositories, EOObjectStoreCoordinator
doesn't absolutely guarantee consistent updates when saving changes
across object stores. If your application requires guaranteed distributed
transactions, you can either provide your own solution by creating
a subclass of EOObjectStoreCoordinator that integrates with a TP
monitor, use a database server with built-in distributed transaction
support, or design your application to write to only one object
store per save operation (though it may read from multiple object
stores). For more discussion of this subject, see the method description
for saveChangesInEditingContext
.
Constants
EOObjectStoreCoordinator defines String constants for the notifications it posts. For more information, see the section "Notifications".
Method Types
- Constructors
- EOObjectStoreCoordinator
- Setting the default coordinator
- setDefaultCoordinator
- defaultCoordinator
- Managing EOCooperatingObjectStores
- addCooperatingObjectStore
- removeCooperatingObjectStore
- cooperatingObjectStores
- Saving changes
- saveChangesInEditingContext
- Communication between EOCooperatingObjectStores
- forwardUpdateForObject
- valuesForKeys
- Returning EOCooperatingObjectStores
- objectStoreForGlobalID
- objectStoreForFetchSpecification
- objectStoreForObject
- Getting the userInfo dictionary
- userInfo
- setUserInfo
Constructors
EOObjectStoreCoordinator
public
EOObjectStoreCoordinator
()
Static Methods
defaultCoordinator
public static Object
defaultCoordinator
()
setDefaultCoordinator
public static void
setDefaultCoordinator
(EOObjectStoreCoordinator coordinator)
Instance Methods
addCooperatingObjectStore
public void
addCooperatingObjectStore
(EOCooperatingObjectStore store)
See Also: removeCooperatingObjectStore, cooperatingObjectStores
cooperatingObjectStores
public NSArray
cooperatingObjectStores
()
See Also: addCooperatingObjectStore, removeCooperatingObjectStore
forwardUpdateForObject
public void
forwardUpdateForObject
(
Object object,
NSDictionary changes)
This method first locates the EOCooperatingObjectStore that's responsible for applying changes, and then it sends the store the message recordUpdateForObject.
objectStoreForFetchSpecification
public EOCooperatingObjectStore
objectStoreForFetchSpecification
(EOFetchSpecification fetchSpecification)
See Also: objectStoreForGlobalID, objectStoreForObject
objectStoreForGlobalID
public EOCooperatingObjectStore
objectStoreForGlobalID
(EOGlobalID globalID)
See Also: objectStoreForFetchSpecification, objectStoreForObject
objectStoreForObject
public EOCooperatingObjectStore
objectStoreForObject
(Object object)
See Also: objectStoreForFetchSpecification, objectStoreForGlobalID
removeCooperatingObjectStore
public void
removeCooperatingObjectStore
(EOCooperatingObjectStore store)
See Also: addCooperatingObjectStore, cooperatingObjectStores
saveChangesInEditingContext
public void
saveChangesInEditingContext
(EOEditingContext anEditingContext)
- The receiver sends each of its EOCooperatingObjectStores the message prepareForSaveWithCoordinator, which informs them that a multi-pass save operation is beginning. When the EOCooperatingObjectStore is an EODatabaseContext (EOAccess), it takes this opportunity to generate primary keys for any new objects in the EOEditingContext.
- The receiver sends each of its EOCooperatingObjectStores the
message recordChangesInEditingContext,
which prompts them to examine the changed objects in the editing context,
record operations that need to be performed, and notify the receiver
of any changes that need to be forwarded to other stores. For example,
if in its
recordChangesInEditingContext
method one EOCooperatingObjectStore notices the removal of an object from an "owning" relationship but that object belongs to another EOCooperatingObjectStore, it informs the other store by sending the coordinator a forwardUpdateForObject message. - The receiver sends each of its EOCooperatingObjectStores the message ownsGlobalID. This tells the stores to transmit their changes to their underlying databases. When the EOCooperatingObjectStore is an EODatabaseContext, it responds to this message by taking the EODatabaseOperations (EOAccess) that were constructed in the previous step, constructing EOAdaptorOperations (EOAccess) from them, and giving the EOAdaptorOperations to an available EOAdaptorChannel (EOAccess) for execution.
- If
ownsGlobalID
fails for any of the EOCooperatingObjectStores, all stores are sent the message rollbackChanges. - If
ownsGlobalID
succeeds for all EOCooperatingObjectStores, the receiver sends them the message commitChanges, which has the effect of telling the adaptor to commit the changes. - If
commitChanges
fails for a particular EOCooperatingObjectStore, that store and all subsequent ones are sent the message rollbackChanges. However, the stores that have already committed their changes do not roll back. In other words, the coordinator doesn't perform the two-phase commit protocol necessary to guarantee consistent distributed update.
This method raises an exception if an error occurs.
setUserInfo
public void
setUserInfo
(NSDictionary dictionary)
See Also: userInfo
userInfo
public NSDictionary
userInfo
()
See Also: setUserInfo
valuesForKeys
public NSDictionary
valuesForKeys
(
NSArray keys,
Object object)
valuesForKeys
message (through
the coordinator). Notifications
The following notifications are declared and posted by EOObjectStoreCoordinator.
CooperatingObjectStoreWasAdded
public static final String CooperatingObjectStoreWasAdded
When an EOObjectStoreCoordinator
receives an addCooperatingObjectStore message
and adds an EOCooperatingObjectStore to its list, it posts CooperatingObjectStoreWasAdded
to
notify observers.
Notification Object | The EOObjectStoreCoordinator |
userInfo Dictionary | None |
CooperatingObjectStoreWasRemoved
public static final String CooperatingObjectStoreWasRemoved
CooperatingObjectStoreWasRemoved
to
notify observers.Notification Object | The EOObjectStoreCoordinator |
userInfo Dictionary | None |
CooperatingObjectStoreNeeded
public static final String CooperatingObjectStoreNeeded
- Notification Object
- The EOObjectStoreCoordinator
- userInfo Dictionary
- Contains the following keys and values:
Key Value globalID globalID for the operation fetchSpecification fetch specification for the operation object object for the operation