An instance of a TransactionResourceImpl is a bundle of things that connects a connection to the database - it is the transaction "context" in a generic sense. It is also the object of synchronization used by the connection object to make sure only one thread is accessing the underlying transaction and context.
TransactionResourceImpl not only serves as a transaction "context", it also takes care of:
The only connection that have access to the TransactionResource is the root connection, all other nested connections (called proxyConnection) accesses the TransactionResource via the root connection. The root connection may be a plain EmbedConnection, or a DetachableConnection (in case of a XATransaction). A nested connection must be a ProxyConnection. A proxyConnection is not detachable and can itself be a XA connection - although an XATransaction may start nested local (proxy) connections.
this is an example of how all the objects in this package relate to each other. In this example, the connection is nested 3 deep. DetachableConnection.
lcc cm database jdbcDriver
^ ^ ^ ^
| | | |
|======================|
| TransactionResource |
|======================|
^ |
| |
| | |---------------rootConnection----------|
| | | |
| | |- rootConnection-| |
| | | | |
| V V | |
|========================| |=================| |=================|
| EmbedConnection | | EmbedConnection | | EmbedConnection |
| |<-----| |<-----| |
| (DetachableConnection) | | ProxyConnection | | ProxyConnection |
|========================| |=================| |=================|
^ | ^ ^ ^
| | | | |
---rootConnection-- | | |
| | |
| | |
|======================| |======================| |======================|
| ConnectionChild | | ConnectionChild | | ConnectionChild |
| | | | | |
| (EmbedStatement) | | (EmbedResultSet) | | (...) |
|======================| |======================| |======================|
A plain local connection must be attached (doubly linked with) to a TransactionResource at all times. A detachable connection can be without a TransactionResource, and a TransactionResource for an XATransaction (called XATransactionResource) can be without a connection.
| Modifier and Type | Field and Description |
|---|---|
| protected ContextManager | |
| protected ContextService | |
| protected Database | |
| private String | |
| private String | |
| private InternalDriver | |
| protected LanguageConnectionContext | |
| private String | |
| protected String |
| Access | Constructor and Description |
|---|---|
| pack-priv | TransactionResourceImpl(InternalDriver driver, String url, Properties info)
create a brand new connection for a brand new transaction |
| Modifier and Type | Method and Description |
|---|---|
| pack-priv boolean | Returns: true if the context manager is shutdown, false otherwise.the error we want to clean up e, boolean true if extended diagnostics should be considered,
false not interested of extended diagnostic information diagActive)clean up error and print it to derby.log if diagActive is true |
| pack-priv void | |
| pack-priv void | |
| pack-priv void | commit()
local transaction demarcation - note that global or xa transaction cannot commit thru the connection, they can only commit thru the XAResource, which uses the xa_commit or xa_rollback interface as a safeguard. |
| pack-priv ContextManager | |
| pack-priv ContextService | |
| pack-priv Database | |
| pack-priv String | |
| pack-priv InternalDriver | |
| pack-priv LanguageConnectionContext | |
| pack-priv String | |
| pack-priv String | |
| pack-priv final SQLException | handleException(Throwable thrownException, boolean autoCommit, boolean rollbackOnAutoCommit)
clean up the error and wrap the real exception in some SQLException. |
| pack-priv boolean | |
| pack-priv boolean | |
| private boolean | Returns: true if this is a login failure exceptionDetermine if the exception thrown is a login exception. |
| pack-priv final void | |
| pack-priv void | |
| pack-priv void | |
| pack-priv final void | |
| pack-priv StandardException | |
| pack-priv void | |
| public static SQLException | Returns: thrownException, if it is an
SQLException; otherwise, an SQLException which
wraps thrownExceptiona thrownException)ThrowableWrap a |
| cm | back to summary |
|---|---|
| protected ContextManager cm | |
| csf | back to summary |
|---|---|
| protected ContextService csf | |
| database | back to summary |
|---|---|
| protected Database database | |
| dbname | back to summary |
|---|---|
| private String dbname | |
| drdaID | back to summary |
|---|---|
| private String drdaID | |
| driver | back to summary |
|---|---|
| private InternalDriver driver | |
| lcc | back to summary |
|---|---|
| protected LanguageConnectionContext lcc | |
| url | back to summary |
|---|---|
| private String url | |
| username | back to summary |
|---|---|
| protected String username | |
| TransactionResourceImpl | back to summary |
|---|---|
| pack-priv TransactionResourceImpl(InternalDriver driver, String url, Properties info) throws SQLException create a brand new connection for a brand new transaction | |
| cleanupOnError | back to summary |
|---|---|
| pack-priv boolean cleanupOnError(Throwable e, boolean diagActive) clean up error and print it to derby.log if diagActive is true
| |
| clearContextInError | back to summary |
|---|---|
| pack-priv void clearContextInError() An error happens in the constructor, pop the context. | |
| clearLcc | back to summary |
|---|---|
| pack-priv void clearLcc() Resolve probably superfluous | |
| commit | back to summary |
|---|---|
| pack-priv void commit() throws StandardException local transaction demarcation - note that global or xa transaction cannot commit thru the connection, they can only commit thru the XAResource, which uses the xa_commit or xa_rollback interface as a safeguard. | |
| getContextManager | back to summary |
|---|---|
| pack-priv ContextManager getContextManager() need to be public because it is in the XATransactionResource interface | |
| getCsf | back to summary |
|---|---|
| pack-priv ContextService getCsf() | |
| getDatabase | back to summary |
|---|---|
| pack-priv Database getDatabase() | |
| getDBName | back to summary |
|---|---|
| pack-priv String getDBName() | |
| getDriver | back to summary |
|---|---|
| pack-priv InternalDriver getDriver() Return instance variables to EmbedConnection. Resolve given time, we should perhaps stop giving out reference to these things but instead use the transaction resource itself. | |
| getLcc | back to summary |
|---|---|
| pack-priv LanguageConnectionContext getLcc() | |
| getUrl | back to summary |
|---|---|
| pack-priv String getUrl() | |
| getUserName | back to summary |
|---|---|
| pack-priv String getUserName() | |
| handleException | back to summary |
|---|---|
| pack-priv final SQLException handleException(Throwable thrownException, boolean autoCommit, boolean rollbackOnAutoCommit) throws SQLException clean up the error and wrap the real exception in some SQLException. | |
| isActive | back to summary |
|---|---|
| pack-priv boolean isActive() | |
| isIdle | back to summary |
|---|---|
| pack-priv boolean isIdle() | |
| isLoginException | back to summary |
|---|---|
| private boolean isLoginException(Throwable thrownException) Determine if the exception thrown is a login exception. Needed for DERBY-5427 fix to prevent inappropriate thread dumps and javacores. This exception is special because it is SESSION_SEVERITY and database.isActive() is true, but the session hasn't started yet,so it is not an actual crash and should not report extended diagnostics.
| |
| restoreContextStack | back to summary |
|---|---|
| pack-priv final void restoreContextStack() | |
| rollback | back to summary |
|---|---|
| pack-priv void rollback() throws StandardException | |
| setDatabase | back to summary |
|---|---|
| pack-priv void setDatabase(Database db) Called only in EmbedConnection construtor. The Local Connection sets up the database in its constructor and sets it here. | |
| setupContextStack | back to summary |
|---|---|
| pack-priv final void setupContextStack() | |
| shutdownDatabaseException | back to summary |
|---|---|
| pack-priv StandardException shutdownDatabaseException() | |
| startTransaction | back to summary |
|---|---|
| pack-priv void startTransaction() throws StandardException, SQLException | |
| wrapInSQLException | back to summary |
|---|---|
| public static SQLException wrapInSQLException(Throwable thrownException) Wrap a
| |