Abstract adapter class for the
NativeJdbcExtractor interface,
for simplified implementation of basic extractors.
Basically returns the passed-in JDBC objects on all methods.
getNativeConnection checks for a ConnectionProxy chain,
for example from a TransactionAwareDataSourceProxy, before delegating to
doGetNativeConnection for actual unwrapping. You can override
either of the two for a specific connection pool, but the latter is
recommended to participate in ConnectionProxy unwrapping.
getNativeConnection also applies a fallback if the first
native extraction process failed, that is, returned the same Connection as
passed in. It assumes that some additional proxying is going in this case:
Hence, it retrieves the underlying native Connection from the DatabaseMetaData
via
conHandle.getMetaData().getConnection() and retries the native
extraction process based on that Connection handle. This works, for example,
for the Connection proxies exposed by Hibernate 3.1's
Session.connection().
The
getNativeConnectionFromStatement method is implemented
to simply delegate to
getNativeConnection with the Statement's
Connection. This is what most extractor implementations will stick to,
unless there's a more efficient version for a specific pool.