You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2004/02/19 08:53:00 UTC

svn commit: rev 6769 - in incubator/directory/eve/trunk/eve/frontend/buffer: merlin-impl merlin-impl/src/java/org/apache/eve/buffer merlin-impl/src/test merlin-impl/src/test/org merlin-impl/src/test/org/apache merlin-impl/src/test/org/apache/eve merlin-impl/src/test/org/apache/eve/buffer pojo-impl pojo-impl/src/java/org/apache/eve/buffer pojo-impl/src/test pojo-impl/src/test/org pojo-impl/src/test/org/apache pojo-impl/src/test/org/apache/eve pojo-impl/src/test/org/apache/eve/buffer spi/src/java/org/apache/eve/buffer

Author: akarasulu
Date: Wed Feb 18 23:52:59 2004
New Revision: 6769

Added:
   incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/AvalonLoggingMonitor.java
      - copied, changed from rev 6662, incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/MerlinBufferPoolMonitor.java
   incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/test/
   incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/test/org/
   incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/test/org/apache/
   incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/test/org/apache/eve/
   incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/test/org/apache/eve/buffer/
   incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/test/org/apache/eve/buffer/MerlinBufferPoolTest.java
   incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/src/test/
   incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/src/test/org/
   incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/src/test/org/apache/
   incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/src/test/org/apache/eve/
   incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/src/test/org/apache/eve/buffer/
   incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/src/test/org/apache/eve/buffer/DefaultBufferPoolTest.java
   incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolConsoleLogger.java
Removed:
   incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/MerlinBufferPoolMonitor.java
Modified:
   incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/project.properties
   incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/project.xml
   incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/MerlinBufferPool.java
   incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/MerlinBufferPool.xconfig
   incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/project.properties
   incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/project.xml
   incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/src/java/org/apache/eve/buffer/DefaultBufferPool.java
   incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPool.java
   incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolConfig.java
   incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolMonitor.java
   incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolMonitorAdapter.java
   incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/DefaultBufferPoolConfig.java
Log:
Fixed the buffer pool to not hash buffers anymore and all seems to work
well. Also added a console loging monitor and more methods to the service
of the bp so you can get more information about how many interested 
parties exist for a buffer and more.


Modified: incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/project.properties
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/project.properties	(original)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/project.properties	Wed Feb 18 23:52:59 2004
@@ -1,3 +1,5 @@
 maven.xdoc.date=left
 maven.xdoc.version=${pom.currentVersion}
 merlin.debug=true
+merlin.info=true
+merlin.override=conf/config.xml

Modified: incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/project.xml
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/project.xml	(original)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/project.xml	Wed Feb 18 23:52:59 2004
@@ -24,6 +24,20 @@
     </description>
 
     <dependencies>
+      
+        <dependency>
+          <groupId>merlin</groupId>
+          <artifactId>merlin-unit</artifactId>
+          <version>3.2.9</version>
+        </dependency>
+      
+        <dependency>
+          <groupId>commons-lang</groupId>
+          <artifactId>commons-lang</artifactId>
+          <version>2.0</version>
+          <url>http://jakarta.apache.org/commons/lang</url>
+        </dependency>
+      
         <dependency>
             <groupId>avalon-framework</groupId>
             <artifactId>avalon-framework-api</artifactId>

Copied: incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/AvalonLoggingMonitor.java (from rev 6662, incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/MerlinBufferPoolMonitor.java)
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/MerlinBufferPoolMonitor.java	(original)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/AvalonLoggingMonitor.java	Wed Feb 18 23:52:59 2004
@@ -47,20 +47,24 @@
  Apache Software Foundation, please see <http://www.apache.org/>.
 
 */
-package org.apache.eve.buffer;
+package org.apache.eve.buffer ;
 
-import java.nio.ByteBuffer;
 
-import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import java.nio.ByteBuffer ;
+
+import org.apache.avalon.framework.logger.AbstractLogEnabled ;
+import org.apache.commons.lang.ClassUtils;
+
 
 /**
- * $todo$ doc me
+ * A monitor that is a Avalon LogEnabled and reports events on behalf of the
+ * BufferPool component. 
  *
  * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
  * @author $Author: akarasulu $
  * @version $Rev: 6444 $
  */
