| 
WebObjects 5.2.2 | ||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||
java.lang.Object | +--com.webobjects.eoaccess.EOAdaptorContext
EOAdaptorContext is an abstract class that provides its concrete
 subclasses with a structure for handling database transactions. It is
 associated with EOAdaptor and EOAdaptorChannel, which, together with
 EOAdaptorContext, form the adaptor level of Enterprise 
 Objects Framework's access layer.
 
Concrete subclasses of EOAdaptorContext provide database-specific method implementations and represent a single transaction scope (logical user) on the database server to which its EOAdaptor object is connected. You never interact with instances of the EOAdaptorContext class directly; rather, your applications use instances of concrete subclasses that are written to work with a specific database or other persistent storage system.
If a database server supports multiple concurrent transaction sessions, an adaptor context's EOAdaptor can have several contexts. When you use multiple EOAdaptorContexts for a single EOAdaptor, you can have several database server transactions in progress simultaneously. You should be aware of the issues involved in concurrent access if you do this.
EOAdaptorContext defines a simple set of methods for explicitly
 controlling transactions: beginTransaction, 
 commitTransaction, and rollbackTransaction. 
 Each of these methods confirms the requested action with the adaptor 
 context's delegate, then performs the action if possible.
There is also a set of methods for notifying an adaptor context
 that a transaction has been started, committed, or rolled back without
 using the beginTransaction, commitTransaction,
 or rollbackTransaction methods. For example, if you invoke
 a stored procedure in the server that begins a transaction, you need to
 notify the adaptor context that a transaction has been started. Use the
 following methods to keep an adaptor context synchronized with the state
 of the database server: 
transactionDidBegintransactionDidCommittransactionDidRollbackThese methods post notifications.
You can assign a delegate to an adaptor context. The delegate
 responds to certain methods on behalf of the context. An
 EOAdaptorContext invokes these methods on its delegate.
 The transaction-controlling methods beginTransaction, 
 commitTransaction, and rollbackTransaction
 notify the adaptor context's delegate before and after a transaction 
 operation is performed. 
 Some delegate methods, such as 
 adaptorContextShouldBegin, 
 let the delegate determine whether the context should perform an 
 operation. Others, such as adaptorContextDidBegin, simply 
 inform the delegate that an operation has occurred. The delegate has an
 opportunity to respond by implementing the delegate methods. If the 
 delegate wants to intervene, it implements 
 adaptorContextShouldBegin. If it simply wants notification
 when a transaction has begun, it implements 
 adaptorContextDidBegin.
EOAdaptorContext also posts notifications to the application's default notification center. Any object may register to receive one or more of the notifications posted by an adaptor context by registering as an observer with the default notification center (an instance of the NSNotificationCenter class).
EOAdaptorContext provides many default method implementations that are sufficient for concrete subclasses. The following methods establish structure and conventions that other Enterprise Objects Framework classes depend on and should be overridden with caution:
transactionDidBegintransactionDidCommittransactionDidRollbackhasOpenTransactionIf you override any of the above methods, your implementations should
 incorporate the superclass's implementation through an invocation of
 super.
Other methods require database-specific implementations that can be provided only by a concrete adaptor context subclass. A subclass must override the following methods in terms of the persistent storage system to which it interacts:
beginTransactioncommitTransactioncreateAdaptorChannelrollbackTransaction
createAdaptorChannel(), 
beginTransaction(), 
commitTransaction(), 
rollbackTransaction(), 
EOAdaptor.createAdaptorContext(), 
EOAdaptor, 
NSNotificationCenter| Nested Class Summary | |
static interface | 
EOAdaptorContext.Delegate
EOAdaptorContext invokes its delegate any time a transaction is begun, committed, or rolled back.  | 
| Field Summary | |
static String | 
AdaptorContextBeginTransactionNotification
 | 
static String | 
AdaptorContextCommitTransactionNotification
 | 
static String | 
AdaptorContextRollbackTransactionNotification
 | 
| Constructor Summary | |
EOAdaptorContext(EOAdaptor adaptor)
Returns a new EOAdaptorContext.  | 
|
| Method Summary | |
 EOAdaptor | 
adaptor()
Returns the receiver's EOAdaptor.  | 
abstract  void | 
beginTransaction()
An abstract method that should be implemented by subclasses to attempt to begin a new transaction.  | 
 boolean | 
canNestTransactions()
Deprecated. Nested transactions are not supported.  | 
 NSArray | 
channels()
Returns an array of channels created by the receiver.  | 
abstract  void | 
commitTransaction()
An abstract method that should be implemented by subclasses to attempt to commit the last transaction begun.  | 
abstract  EOAdaptorChannel | 
createAdaptorChannel()
An abstract method that should be implemented by subclasses to create and return a new EOAdaptorChannel, or null
 if a new channel cannot be created. | 
