| Simple implementation of the NativeJdbcExtractor interface.
Assumes a pool that wraps Connection handles but not DatabaseMetaData:
In this case, the underlying native Connection can be retrieved by simply
calling conHandle.getMetaData().getConnection() .
All other JDBC objects will be returned as passed in.
This extractor should work with any pool that does not wrap DatabaseMetaData,
and will also work with any plain JDBC driver. Note that a pool can still wrap
Statements, PreparedStatements, etc: The only requirement of this extractor is
that java.sql.DatabaseMetaData does not get wrapped, returning the
native Connection of the JDBC driver on metaData.getConnection() .
Customize this extractor by setting the "nativeConnectionNecessaryForXxx"
flags accordingly: If Statements, PreparedStatements, and/or CallableStatements
are wrapped by your pool, set the corresponding "nativeConnectionNecessaryForXxx"
flags to "true". If none of the statement types is wrapped - or you solely need
Connection unwrapping in the first place -, the defaults are fine.
SimpleNativeJdbcExtractor is a common choice for use with OracleLobHandler,
which just needs Connection unwrapping via the
getNativeConnectionFromStatement method. This usage will work
with almost any connection pool. Known to work are, for example:
- Caucho Resin 2.1.x, 3.0.x
- Sun Java System Application Server 8
- Oracle OC4J 9.0.3, 9.0.4
- C3P0 0.8.x
- Jakarta Commons DBCP 1.0, 1.1, 1.2 (used in Tomcat 4.1.x, 5.0.x)
- JBoss 3.2.x
For full usage with JdbcTemplate, i.e. to also provide Statement unwrapping:
- Use a default SimpleNativeJdbcExtractor for Resin and SJSAS (no JDBC
Statement objects are wrapped, therefore no special unwrapping is necessary).
- Use a SimpleNativeJdbcExtractor with all "nativeConnectionNecessaryForXxx"
flags set to "true" for OC4J and C3P0 (all JDBC Statement objects are wrapped,
but none of the wrappers allow for unwrapping).
- Use a CommonsDbcpNativeJdbcExtractor for Jakarta Commons DBCP respectively
a JBossNativeJdbcExtractor for JBoss (all JDBC Statement objects are wrapped,
but all of them can be extracted by casting to implementation classes).
author: Juergen Hoeller since: 05.12.2003 See Also: java.sql.DatabaseMetaData.getConnection See Also: SimpleNativeJdbcExtractor.getNativeConnection See Also: SimpleNativeJdbcExtractor.setNativeConnectionNecessaryForNativeStatements See Also: SimpleNativeJdbcExtractor.setNativeConnectionNecessaryForNativePreparedStatements See Also: SimpleNativeJdbcExtractor.setNativeConnectionNecessaryForNativeCallableStatements See Also: CommonsDbcpNativeJdbcExtractor See Also: JBossNativeJdbcExtractor See Also: org.springframework.jdbc.core.JdbcTemplate.setNativeJdbcExtractor See Also: org.springframework.jdbc.support.lob.OracleLobHandler.setNativeJdbcExtractor |