[jboss-cvs] JBossAS SVN: r112512 - in projects/jboss-jca/trunk: core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Dec 13 03:28:38 EST 2011


Author: jesper.pedersen
Date: 2011-12-13 03:28:38 -0500 (Tue, 13 Dec 2011)
New Revision: 112512

Modified:
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/idle/IdleRemover.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ArrayBlockingQueueManagedConnectionPool.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/SemaphoreArrayListManagedConnectionPool.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/validator/ConnectionValidator.java
   projects/jboss-jca/trunk/embedded/src/main/resources/jca.xml
   projects/jboss-jca/trunk/sjc/src/main/resources/bootstrap/jca.xml
Log:
[JBJCA-712] Restructure background workers

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/idle/IdleRemover.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/idle/IdleRemover.java	2011-12-09 16:45:51 UTC (rev 112511)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/idle/IdleRemover.java	2011-12-13 08:28:38 UTC (rev 112512)
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2008-2009, Red Hat Middleware LLC, and individual contributors
+ * Copyright 2008-2011, Red Hat Middleware LLC, and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -37,89 +37,146 @@
 import org.jboss.logging.Logger;
 
 /**
- * Connection validator class.
+ * Idle remover
  * 
  * @author <a href="mailto:gurkanerdogdu at yahoo.com">Gurkan Erdogdu</a>
  * @author <a href="mailto:jesper.pedersen at jboss.org">Jesper Pedersen</a>
  */
 public class IdleRemover
 {
-   /**Logger instance*/
+   /** Logger instance */
    private static CoreLogger logger = Logger.getMessageLogger(CoreLogger.class, IdleRemover.class.getName());
    
-   /**Validator thread name*/
+   /** Thread name */
    private static final String THREAD_NAME = "IdleRemover";
    
-   /**Singleton instance*/
-   private static final IdleRemover INSTANCE = new IdleRemover();
+   /** Singleton instance */
+   private static IdleRemover instance = new IdleRemover();
    
-   /**Registered internal pool instances*/
+   /** Registered pool instances */
    private CopyOnWriteArrayList<IdleConnectionRemovalSupport> registeredPools = 
       new CopyOnWriteArrayList<IdleConnectionRemovalSupport>();
    
-   /**Validator executor service*/
-   private ExecutorService executorService = null;
+   /** Executor service */
+   private ExecutorService executorService;
    
+   /** Is the executor external */
+   private boolean isExternal;
+
    /** The interval */
-   private long interval = Long.MAX_VALUE;
+   private long interval;
 
-   /** The next - important initialization! */
-   private long next = Long.MAX_VALUE;
+   /** The next scan */
+   private long next;
    
    /** Shutdown */
-   private AtomicBoolean shutdown = new AtomicBoolean(false);
+   private AtomicBoolean shutdown;
 
-   /**Lock for condition*/
-   private Lock lock = new ReentrantLock(true);
+   /** Lock */
+   private Lock lock;
    
-   /**Condition*/
-   private Condition condition = lock.newCondition();
+   /** Condition */
+   private Condition condition;
    
    /**
     * Private constructor.
     */
    private IdleRemover()
    {
-      this.executorService = Executors.newSingleThreadExecutor(new IdleRemoverThreadFactory());
-      this.executorService.execute(new IdleConnectionsRemover());
+      this.executorService = null;
+      this.isExternal = false;
+      this.interval = Long.MAX_VALUE;
+      this.next = Long.MAX_VALUE;
+      this.shutdown = new AtomicBoolean(false);
+      this.lock = new ReentrantLock(true);
+      this.condition = lock.newCondition();
    }
+
+   /**
+    * Get the instance
+    * @return The value
+    */
+   public static IdleRemover getInstance()
+   {
+      return instance;
+   }
    
    /**
+    * Set the executor service
+    * @param v The value
+    */
+   public void setExecutorService(ExecutorService v)
+   {
+      if (v != null)
+      {
+         this.executorService = v;
+         this.isExternal = true;
+      }
+      else
+      {
+         this.executorService = null;
+         this.isExternal = false;
+      }
+   }
+
+   /**
+    * Start
+    * @exception Throwable Thrown if an error occurs
+    */
+   public void start() throws Throwable
+   {
+      if (!isExternal)
+      {
+         this.executorService = Executors.newSingleThreadExecutor(new IdleRemoverThreadFactory());
+      }
+
+      this.shutdown.set(false);
+      this.interval = Long.MAX_VALUE;
+      this.next = Long.MAX_VALUE;
+
+      this.executorService.execute(new IdleRemoverRunner());
+   }
+
+   /**
+    * Stop
+    * @exception Throwable Thrown if an error occurs
+    */
+   public void stop() throws Throwable
+   {
+      instance.shutdown.set(true);
+
+      if (!isExternal)
+      {
+         instance.executorService.shutdownNow();
+         instance.executorService = null;
+      }
+
+      instance.registeredPools.clear();
+   }
+   
+   /**
     * Register pool for connection validation.
     * @param mcp managed connection pool
     * @param interval validation interval
     */
-   public static void registerPool(IdleConnectionRemovalSupport mcp, long interval)
+   public void registerPool(IdleConnectionRemovalSupport mcp, long interval)
    {
       logger.debugf("Register pool: %s (interval=%s)", mcp, interval);
 
-      INSTANCE.internalRegisterPool(mcp, interval);
+      instance.internalRegisterPool(mcp, interval);
    }
    
    /**
     * Unregister pool instance for connection validation.
     * @param mcp pool instance
     */
-   public static void unregisterPool(IdleConnectionRemovalSupport mcp)
+   public void unregisterPool(IdleConnectionRemovalSupport mcp)
    {
       logger.debugf("Unregister pool: %s", mcp);
 
-      INSTANCE.internalUnregisterPool(mcp);
+      instance.internalUnregisterPool(mcp);
    }
 
-   /**
-    * Shutdown
-    */
-   public static void shutdown()
-   {
-      INSTANCE.shutdown.set(true);
-
-      INSTANCE.executorService.shutdownNow();
-      INSTANCE.executorService = null;
-
-      INSTANCE.registeredPools.clear();
-   }
-   
    private void internalRegisterPool(IdleConnectionRemovalSupport mcp, long interval)
    {
       try
@@ -137,8 +194,7 @@
                next = maybeNext;
                if (logger.isDebugEnabled())
                {
-                  logger.debug("internalRegisterPool: about to notify thread: old next: " +
-                        next + ", new next: " + maybeNext);  
+                  logger.debug("About to notify thread: old next: " + next + ", new next: " + maybeNext);
                }               
                
                this.condition.signal();
@@ -159,7 +215,7 @@
       {
          if (logger.isDebugEnabled())
          {
-            logger.debug("internalUnregisterPool: setting interval to Long.MAX_VALUE");  
+            logger.debug("Setting interval to Long.MAX_VALUE");  
          }
          
          interval = Long.MAX_VALUE;
@@ -184,18 +240,11 @@
    }
    
    /**
-    * IdleConnectionsRemover
+    * IdleRemoverRunner
     */
-   private class IdleConnectionsRemover implements Runnable
+   private class IdleRemoverRunner implements Runnable
    {
       /**
-       * Constructor
-       */
-      public IdleConnectionsRemover()
-      {
-      }
-
-      /**
        * {@inheritDoc}
        */
       public void run()
@@ -209,16 +258,16 @@
             
             while (!shutdown.get())
             {
-               boolean result = INSTANCE.condition.await(INSTANCE.interval, TimeUnit.MILLISECONDS);
+               boolean result = instance.condition.await(instance.interval, TimeUnit.MILLISECONDS);
 
                if (logger.isTraceEnabled())
                {
-                  logger.trace("Result of await ConnectionValidator: " + result);
+                  logger.trace("Result of await: " + result);
                }
 
                if (logger.isDebugEnabled())
                {
-                  logger.debug("run: ConnectionValidator notifying pools, interval: " + interval);  
+                  logger.debug("Notifying pools, interval: " + interval);  
                }
      
                for (IdleConnectionRemovalSupport mcp : registeredPools)
@@ -236,7 +285,8 @@
          }
          catch (InterruptedException e)
          {
-            logger.returningConnectionValidatorInterrupted();
+            if (!shutdown.get())
+               logger.returningConnectionValidatorInterrupted();
          }
          catch (RuntimeException e)
          {

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ArrayBlockingQueueManagedConnectionPool.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ArrayBlockingQueueManagedConnectionPool.java	2011-12-09 16:45:51 UTC (rev 112511)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ArrayBlockingQueueManagedConnectionPool.java	2011-12-13 08:28:38 UTC (rev 112512)
@@ -174,7 +174,7 @@
       if (poolConfiguration.getIdleTimeoutMinutes() > 0)
       {
          //Register removal support
-         IdleRemover.registerPool(this, poolConfiguration.getIdleTimeoutMinutes() * 1000 * 60);
+         IdleRemover.getInstance().registerPool(this, poolConfiguration.getIdleTimeoutMinutes() * 1000 * 60);
       }
       
       if (poolConfiguration.isBackgroundValidation() && poolConfiguration.getBackgroundValidationMillis() > 0)
@@ -183,7 +183,7 @@
                    poolConfiguration.getBackgroundValidationMillis());
          
          //Register validation
-         ConnectionValidator.registerPool(this, poolConfiguration.getBackgroundValidationMillis());
+         ConnectionValidator.getInstance().registerPool(this, poolConfiguration.getBackgroundValidationMillis());
       }
 
       shutdown.set(false);
@@ -599,8 +599,8 @@
    public void shutdown()
    {
       shutdown.set(true);
-      IdleRemover.unregisterPool(this);
-      ConnectionValidator.unregisterPool(this);
+      IdleRemover.getInstance().unregisterPool(this);
+      ConnectionValidator.getInstance().unregisterPool(this);
       flush(true);
    }
 

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/SemaphoreArrayListManagedConnectionPool.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/SemaphoreArrayListManagedConnectionPool.java	2011-12-09 16:45:51 UTC (rev 112511)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/SemaphoreArrayListManagedConnectionPool.java	2011-12-13 08:28:38 UTC (rev 112512)
@@ -207,7 +207,7 @@
       if (poolConfiguration.getIdleTimeoutMinutes() > 0)
       {
          //Register removal support
-         IdleRemover.registerPool(this, poolConfiguration.getIdleTimeoutMinutes() * 1000 * 60);
+         IdleRemover.getInstance().registerPool(this, poolConfiguration.getIdleTimeoutMinutes() * 1000 * 60);
       }
       
       if (poolConfiguration.isBackgroundValidation() && poolConfiguration.getBackgroundValidationMillis() > 0)
@@ -216,7 +216,7 @@
                    poolConfiguration.getBackgroundValidationMillis());
          
          //Register validation
-         ConnectionValidator.registerPool(this, poolConfiguration.getBackgroundValidationMillis());
+         ConnectionValidator.getInstance().registerPool(this, poolConfiguration.getBackgroundValidationMillis());
       }
 
       shutdown.set(false);