static Object | 
defaultDelegate()
Returns the default delegate, which is the object assigned as delegate to all newly created EOAdaptorContext instances and their EOAdaptorChannels.  | 
 Object | 
delegate()
Returns the receiver's delegate, or null if the 
 receiver doesn't have a delegate. | 
abstract  void | 
handleDroppedConnection()
An abstract method that should be implemented by subclasses to clean up after the receiver's adaptor has lost its connection to its database server.  | 
 boolean | 
hasBusyChannels()
Returns true if any of the receiver's channels have 
 outstanding operations (that is, have a fetch in 
 progress), false otherwise. | 
 boolean | 
hasOpenChannels()
Returns true if any of the receiver's channels are 
 open, false otherwise. | 
 boolean | 
hasOpenTransaction()
Returns true if a transaction is currently open (has 
 begun but not yet committed or rolled back), false 
 otherwise. | 
abstract  void | 
rollbackTransaction()
An abstract method that should be implemented by subclasses to attempt to roll back the last transaction begun.  | 
static void | 
setDefaultDelegate(Object delegate)
Sets the default delegate, which is the object assigned as delegate to all newly created EOAdaptorContext instances and their EOAdaptorChannels, to delegate. | 
 void | 
setDelegate(Object delegate)
Sets the receiver's delegate and the delegate of all the receiver's channels to delegate, or removes their delegates if
 delegate is null. | 
 void | 
transactionDidBegin()
Informs the adaptor context that a transaction has begun in the database server, so the receiver can update its state to reflect this fact, and posts an AdaptorContextBeginTransactionNotification. | 
 void | 
transactionDidCommit()
Informs the adaptor context that a transaction has committed in the database server, so the receiver can update its state to reflect this fact, and posts an AdaptorContextCommitTransactionNotification. | 
 void | 
transactionDidRollback()
Informs the receiver that a transaction has rolled back in the database server, so the adaptor context can update its state to reflect this fact, and posts an AdaptorContextRollbackTransactionNotification. | 
 int | 
transactionNestingLevel()
Deprecated. Use hasOpenTransaction instead. | 
| Methods inherited from class java.lang.Object | 
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | 
| Field Detail | 
public static final String AdaptorContextBeginTransactionNotification
public static final String AdaptorContextCommitTransactionNotification
public static final String AdaptorContextRollbackTransactionNotification
| Constructor Detail | 
public EOAdaptorContext(EOAdaptor adaptor)
createAdaptorContext to create a new adaptor context.
adaptor - The adaptor for the new adaptor context.adaptor(), 
EOAdaptor.createAdaptorContext()| Method Detail | 
public EOAdaptor adaptor()
EOAdaptorContext(EOAdaptor adaptor), 
EOAdaptorpublic abstract void beginTransaction()
beginTransaction must be paired with an
 invocation of either commitTransaction or
 rollbackTransaction to end the transaction.
 The Enterprise Objects Framework automatically wraps database
 operations in transactions, so you don't have to begin and end
 transactions explicitly. In fact, letting the framework manage
 transactions is sometimes more efficient. You typically implement
 beginTransaction only to execute more than one database
 operation in the same transaction scope.
This method should invoke the delegate method 
 adaptorContextShouldBegin before beginning the 
 transaction. If the transaction is begun successfully, the method 
 should invoke transactionDidBegin on the receiver and 
 invoke the delegate method adaptorContextDidBegin.
 Should throw a runtime exception if the attempt is unsuccessful.
 Some possible reasons for failure are:
hasOpenTransaction(), 
transactionDidBegin(), 
EOAdaptorContext.Delegate.adaptorContextShouldBegin(EOAdaptorContext adaptorContext), 
EOAdaptorContext.Delegate.adaptorContextDidBegin(EOAdaptorContext adaptorContext)public boolean canNestTransactions()
public NSArray channels()
createAdaptorChannel()public abstract void commitTransaction()
adaptorContextShouldCommit before
 committing the transaction. If the transaction is committed
 successfully, the method should invoke 
 transactionDidCommit and invoke the delegate
 method adaptorContextDidCommit. Should throw a runtime 
 exception if the attempt is unsuccessful. Some possible reasons for
 failure are:
 
beginTransaction(), 
rollbackTransaction(), 
hasBusyChannels(), 
transactionDidCommit(), 
EOAdaptorContext.Delegate.adaptorContextShouldCommit(EOAdaptorContext adaptorContext), 
EOAdaptorContext.Delegate.adaptorContextDidCommit(EOAdaptorContext adaptorContext)public abstract EOAdaptorChannel createAdaptorChannel()
null
 if a new channel cannot be created. Should set the new channel's
 adaptorContext to this. 
 A newly created adaptor context has no channels. Specific 
 adaptors have different limits on the maximum  number of channels a 
 context can have, and createAdaptorChannel should fail
 if a creating a new channel would exceed the limits.
