public final class TransactionResourceImpl
extends java.lang.Object
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 |
cm |
protected ContextService |
csf |
protected Database |
database |
private java.lang.String |
dbname |
private java.lang.String |
drdaID |
private InternalDriver |
driver |
protected LanguageConnectionContext |
lcc |
private java.lang.String |
url |
protected java.lang.String |
username |
Constructor and Description |
---|
TransactionResourceImpl(InternalDriver driver,
java.lang.String url,
java.util.Properties info)
create a brand new connection for a brand new transaction
|
Modifier and Type | Method and Description |
---|---|
(package private) boolean |
cleanupOnError(java.lang.Throwable e,
boolean diagActive)
clean up error and print it to derby.log if diagActive is true
|
(package private) void |
clearContextInError()
An error happens in the constructor, pop the context.
|
(package private) void |
clearLcc()
Resolve: probably superfluous
|
(package private) 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.
|
(package private) ContextManager |
getContextManager()
need to be public because it is in the XATransactionResource interface
|
(package private) ContextService |
getCsf() |
(package private) Database |
getDatabase() |
(package private) java.lang.String |
getDBName() |
(package private) InternalDriver |
getDriver()
Return instance variables to EmbedConnection.
|
(package private) LanguageConnectionContext |
getLcc() |
(package private) java.lang.String |
getUrl() |
(package private) java.lang.String |
getUserName() |
(package private) java.sql.SQLException |
handleException(java.lang.Throwable thrownException,
boolean autoCommit,
boolean rollbackOnAutoCommit)
clean up the error and wrap the real exception in some SQLException.
|
(package private) boolean |
isActive() |
(package private) boolean |
isIdle() |
private boolean |
isLoginException(java.lang.Throwable thrownException)
Determine if the exception thrown is a login exception.
|
(package private) void |
restoreContextStack() |
(package private) void |
rollback() |
(package private) void |
setDatabase(Database db)
Called only in EmbedConnection construtor.
|
(package private) void |
setupContextStack() |
(package private) StandardException |
shutdownDatabaseException() |
(package private) void |
startTransaction() |
static java.sql.SQLException |
wrapInSQLException(java.lang.Throwable thrownException)
Wrap a
Throwable in an SQLException . |
protected ContextManager cm
protected ContextService csf
protected java.lang.String username
private java.lang.String dbname
private InternalDriver driver
private java.lang.String url
private java.lang.String drdaID
protected Database database
protected LanguageConnectionContext lcc
TransactionResourceImpl(InternalDriver driver, java.lang.String url, java.util.Properties info) throws java.sql.SQLException
java.sql.SQLException
void setDatabase(Database db)
void startTransaction() throws StandardException, java.sql.SQLException
StandardException
java.sql.SQLException
InternalDriver getDriver()
ContextService getCsf()
ContextManager getContextManager()
LanguageConnectionContext getLcc()
java.lang.String getDBName()
java.lang.String getUrl()
Database getDatabase()
StandardException shutdownDatabaseException()
void commit() throws StandardException
StandardException
void rollback() throws StandardException
StandardException
void clearContextInError()
void clearLcc()
final void setupContextStack()
final void restoreContextStack()
final java.sql.SQLException handleException(java.lang.Throwable thrownException, boolean autoCommit, boolean rollbackOnAutoCommit) throws java.sql.SQLException
java.sql.SQLException
private boolean isLoginException(java.lang.Throwable thrownException)
thrownException
- public static java.sql.SQLException wrapInSQLException(java.lang.Throwable thrownException)
Throwable
in an SQLException
.thrownException
- a Throwable
thrownException
, if it is an
SQLException
; otherwise, an SQLException
which
wraps thrownException
java.lang.String getUserName()
boolean cleanupOnError(java.lang.Throwable e, boolean diagActive)
e
- the error we want to clean updiagActive
- true if extended diagnostics should be considered,
false not interested of extended diagnostic informationboolean isIdle()
boolean isActive()
Apache Derby V10.13 Internals - Copyright © 2004,2016 The Apache Software Foundation. All Rights Reserved.