@@ -639,8 +639,8 @@
    public void shutdown()
    {
       shutdown.set(true);
-      IdleRemover.unregisterPool(this);
-      ConnectionValidator.unregisterPool(this);
+      IdleRemover.getInstance().unregisterPool(this);
+      ConnectionValidator.getInstance().unregisterPool(this);
       flush(true);
    }
 

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/validator/ConnectionValidator.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/validator/ConnectionValidator.java	2011-12-09 16:45:51 UTC (rev 112511)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/validator/ConnectionValidator.java	2011-12-13 08:28:38 UTC (rev 112512)
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2008-2009, Red Hat Middleware LLC, and individual contributors
+ * Copyright 2008-2011, Red Hat Middleware LLC, and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -38,59 +38,129 @@
 import org.jboss.logging.Logger;
 
 /**
- * Connection validator class.
+ * Connection validator
  * 
  * @author <a href="mailto:gurkanerdogdu at yahoo.com">Gurkan Erdogdu</a>
- * @version $Rev: $
+ * @author <a href="mailto:jesper.pedersen at jboss.org">Jesper Pedersen</a>
  */
 public class ConnectionValidator
 {
-   /**Logger instance*/
+   /** Logger instance */
    private static CoreLogger logger = Logger.getMessageLogger(CoreLogger.class, ConnectionValidator.class.getName());
    
-   /**Validator thread name*/
+   /** Thread name */
    private static final String THREAD_NAME = "ConnectionValidator";
    
-   /**Registered internal pool instances*/
+   /** Singleton instance */
+   private static ConnectionValidator instance = new ConnectionValidator();
+   
+   /** Registered pool instances */
    private CopyOnWriteArrayList<ManagedConnectionPool> registeredPools = 
       new CopyOnWriteArrayList<ManagedConnectionPool>();
    
-   /**Validator executor service*/
-   private ExecutorService executorService = null;
+   /** Executor service */
+   private ExecutorService executorService;
+
+   /** Is the executor external */
+   private boolean isExternal;
    
-   /**Singleton instance*/
-   private static ConnectionValidator instance = new ConnectionValidator();
-   
    /** The interval */
-   private long interval = Long.MAX_VALUE;
+   private long interval;
 
-   /** The next - important initialization */
-   private long next = Long.MAX_VALUE;
+   /** The next scan */
+   private long next;
    
    /** Shutdown */
-   private AtomicBoolean shutdown = new AtomicBoolean(false);
+   private AtomicBoolean shutdown;
 
-   /**Lock for condition*/
-   private Lock lock = new ReentrantLock(true);
+   /** Lock */
+   private Lock lock;
    
-   /**Condition*/
-   private Condition condition = lock.newCondition();
+   /** Condition */
+   private Condition condition;
    
    /**
     * Private constructor.
     */
    private ConnectionValidator()
    {
-      this.executorService = Executors.newSingleThreadExecutor(new ValidatorThreadFactory());
-      this.executorService.execute(new JBossConnectionValidator());
+      this.executorService = null;
+      this.isExternal = false;
+      this.interval = Long.MAX_VALUE;
+      this.next = Long.MAX_VALUE;
+      this.shutdown = new AtomicBoolean(false);
+      this.lock = new ReentrantLock(true);
+      this.condition = lock.newCondition();
    }
+
+   /**
+    * Get the instance
+    * @return The value
+    */
+   public static ConnectionValidator getInstance()
+   {
+      return instance;
+   }
    
    /**
+    * Set the executor service
+    * @param v The value
+    */
+   public void setExecutorService(ExecutorService v)
+   {
+      if (v != null)
+      {
+         this.executorService = v;
+         this.isExternal = true;
+      }
+      else
+      {
+         this.executorService = null;
+         this.isExternal = false;
+      }
+   }
+
+   /**
+    * Start
+    * @exception Throwable Thrown if an error occurs
+    */
+   public void start() throws Throwable
+   {
+      if (!isExternal)
+      {
+         this.executorService = Executors.newSingleThreadExecutor(new ValidatorThreadFactory());
+      }
+
+      this.shutdown.set(false);
+      this.interval = Long.MAX_VALUE;
+      this.next = Long.MAX_VALUE;
+
+      this.executorService.execute(new ConnectionValidatorRunner());
+   }
+
+   /**
+    * Stop
+    * @exception Throwable Thrown if an error occurs
+    */
+   public void stop() throws Throwable
+   {
+      instance.shutdown.set(true);
+
+      if (!isExternal)
+      {
+         instance.executorService.shutdownNow();
+         instance.executorService = null;
+      }
+
+      instance.registeredPools.clear();
+   }
+   
+   /**
     * Register pool for connection validation.
     * @param mcp managed connection pool
     * @param interval validation interval
     */
-   public static void registerPool(ManagedConnectionPool mcp, long interval)
+   public void registerPool(ManagedConnectionPool mcp, long interval)
    {
       logger.debugf("Register pool: %s (interval=%s)", mcp, interval);
 
@@ -101,26 +171,13 @@
     * Unregister pool instance for connection validation.
     * @param mcp pool instance
     */
-   public static void unregisterPool(ManagedConnectionPool mcp)
+   public void unregisterPool(ManagedConnectionPool mcp)
    {
       logger.debugf("Unregister pool: %s", mcp);
 
       instance.internalUnregisterPool(mcp);
    }
    
-   /**
-    * Shutdown
-    */
-   public static void shutdown()
-   {
-      instance.shutdown.set(true);
-
-      instance.executorService.shutdownNow();
-      instance.executorService = null;
-
-      instance.registeredPools.clear();
-   }
-   
    private void internalRegisterPool(ManagedConnectionPool mcp, long interval)
    {
       try
@@ -138,15 +195,12 @@
                next = maybeNext;
                if (logger.isDebugEnabled())
                {
-                  logger.debug("internalRegisterPool: about to notify thread: old next: " +
-                        next + ", new next: " + maybeNext);  
+                  logger.debug("About to notify thread: old next: " + next + ", new next: " + maybeNext);
                }               
                
                this.condition.signal();
-               
             }
          }
-         
       } 
       finally
       {
@@ -162,7 +216,7 @@
       {
          if (logger.isDebugEnabled())
          {
-            logger.debug("internalUnregisterPool: setting interval to Long.MAX_VALUE");  
+            logger.debug("Setting interval to Long.MAX_VALUE");  
          }
          
          interval = Long.MAX_VALUE;
@@ -187,10 +241,10 @@
    }
    
    /**
-    * JBossConnectionValidator.
+    * ConnectionValidatorRunner.
     *
     */
-   private class JBossConnectionValidator implements Runnable
+   private class ConnectionValidatorRunner implements Runnable
    {
       /**
        * {@inheritDoc}
@@ -210,12 +264,12 @@
                
                if (logger.isTraceEnabled())
                {
-                  logger.trace("Result of await ConnectionValidator: " + result);
+                  logger.trace("Result of await: " + result);
                }
                
                if (logger.isDebugEnabled())
                {
-                  logger.debug("run: ConnectionValidator notifying pools, interval: " + interval);  
+                  logger.debug("Notifying pools, interval: " + interval);  
                }
      
                for (ManagedConnectionPool mcp : registeredPools)
@@ -233,7 +287,8 @@
          }
          catch (InterruptedException e)
          {
-            logger.returningConnectionValidatorInterrupted();
+            if (!shutdown.get())
+               logger.returningConnectionValidatorInterrupted();
          }
          catch (RuntimeException e)
          {

Modified: projects/jboss-jca/trunk/embedded/src/main/resources/jca.xml
===================================================================
--- projects/jboss-jca/trunk/embedded/src/main/resources/jca.xml	2011-12-09 16:45:51 UTC (rev 112511)
+++ projects/jboss-jca/trunk/embedded/src/main/resources/jca.xml	2011-12-13 08:28:38 UTC (rev 112512)
@@ -93,6 +93,20 @@
         interface="org.jboss.jca.core.spi.security.Callback"
         class="org.jboss.jca.core.security.UsersRoles"/>
 
+  <!-- Idle remover -->
+  <bean name="IdleRemover">
+    <constructor factoryClass="org.jboss.jca.core.connectionmanager.pool.idle.IdleRemover"
+                 factoryMethod="getInstance">
+    </constructor>
+  </bean>
+
+  <!-- Connection validator -->
+  <bean name="ConnectionValidator">
+    <constructor factoryClass="org.jboss.jca.core.connectionmanager.pool.validator.ConnectionValidator"
+                 factoryMethod="getInstance">
+    </constructor>
+  </bean>
+
   <!-- Work Manager -->
   <bean name="WorkManager" 
         interface="org.jboss.jca.core.api.workmanager.WorkManager"
@@ -218,6 +232,8 @@
     <property name="Kernel"><inject bean="Kernel"/></property>
     <depends>BeanValidation</depends>
     <depends>JBossStdioContextSelector</depends>
+    <depends>IdleRemover</depends>
+    <depends>ConnectionValidator</depends>
   </bean>
 
   <!-- -ra.xml deployer -->
@@ -228,6 +244,8 @@
     <property name="Kernel"><inject bean="Kernel"/></property>
     <depends>BeanValidation</depends>
     <depends>JBossStdioContextSelector</depends>
+    <depends>IdleRemover</depends>
+    <depends>ConnectionValidator</depends>
   </bean>
 
   <!-- RA activator -->
@@ -244,6 +262,8 @@
     </property>
     <depends>BeanValidation</depends>
     <depends>JBossStdioContextSelector</depends>
+    <depends>IdleRemover</depends>
+    <depends>ConnectionValidator</depends>
   </bean>
   
 </deployment>

Modified: projects/jboss-jca/trunk/sjc/src/main/resources/bootstrap/jca.xml
===================================================================
--- projects/jboss-jca/trunk/sjc/src/main/resources/bootstrap/jca.xml	2011-12-09 16:45:51 UTC (rev 112511)
+++ projects/jboss-jca/trunk/sjc/src/main/resources/bootstrap/jca.xml	2011-12-13 08:28:38 UTC (rev 112512)
@@ -96,6 +96,20 @@
     <property name="RolesProperties">${iron.jacamar.home}/config/roles.properties</property>
   </bean>
 
+  <!-- Idle remover -->
+  <bean name="IdleRemover">
+    <constructor factoryClass="org.jboss.jca.core.connectionmanager.pool.idle.IdleRemover"
+                 factoryMethod="getInstance">
+    </constructor>
+  </bean>
+
+  <!-- Connection validator -->
+  <bean name="ConnectionValidator">
+    <constructor factoryClass="org.jboss.jca.core.connectionmanager.pool.validator.ConnectionValidator"
+                 factoryMethod="getInstance">
+    </constructor>
+  </bean>
+
   <!-- Work Manager -->
   <bean name="WorkManager"
         interface="org.jboss.jca.core.api.workmanager.WorkManager" 
@@ -212,6 +226,8 @@
     <property name="Kernel"><inject bean="Kernel"/></property>
     <depends>BeanValidation</depends>
     <depends>JBossStdioContextSelector</depends>
+    <depends>IdleRemover</depends>
+    <depends>ConnectionValidator</depends>
   </bean>
 
   <!-- -ra.xml deployer -->
@@ -222,6 +238,8 @@
     <property name="Kernel"><inject bean="Kernel"/></property>
     <depends>BeanValidation</depends>
     <depends>JBossStdioContextSelector</depends>
+    <depends>IdleRemover</depends>
+    <depends>ConnectionValidator</depends>
   </bean>
 
   <!-- RA activator -->
@@ -238,6 +256,8 @@
     </property>
     <depends>BeanValidation</depends>
     <depends>JBossStdioContextSelector</depends>
+    <depends>IdleRemover</depends>
+    <depends>ConnectionValidator</depends>
   </bean>
 
 </deployment>



More information about the jboss-cvs-commits mailing list