-public class MerlinBufferPoolMonitor
+public class AvalonLoggingMonitor
     extends AbstractLogEnabled
     implements BufferPoolMonitor
 {
@@ -70,6 +74,15 @@
      */
     public void augmented( BufferPool a_bp )
     {
+        if ( getLogger().isDebugEnabled() )
+        {
+            getLogger().debug( a_bp + " grew by and increment of "
+                    + a_bp.getConfig().getIncrement() + " to a size of " 
+                    + a_bp.size() + " buffers total!" ) ;
+            getLogger().debug( a_bp + " currently has " + a_bp.getFreeCount()
+                    + " buffers free with " + a_bp.getInUseCount() 
+                    + " buffers in use." ) ;
+        }
     }
 
     
@@ -80,6 +93,16 @@
     public void bufferTaken( BufferPool a_bp, ByteBuffer a_buffer,
         Object a_taker )
     {
+        if ( getLogger().isDebugEnabled() )
+        {    
+            getLogger().debug( a_bp + " had a buffer taken by " 
+                    + getName( a_taker ) ) ;
+            getLogger().debug( a_bp + " currently has " + a_bp.getFreeCount()
+                    + " buffers free with " + a_bp.getInUseCount() 
+                    + " buffers in use." ) ;
+            getLogger().debug( "taken buffer has an interested party count of " 
+                    + a_bp.getInterestedCount( a_buffer ) ) ;
+        }
     }
 
     
@@ -90,6 +113,16 @@
     public void bufferReleased( BufferPool a_bp, ByteBuffer a_buffer,
         Object a_releaser )
     {
+        if ( getLogger().isDebugEnabled() )
+        {    
+            getLogger().debug( a_bp + " had buffer released by " 
+                    + getName( a_releaser ) ) ;
+            getLogger().debug( a_bp + " currently has " + a_bp.getFreeCount()
+                    + " buffers free with " + a_bp.getInUseCount() 
+                    + " buffers in use." ) ;
+            getLogger().debug( "taken buffer has an interested party count of " 
+                    + a_bp.getInterestedCount( a_buffer ) ) ;
+        }
     }
 
     
@@ -100,6 +133,16 @@
     public void interestClaimed( BufferPool a_bp, ByteBuffer a_buffer,
         Object a_claimer )
     {
+        if ( getLogger().isDebugEnabled() )
+        {    
+            getLogger().debug( getName( a_claimer ) 
+                    + " claimed interest on a buffer from " + a_bp ) ;
+            getLogger().debug( a_bp + " currently has " + a_bp.getFreeCount()
+                    + " buffers free with " + a_bp.getInUseCount() 
+                    + " buffers in use." ) ;
+            getLogger().debug( "taken buffer has an interested party count of " 
+                    + a_bp.getInterestedCount( a_buffer ) ) ;
+        }
     }
     
 
@@ -110,8 +153,19 @@
     public void interestReleased( BufferPool a_bp, ByteBuffer a_buffer,
                                   Object a_releaser )
     {
+        if ( getLogger().isDebugEnabled() )
+        {    
+            getLogger().debug( getName( a_releaser ) 
+                    + " released interest on a buffer from " + a_bp ) ;
+            getLogger().debug( a_bp + " currently has " + a_bp.getFreeCount()
+                    + " buffers free with " + a_bp.getInUseCount() 
+                    + " buffers in use." ) ;
+            getLogger().debug( "taken buffer has an interested party count of " 
+                    + a_bp.getInterestedCount( a_buffer ) ) ;
+        }
     }
 
+
     /*
      * (non-Javadoc)
      * @see org.apache.eve.buffer.BufferPoolMonitor#resourceUnavailable(
@@ -119,8 +173,15 @@
      */
     public void resourceUnavailable( BufferPool a_bp, Object a_party ) 
     {
+        if ( getLogger().isErrorEnabled() )
+        {    
+            getLogger().error( getName( a_party ) 
+                    + " tried to get a buffer from " 
+                    + a_bp + " but no free resourses were available." ) ;
+        }
     }
 
+    
     /*
      * (non-Javadoc)
      * @see org.apache.eve.buffer.BufferPoolMonitor#unregisteredParty(
@@ -129,7 +190,13 @@
     public void unregisteredParty( BufferPool a_bp, ByteBuffer a_buffer, 
                                    Object a_party ) 
     {
+        if ( getLogger().isDebugEnabled() )
+        {    
+            getLogger().debug( getName( a_party ) 
+                    + " never claimed interest on a buffer from " + a_bp ) ;
+        }
     }
+
     
     /*
      * (non-Javadoc)
@@ -139,5 +206,33 @@
     public void nonPooledBuffer( BufferPool a_bp, ByteBuffer a_buffer, 
                                  Object a_party )
     {
+        if ( getLogger().isDebugEnabled() )
+        {    
+            getLogger().debug( getName( a_party ) 
+                    + " tried to claim or release interest for a buffer from " 
+                    + a_bp ) ;
+        }
+    }
+    
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPoolMonitor#releaseOfUnclaimed(
+     * org.apache.eve.buffer.BufferPool, java.nio.ByteBuffer, java.lang.Object)
+     */
+    public void releaseOfUnclaimed( BufferPool a_bp, ByteBuffer a_buffer, 
+                                    Object a_releaser )
+    {
+        if ( getLogger().isErrorEnabled() )
+        {    
+            getLogger().error( getName( a_releaser ) 
+                    + " that never claimed interest on "
+                    + "a buffer tried to release claim to it from " + a_bp ) ;
+        }
+    }
+    
+    
+    public String getName( Object a_obj )
+    {
+        return ClassUtils.getShortClassName( a_obj.getClass() ) ;
     }
 }

Modified: incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/MerlinBufferPool.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/MerlinBufferPool.java	(original)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/MerlinBufferPool.java	Wed Feb 18 23:52:59 2004
@@ -79,6 +79,8 @@
     private DefaultBufferPool m_bp = null ;
     /** the configuration bean for this BufferPool */
     private BufferPoolConfig m_config = null ;
+    /** the monitor for the BufferPool */
+    private AvalonLoggingMonitor m_monitor = new AvalonLoggingMonitor() ;
     
     
     // ------------------------------------------------------------------------
@@ -124,6 +126,51 @@
     }
     
     
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPool#size()
+     */
+    public int size()
+    {
+        return m_bp.size() ;
+    }
+    
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPool#getName()
+     */
+    public String getName()
+    {
+        return m_bp.getName() ;
+    }
+    
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPool#getInUseCount()
+     */
+    public int getInUseCount()
+    {
+        return m_bp.getInUseCount() ;
+    }
+    
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPool#getFreeCount()
+     */
+    public int getFreeCount()
+    {
+        return m_bp.getFreeCount() ;
+    }
+    
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPool#getInterestedCount(java.nio.ByteBuffer)
+     */
+    public int getInterestedCount(ByteBuffer a_buffer)
+    {
+        return m_bp.getInterestedCount( a_buffer ) ;
+    }
+    
+    
     // ------------------------------------------------------------------------
     // Avalon Life Cycle Methods
     // ------------------------------------------------------------------------
@@ -135,9 +182,8 @@
     public void initialize() throws Exception
     {
         m_bp = new DefaultBufferPool( m_config ) ;
-        MerlinBufferPoolMonitor l_monitor = new MerlinBufferPoolMonitor() ;
-        l_monitor.enableLogging( getLogger() ) ;
-        m_bp.setMonitor( l_monitor ) ;
+        m_monitor.enableLogging( getLogger() ) ;
+        m_bp.setMonitor( m_monitor ) ;
     }
 
     
