You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by cz...@apache.org on 2002/09/27 15:44:12 UTC
cvs commit: jakarta-avalon-excalibur/datasource/src/java/org/apache/avalon/excalibur/datasource JdbcConnectionFactory.java
cziegeler 2002/09/27 06:44:12
Modified: datasource/src/java/org/apache/avalon/excalibur/datasource
JdbcConnectionFactory.java
Log:
Fixing bug 11400 by applying patch from vgritsenko@apache.org (Vadim Gritsenko)
Revision Changes Path
1.15 +57 -45 jakarta-avalon-excalibur/datasource/src/java/org/apache/avalon/excalibur/datasource/JdbcConnectionFactory.java
Index: JdbcConnectionFactory.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-excalibur/datasource/src/java/org/apache/avalon/excalibur/datasource/JdbcConnectionFactory.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- JdbcConnectionFactory.java 4 Apr 2002 07:09:53 -0000 1.14
+++ JdbcConnectionFactory.java 27 Sep 2002 13:44:11 -0000 1.15
@@ -27,7 +27,8 @@
private final String m_password;
private final boolean m_autoCommit;
private final String m_keepAlive;
- private final Class m_class;
+ private final String m_connectionClass;
+ private Class m_class;
private static final String DEFAULT_KEEPALIVE = "SELECT 1";
private static final String ORACLE_KEEPALIVE = JdbcConnectionFactory.DEFAULT_KEEPALIVE + " FROM DUAL";
private Connection m_firstConnection;
@@ -84,8 +85,7 @@
this.m_password = password;
this.m_autoCommit = autoCommit;
this.m_keepAlive = keepAlive;
-
- Class clazz = null;
+ this.m_connectionClass = connectionClass;
try
{
@@ -98,21 +98,7 @@
m_firstConnection = DriverManager.getConnection( m_dburl, m_username, m_password );
}
- String className = connectionClass;
- if( null == className )
- {
- try
- {
- java.lang.reflect.Method meth = m_firstConnection.getClass().getMethod( "getHoldability", new Class[]{} );
- className = "org.apache.avalon.excalibur.datasource.Jdbc3Connection";
- }
- catch( Exception e )
- {
- className = "org.apache.avalon.excalibur.datasource.JdbcConnection";
- }
- }
-
- clazz = Thread.currentThread().getContextClassLoader().loadClass( className );
+ init( m_firstConnection );
}
catch( Exception e )
{
@@ -121,8 +107,25 @@
// as it can be a real pain to track down the cause when this happens.
//System.out.println( "Unable to get specified connection class: " + e );
}
+ }
+
+ private void init( Connection connection ) throws Exception
+ {
+ String className = m_connectionClass;
+ if( null == className )
+ {
+ try
+ {
+ java.lang.reflect.Method meth = connection.getClass().getMethod( "getHoldability", new Class[]{} );
+ className = "org.apache.avalon.excalibur.datasource.Jdbc3Connection";
+ }
+ catch( Exception e )
+ {
+ className = "org.apache.avalon.excalibur.datasource.JdbcConnection";
+ }
+ }
- this.m_class = clazz;
+ this.m_class = Thread.currentThread().getContextClassLoader().loadClass( className );
}
public Object newInstance() throws Exception
@@ -146,43 +149,52 @@
m_firstConnection = null;
}
- if( null != this.m_class )
+ if( null == this.m_class )
{
try
{
- Class[] paramTypes = new Class[]{Connection.class, String.class};
- Object[] params = new Object[]{connection, this.m_keepAlive};
-
- Constructor constructor = m_class.getConstructor( paramTypes );
- jdbcConnection = (AbstractJdbcConnection)constructor.newInstance( params );
+ init( connection );
}
catch( Exception e )
{
- try
+ if( getLogger().isDebugEnabled() )
{
- // Support the deprecated connection constructor as well.
- boolean oracleKeepAlive = ( m_keepAlive != null ) && m_keepAlive.equalsIgnoreCase( JdbcConnectionFactory.ORACLE_KEEPALIVE );
+ getLogger().debug( "Exception in JdbcConnectionFactory.newInstance:", e );
+ }
+ throw new NoValidConnectionException( "No valid JdbcConnection class available" );
+ }
+ }
- Class[] paramTypes = new Class[]{Connection.class, boolean.class};
- Object[] params = new Object[]{connection, new Boolean( oracleKeepAlive )};
+ try
+ {
+ Class[] paramTypes = new Class[]{Connection.class, String.class};
+ Object[] params = new Object[]{connection, this.m_keepAlive};
- Constructor constructor = m_class.getConstructor( paramTypes );
- jdbcConnection = (AbstractJdbcConnection)constructor.newInstance( params );
- }
- catch( Exception ie )
- {
- if( getLogger().isDebugEnabled() )
- {
- getLogger().debug( "Exception in JdbcConnectionFactory.newInstance:", ie );
- }
+ Constructor constructor = m_class.getConstructor( paramTypes );
+ jdbcConnection = (AbstractJdbcConnection)constructor.newInstance( params );
+ }
+ catch( Exception e )
+ {
+ try
+ {
+ // Support the deprecated connection constructor as well.
+ boolean oracleKeepAlive = ( m_keepAlive != null ) && m_keepAlive.equalsIgnoreCase( JdbcConnectionFactory.ORACLE_KEEPALIVE );
+
+ Class[] paramTypes = new Class[]{Connection.class, boolean.class};
+ Object[] params = new Object[]{connection, new Boolean( oracleKeepAlive )};
- throw new NoValidConnectionException( ie.getMessage() );
+ Constructor constructor = m_class.getConstructor( paramTypes );
+ jdbcConnection = (AbstractJdbcConnection)constructor.newInstance( params );
+ }
+ catch( Exception ie )
+ {
+ if( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "Exception in JdbcConnectionFactory.newInstance:", ie );
}
+
+ throw new NoValidConnectionException( ie.getMessage() );
}
- }
- else
- {
- throw new NoValidConnectionException( "No valid JdbcConnection class available" );
}
jdbcConnection.enableLogging( getLogger() );
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>