JdbcDataSource occur IllegalMonitorException.
I remove JdbcConnectionPool.put. It works.

----- Original Message -----
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Saturday, November 03, 2001 4:28 AM
Subject: cvs commit:
jakarta-avalon-excalibur/src/java/org/apache/avalon/excalibur/datasource
JdbcDataSource.java JdbcConnectionPool.java


> bloritsch    01/11/02 11:28:35
>
>   Modified:    src/java/org/apache/avalon/excalibur/datasource
>                         JdbcDataSource.java JdbcConnectionPool.java
>   Log:
>   First stab at blocking code
>
>   Revision  Changes    Path
>   1.11      +18 -3
jakarta-avalon-excalibur/src/java/org/apache/avalon/excalibur/datasource/Jdb
cDataSource.java
>
>   Index: JdbcDataSource.java
>   ===================================================================
>   RCS file:
/home/cvs/jakarta-avalon-excalibur/src/java/org/apache/avalon/excalibur/data
source/JdbcDataSource.java,v
>   retrieving revision 1.10
>   retrieving revision 1.11
>   diff -u -r1.10 -r1.11
>   --- JdbcDataSource.java 2001/11/02 18:57:11 1.10
>   +++ JdbcDataSource.java 2001/11/02 19:28:35 1.11
>   @@ -34,7 +34,7 @@
>     * </pre>
>     *
>     * @author <a href="mailto:[EMAIL PROTECTED]";>Berin Loritsch</a>
>   - * @version CVS $Revision: 1.10 $ $Date: 2001/11/02 18:57:11 $
>   + * @version CVS $Revision: 1.11 $ $Date: 2001/11/02 19:28:35 $
>     * @since 4.0
>     */
>    public class JdbcDataSource
>   @@ -67,6 +67,7 @@
>
>                final int min = controller.getAttributeAsInteger( "min",
1 );
>                final int max = controller.getAttributeAsInteger( "max",
3 );
>   +            final long timeout = controller.getAttributeAsLong(
"timeout", -1 );
>                final boolean autoCommit =
configuration.getChild("auto-commit").getValueAsBoolean(true);
>                final boolean oradb = controller.getAttributeAsBoolean(
"oradb", false );
>                final String connectionClass = controller.getAttribute(
"connection-class", null );
>   @@ -160,7 +161,8 @@
>                try
>                {
>                    m_pool = new JdbcConnectionPool( factory,
poolController, l_min, l_max, autoCommit );
>   -                m_pool.setLogger(getLogger());
>   +                m_pool.setLogger( getLogger() );
>   +                m_pool.setTimeout( timeout );
>                    m_pool.initialize();
>                }
>                catch (Exception e)
>   @@ -179,7 +181,20 @@
>        public Connection getConnection()
>            throws SQLException
>        {
>   -        try { return (Connection) m_pool.get(); }
>   +        try
>   +        {
>   +            return (Connection) m_pool.get();
>   +        }
>   +        catch( final SQLException se )
>   +        {
>   +            if (getLogger().isWarnEnabled())
>   +            {
>   +                getLogger().warn( "Could not return Connection", se );
>   +            }
>   +
>   +            // Rethrow so that we keep the original stack trace
>   +            throw se;
>   +        }
>            catch( final Exception e )
>            {
>                if (getLogger().isWarnEnabled())
>
>
>
>   1.7       +63 -2
jakarta-avalon-excalibur/src/java/org/apache/avalon/excalibur/datasource/Jdb
cConnectionPool.java
>
>   Index: JdbcConnectionPool.java
>   ===================================================================
>   RCS file:
/home/cvs/jakarta-avalon-excalibur/src/java/org/apache/avalon/excalibur/data
source/JdbcConnectionPool.java,v
>   retrieving revision 1.6
>   retrieving revision 1.7
>   diff -u -r1.6 -r1.7
>   --- JdbcConnectionPool.java 2001/09/26 17:52:28 1.6
>   +++ JdbcConnectionPool.java 2001/11/02 19:28:35 1.7
>   @@ -21,7 +21,7 @@
>     * thread to manage the number of SQL Connections.
>     *
>     * @author <a href="mailto:[EMAIL PROTECTED]";>Berin Loritsch</a>
>   - * @version CVS $Revision: 1.6 $ $Date: 2001/09/26 17:52:28 $
>   + * @version CVS $Revision: 1.7 $ $Date: 2001/11/02 19:28:35 $
>     * @since 4.0
>     */
>    public class JdbcConnectionPool
>   @@ -31,6 +31,7 @@
>        private Thread                 m_initThread;
>        private final boolean          m_autoCommit;
>        private boolean                m_noConnections = false;
>   +    private long                   m_wait = -1;
>
>        public JdbcConnectionPool( final JdbcConnectionFactory factory,
final DefaultPoolController controller, final int min, final int max, final
boolean autoCommit)
>            throws Exception
>   @@ -41,6 +42,22 @@
>            this.m_autoCommit = autoCommit;
>        }
>
>   +    /**
>   +     * Set the timeout in milliseconds for blocking when waiting for a
>   +     * new connection.  It defaults to -1.  Any number below 1 means
that there
>   +     * is no blocking, and the Pool fails hard.  Any number above 0
means we
>   +     * will wait for that length of time before failing.
>   +     */
>   +    public void setTimeout( long timeout )
>   +    {
>   +        if (this.m_initialized)
>   +        {
>   +            throw new IllegalStateException("You cannot change the
timeout after the pool is initialized");
>   +        }
>   +
>   +        m_wait = timeout;
>   +    }
>   +
>        public void initialize()
>        {
>            m_initThread = new Thread( this );
>   @@ -49,7 +66,45 @@
>
>        protected final Poolable newPoolable() throws Exception
>        {
>   -        JdbcConnection conn = (JdbcConnection) super.newPoolable();
>   +        JdbcConnection conn = null;
>   +
>   +        if ( m_wait < 1 )
>   +        {
>   +            conn = (JdbcConnection) super.newPoolable();
>   +        }
>   +        else
>   +        {
>   +            long curMillis = new Date().getTime();
>   +            long endTime = curMillis + m_wait;
>   +
>   +            while ( ( null == conn ) && ( curMillis < endTime ) )
>   +            {
>   +                try
>   +                {
>   +                    m_mutex.unlock();
>   +                    this.wait( m_wait ); // wait for 50 millis before
trying again
>   +                }
>   +                finally
>   +                {
>   +                    m_mutex.lock();
>   +                }
>   +
>   +                try
>   +                {
>   +                    conn = (JdbcConnection) super.newPoolable();
>   +                }
>   +                finally
>   +                {
>   +                    // Do nothing except keep waiting
>   +                }
>   +            }
>   +        }
>   +
>   +        if (null == conn )
>   +        {
>   +            throw new NoAvailableConnectionException("All available
connections are in use");
>   +        }
>   +
>            conn.setPool(this);
>            return conn;
>        }
>   @@ -119,6 +174,12 @@
>            }
>
>            return obj;
>   +    }
>   +
>   +    public void put( Poolable obj )
>   +    {
>   +        super.put( obj );
>   +        this.notifyAll();
>        }
>
>        public void run()
>
>
>
>
> --
> To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
>
>


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

Reply via email to