@@ -148,6 +194,7 @@
     public void configure( Configuration a_config ) 
         throws ConfigurationException
     {
+        String l_name = a_config.getChild( "name" ).getValue() ;
         int l_max = Integer.parseInt( a_config
                 .getChild( "maximum" ).getValue() ) ;
         int l_ini = Integer.parseInt( a_config
@@ -157,6 +204,7 @@
         int l_size = Integer.parseInt( a_config
                 .getChild( "bufferSize" ).getValue() ) ;
         
-        m_config = new DefaultBufferPoolConfig( l_inc, l_max, l_ini, l_size ) ;
+        m_config = new DefaultBufferPoolConfig( l_name, l_inc, l_max, 
+                l_ini, l_size ) ;
     }
 }

Modified: incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/MerlinBufferPool.xconfig
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/MerlinBufferPool.xconfig	(original)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/java/org/apache/eve/buffer/MerlinBufferPool.xconfig	Wed Feb 18 23:52:59 2004
@@ -1,6 +1,7 @@
 <configuration>
+	<name>default</name>
     <bufferSize>4096</bufferSize>
-    <maximum>50</maximum>
-    <initial>10</initial>
-    <increment>5</increment>
+    <maximum>10</maximum>
+    <initial>2</initial>
+    <increment>4</increment>
 </configuration>

Added: incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/test/org/apache/eve/buffer/MerlinBufferPoolTest.java
==============================================================================
--- (empty file)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/merlin-impl/src/test/org/apache/eve/buffer/MerlinBufferPoolTest.java	Wed Feb 18 23:52:59 2004
@@ -0,0 +1,226 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.eve.buffer;
+
+import java.nio.ByteBuffer;
+
+import org.apache.avalon.merlin.unit.AbstractMerlinTestCase;
+import org.apache.eve.ResourceException;
+
+/**
+ * $todo$ doc me
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class MerlinBufferPoolTest extends AbstractMerlinTestCase
+{
+    BufferPool m_bp = null ;
+    
+    
+    public MerlinBufferPoolTest( String a_name )
+    {
+        super( a_name ) ;
+    }
+
+    
+    public static void main( String[] args )
+    {
+        junit.textui.TestRunner.run( MerlinBufferPoolTest.class ) ;
+    }
+    
+    
+    /* (non-Javadoc)
+     * @see junit.framework.TestCase#setUp()
+     */
+    public void setUp() throws Exception
+    {
+        super.setUp() ;
+        m_bp = ( BufferPool ) resolve( "/server/buffer-pool" ) ; 
+    }
+
+    
+    /* (non-Javadoc)
+     * @see junit.framework.TestCase#tearDown()
+     */
+    public void tearDown()
+    {
+        m_bp = null ;
+        super.tearDown() ;
+    }
+    
+    
+    public void testGetConfig() throws Exception
+    {
+        BufferPoolConfig l_config = m_bp.getConfig() ;
+        assertNotNull( "Configuration was null", l_config ) ;
+    }
+    
+
+    public void testGetBuffer() throws Exception
+    {
+        final int l_max = m_bp.getConfig().getMaximumSize() ;
+        ByteBuffer[] l_buffers = new ByteBuffer[ l_max ] ;
+        
+        for ( int ii = 0; ii < m_bp.getConfig().getMaximumSize(); ii++ )
+        {    
+            l_buffers[ii] = m_bp.getBuffer( this ) ;
+            assertNotNull( "Got null ByteBuffer", l_buffers[ii] ) ;
+        }
+        
+        ByteBuffer l_buf = null ;
+        try
+        {
+            l_buf = m_bp.getBuffer( this ) ;
+        }
+        catch( ResourceException e ) 
+        {
+            assertNull( l_buf ) ;
+            assertNotNull( e ) ;
+        }
+    }
+
+
+    public void testGetFreeCount() throws Exception
+    {
+        final int l_max = m_bp.getConfig().getMaximumSize() ;
+        ByteBuffer[] l_buffers = new ByteBuffer[ l_max ] ;
+        
+        for ( int ii = 0; ii < m_bp.getConfig().getMaximumSize(); ii++ )
+        {    
+            l_buffers[ii] = m_bp.getBuffer( this ) ;
+            assertNotNull( "Got null ByteBuffer", l_buffers[ii] ) ;
+            assertEquals( "Free count was off", m_bp.size() - ii - 1,
+                    m_bp.getFreeCount() ) ;
+        }
+        
+        ByteBuffer l_buf = null ;
+        try
+        {
+            l_buf = m_bp.getBuffer( this ) ;
+        }
+        catch( ResourceException e ) 
+        {
+            assertNull( l_buf ) ;
+            assertNotNull( e ) ;
+        }
+    }
+
+    
+    public void testGetInUseCount() throws Exception
+    {
+        final int l_max = m_bp.getConfig().getMaximumSize() ;
+        ByteBuffer[] l_buffers = new ByteBuffer[ l_max ] ;
+        
+        for ( int ii = 0; ii < m_bp.getConfig().getMaximumSize(); ii++ )
+        {    
+            l_buffers[ii] = m_bp.getBuffer( this ) ;
+            assertNotNull( "Got null ByteBuffer", l_buffers[ii] ) ;
+            assertEquals( "In use count was off", ii+1,
+                    m_bp.getInUseCount() ) ;
+        }
+        
+        ByteBuffer l_buf = null ;
+        try
+        {
+            l_buf = m_bp.getBuffer( this ) ;
+        }
+        catch( ResourceException e ) 
+        {
+            assertNull( l_buf ) ;
+            assertNotNull( e ) ;
+        }
+    }
+    
+    
+    public void testGetInterestedCount()
+        throws Exception
+    {
+        final int l_max = m_bp.getConfig().getMaximumSize() ;
+        ByteBuffer[] l_buffers = new ByteBuffer[ l_max ] ;
+        
+        for ( int ii = 0; ii < m_bp.getConfig().getMaximumSize(); ii++ )
+        {    
+            l_buffers[ii] = m_bp.getBuffer( this ) ;
+            assertNotNull( "Got null ByteBuffer", l_buffers[ii] ) ;
+            assertEquals( "In use count was off", ii+1,
+                    m_bp.getInUseCount() ) ;
+            assertEquals( "Interest count was off", 
+                    1, m_bp.getInterestedCount( l_buffers[ii] ) ) ;
+        }
+        
+        ByteBuffer l_buf = null ;
+        try
+        {
+            l_buf = m_bp.getBuffer( this ) ;
+        }
+        catch( ResourceException e ) 
+        {
+            assertNull( l_buf ) ;
+            assertNotNull( e ) ;
+        }
+    }
+
+    
+    public void testReleaseClaim() 
+        throws Exception
+    {
+    }
+
+    
+    public void testSize() 
+        throws Exception
+    {
+        final int l_max = m_bp.getConfig().getMaximumSize() ;
+        ByteBuffer[] l_buffers = new ByteBuffer[ l_max ] ;
+        
+        for ( int ii = 0; ii < m_bp.getConfig().getMaximumSize(); ii++ )
+        {    
+            l_buffers[ii] = m_bp.getBuffer( this ) ;
+            assertNotNull( "Got null ByteBuffer", l_buffers[ii] ) ;
+            
+            if ( ii < 2 )
+            {    
+                assertEquals( "size was off", 2, m_bp.size() ) ;
+            }
+            else if ( ii >= 2 && ii < 6 )
+            {
+                assertEquals( "size was off", 6, m_bp.size() ) ;
+            }
+            else if ( ii >= 6 && ii < 10 )
+            {
+                assertEquals( "size was off", 10, m_bp.size() ) ;
+            }
+            else
+            {
+                throw new IllegalStateException( "should never get here!" ) ;
+            }
+        }
+        
+        ByteBuffer l_buf = null ;
+        try
+        {
+            l_buf = m_bp.getBuffer( this ) ;
+        }
+        catch( ResourceException e ) 
+        {
+            assertNull( l_buf ) ;
+            assertNotNull( e ) ;
+        }
+    }
+}

