PATH |
EOObjectStoreCoordinator
Inherits from: EOObjectStore
Implements: NSDisposable
Package: com.webobjects.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.
For more general information on the object storage abstraction, see "Object Storage Abstraction" (page 23) 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" (page 296).
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
arrayFaultWithSourceGlobalID
public NSArray arrayFaultWithSourceGlobalID( EOGlobalID anEOGlobalID, String aString, EOEditingContext anEOEditingContext)
cooperatingObjectStores
public NSArray cooperatingObjectStores()
See Also: addCooperatingObjectStore, removeCooperatingObjectStore
dispose
public void dispose()
editingContextDidForgetObjectWithGlobalID
public void editingContextDidForgetObjectWithGlobalID( EOEditingContext anEOEditingContext, EOGlobalID anEOGlobalID)
faultForGlobalID
public EOEnterpriseObject faultForGlobalID( EOGlobalID anEOGlobalID, EOEditingContext anEOEditingContext)
faultForRawRow
public EOEnterpriseObject faultForRawRow( NSDictionary aNSDictionary, String aString, EOEditingContext anEOEditingContext)
forwardUpdateForObject
public void forwardUpdateForObject( EOEnterpriseObject object, NSDictionary changes)
This method first locates the EOCooperatingObjectStore that's responsible for applying changes, and then it sends the store the message recordUpdateForObject.
initializeObject
public void initializeObject( EOEnterpriseObject anEOEnterpriseObject, EOGlobalID anEOGlobalID, EOEditingContext anEOEditingContext)
invalidateAllObjects
public void invalidateAllObjects()
invalidateObjectsWithGlobalIDs
public void invalidateObjectsWithGlobalIDs(NSArray aNSArray)
isObjectLockedWithGlobalID
public boolean isObjectLockedWithGlobalID( EOGlobalID anEOGlobalID, EOEditingContext anEOEditingContext)
lockObjectWithGlobalID
public void lockObjectWithGlobalID( EOGlobalID anEOGlobalID, EOEditingContext anEOEditingContext)
objectsForSourceGlobalID
public NSArray objectsForSourceGlobalID( EOGlobalID anEOGlobalID, String aString, EOEditingContext anEOEditingContext)
objectsWithFetchSpecification
public NSArray objectsWithFetchSpecification( EOFetchSpecification anEOFetchSpecification, EOEditingContext anEOEditingContext)
refaultObject
public void refaultObject( EOEnterpriseObject anEOEnterpriseObject, EOGlobalID anEOGlobalID, EOEditingContext anEOEditingContext)
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
objectsForSourceGlobalID
public NSArray objectsForSourceGlobalID( EOGlobalID anEOGlobalID, String aString, EOEditingContext anEOEditingContext)
objectsWithFetchSpecification
public NSArray objectsWithFetchSpecification( EOFetchSpecification anEOFetchSpecification, EOEditingContext anEOEditingContext)
refaultObject
public void refaultObject( EOEnterpriseObject anEOEnterpriseObject, EOGlobalID anEOGlobalID, EOEditingContext anEOEditingContext)
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)
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
Key | Value |
globalID | globalID for the operation |
fetchSpecification | fetch specification for the operation |
object | object for the operation |
© 2001 Apple Computer, Inc. (Last Published April 19, 2001)