Inherits From:
EOObjectStore : NSObject
Package:
com.apple.yellow.eocontrol (Yellow Box)
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. It is for use in WebObjects and Yellow Box applications only; there is no equivalent class for Java Client applications. 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:
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 .
The following string constants define the names of EOObjectStoreCoordinator's notifications:
For more information, see the section "Notifications" below.
EOObjectStoreCoordinator
public EOObjectStoreCoordinator ()
Creates and returns an EOObjectStoreCoordinator.
defaultCoordinator
public static java.lang.Object defaultCoordinator ()
Returns a shared instance of EOObjectStoreCoordinator.
setDefaultCoordinator
public static void setDefaultCoordinator (EOObjectStoreCoordinator coordinator)
Sets a shared instance EOObjectStoreCoordinator.
addCooperatingObjectStore
public void addCooperatingObjectStore (EOCooperatingObjectStore store)
Adds store to the list of EOCooperatingObjectStores that need to be queried and notified about changes to enterprise objects. Posts the notification CooperatingObjectStoreWasAdded.
See also: - removeCooperatingObjectStore , - cooperatingObjectStores
cooperatingObjectStores
public NSArray cooperatingObjectStores ()
Returns the receiver's EOCooperatingObjectStores.
See also: - addCooperatingObjectStore , - removeCooperatingObjectStore
forwardUpdateForObject
public void forwardUpdateForObject (
java.lang.Object object,
NSDictionary changes)
Tells the receiver to forward a message from an EOCooperatingObjectStore to another store, informing it that changes need to be made to object. For example, inserting an object in a relationship property of one EOCooperatingObjectStore might require changing a foreign key property in an object owned by another EOCooperatingObjectStore.
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)
Returns the EOCooperatingObjectStore responsible for fetching objects with fetchSpecification. Returns null
if no EOCooperatingObjectStore can be found that responds true to handlesFetchSpecification .
See also: - objectStoreForGlobalID , - objectStoreForObject
objectStoreForGlobalID
public EOCooperatingObjectStore objectStoreForGlobalID (EOGlobalID globalID)
Returns the EOCooperatingObjectStore for the object identified by globalID. Returns null
if no EOCooperatingObjectStore can be found that responds true to ownsGlobalID .
See also: - objectStoreForFetchSpecification , - objectStoreForObject
objectStoreForObject
public EOCooperatingObjectStore objectStoreForObject (java.lang.Object object)
Returns the EOCooperatingObjectStore that owns object. Returns null
if no EOCooperatingObjectStore can be found that responds true to ownsObject .
See also: - objectStoreForFetchSpecification , - objectStoreForGlobalID
removeCooperatingObjectStore
public void removeCooperatingObjectStore (EOCooperatingObjectStore store)
Removes store from the list of EOCooperatingObjectStores that need to be queried and notified about changes to enterprise objects. Posts the notification CooperatingObjectStoreWasRemoved.
See also: - addCooperatingObjectStore , - cooperatingObjectStores
saveChangesInEditingContext
public void saveChangesInEditingContext (EOEditingContext anEditingContext)
Overrides the EOObjectStore implementation to save the changes made in anEditingContext. This message is sent by an EOEditingContext to an EOObjectStoreCoordinator to commit changes. When an EOObjectStoreCoordinator receives this message, it guides its EOCooperatingObjectStores through a multi-pass save protocol in which each EOCooperatingObjectStore saves its own changes and forwards remaining changes to other EOCooperatingObjectStores. When this method is invoked, the following sequence of events occurs:
forwardUpdateForObject
setUserInfo
public void setUserInfo (NSDictionary dictionary)
Sets the dictionary of auxiliary data, which your application can use for whatever it needs.
See also: - userInfo
userInfo
public NSDictionary userInfo ()
Returns a dictionary of user data. Your application can use this to store any auxiliary information it needs.
See also: - setUserInfo
valuesForKeys
public NSDictionary valuesForKeys (
NSArray keys,
java.lang.Object object)
Communicates with the appropriate EOCooperatingObjectStore to get the values identified by keys for object, so that it can then forward them on to another EOCooperatingObjectStore. EOCooperatingObjectStores can hold values for an object that augment the properties in the object. For instance, an EODatabaseContext (EOAccess) stores foreign key information for the objects it owns. These foreign keys may well not be defined as properties of the object. Other EODatabaseContexts can find out the object's foreign keys by sending the EODatabaseContext that owns the object a valuesForKeys message (through the coordinator).
Notification Object | The EOObjectStoreCoordinator |
userInfo Dictionary | None |
CooperatingObjectStoreWasRemoved
When an EOObjectStoreCoordinator receives a removeCooperatingObjectStore message and removes an EOCooperatingObjectStore from its list, it posts CooperatingObjectStoreWasRemoved to notify observers.
Notification Object | The EOObjectStoreCoordinator |
userInfo Dictionary | None |
CooperatingObjectStoreNeeded
Posted when an EOObjectStoreCoordinator receives a request that it can't service with any of its currently registered EOCooperatingObjectStores. The observer can call back to the coordinator to register an appropriate EOCooperatingObjectStore based on the information in the userInfo dictionary.
Notification Object |
The EOObjectStoreCoordinator |
userInfo Dictionary | One of the following key-value pairs |
Key | Value |
globalID | globalID for the operation |
fetchSpecification | fetch specification for the operation |
object | object for the operation |