Modified: incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/project.properties
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/project.properties	(original)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/project.properties	Wed Feb 18 23:52:59 2004
@@ -1,3 +1,2 @@
 maven.xdoc.date=left
 maven.xdoc.version=${pom.currentVersion}
-merlin.debug=true

Modified: incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/project.xml
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/project.xml	(original)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/project.xml	Wed Feb 18 23:52:59 2004
@@ -26,6 +26,13 @@
     <dependencies>
 
         <dependency>
+          <groupId>commons-lang</groupId>
+          <artifactId>commons-lang</artifactId>
+          <version>2.0</version>
+          <url>http://jakarta.apache.org/commons/lang</url>
+        </dependency>
+
+        <dependency>
             <groupId>directory</groupId>
             <artifactId>eve-frontend-common-api</artifactId>
             <version>SNAPSHOT</version>

Modified: incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/src/java/org/apache/eve/buffer/DefaultBufferPool.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/src/java/org/apache/eve/buffer/DefaultBufferPool.java	(original)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/src/java/org/apache/eve/buffer/DefaultBufferPool.java	Wed Feb 18 23:52:59 2004
@@ -52,14 +52,18 @@
 
 import java.nio.ByteBuffer ;
 
-import java.util.HashMap ;
 import java.util.ArrayList ;
 
+import org.apache.commons.lang.Validate ;
 import org.apache.eve.ResourceException ;
 
 
 /**
  * The default BufferPool implementation.
+ * 
+ * @see <a 
+ * href="http://nagoya.apache.org/jira/secure/ViewIssue.jspa?key=DIR-12">
+ * JIRA Issue</a>
  *
  * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
  * @author $Author$
@@ -69,13 +73,12 @@
 {
     /** a configuration bean */
     private final BufferPoolConfig m_config ;
+    /** list of all buffers */
+    private final ArrayList m_allList ;
     /** list of currently free buffers */
     private final ArrayList m_freeList ;
     /** list of currently in use buffers */
     private final ArrayList m_inUseList ;
-    /** map of buffers to their interest lists */
-    private final HashMap m_interestLists ;
-
     /** the monitor for this DefaultBufferPool */
     private BufferPoolMonitor m_monitor = new BufferPoolMonitorAdapter() ;
     
@@ -90,18 +93,15 @@
         super() ;
         
         m_config = a_config ;
-        m_freeList = new ArrayList( a_config.getIncrement() ) ;
-        m_inUseList = new ArrayList( a_config.getIncrement() ) ;
-        m_interestLists = new HashMap( a_config.getIncrement() ) ;
+        m_freeList = new ArrayList( a_config.getMaximumSize() ) ;
+        m_inUseList = new ArrayList( a_config.getMaximumSize() ) ;
+        m_allList = new ArrayList( a_config.getMaximumSize() ) ;
 
         for( int ii = 0; ii < m_config.getInitialSize(); ii++ )
         {
-            ByteBuffer l_buf = ByteBuffer.allocateDirect( m_config
-                    .getBufferSize() ) ;
-            m_freeList.add( l_buf ) ;
-            
-            // create interest lists in advance for the buffers
-            m_interestLists.put( l_buf, new ArrayList( 3 ) ) ;
+            BufferListPair l_list = new BufferListPair() ;
+            m_freeList.add( l_list ) ;
+            m_allList.add( l_list ) ;
         }
     }
 
