bloritsch    02/01/14 13:49:35

  Modified:    src/java/org/apache/avalon/excalibur/datasource
                        JdbcConnectionFactory.java
               src/java/org/apache/avalon/excalibur/logger/factory
                        AsyncLogTargetFactory.java
  Log:
  make thread for async logtarget a daemon thread, move dynamic class 
management in JdbcConnectionFactory to constructor, fix problem with not being 
able to load Jdbc3Connection
  
  Revision  Changes    Path
  1.9       +61 -33    
jakarta-avalon-excalibur/src/java/org/apache/avalon/excalibur/datasource/JdbcConnectionFactory.java
  
  Index: JdbcConnectionFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/src/java/org/apache/avalon/excalibur/datasource/JdbcConnectionFactory.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- JdbcConnectionFactory.java        11 Dec 2001 09:53:28 -0000      1.8
  +++ JdbcConnectionFactory.java        14 Jan 2002 21:49:34 -0000      1.9
  @@ -18,7 +18,7 @@
    * The Factory implementation for JdbcConnections.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
  - * @version CVS $Revision: 1.8 $ $Date: 2001/12/11 09:53:28 $
  + * @version CVS $Revision: 1.9 $ $Date: 2002/01/14 21:49:34 $
    * @since 4.0
    */
   public class JdbcConnectionFactory extends AbstractLogEnabled implements 
ObjectFactory
  @@ -28,9 +28,10 @@
       private final String m_password;
       private final boolean m_autoCommit;
       private final String m_keepAlive;
  -    private       String m_connectionClass;
  +    private final Class  m_class;
       private final static String DEFAULT_KEEPALIVE = "SELECT 1";
       private final static String ORACLE_KEEPALIVE = 
JdbcConnectionFactory.DEFAULT_KEEPALIVE + " FROM DUAL";
  +    private       Connection m_firstConnection;
   
       /**
        * @deprecated  Use the new constructor with the connectionClass
  @@ -66,62 +67,89 @@
                                    final String keepAlive,
                                    final String connectionClass)
      {
  -       this.m_dburl = url;
  -       this.m_username = username;
  -       this.m_password = password;
  -       this.m_autoCommit = autoCommit;
  -       this.m_keepAlive = keepAlive;
  -       this.m_connectionClass = connectionClass;
  -   }
  +        this.m_dburl = url;
  +        this.m_username = username;
  +        this.m_password = password;
  +        this.m_autoCommit = autoCommit;
  +        this.m_keepAlive = keepAlive;
   
  -    public Object newInstance() throws Exception
  -    {
  -        JdbcConnection jdbcConnection = null;
  -        Connection connection = null;
  +        Class clazz = null;
   
  -        if( null == m_username )
  +        try
           {
  -            connection = DriverManager.getConnection( m_dburl );
  +            if( null == m_username )
  +            {
  +                m_firstConnection = DriverManager.getConnection( m_dburl );
  +            }
  +            else
  +            {
  +                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 );
           }
  -        else
  +        catch (Exception e)
           {
  -            connection = DriverManager.getConnection( m_dburl, m_username, 
m_password );
  +            // ignore for now
           }
   
  -        if ( null == this.m_connectionClass )
  +        this.m_class = clazz;
  +    }
  +
  +    public Object newInstance() throws Exception
  +    {
  +        AbstractJdbcConnection jdbcConnection = null;
  +        Connection connection = m_firstConnection;
  +
  +        if ( null == connection )
           {
  -            try
  +            if( null == m_username )
               {
  -                java.lang.reflect.Method meth = 
connection.getClass().getMethod("getHoldability", new Class[] {});
  -                this.m_connectionClass = 
"org.apache.avalon.excalibur.datasource.Jdbc3Connection";
  +                connection = DriverManager.getConnection( m_dburl );
               }
  -            catch (Exception e)
  +            else
               {
  -                this.m_connectionClass = 
"org.apache.avalon.excalibur.datasource.JdbcConnection";
  +                connection = DriverManager.getConnection( m_dburl, 
m_username, m_password );
               }
           }
  +        else
  +        {
  +            m_firstConnection = null;
  +        }
   
  -        if ( null != this.m_connectionClass )
  +        if ( null != this.m_class )
           {
               try
               {
  -                Class clazz = 
Thread.currentThread().getContextClassLoader().loadClass( 
this.m_connectionClass );
                   Class[] paramTypes = new Class[] { Connection.class, 
String.class };
                   Object[] params = new Object[] { connection, 
this.m_keepAlive };
   
  -                Constructor constructor = clazz.getConstructor( paramTypes );
  -                jdbcConnection = (JdbcConnection) constructor.newInstance( 
params );
  +                Constructor constructor = m_class.getConstructor( paramTypes 
);
  +                jdbcConnection = (AbstractJdbcConnection) 
constructor.newInstance( params );
               }
               catch ( Exception e )
               {
                   try
                   {
  -                    Class clazz = 
Thread.currentThread().getContextClassLoader().loadClass( 
this.m_connectionClass );
                       Class[] paramTypes = new Class[] { Connection.class, 
boolean.class };
                       Object[] params = new Object[] { connection, new 
Boolean( 
this.m_keepAlive.equalsIgnoreCase(JdbcConnectionFactory.ORACLE_KEEPALIVE) ) };
   
  -                    Constructor constructor = clazz.getConstructor( 
paramTypes );
  -                    jdbcConnection = (JdbcConnection) 
constructor.newInstance( params );
  +                    Constructor constructor = m_class.getConstructor( 
paramTypes );
  +                    jdbcConnection = (AbstractJdbcConnection) 
constructor.newInstance( params );
                   }
                   catch ( Exception ie )
                   {
  @@ -156,13 +184,13 @@
   
       public Class getCreatedClass()
       {
  -        return JdbcConnection.class;
  +        return m_class;
       }
   
       public void decommission(Object object) throws Exception
       {
  -        if (object instanceof JdbcConnection) {
  -            ((JdbcConnection) object).dispose();
  +        if (object instanceof AbstractJdbcConnection) {
  +            ((AbstractJdbcConnection) object).dispose();
           }
       }
   }
  
  
  
  1.4       +2 -1      
jakarta-avalon-excalibur/src/java/org/apache/avalon/excalibur/logger/factory/AsyncLogTargetFactory.java
  
  Index: AsyncLogTargetFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/src/java/org/apache/avalon/excalibur/logger/factory/AsyncLogTargetFactory.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AsyncLogTargetFactory.java        11 Dec 2001 09:53:30 -0000      1.3
  +++ AsyncLogTargetFactory.java        14 Jan 2002 21:49:35 -0000      1.4
  @@ -47,7 +47,7 @@
    * </p>
    *
    * @author <a href="mailto:[EMAIL PROTECTED],org">Giacomo Pati</a>
  - * @version CVS $Revision: 1.3 $ $Date: 2001/12/11 09:53:30 $
  + * @version CVS $Revision: 1.4 $ $Date: 2002/01/14 21:49:35 $
    * @since 4.0
    */
   public final class AsyncLogTargetFactory
  @@ -97,6 +97,7 @@
           }
           final Thread thread = new Thread( asyncTarget );
           thread.setPriority( thread_priority );
  +        thread.setDaemon( true );
           thread.start();
           return asyncTarget;
       }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to