Class ContextManager
java.lang.Object
org.apache.derby.iapi.services.context.ContextManager
The ContextManager collects contexts as they are
created. It maintains stacks of contexts by
named ids, so that the top context of a given
type can be returned. It also maintains a global
stack so that contexts can be traversed in the
order they were created.
The first implementation of the context manager assumes there is only one thread to worry about and that the user(s) of the class only create one instance of ContextManager.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final class
The CtxStack implement a stack on top of an ArrayList (to avoid the inherent overhead associated with java.util.Stack which is built on top of java.util.Vector, which is fully synchronized). -
Field Summary
FieldsModifier and TypeFieldDescription(package private) int
Count of the number of setCurrentContextManager calls by a single thread, for nesting situations with a single active Contextmanager.(package private) Thread
The thread that owns this ContextManager, set by ContextService.setCurrentContextManager and reset by resetCurrentContextManager.private final HashMap
<String, ContextManager.CtxStack> HashMap that holds the Context objects.private HeaderPrintWriter
private ErrorStringBuilder
private int
private LocaleFinder
List of all Contextsprivate int
private Locale
(package private) final ContextService
private boolean
private String
-
Constructor Summary
ConstructorsConstructorDescriptionContextManager
(ContextService csf, HeaderPrintWriter stream) Constructs a new instance. -
Method Summary
Modifier and TypeMethodDescriptionprivate void
Check to see if we have been interrupted.boolean
cleanupOnError
(Throwable error, boolean diagActive) clean up error and print it to derby.log.private void
Flush the built up error string to whereever it is supposed to go, and reset the error stringgetContext
(String contextId) Obtain the last pushed Context object of the type indicated by the contextId argument.getContextStack
(String contextId) Return an unmodifiable list reference to the ArrayList backing CtxStack object for this type of Contexts.int
getErrorSeverity
(Throwable error) return the severity of the exception.(package private) final boolean
isEmpty()
Is the ContextManager empty containing no Contexts.void
Remove the last pushed Context object, regardless of type.(package private) void
popContext
(Context theContext) Removes the specified Context object.void
pushContext
(Context newContext) Add a Context object to the ContextManager.private boolean
(package private) boolean
void
setLocaleFinder
(LocaleFinder finder) Set the locale for this context.void
setMessageLocale
(String localeID)
-
Field Details
-
ctxTable
HashMap that holds the Context objects. The Contexts are stored with a String key.- See Also:
-
holder
List of all Contexts -
messageLocale
-
owningCsf
-
logSeverityLevel
private int logSeverityLevel -
extDiagSeverityLevel
private int extDiagSeverityLevel -
errorStream
-
errorStringBuilder
-
threadDump
-
shutdown
private boolean shutdown -
finder
-
activeThread
Thread activeThreadThe thread that owns this ContextManager, set by ContextService.setCurrentContextManager and reset by resetCurrentContextManager. Only a single thread can be active in a ContextManager at any time, and the thread only "owns" the ContextManager while it is executing code within Derby. In the JDBC case setCurrentContextManager is called at the start of a JBDC method and resetCurrentContextManager on completion. Nesting within the same thread is supported, such as server-side JDBC calls in a Java routine or procedure. In that case the activeCount will represent the level of nesting, in some situations.- See Also:
-
activeCount
int activeCountCount of the number of setCurrentContextManager calls by a single thread, for nesting situations with a single active Contextmanager. If nesting is occuring with multiple different ContextManagers then this value is set to -1 and nesting is represented by entries in a stack in the ThreadLocal variable, threadContextList.- See Also:
-
-
Constructor Details
-
ContextManager
ContextManager(ContextService csf, HeaderPrintWriter stream) Constructs a new instance. No CtxStacks are inserted into the hashMap as they will be allocated on demand.- Parameters:
csf
- the ContextService owning this ContextManagerstream
- error stream for reporting errors
-
-
Method Details
-
pushContext
Add a Context object to the ContextManager. The object is added both to the holder list and to a stack for the specific type of Context.- Parameters:
newContext
- the new Context object
-
getContext
Obtain the last pushed Context object of the type indicated by the contextId argument.- Parameters:
contextId
- a String identifying the type of Context- Returns:
- The Context object with the corresponding contextId, or null if not found
-
popContext
public void popContext()Remove the last pushed Context object, regardless of type. If there are no Context objects, no action is taken. -
popContext
Removes the specified Context object. If the specified Context object does not exist, the call will fail.- Parameters:
theContext
- the Context object to remove.
-
isEmpty
final boolean isEmpty()Is the ContextManager empty containing no Contexts. -
getContextStack
Return an unmodifiable list reference to the ArrayList backing CtxStack object for this type of Contexts. This method allows fast traversal of all Contexts on that stack. The first element in the List corresponds to the bottom of the stack. The assumption is that the Stack will not be modified while it is being traversed.- Parameters:
contextId
- the type of Context stack to return.- Returns:
- an unmodifiable "view" of the ArrayList backing the stack
- See Also:
-
cleanupOnError
clean up error and print it to derby.log. Extended diagnosis including thread dump to derby.log and javaDump if available, will print if the database is active and severity is greater than or equals to SESSTION_SEVERITY or as configured by derby.stream.error.extendedDiagSeverityLevel property- Parameters:
error
- the error we want to clean updiagActive
- true if extended diagnostics should be considered, false not interested of extended diagnostic information- Returns:
- true if the context manager is shutdown, false otherwise.
-
setInterrupted
-
checkInterrupt
private void checkInterrupt()Check to see if we have been interrupted. If we have then a ShutdownException will be thrown. This will be either the one passed to interrupt or a generic one if some outside source interrupted the thread. -
setLocaleFinder
Set the locale for this context. -
setMessageLocale
- Throws:
StandardException
-
getMessageLocale
-
flushErrorString
private void flushErrorString()Flush the built up error string to whereever it is supposed to go, and reset the error string -
reportError
-
getErrorSeverity
return the severity of the exception. Currently, this method does not determine a severity that is not StandardException or SQLException.- Parameters:
error
- - Throwable error- Returns:
- int vendorcode/severity for the Throwable error - error/exception to extract vendorcode/severity. For error that we can not get severity, NO_APPLICABLE_SEVERITY will return.
-