@@ -112,18 +112,17 @@
     public synchronized ByteBuffer getBuffer( Object a_party ) 
         throws ResourceException
     {
-        ByteBuffer l_buf = null ;
+        BufferListPair l_list = null ;
         
         if ( m_freeList.size() == 0 )
         {
-            if ( ( m_freeList.size() + m_config.getIncrement() ) <= 
-                    m_config.getMaximumSize() )
+            if ( m_config.getIncrement() <= m_config.getMaximumSize() )
             {
                 for ( int ii = 0; ii < m_config.getIncrement(); ii++ )
                 {
-                    l_buf = ByteBuffer.allocateDirect( m_config
-                            .getBufferSize() ) ; 
-                    m_interestLists.put( l_buf, new ArrayList( 3 ) ) ;
+                    l_list = new BufferListPair() ;
+                    m_freeList.add( l_list ) ;
+                    m_allList.add( l_list ) ;
                 }
             }
             else
@@ -134,15 +133,14 @@
         }
         
         // remove from free list and add to in use list then report to monitir
-        l_buf = ( ByteBuffer ) m_freeList.remove( 0 ) ;
-        m_inUseList.add( l_buf ) ;
-        m_monitor.bufferTaken( this, l_buf, a_party ) ;
+        l_list = ( BufferListPair ) m_freeList.remove( 0 ) ;
+        m_inUseList.add( l_list ) ;
+        m_monitor.bufferTaken( this, l_list.getBuffer(), a_party ) ;
 
         // claim interest on the buffer automatically then report to monitor
-        ArrayList l_list = ( ArrayList ) m_interestLists.get( l_buf ) ;
         l_list.add( a_party ) ;
-        m_monitor.interestClaimed( this, l_buf, a_party ) ;
-        return l_buf ;
+        m_monitor.interestClaimed( this, l_list.getBuffer(), a_party ) ;
+        return l_list.getBuffer() ;
     }
 
     
@@ -153,13 +151,14 @@
     public synchronized void claimInterest( ByteBuffer a_buffer, 
                                             Object a_party )
     {
-        if ( ! m_interestLists.containsKey( a_buffer ) )
+        BufferListPair l_list = getBufferListPair( a_buffer ) ;
+        
+        if ( null == l_list )
         {
             m_monitor.nonPooledBuffer( this, a_buffer, a_party ) ;
             throw new IllegalStateException( "Not a BufferPool resource" ) ;
         }
         
-        ArrayList l_list = ( ArrayList ) m_interestLists.get( a_buffer ) ;
         l_list.add( a_party ) ;
         m_monitor.interestClaimed( this, a_buffer, a_party ) ;
     }
@@ -171,14 +170,14 @@
      */
     public synchronized void releaseClaim( ByteBuffer a_buffer, Object a_party )
     {
-        if ( ! m_interestLists.containsKey( a_buffer ) )
+        BufferListPair l_list = getBufferListPair( a_buffer ) ;
+        
+        if ( null == l_list )
         {
-            m_monitor.nonPooledBuffer( this, a_buffer, a_party ) ;
-            throw new IllegalStateException( "Not a BufferPool resource" ) ;
+            m_monitor.releaseOfUnclaimed( this, a_buffer, a_party ) ;
+            throw new IllegalArgumentException( "Not a pooled resource" ) ;
         }
         
-        ArrayList l_list = ( ArrayList ) m_interestLists.get( a_buffer ) ;
-        
         if ( ! l_list.contains( a_party ) )
         {
             m_monitor.unregisteredParty( this, a_buffer, a_party ) ;
@@ -209,6 +208,54 @@
     }
     
     
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPool#size()
+     */
+    public synchronized int size()
+    {
+        return m_freeList.size() + m_inUseList.size() ;
+    }
+    
+
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPool#getName()
+     */
+    public String getName()
+    {
+        return m_config.getName() ;
+    }
+    
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPool#getFreeCount()
+     */
+    public synchronized int getFreeCount()
+    {
+        return m_freeList.size() ;
+    }
+    
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPool#getInUseCount()
+     */
+    public synchronized int getInUseCount()
+    {
+        return m_inUseList.size() ;
+    }
+    
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPool#getInterestedCount(
+     * java.nio.ByteBuffer)
+     */
+    public int getInterestedCount( ByteBuffer a_buffer )
+    {
+        BufferListPair l_list = getBufferListPair( a_buffer ) ;
+        Validate.notNull( l_list ) ;
+        return l_list.size() ;
+    }
+    
+    
     /**
      * Gets the monitor.
      * 
@@ -228,5 +275,113 @@
     public void setMonitor( BufferPoolMonitor a_monitor )
     {
         m_monitor = a_monitor ;
+    }
+    
+    
+    /*
+     * (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    public String toString()
+    {
+        StringBuffer l_buf = new StringBuffer( m_config.getName() ) ;
+        l_buf.append( " buffer pool" ) ;
+        return l_buf.toString() ;
+    }
+    
+    
+    // ------------------------------------------------------------------------
+    // code dealing with pairs of buffers and an interested party list 
+    // ------------------------------------------------------------------------
+    
+    
+    /**
+     * Finds and returns a BufferListPair by scanning the complete list of 
+     * pairs looking for the pair that contains the same buffer.
+     * 
+     * @param a_buffer the buffer to search for in the list of pairs
+     * @return null if the buffer does not exist or the pair containing it
+     */
+    BufferListPair getBufferListPair( ByteBuffer a_buffer )
+    {
+        BufferListPair l_list = null ;
+        
+        for ( int ii = 0; ii < m_allList.size(); ii++ )
+        {
+            l_list = ( BufferListPair ) m_allList.get( ii ) ;
+            if ( a_buffer == l_list.getBuffer() )
+            {
+                return l_list ;
+            }
+        }
+        
+        return null ;
+    }
+    
+    
+    /**
+     * Class used to pair up a buffer with a list to track the parties 
+     * interested in the buffer. 
+     */
+    class BufferListPair
+    {
+        final ArrayList m_list ;
+        final ByteBuffer m_buffer ;
+        
+        
+        BufferListPair()
+        {
+            this( new ArrayList( 3 ), 
+                    ByteBuffer.allocateDirect( m_config.getBufferSize() ) ) ;
+        }
+
+        
+        BufferListPair( ByteBuffer a_buffer )
+        {
+            this( new ArrayList( 3 ), a_buffer ) ;
+        }
+
+        
+        BufferListPair( ArrayList a_list, ByteBuffer a_buffer )
+        {
+            m_list = a_list ;
+            m_buffer = a_buffer ;
+        }
+        
+        
+        ByteBuffer getBuffer()
+        {
+            return m_buffer ;
+        }
+        
+        
+        ArrayList getList()
+        {
+            return m_list ;
+        }
+        
+        
+        void add( Object a_party )
+        {
+            m_list.add( a_party ) ;
+        }
+        
+        
+        boolean contains( Object a_party )
+        {
+            return m_list.contains( a_party ) ;
+        }
+        
+        
+        boolean remove( Object a_party )
+        {
+            return m_list.remove( a_party ) ;
+        }
+        
+        
+        int size()
+        {
+            return m_list.size() ;
+        }
     }
 }