EOAdaptorChannel.adaptorContext(), 
channels()public static Object defaultDelegate()
null until a 
 valid delegate has been set using setDefaultDelegate.
setDefaultDelegate(Object delegate)public Object delegate()
null if the 
 receiver doesn't have a delegate.
null.setDelegate(Object delegate)public abstract void handleDroppedConnection()
handleDroppedConnection, this method should
 clean up the state of the receiver and its adaptor channels so they
 can be safely disposed of without any errors. Subclasses must 
 implement this method if the adaptor supports automatic database 
 reconnection.
 Never invoke this method yourself; it is invoked automatically by the Enterprise Objects Framework.
EOAdaptor.handleDroppedConnection()public boolean hasBusyChannels()
true if any of the receiver's channels have 
 outstanding operations (that is, have a fetch in 
 progress), false otherwise.
true if any of the receiver's channels 
              have outstanding operations.EOAdaptorChannel.isFetchInProgress()public boolean hasOpenChannels()
true if any of the receiver's channels are 
 open, false otherwise.
true if any of the receiver's channels are
              open.EOAdaptorChannel.openChannel(), 
EOAdaptorChannel.isOpen()public boolean hasOpenTransaction()
true if a transaction is currently open (has 
 begun but not yet committed or rolled back), false 
 otherwise.
true if a transaction is currently open.public abstract void rollbackTransaction()
adaptorContextShouldRollback
 before rolling back the transaction. If the transaction is begun
 successfully, the method should invoke
 transactionDidRollback and invoke the delegate method
 adaptorContextDidRollback. Should throw a runtime 
 exception if the attempt is unsuccessful. Some possible reasons for 
 failure are:
 
beginTransaction(), 
commitTransaction(), 
transactionDidRollback(), 
EOAdaptorContext.Delegate.adaptorContextShouldRollback(EOAdaptorContext adaptorContext), 
EOAdaptorContext.Delegate.adaptorContextDidRollback(EOAdaptorContext adaptorContext)public static void setDefaultDelegate(Object delegate)
delegate. The default delegate
 is null until this method has been used to set a valid 
 delegate.
delegate - The object to assign as delegate to all newly
                        created EOAdaptorContext instances.defaultDelegate()public void setDelegate(Object delegate)
delegate, or removes their delegates if
 delegate is null.
delegate - The receiver's new delegate.channels(), 
delegate()public void transactionDidBegin()
AdaptorContextBeginTransactionNotification.
 This method is invoked from beginTransaction after a 
 transaction
 has successfully been started. It is also invoked when the 
 Enterprise Objects Framework implicitly begins a transaction.
 You don't need to invoke this method unless you are implementing
 a concrete adaptor. Your concrete adaptor should invoke this method
 from within your adaptor context's implementation of
 beginTransaction and anywhere else it begins a 
 transaction either implicitly or explicitly. For example, an adaptor
 channel's implementation of evaluateExpression should 
 check to see if a transaction is in progress. If no transaction is 
 in progress, it can start one explicitly by invoking 
 beginTransaction. Alternatively, it can start an 
 implicit transaction by invoking 
 transactionDidBegin.
A subclass of EOAdaptorContext doesn't need to override this 
 method. A subclass that does override it must incorporate the 
 superclass's version through an invocation of super.
 
AdaptorContextBeginTransactionNotification, 
beginTransaction(), 
transactionDidBegin(), 
EOAdaptorChannel.evaluateExpression(EOSQLExpression expression)public void transactionDidCommit()
AdaptorContextCommitTransactionNotification.
 This method is invoked from commitTransaction after a
 transaction  has successfully committed.
 You don't need to invoke this method unless you are implementing
 a concrete adaptor. Your concrete adaptor should invoke this method
 from within your adaptor context's implementation of
 commitTransaction and anywhere else it commits a
 transaction either implicitly or explicitly.
A subclass of EOAdaptorContext doesn't need to override this 
 method. A subclass that does override it must incorporate the 
 superclass's version through an invocation of super.
AdaptorContextCommitTransactionNotification, 
commitTransaction()public void transactionDidRollback()
AdaptorContextRollbackTransactionNotification.
 This method is invoked from rollbackTransaction after a
 transaction has successfully been rolled back.
You don't need to invoke this method unless you are implementing
 a concrete adaptor. Your concrete adaptor should invoke this method
 from within your adaptor context's implementation of
 rollbackTransaction and anywhere else it rolls back
 a transaction either implicitly or explicitly.
A subclass of EOAdaptorContext doesn't need to override this 
 method. A subclass that does override it must incorporate the 
 superclass's version through an invocation of 
 super.
AdaptorContextRollbackTransactionNotification, 
rollbackTransaction()public int transactionNestingLevel()
hasOpenTransaction instead.
  | 
Last updated Mon Oct 13 15:42:52 PDT 2003. | ||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||