Added: incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/src/test/org/apache/eve/buffer/DefaultBufferPoolTest.java
==============================================================================
--- (empty file)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/pojo-impl/src/test/org/apache/eve/buffer/DefaultBufferPoolTest.java	Wed Feb 18 23:52:59 2004
@@ -0,0 +1,238 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.eve.buffer ;
+
+
+import java.nio.ByteBuffer;
+
+import org.apache.eve.ResourceException;
+
+import junit.framework.TestCase ;
+
+
+/**
+ * Tests the default buffer pool implementation.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class DefaultBufferPoolTest extends TestCase
+{
+
+    public static void main( String[] args )
+    {
+        junit.textui.TestRunner.run( DefaultBufferPoolTest.class ) ;
+    }
+
+    
+    /**
+     * Constructor for DefaultBufferPoolTest.
+     * @param arg0
+     */
+    public DefaultBufferPoolTest( String arg0 )
+    {
+        super( arg0 ) ;
+    }
+
+
+    DefaultBufferPool m_bp = null ;
+    
+    
+    
+    /* (non-Javadoc)
+     * @see junit.framework.TestCase#setUp()
+     */
+    public void setUp() throws Exception
+    {
+        super.setUp() ;
+        DefaultBufferPoolConfig l_config = new DefaultBufferPoolConfig(
+                "default", 4, 10, 2, 4096 ) ;
+        m_bp = new DefaultBufferPool( l_config ) ;
+        m_bp.setMonitor( new BufferPoolConsoleLogger() ) ;
+    }
+
+    
+    /* (non-Javadoc)
+     * @see junit.framework.TestCase#tearDown()
+     */
+    public void tearDown() throws Exception
+    {
+        m_bp = null ;
+        super.tearDown() ;
+    }
+    
+    
+    public void testGetConfig() throws Exception
+    {
+        BufferPoolConfig l_config = m_bp.getConfig() ;
+        assertNotNull( "Configuration was null", l_config ) ;
+    }
+    
+
+    public void testGetBuffer() throws Exception
+    {
+        final int l_max = m_bp.getConfig().getMaximumSize() ;
+        ByteBuffer[] l_buffers = new ByteBuffer[ l_max ] ;
+        
+        for ( int ii = 0; ii < m_bp.getConfig().getMaximumSize(); ii++ )
+        {    
+            l_buffers[ii] = m_bp.getBuffer( this ) ;
+            assertNotNull( "Got null ByteBuffer", l_buffers[ii] ) ;
+        }
+        
+        ByteBuffer l_buf = null ;
+        try
+        {
+            l_buf = m_bp.getBuffer( this ) ;
+        }
+        catch( ResourceException e ) 
+        {
+            assertNull( l_buf ) ;
+            assertNotNull( e ) ;
+        }
+    }
+
+
+    public void testGetFreeCount() throws Exception
+    {
+        final int l_max = m_bp.getConfig().getMaximumSize() ;
+        ByteBuffer[] l_buffers = new ByteBuffer[ l_max ] ;
+        
+        for ( int ii = 0; ii < m_bp.getConfig().getMaximumSize(); ii++ )
+        {    
+            l_buffers[ii] = m_bp.getBuffer( this ) ;
+            assertNotNull( "Got null ByteBuffer", l_buffers[ii] ) ;
+            assertEquals( "Free count was off", m_bp.size() - ii - 1,
+                    m_bp.getFreeCount() ) ;
+        }
+        
+        ByteBuffer l_buf = null ;
+        try
+        {
+            l_buf = m_bp.getBuffer( this ) ;
+        }
+        catch( ResourceException e ) 
+        {
+            assertNull( l_buf ) ;
+            assertNotNull( e ) ;
+        }
+    }
+
+    
+    public void testGetInUseCount() throws Exception
+    {
+        final int l_max = m_bp.getConfig().getMaximumSize() ;
+        ByteBuffer[] l_buffers = new ByteBuffer[ l_max ] ;
+        
+        for ( int ii = 0; ii < m_bp.getConfig().getMaximumSize(); ii++ )
+        {    
+            l_buffers[ii] = m_bp.getBuffer( this ) ;
+            assertNotNull( "Got null ByteBuffer", l_buffers[ii] ) ;
+            assertEquals( "In use count was off", ii+1,
+                    m_bp.getInUseCount() ) ;
+        }
+        
+        ByteBuffer l_buf = null ;
+        try
+        {
+            l_buf = m_bp.getBuffer( this ) ;
+        }
+        catch( ResourceException e ) 
+        {
+            assertNull( l_buf ) ;
+            assertNotNull( e ) ;
+        }
+    }
+    
+    
+    public void testGetInterestedCount()
+        throws Exception
+    {
+        final int l_max = m_bp.getConfig().getMaximumSize() ;
+        ByteBuffer[] l_buffers = new ByteBuffer[ l_max ] ;
+        
+        for ( int ii = 0; ii < m_bp.getConfig().getMaximumSize(); ii++ )
+        {    
+            l_buffers[ii] = m_bp.getBuffer( this ) ;
+            assertNotNull( "Got null ByteBuffer", l_buffers[ii] ) ;
+            assertEquals( "In use count was off", ii+1,
+                    m_bp.getInUseCount() ) ;
+            assertEquals( "Interest count was off", 
+                    1, m_bp.getInterestedCount( l_buffers[ii] ) ) ;
+        }
+        
+        ByteBuffer l_buf = null ;
+        try
+        {
+            l_buf = m_bp.getBuffer( this ) ;
+        }
+        catch( ResourceException e ) 
+        {
+            assertNull( l_buf ) ;
+            assertNotNull( e ) ;
+        }
+    }
+
+    
+    public void testReleaseClaim() 
+        throws Exception
+    {
+    }
+
+    
+    public void testSize() 
+        throws Exception
+    {
+        final int l_max = m_bp.getConfig().getMaximumSize() ;
+        ByteBuffer[] l_buffers = new ByteBuffer[ l_max ] ;
+        
+        for ( int ii = 0; ii < m_bp.getConfig().getMaximumSize(); ii++ )
+        {    
+            l_buffers[ii] = m_bp.getBuffer( this ) ;
+            assertNotNull( "Got null ByteBuffer", l_buffers[ii] ) ;
+            
+            if ( ii < 2 )
+            {    
+                assertEquals( "size was off", 2, m_bp.size() ) ;
+            }
+            else if ( ii >= 2 && ii < 6 )
+            {
+                assertEquals( "size was off", 6, m_bp.size() ) ;
+            }
+            else if ( ii >= 6 && ii < 10 )
+            {
+                assertEquals( "size was off", 10, m_bp.size() ) ;
+            }
+            else
+            {
+                throw new IllegalStateException( "should never get here!" ) ;
+            }
+        }
+        
+        ByteBuffer l_buf = null ;
+        try
+        {
+            l_buf = m_bp.getBuffer( this ) ;
+        }
+        catch( ResourceException e ) 
+        {
+            assertNull( l_buf ) ;
+            assertNotNull( e ) ;
+        }
+    }
+}

Modified: incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPool.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPool.java	(original)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPool.java	Wed Feb 18 23:52:59 2004
@@ -52,7 +52,7 @@
 
 import java.nio.ByteBuffer ;
 
-import org.apache.eve.ResourceException;
+import org.apache.eve.ResourceException ;
 
 
 /**
@@ -106,4 +106,42 @@
      * @return the configuration for this BufferPool
      */
     BufferPoolConfig getConfig() ;
+    
+    /**
+     * Gets the number of interested parties that have claimed interest on a
+     * pooled buffer.  This number is like the link count.
+     * 
+     * @param a_buffer the buffer to get a interest count for
+     * @return count of parties claiming interest on the buffer
+     */
+    int getInterestedCount( ByteBuffer a_buffer ) ; 
+    
+    /**
+     * Gets a count of the number of free buffers in this BufferPool.
+     * 
+     * @return count of free buffers in this BufferPool
+     */
+    int getFreeCount() ;
+    
+    /**
+     * Gets a count of the number of buffers currently being used in this 
+     * BufferPool.
+     * 
+     * @return count of buffers currently being used in this BufferPool
+     */
+    int getInUseCount() ;
+    
+    /**
+     * Gets the current size of this BufferPool.
+     * 
+     * @return the number of buffers total (free and in use) in this BufferPool
+     */
+    int size() ;
+
+    /**
+     * Gets the name of this BufferPool
+     * 
+     * @return the name of this BufferPool
+     */
+    String getName() ;
 }

Modified: incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolConfig.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolConfig.java	(original)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolConfig.java	Wed Feb 18 23:52:59 2004
@@ -59,6 +59,13 @@
 public interface BufferPoolConfig
 {
     /**
+     * Gets the name of this BufferPool configuration.
+     * 
+     * @return the name 
+     */
+    String getName() ;
+    
+    /**
      * The increment by which the BufferPool should grow.
      * 
      * @return the increment amount for the BufferPool

Added: incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolConsoleLogger.java
==============================================================================
--- (empty file)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolConsoleLogger.java	Wed Feb 18 23:52:59 2004
@@ -0,0 +1,149 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.eve.buffer;
+
+import java.nio.ByteBuffer;
+
+/**
+ * $todo$ doc me
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class BufferPoolConsoleLogger implements BufferPoolMonitor
+{
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPoolMonitor#
+     * augmented(org.apache.eve.buffer.BufferPool)
+     */
+    public void augmented( BufferPool a_bp )
+    {
+        System.out.println( "Just augmented the buffer pool" ) ;
+    }
+
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPoolMonitor#bufferReleased(
+     * org.apache.eve.buffer.BufferPool, java.nio.ByteBuffer, java.lang.Object)
+     */
+    public void bufferReleased(
+        BufferPool a_bp,
+        ByteBuffer a_buffer,
+        Object a_releaser)
+    {
+        System.out.println( a_releaser + " released " + a_buffer 
+                + " from pool " + a_bp ) ;
+    }
+
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPoolMonitor#bufferTaken(
+     * org.apache.eve.buffer.BufferPool, java.nio.ByteBuffer, java.lang.Object)
+     */
+    public void bufferTaken(
+        BufferPool a_bp,
+        ByteBuffer a_buffer,
+        Object a_taker)
+    {
+        System.out.println( a_taker + " took " + a_buffer 
+                + " from pool " + a_bp ) ;
+    }
+
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPoolMonitor#interestClaimed(
+     * org.apache.eve.buffer.BufferPool, java.nio.ByteBuffer, java.lang.Object)
+     */
+    public void interestClaimed(
+        BufferPool a_bp,
+        ByteBuffer a_buffer,
+        Object a_claimer)
+    {
+        System.out.println( a_claimer + " claimed interest in " + a_buffer 
+                + " from pool " + a_bp ) ;
+    }
+
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPoolMonitor#interestReleased(
+     * org.apache.eve.buffer.BufferPool, java.nio.ByteBuffer, java.lang.Object)
+     */
+    public void interestReleased(
+        BufferPool a_bp,
+        ByteBuffer a_buffer,
+        Object a_releaser)
+    {
+        System.out.println( a_releaser + " released interest in " + a_buffer 
+                + " from pool " + a_bp ) ;
+    }
+
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPoolMonitor#nonPooledBuffer(
+     * org.apache.eve.buffer.BufferPool, java.nio.ByteBuffer, java.lang.Object)
+     */
+    public void nonPooledBuffer(
+        BufferPool a_bp,
+        ByteBuffer a_buffer,
+        Object a_party)
+    {
+        System.out.println( a_party + " tried to release interest in " 
+                + a_buffer + " from pool " + a_bp 
+                + " but resouce was not from this pool.") ;
+    }
+
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPoolMonitor#resourceUnavailable(
+     * org.apache.eve.buffer.BufferPool, java.lang.Object)
+     */
+    public void resourceUnavailable( BufferPool a_bp, Object a_party )
+    {
+        System.out.println( "BufferPool " + a_bp 
+                + " is at capacity - cannot allocate buffer resouce to " 
+                + a_party ) ;
+    }
+
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPoolMonitor#unregisteredParty(
+     * org.apache.eve.buffer.BufferPool, java.nio.ByteBuffer, java.lang.Object)
+     */
+    public void unregisteredParty(
+        BufferPool a_bp,
+        ByteBuffer a_buffer,
+        Object a_party)
+    {
+        System.out.println( a_party 
+                + " has not registered as claiming interest on " + a_buffer 
+                + " from pool " + a_bp ) ;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPoolMonitor#releaseOfUnclaimed(
+     * org.apache.eve.buffer.BufferPool, java.nio.ByteBuffer, java.lang.Object)
+     */
+    public void releaseOfUnclaimed( BufferPool a_bp, ByteBuffer a_buffer,
+									Object a_releaser )
+    {
+        System.out.println( a_releaser + " attempted to release interest in " 
+                + a_buffer + " from pool " 
+                + a_bp + " when the buffer was not claimed." ) ;
+    }
+}

Modified: incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolMonitor.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolMonitor.java	(original)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolMonitor.java	Wed Feb 18 23:52:59 2004
@@ -70,6 +70,17 @@
     void augmented( BufferPool a_bp ) ;
     
     /**
+     * Monitors the release of an unclaimed buffer which cannot be released if
+     * there is no claim and it is on the free list.
+     * 
+     * @param a_bp the BufferPool the buffer is released back to
+     * @param a_buffer the buffer that is released
+     * @param a_releaser the object doing the releasing
+     */
+    void releaseOfUnclaimed( BufferPool a_bp, ByteBuffer a_buffer, 
+                             Object a_releaser ) ;
+    
+    /**
      * Monitors the giving of a buffer to a client.
      * 
      * @param a_bp the BufferPool the buffer is taken from

Modified: incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolMonitorAdapter.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolMonitorAdapter.java	(original)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/BufferPoolMonitorAdapter.java	Wed Feb 18 23:52:59 2004
@@ -140,4 +140,14 @@
                                  Object a_party )
     {
     }
+    
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPoolMonitor#releaseOfUnclaimed(
+     * org.apache.eve.buffer.BufferPool, java.nio.ByteBuffer, java.lang.Object)
+     */
+    public void releaseOfUnclaimed( BufferPool a_bp, ByteBuffer a_buffer,
+									Object a_releaser )
+    {
+    }
 }

Modified: incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/DefaultBufferPoolConfig.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/DefaultBufferPoolConfig.java	(original)
+++ incubator/directory/eve/trunk/eve/frontend/buffer/spi/src/java/org/apache/eve/buffer/DefaultBufferPoolConfig.java	Wed Feb 18 23:52:59 2004
@@ -47,7 +47,8 @@
  Apache Software Foundation, please see <http://www.apache.org/>.
 
 */
-package org.apache.eve.buffer;
+package org.apache.eve.buffer ;
+
 
 /**
  * A BufferPoolConfig implementation bean.
@@ -58,6 +59,8 @@
  */
 public class DefaultBufferPoolConfig implements BufferPoolConfig
 {
+    /** the name */
+    private final String m_name ;
     /** the growth increment */
     private int m_inc = 0 ;
     /** the maximum pool size */
@@ -71,14 +74,16 @@
     /**
      * Creates a BufferPool configuration bean using the supplied values.
      * 
+     * @param a_name the name
      * @param a_inc the growth increment
      * @param a_max the maximum pool size
      * @param a_ini the initial pool size 
      * @param a_size the size of the buffers pooled
      */
-    public DefaultBufferPoolConfig( int a_inc, int a_max, int a_ini, 
-                                    int a_size )
+    public DefaultBufferPoolConfig( String a_name, int a_inc, int a_max, 
+                                    int a_ini, int a_size )
     {
+        m_name = a_name ;
         m_inc = a_inc ;
         m_max = a_max ;
         m_ini = a_ini ;
@@ -119,5 +124,14 @@
     public int getMaximumSize()
     {
         return m_max ;
+    }
+    
+    
+    /* (non-Javadoc)
+     * @see org.apache.eve.buffer.BufferPoolConfig#getName()
+     */
+    public String getName()
+    {
+        return m_name ;
     }
 }