[jboss-cvs] JBossAS SVN: r111184 - in projects/jboss-jca/trunk: common/src/main/java/org/jboss/jca/common/metadata and 18 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Apr 15 10:56:49 EDT 2011


Author: jesper.pedersen
Date: 2011-04-15 10:56:48 -0400 (Fri, 15 Apr 2011)
New Revision: 111184

Added:
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/FlushStrategy.java
Modified:
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/CommonPool.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/CommonXaPool.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/AbstractParser.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonPoolImpl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonXaPoolImpl.java
   projects/jboss-jca/trunk/common/src/main/resources/schema/datasources_1_0.xsd
   projects/jboss-jca/trunk/common/src/main/resources/schema/ironjacamar_1_0.xsd
   projects/jboss-jca/trunk/common/src/main/resources/schema/resource-adapters_1_0.xsd
   projects/jboss-jca/trunk/common/src/test/resources/ds/unit/reauth-plugin-xa-ds.xml
   projects/jboss-jca/trunk/common/src/test/resources/ironjacamar/xa-pool-recovery-ironjacamar.xml
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/AbstractConnectionManager.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionManagerFactory.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/AbstractConnectionListener.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/NoTxConnectionListener.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListener.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/notx/NoTxConnectionManagerImpl.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/AbstractPool.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/api/Pool.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/ManagedConnectionPool.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/tx/TxConnectionManagerImpl.java
   projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/NoTxConnectionListenerTestCase.java
   projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListenerTestCase.java
   projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/NoTxConnectionManagerTestCase.java
   projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/SerializableTestCase.java
   projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/pool/PrefillTestCase.java
   projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/SerializableTestCase.java
   projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerTestCase.java
   projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/XATxConnectionManagerTestCase.java
   projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/unit/ConnectionRecordTestCase.java
   projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractDsDeployer.java
   projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractResourceAdapterDeployer.java
   projects/jboss-jca/trunk/doc/userguide/en-US/modules/deployment.xml
Log:
[JBJCA-30] Pool flushing strategy

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/CommonPool.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/CommonPool.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/CommonPool.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -66,6 +66,13 @@
    public Boolean isUseStrictMin();
 
    /**
+    * Get the useStrictMin.
+    *
+    * @return the useStrictMin.
+    */
+   public FlushStrategy getFlushStrategy();
+
+   /**
    *
    * A Tag.
    *
@@ -88,6 +95,7 @@
       * maxPoolSize tag
       */
       MAXPOOLSIZE("max-pool-size"),
+
       /**
       * prefill tag
       */
@@ -96,12 +104,16 @@
       /**
        * use-strict-min tag
        */
-      USE_STRICT_MIN("use-strict-min");
+      USE_STRICT_MIN("use-strict-min"),
 
+      /**
+       * flush-strategy tag
+       */
+      FLUSH_STRATEGY("flush-strategy");
+
       private final String name;
 
       /**
-       *
        * Create a new Tag.
        *
        * @param name a name
@@ -147,7 +159,5 @@
          final Tag element = MAP.get(localName);
          return element == null ? UNKNOWN : element;
       }
-
    }
-
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/CommonXaPool.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/CommonXaPool.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/CommonXaPool.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -104,7 +104,13 @@
        * use-strict-min tag
        */
       USE_STRICT_MIN("use-strict-min"),
+
       /**
+       * flush-strategy tag
+       */
+      FLUSH_STRATEGY("flush-strategy"),
+
+      /**
        * isSameRmOverrideValue tag
        */
       ISSAMERMOVERRIDEVALUE("is-same-rm-override"),

Added: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/FlushStrategy.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/FlushStrategy.java	                        (rev 0)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/FlushStrategy.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -0,0 +1,97 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 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.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.jca.common.api.metadata.common;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Flush strategy for the pools
+ * @author <a href="mailto:jesper.pedersen at jboss.org">Jesper Pedersen</a>
+ */
+public enum FlushStrategy
+{
+   /**
+    * Unknown
+    */
+   UNKNOWN(null),
+
+   /**
+    * Failing connection only (default)
+    */
+   FAILING_CONNECTION_ONLY("FailingConnectionOnly"),
+
+   /**
+    * Idle connections
+    */
+   IDLE_CONNECTIONS("IdleConnections"),
+
+   /**
+    * Entire pool
+    */
+   ENTIRE_POOL("EntirePool");
+   
+   private final String name;
+
+   /**
+    * Create a new FlushStrategy.
+    * @param name The value
+    */
+   FlushStrategy(final String name)
+   {
+      this.name = name;
+   }
+
+   /**
+    * Get the name of this element.
+    * @return The value
+    */
+   public String getName()
+   {
+      return name;
+   }
+
+   private static final Map<String, FlushStrategy> MAP;
+   
+   static
+   {
+      final Map<String, FlushStrategy> map = new HashMap<String, FlushStrategy>();
+      for (FlushStrategy element : values())
+      {
+         final String name = element.getName();
+         if (name != null)
+            map.put(name, element);
+      }
+      MAP = map;
+   }
+
+   /**
+    * Static method to get enum instance given localName XsdString
+    * @param name The strategy name
+    * @return The enum instance
+    */
+   public static FlushStrategy forName(String name)
+   {
+      final FlushStrategy element = MAP.get(name);
+      return element == null ? UNKNOWN : element;
+   }
+}

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/AbstractParser.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/AbstractParser.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/AbstractParser.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -26,6 +26,7 @@
 import org.jboss.jca.common.api.metadata.common.CommonXaPool;
 import org.jboss.jca.common.api.metadata.common.Credential;
 import org.jboss.jca.common.api.metadata.common.Extension;
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.common.api.metadata.common.Recovery;
 import org.jboss.jca.common.api.metadata.ds.DataSource;
 import org.jboss.jca.common.api.metadata.ds.XaDataSource;
@@ -226,7 +227,26 @@
    }
 
    /**
+    * convert an xml element in FlushStrategy value
     *
+    * @param reader the StAX reader
+    * @return the flush strategy represention
+    * @throws XMLStreamException StAX exception
+    * @throws ParserException in case it isn't a number
+    */
+   protected FlushStrategy elementAsFlushStrategy(XMLStreamReader reader) throws XMLStreamException, ParserException
+   {
+      String elementtext = rawElementText(reader);
+      FlushStrategy result = FlushStrategy.forName(getSubstitutionValue(elementtext));
+
+      if (result != FlushStrategy.UNKNOWN)
+         return result;
+
+      throw new ParserException(elementtext + " isn't a valid flush strategy");
+   }
+
+   /**
+    *
     * parse a {@link CommonPool} object
     *
     * @param reader reader
@@ -242,6 +262,7 @@
       Integer maxPoolSize = null;
       boolean prefill = false;
       boolean useStrictMin = false;
+      FlushStrategy flushStrategy = FlushStrategy.FAILING_CONNECTION_ONLY;
 
       while (reader.hasNext())
       {
@@ -251,7 +272,7 @@
                if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL)
                {
 
-                  return new CommonPoolImpl(minPoolSize, maxPoolSize, prefill, useStrictMin);
+                  return new CommonPoolImpl(minPoolSize, maxPoolSize, prefill, useStrictMin, flushStrategy);
 
                }
                else
@@ -283,6 +304,10 @@
                      useStrictMin = elementAsBoolean(reader);
                      break;
                   }
+                  case FLUSH_STRATEGY : {
+                     flushStrategy = elementAsFlushStrategy(reader);
+                     break;
+                  }
                   default :
                      throw new ParserException("Unexpected element:" + reader.getLocalName());
                }
@@ -373,6 +398,7 @@
       Integer minPoolSize = null;
       Integer maxPoolSize = null;
       boolean prefill = false;
+      FlushStrategy flushStrategy = FlushStrategy.FAILING_CONNECTION_ONLY;
       boolean interleaving = false;
       boolean isSameRmOverrideValue = false;
       boolean padXid = false;
@@ -388,8 +414,9 @@
                if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)
                {
 
-                  return new CommonXaPoolImpl(minPoolSize, maxPoolSize, prefill, useStrictMin, isSameRmOverrideValue,
-                                              interleaving, padXid, wrapXaDataSource, noTxSeparatePool);
+                  return new CommonXaPoolImpl(minPoolSize, maxPoolSize, prefill, useStrictMin, flushStrategy,
+                                              isSameRmOverrideValue, interleaving, padXid,
+                                              wrapXaDataSource, noTxSeparatePool);
 
                }
                else
@@ -440,6 +467,10 @@
                      useStrictMin = elementAsBoolean(reader);
                      break;
                   }
+                  case FLUSH_STRATEGY : {
+                     flushStrategy = elementAsFlushStrategy(reader);
+                     break;
+                  }
                   default :
                      throw new ParserException("Unexpected element:" + reader.getLocalName());
                }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonPoolImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonPoolImpl.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonPoolImpl.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -22,6 +22,7 @@
 package org.jboss.jca.common.metadata.common;
 
 import org.jboss.jca.common.api.metadata.common.CommonPool;
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.common.api.validator.ValidateException;
 
 /**
@@ -58,15 +59,23 @@
    protected final Boolean useStrictMin;
 
    /**
+    * flush-strategy
+    */
+   protected final FlushStrategy flushStrategy;
+
+   /**
     * Create a new PoolImpl.
     *
     * @param minPoolSize minPoolSize
     * @param maxPoolSize maxPoolSize
     * @param prefill prefill
     * @param useStrictMin useStrictMin
+    * @param flushStrategy flushStrategy
     * @throws ValidateException ValidateException
     */
-   public CommonPoolImpl(Integer minPoolSize, Integer maxPoolSize, Boolean prefill, Boolean useStrictMin)
+   public CommonPoolImpl(Integer minPoolSize, Integer maxPoolSize, 
+                         Boolean prefill, Boolean useStrictMin,
+                         FlushStrategy flushStrategy)
       throws ValidateException
    {
       super();
@@ -74,6 +83,7 @@
       this.maxPoolSize = maxPoolSize;
       this.prefill = prefill;
       this.useStrictMin = useStrictMin;
+      this.flushStrategy = flushStrategy;
       this.validate();
    }
 
@@ -121,14 +131,24 @@
       return useStrictMin;
    }
 
+   /**
+    * Get the flush strategy.
+    * @return The value
+    */
    @Override
+   public final FlushStrategy getFlushStrategy()
+   {
+      return flushStrategy;
+   }
+
+   @Override
    public void validate() throws ValidateException
    {
       if (this.maxPoolSize != null && this.maxPoolSize < 0)
          throw new ValidateException("maxPoolSize (xml tag " + Tag.MAXPOOLSIZE + ") cannot be < 0");
       if (this.minPoolSize != null && this.minPoolSize < 0)
          throw new ValidateException("minPoolSize (xml tag " + Tag.MIN_POOL_SIZE + ") cannot be < 0");
-
+      if (this.flushStrategy == null)
+         throw new ValidateException("flushStrategy (xml tag " + Tag.FLUSH_STRATEGY + ") cannot be null");
    }
-
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonXaPoolImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonXaPoolImpl.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonXaPoolImpl.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -22,6 +22,7 @@
 package org.jboss.jca.common.metadata.common;
 
 import org.jboss.jca.common.api.metadata.common.CommonXaPool;
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.common.api.validator.ValidateException;
 
 /**
@@ -54,6 +55,7 @@
     * @param maxPoolSize maxPoolSize
     * @param prefill prefill
     * @param useStrictMin useStrictMin
+    * @param flushStrategy flushStrategy
     * @param isSameRmOverride isSameRmOverride
     * @param interleaving interleaving
     * @param padXid padXid
@@ -61,17 +63,19 @@
     * @param noTxSeparatePool noTxSeparatePool
     * @throws ValidateException ValidateException
     */
-   public CommonXaPoolImpl(Integer minPoolSize, Integer maxPoolSize, Boolean prefill, Boolean useStrictMin,
-      Boolean isSameRmOverride, Boolean interleaving, Boolean padXid, Boolean wrapXaDataSource,
-      Boolean noTxSeparatePool) throws ValidateException
+   public CommonXaPoolImpl(Integer minPoolSize, Integer maxPoolSize,
+                           Boolean prefill, Boolean useStrictMin,
+                           FlushStrategy flushStrategy,
+                           Boolean isSameRmOverride, Boolean interleaving, 
+                           Boolean padXid, Boolean wrapXaDataSource,
+                           Boolean noTxSeparatePool) throws ValidateException
    {
-      super(minPoolSize, maxPoolSize, prefill, useStrictMin);
+      super(minPoolSize, maxPoolSize, prefill, useStrictMin, flushStrategy);
       this.isSameRmOverride = isSameRmOverride;
       this.interleaving = interleaving;
       this.padXid = padXid;
       this.wrapXaDataSource = wrapXaDataSource;
       this.noTxSeparatePool = noTxSeparatePool;
-
    }
 
    /**
@@ -197,8 +201,5 @@
              ", padXid=" + padXid + ", wrapXaDataSource=" + wrapXaDataSource + ", noTxSeparatePool=" +
              noTxSeparatePool + "]";
    }
-
-
-
 }
 

Modified: projects/jboss-jca/trunk/common/src/main/resources/schema/datasources_1_0.xsd
===================================================================
--- projects/jboss-jca/trunk/common/src/main/resources/schema/datasources_1_0.xsd	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/common/src/main/resources/schema/datasources_1_0.xsd	2011-04-15 14:56:48 UTC (rev 111184)
@@ -657,7 +657,18 @@
               Default false
              ]]>
           </xs:documentation>
-        </xs:annotation></xs:element>
+        </xs:annotation>
+      </xs:element>
+      <xs:element name="flush-strategy" type="xs:token" minOccurs="0" maxOccurs="1">
+        <xs:annotation>
+          <xs:documentation>
+            <![CDATA[[
+              Specifies how the pool should be flush in case of an error.
+              Valid values are: FailingConnectionOnly (default), IdleConnections, EntirePool 
+             ]]>
+          </xs:documentation>
+        </xs:annotation>
+      </xs:element>
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="xa-poolType">

Modified: projects/jboss-jca/trunk/common/src/main/resources/schema/ironjacamar_1_0.xsd
===================================================================
--- projects/jboss-jca/trunk/common/src/main/resources/schema/ironjacamar_1_0.xsd	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/common/src/main/resources/schema/ironjacamar_1_0.xsd	2011-04-15 14:56:48 UTC (rev 111184)
@@ -397,6 +397,16 @@
           </xs:documentation>
         </xs:annotation>
       </xs:element>
+      <xs:element name="flush-strategy" type="xs:token" minOccurs="0" maxOccurs="1">
+        <xs:annotation>
+          <xs:documentation>
+            <![CDATA[[
+              Specifies how the pool should be flush in case of an error.
+              Valid values are: FailingConnectionOnly (default), IdleConnections, EntirePool 
+             ]]>
+          </xs:documentation>
+        </xs:annotation>
+      </xs:element>
     </xs:sequence>
   </xs:complexType>
   

Modified: projects/jboss-jca/trunk/common/src/main/resources/schema/resource-adapters_1_0.xsd
===================================================================
--- projects/jboss-jca/trunk/common/src/main/resources/schema/resource-adapters_1_0.xsd	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/common/src/main/resources/schema/resource-adapters_1_0.xsd	2011-04-15 14:56:48 UTC (rev 111184)
@@ -429,6 +429,16 @@
           </xs:documentation>
         </xs:annotation>
       </xs:element>
+      <xs:element name="flush-strategy" type="xs:token" minOccurs="0" maxOccurs="1">
+        <xs:annotation>
+          <xs:documentation>
+            <![CDATA[[
+              Specifies how the pool should be flush in case of an error.
+              Valid values are: FailingConnectionOnly (default), IdleConnections, EntirePool 
+             ]]>
+          </xs:documentation>
+        </xs:annotation>
+      </xs:element>
     </xs:sequence>
   </xs:complexType>
 

Modified: projects/jboss-jca/trunk/common/src/test/resources/ds/unit/reauth-plugin-xa-ds.xml
===================================================================
--- projects/jboss-jca/trunk/common/src/test/resources/ds/unit/reauth-plugin-xa-ds.xml	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/common/src/test/resources/ds/unit/reauth-plugin-xa-ds.xml	2011-04-15 14:56:48 UTC (rev 111184)
@@ -6,6 +6,9 @@
   <xa-datasource jndi-name="java:/H2XADS" pool-name="H2XADS">
     <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
     <xa-datasource-property name="URL">jdbc:h2:mem:test</xa-datasource-property>
+    <xa-pool>
+      <flush-strategy>EntirePool</flush-strategy>
+    </xa-pool>
     <security>
       <!-- Have to defined as a primary property - otherwise it won't work -->
       <user-name>sa</user-name>

Modified: projects/jboss-jca/trunk/common/src/test/resources/ironjacamar/xa-pool-recovery-ironjacamar.xml
===================================================================
--- projects/jboss-jca/trunk/common/src/test/resources/ironjacamar/xa-pool-recovery-ironjacamar.xml	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/common/src/test/resources/ironjacamar/xa-pool-recovery-ironjacamar.xml	2011-04-15 14:56:48 UTC (rev 111184)
@@ -9,6 +9,7 @@
         <xa-pool>
           <min-pool-size>0</min-pool-size>
           <max-pool-size>64</max-pool-size>
+          <flush-strategy>IdleConnections</flush-strategy>
         </xa-pool>
         <recovery>
           <recover-credential>

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/AbstractConnectionManager.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/AbstractConnectionManager.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/AbstractConnectionManager.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -23,6 +23,7 @@
 package org.jboss.jca.core.connectionmanager;
 
 import org.jboss.jca.common.JBossResourceException;
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager;
 import org.jboss.jca.core.connectionmanager.listener.ConnectionListener;
 import org.jboss.jca.core.connectionmanager.listener.ConnectionState;
@@ -83,6 +84,9 @@
    /** SubjectFactory */
    private SubjectFactory subjectFactory;
 
+   /** The flush strategy */
+   private FlushStrategy flushStrategy;
+
    /** Number of retry to allocate connection */
    private int allocationRetry;
 
@@ -241,8 +245,25 @@
       this.subjectFactory = subjectFactory;
    }
 
+   /**
+    * Get the flush strategy
+    * @return The value
+    */
+   public FlushStrategy getFlushStrategy()
+   {
+      return flushStrategy;
+   }
 
    /**
+    * Set the flush strategy
+    * @param v The value
+    */
+   public void setFlushStrategy(FlushStrategy v)
+   {
+      this.flushStrategy = v;
+   }
+
+   /**
     * Gets managed connection factory.
     * @return managed connection factory
     */

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionManagerFactory.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionManagerFactory.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionManagerFactory.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -22,6 +22,7 @@
 
 package org.jboss.jca.core.connectionmanager;
 
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager;
 import org.jboss.jca.core.connectionmanager.notx.NoTxConnectionManagerImpl;
 import org.jboss.jca.core.connectionmanager.pool.api.Pool;
@@ -56,6 +57,7 @@
     * @param securityDomain The security domain 
     * @param useCcm Should the CCM be used
     * @param ccm The cached connection manager
+    * @param flushStrategy The flush strategy
     * @param allocationRetry The allocation retry value
     * @param allocationRetryWaitMillis The allocation retry millis value
     * @return The connection manager instance
@@ -66,6 +68,7 @@
                                                        final String securityDomain,
                                                        final boolean useCcm,
                                                        final CachedConnectionManager ccm,
+                                                       final FlushStrategy flushStrategy,
                                                        final Integer allocationRetry,
                                                        final Long allocationRetryWaitMillis)
    {
@@ -75,6 +78,9 @@
       if (pool == null)
          throw new IllegalArgumentException("Pool is null");
 
+      if (flushStrategy == null)
+         throw new IllegalArgumentException("FlushStrategy is null");
+
       NoTxConnectionManagerImpl cm = null;
 
       switch (tsl)
@@ -96,6 +102,7 @@
       setProperties(cm, pool,
                     subjectFactory, securityDomain, 
                     useCcm, ccm,
+                    flushStrategy,
                     allocationRetry, allocationRetryWaitMillis, 
                     null, null);
       setNoTxProperties(cm);
@@ -111,6 +118,7 @@
     * @param securityDomain The security domain 
     * @param useCcm Should the CCM be used
     * @param ccm The cached connection manager
+    * @param flushStrategy The flush strategy
     * @param allocationRetry The allocation retry value
     * @param allocationRetryWaitMillis The allocation retry millis value
     * @param txIntegration The transaction manager integration
@@ -127,6 +135,7 @@
                                                   final String securityDomain,
                                                   final boolean useCcm,
                                                   final CachedConnectionManager ccm,
+                                                  final FlushStrategy flushStrategy,
                                                   final Integer allocationRetry,
                                                   final Long allocationRetryWaitMillis,
                                                   final TransactionIntegration txIntegration,
@@ -145,6 +154,9 @@
       if (txIntegration == null)
          throw new IllegalArgumentException("TransactionIntegration is null");
 
+      if (flushStrategy == null)
+         throw new IllegalArgumentException("FlushStrategy is null");
+
       TxConnectionManagerImpl cm = null;
 
       switch (tsl)
@@ -167,6 +179,7 @@
       setProperties(cm, pool, 
                     subjectFactory, securityDomain, 
                     useCcm, ccm,
+                    flushStrategy,
                     allocationRetry, allocationRetryWaitMillis,
                     txIntegration.getTransactionManager(), txIntegration.getUserTransactionRegistry());
       setTxProperties(cm, interleaving, xaResourceTimeout, isSameRMOverride, wrapXAResource, padXid);
@@ -183,6 +196,7 @@
     * @param securityDomain The security domain
     * @param useCcm Should the CCM be used
     * @param ccm The cached connection manager
+    * @param flushStrategy The flush strategy
     * @param allocationRetry The allocation retry value
     * @param allocationRetryWaitMillis The allocation retry millis value
     * @param tm The transaction manager
@@ -194,6 +208,7 @@
                               String securityDomain,
                               boolean useCcm,
                               CachedConnectionManager ccm,
+                              FlushStrategy flushStrategy,
                               Integer allocationRetry,
                               Long allocationRetryWaitMillis,
                               TransactionManager tm,
@@ -205,6 +220,8 @@
       cm.setSubjectFactory(subjectFactory);
       cm.setSecurityDomain(securityDomain);
 
+      cm.setFlushStrategy(flushStrategy);
+
       if (allocationRetry != null)
          cm.setAllocationRetry(allocationRetry.intValue());
 

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/AbstractConnectionListener.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/AbstractConnectionListener.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/AbstractConnectionListener.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -21,6 +21,7 @@
  */
 package org.jboss.jca.core.connectionmanager.listener;
 
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager;
 import org.jboss.jca.core.connectionmanager.ConnectionManager;
 import org.jboss.jca.core.connectionmanager.pool.api.Pool;
@@ -62,6 +63,9 @@
    
    /** Pool internal context */
    private final Object internalManagedPoolContext;
+
+   /** Flush strategy */
+   private FlushStrategy flushStrategy;
    
    /** Connection State */
    private ConnectionState state = ConnectionState.NORMAL;
@@ -81,18 +85,20 @@
    /**
     * Creates a new instance of the listener that is responsible for
     * tracking the owned connection instance.
+    * @param cm connection manager
     * @param managedConnection managed connection
     * @param pool pool
     * @param context pool internal context
-    * @param cm connection manager
+    * @param flushStrategy flushStrategy
     */
    protected AbstractConnectionListener(ConnectionManager cm, ManagedConnection managedConnection, 
-                                        Pool pool, Object context)
+                                        Pool pool, Object context, FlushStrategy flushStrategy)
    {
       this.cm = cm;
       this.managedConnection = managedConnection;
       this.pool = pool;
       this.internalManagedPoolContext = context;
+      this.flushStrategy = flushStrategy;
       this.trace = log.isTraceEnabled();
       this.lastUse = System.currentTimeMillis();
    }
@@ -349,7 +355,15 @@
       }
       
       getConnectionManager().returnManagedConnection(this, true);      
-      
+
+      if (flushStrategy == FlushStrategy.IDLE_CONNECTIONS)
+      {
+         pool.flush();
+      }
+      else if (flushStrategy == FlushStrategy.ENTIRE_POOL)
+      {
+         pool.flush(true);
+      }
    }
    
    

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/NoTxConnectionListener.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/NoTxConnectionListener.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/NoTxConnectionListener.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -21,6 +21,7 @@
  */
 package org.jboss.jca.core.connectionmanager.listener;
 
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.core.connectionmanager.ConnectionManager;
 import org.jboss.jca.core.connectionmanager.pool.api.Pool;
 
@@ -43,11 +44,12 @@
     * @param mc managed connection
     * @param pool pool
     * @param context context
+    * @param flushStrategy flushStrategy
     */
    public NoTxConnectionListener(final ConnectionManager cm, final ManagedConnection mc, 
-                                 final Pool pool, final Object context)
+                                 final Pool pool, final Object context, final FlushStrategy flushStrategy)
    {
-      super(cm, mc, pool, context);
+      super(cm, mc, pool, context, flushStrategy);
    }
    
    /**

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListener.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListener.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListener.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -22,6 +22,7 @@
 package org.jboss.jca.core.connectionmanager.listener;
 
 import org.jboss.jca.common.JBossResourceException;
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.core.connectionmanager.ConnectionManager;
 import org.jboss.jca.core.connectionmanager.pool.api.Pool;
 import org.jboss.jca.core.connectionmanager.transaction.TransactionSynchronizer;
@@ -65,14 +66,16 @@
     * @param mc managed connection
     * @param pool pool
     * @param context context
+    * @param flushStrategy flushStrategy
     * @param xaResource xaresource instance
     * @throws ResourceException if aexception while creating
     */
    public TxConnectionListener(final ConnectionManager cm, final ManagedConnection mc,
-                               final Pool pool, final Object context, final XAResource xaResource)
+                               final Pool pool, final Object context, final FlushStrategy flushStrategy,
+                               final XAResource xaResource)
       throws ResourceException
    {
-      super(cm, mc, pool, context);
+      super(cm, mc, pool, context, flushStrategy);
 
       this.xaResource = xaResource;
 

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/notx/NoTxConnectionManagerImpl.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/notx/NoTxConnectionManagerImpl.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/notx/NoTxConnectionManagerImpl.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -60,7 +60,8 @@
    public ConnectionListener createConnectionListener(ManagedConnection managedConnection, Object context)
       throws ResourceException
    {
-      ConnectionListener cli = new NoTxConnectionListener(this, managedConnection, getPool(), context);
+      ConnectionListener cli = new NoTxConnectionListener(this, managedConnection, getPool(), 
+                                                          context, getFlushStrategy());
       managedConnection.addConnectionEventListener(cli);
 
       return cli;

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/AbstractPool.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/AbstractPool.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/AbstractPool.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -32,7 +32,9 @@
 import org.jboss.jca.core.spi.transaction.TransactionIntegration;
 import org.jboss.jca.core.spi.transaction.local.TransactionLocal;
 
+import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
@@ -227,15 +229,37 @@
     */
    public void flush()
    {
+      flush(false);
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void flush(boolean kill)
+   {
+      Set<ManagedConnectionPool> clearMcps = new HashSet<ManagedConnectionPool>();
+
       Iterator<SubPoolContext> itSubPoolContexts = subPools.values().iterator();
       SubPoolContext subPoolContext = null;
       while (itSubPoolContexts.hasNext())
       {
          subPoolContext = itSubPoolContexts.next();
-         subPoolContext.getSubPool().flush();
+         ManagedConnectionPool mcp = subPoolContext.getSubPool();
+
+         mcp.flush(kill);
+
+         if (mcp.isEmpty())
+            clearMcps.add(mcp);
       }
 
-      subPools.clear();
+      if (clearMcps.size() > 0)
+      {
+         for (ManagedConnectionPool mcp : clearMcps)
+         {
+            mcp.shutdown();
+            subPools.values().remove(mcp);
+         }
+      }
    }
 
    /**

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/api/Pool.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/api/Pool.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/api/Pool.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -88,11 +88,17 @@
    public void shutdown();
 
    /**
-    * Flush the pool
+    * Flush idle connections from the pool
     */
    public void flush();
 
    /**
+    * Flush the pool
+    * @param kill Kill all connections
+    */
+   public void flush(boolean kill);
+
+   /**
     * Remove the matching SubPoolContext if the pool is empty
     * @param pool the internal managed connection pool
     */

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-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ArrayBlockingQueueManagedConnectionPool.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -495,6 +495,14 @@
     */
    public void flush()
    {
+      flush(false);
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void flush(boolean kill)
+   {
       ArrayList<ConnectionListener> destroy = null;
 
       if (trace)

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ManagedConnectionPool.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ManagedConnectionPool.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ManagedConnectionPool.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -99,11 +99,17 @@
    public void reenable();
    
    /**
-    * Flush
+    * Flush idle connections
     */
    public void flush();
    
    /**
+    * Flush
+    * @param kill Kill all connections
+    */
+   public void flush(boolean kill);
+   
+   /**
     * Shutdown
     */
    public void shutdown();

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-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/SemaphoreArrayListManagedConnectionPool.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -477,22 +477,35 @@
     */
    public void flush()
    {
+      flush(false);
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void flush(boolean kill)
+   {
       ArrayList<ConnectionListener> destroy = null;
 
       synchronized (cls)
       {
-         if (trace)
-            log.trace("Flushing pool checkedOut=" + checkedOut + " inPool=" + cls);
-
-         // Mark checked out connections as requiring destruction
-         for (Iterator<ConnectionListener> i = checkedOut.iterator(); i.hasNext();)
+         if (kill)
          {
-            ConnectionListener cl = i.next();
-
             if (trace)
-               log.trace("Flush marking checked out connection for destruction " + cl);
+               log.trace("Flushing pool checkedOut=" + checkedOut + " inPool=" + cls);
 
-            cl.setState(ConnectionState.DESTROY);
+            // Mark checked out connections as requiring destruction
+            for (Iterator<ConnectionListener> i = checkedOut.iterator(); i.hasNext();)
+            {
+               ConnectionListener cl = i.next();
+
+               if (trace)
+                  log.trace("Flush marking checked out connection for destruction " + cl);
+
+               cl.setState(ConnectionState.DESTROY);
+
+               // We could mark them for eager kill too... 
+            }
          }
 
          // Destroy connections in the pool

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerImpl.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerImpl.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerImpl.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -521,7 +521,7 @@
          }
       }
 
-      ConnectionListener cli = new TxConnectionListener(this, mc, getPool(), context, xaResource);
+      ConnectionListener cli = new TxConnectionListener(this, mc, getPool(), context, getFlushStrategy(), xaResource);
       mc.addConnectionEventListener(cli);
       return cli;
    }

Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/NoTxConnectionListenerTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/NoTxConnectionListenerTestCase.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/NoTxConnectionListenerTestCase.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -21,6 +21,7 @@
  */
 package org.jboss.jca.core.connectionmanager.listener;
 
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.core.api.connectionmanager.pool.PoolConfiguration;
 import org.jboss.jca.core.connectionmanager.ConnectionManager;
 import org.jboss.jca.core.connectionmanager.ConnectionManagerFactory;
@@ -226,7 +227,9 @@
       ConnectionManagerFactory cmf = new ConnectionManagerFactory();
       ConnectionManager connectionManager = 
          cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, pool,
-                                    null, null, false, null, null, null);
+                                    null, null, false, null, 
+                                    FlushStrategy.FAILING_CONNECTION_ONLY,
+                                    null, null);
 
       noTxCm = ((NoTxConnectionManagerImpl) connectionManager);
 

Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListenerTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListenerTestCase.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListenerTestCase.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -21,6 +21,7 @@
  */
 package org.jboss.jca.core.connectionmanager.listener;
 
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.core.api.connectionmanager.pool.PoolConfiguration;
 import org.jboss.jca.core.connectionmanager.ConnectionManagerFactory;
 import org.jboss.jca.core.connectionmanager.TxConnectionManager;
@@ -96,7 +97,8 @@
    public void delistShouldSetTransactionSynchronizationToNullIfEverythingCommitted() throws Exception
    {
       //given
-      TxConnectionListener listener = new TxConnectionListener(txConnectionManager, null, null, null, null);
+      TxConnectionListener listener = 
+         new TxConnectionListener(txConnectionManager, null, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(false);
       Transaction tx = mock(Transaction.class);
       when(tx.getStatus()).thenReturn(Status.STATUS_COMMITTED);
@@ -118,7 +120,8 @@
    public void delistShouldNotSetTransactionSynchronizationToNullIfTrackByTx() throws Exception
    {
       //given
-      TxConnectionListener listener = new TxConnectionListener(txConnectionManager, null, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(txConnectionManager, null, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(true);
       Transaction tx = mock(Transaction.class);
       when(tx.getStatus()).thenReturn(Status.STATUS_COMMITTED);
@@ -152,7 +155,8 @@
       when(tm.getTransaction()).thenReturn(threadTx);
       when(cm.getTransactionManager()).thenReturn(tm);
 
-      TxConnectionListener listener = new TxConnectionListener(cm, null, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, null, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(false);
       TransactionSynchronization transactionSynchronization = null;
       listener.setTransactionSynchronization(transactionSynchronization);
@@ -187,7 +191,8 @@
       when(tm.getTransaction()).thenReturn(threadTx);
       when(cm.getTransactionManager()).thenReturn(tm);
 
-      TxConnectionListener listener = new TxConnectionListener(cm, null, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, null, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(false);
       TransactionSynchronization transactionSynchronization = null;
       listener.setTransactionSynchronization(transactionSynchronization);
@@ -214,7 +219,8 @@
       TransactionManager tm = mock(TransactionManager.class);
       when(tm.getStatus()).thenReturn(Status.STATUS_NO_TRANSACTION);
       when(cm.getTransactionManager()).thenReturn(tm);
-      TxConnectionListener listener = new TxConnectionListener(cm, null, null, null, null);
+      TxConnectionListener listener = 
+         new TxConnectionListener(cm, null, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(true);
       Transaction tx = mock(Transaction.class);
       TransactionSynchronization transactionSynchronization = listener.new TransactionSynchronization(tx, false);
@@ -239,7 +245,8 @@
       TransactionManager tm = mock(TransactionManager.class);
       when(tm.getStatus()).thenReturn(Status.STATUS_NO_TRANSACTION);
       when(cm.getTransactionManager()).thenReturn(tm);
-      TxConnectionListener listener = new TxConnectionListener(cm, null, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, null, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(true);
       Transaction tx = mock(Transaction.class);
       TransactionSynchronization transactionSynch = mock(TxConnectionListener.TransactionSynchronization.class);
@@ -265,7 +272,8 @@
       when(tm.getStatus()).thenReturn(Status.STATUS_COMMITTING);
       when(cm.getTransactionManager()).thenReturn(tm);
 
-      TxConnectionListener listener = new TxConnectionListener(cm, null, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, null, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(true);
       Transaction tx = mock(Transaction.class);
       TransactionSynchronization transactionSynchronization = listener.new TransactionSynchronization(tx, false);
@@ -295,7 +303,8 @@
       when(tm.getTransaction()).thenReturn(threadTx);
       when(cm.getTransactionManager()).thenReturn(tm);
 
-      TxConnectionListener listener = new TxConnectionListener(cm, null, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, null, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(true);
       Transaction tx = mock(Transaction.class);
       TransactionSynchronization transactionSynchronization = listener.new TransactionSynchronization(tx, false);
@@ -325,7 +334,8 @@
       when(tm.getTransaction()).thenReturn(threadTx);
       when(cm.getTransactionManager()).thenReturn(tm);
 
-      TxConnectionListener listener = new TxConnectionListener(cm, null, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, null, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(false);
       TransactionSynchronization transactionSynchronization = listener.new TransactionSynchronization(threadTx, false);
       listener.setTransactionSynchronization(transactionSynchronization);
@@ -356,7 +366,8 @@
       when(tm.getTransaction()).thenReturn(threadTx);
       when(cm.getTransactionManager()).thenReturn(tm);
 
-      TxConnectionListener listener = new TxConnectionListener(cm, null, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, null, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(true);
       TransactionSynchronization transactionSynchronization = listener.new TransactionSynchronization(threadTx, false);
       listener.setTransactionSynchronization(transactionSynchronization);
@@ -385,7 +396,8 @@
       when(tm.getTransaction()).thenReturn(threadTx);
       when(cm.getTransactionManager()).thenReturn(tm);
 
-      TxConnectionListener listener = new TxConnectionListener(cm, null, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, null, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(true);
       TransactionSynchronization transactionSynchronization = listener.new TransactionSynchronization(threadTx, false);
       listener.setTransactionSynchronization(transactionSynchronization);
@@ -417,7 +429,8 @@
       when(tm.getTransaction()).thenReturn(threadTx);
       when(cm.getTransactionManager()).thenReturn(tm);
 
-      TxConnectionListener listener = new TxConnectionListener(cm, null, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, null, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(true);
       TransactionSynchronization transactionSynchronization = null;
       listener.setTransactionSynchronization(transactionSynchronization);
@@ -448,7 +461,8 @@
       when(tm.getTransaction()).thenReturn(threadTx);
       when(cm.getTransactionManager()).thenReturn(tm);
 
-      TxConnectionListener listener = new TxConnectionListener(cm, null, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, null, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(true);
       TransactionSynchronization transactionSynchronization = null;
       listener.setTransactionSynchronization(transactionSynchronization);
@@ -472,7 +486,8 @@
       ManagedConnection mc = mock(ManagedConnection.class);
       ManagedConnection mc2 = mock(ManagedConnection.class);
 
-      TxConnectionListener listener = new TxConnectionListener(cm, mc, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, mc, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       ConnectionEvent ce = new ConnectionEvent(mc2, ConnectionEvent.CONNECTION_CLOSED);
       //when
       listener.connectionClosed(ce);
@@ -494,7 +509,8 @@
       ManagedConnection mc = mock(ManagedConnection.class);
       CachedConnectionManagerImpl ccm = mock(CachedConnectionManagerImpl.class);
       when(cm.getCachedConnectionManager()).thenReturn(ccm);
-      TxConnectionListener listener = new TxConnectionListener(cm, mc, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, mc, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(false);
       ConnectionEvent ce = new ConnectionEvent(mc, ConnectionEvent.CONNECTION_CLOSED);
       //when
@@ -518,7 +534,8 @@
       ManagedConnection mc = mock(ManagedConnection.class);
       CachedConnectionManagerImpl ccm = mock(CachedConnectionManagerImpl.class);
       when(cm.getCachedConnectionManager()).thenReturn(ccm);
-      TxConnectionListener listener = new TxConnectionListener(cm, mc, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, mc, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(true);
       ConnectionEvent ce = new ConnectionEvent(mc, ConnectionEvent.CONNECTION_CLOSED);
       //when
@@ -542,7 +559,8 @@
       ManagedConnection mc = mock(ManagedConnection.class);
       CachedConnectionManagerImpl ccm = mock(CachedConnectionManagerImpl.class);
       when(cm.getCachedConnectionManager()).thenReturn(ccm);
-      TxConnectionListener listener = new TxConnectionListener(cm, mc, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, mc, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       listener.setTrackByTx(true);
       ConnectionEvent ce = mock(ConnectionEvent.class);
       when(ce.getSource()).thenReturn(mc);
@@ -567,7 +585,8 @@
       //given
       TxConnectionManager cm = mock(TxConnectionManager.class);
       ManagedConnection mc = mock(ManagedConnection.class);
-      TxConnectionListener listener = new TxConnectionListener(cm, mc, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, mc, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       ConnectionEvent ce = mock(ConnectionEvent.class);
       /****** this is the important given *****/
       listener.localTransactionCommitted(ce);
@@ -589,7 +608,8 @@
       //given
       TxConnectionManager cm = mock(TxConnectionManager.class);
       ManagedConnection mc = mock(ManagedConnection.class);
-      TxConnectionListener listener = new TxConnectionListener(cm, mc, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, mc, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       ConnectionEvent ce = mock(ConnectionEvent.class);
       /****** this is the important given *****/
       listener.localTransactionStarted(ce);
@@ -612,7 +632,8 @@
       //given
       TxConnectionManager cm = mock(TxConnectionManager.class);
       ManagedConnection mc = mock(ManagedConnection.class);
-      TxConnectionListener listener = new TxConnectionListener(cm, mc, null, null, null);
+      TxConnectionListener listener =
+         new TxConnectionListener(cm, mc, null, null, FlushStrategy.FAILING_CONNECTION_ONLY, null);
       ConnectionEvent ce = mock(ConnectionEvent.class);
       /****** this is the important given *****/
       listener.localTransactionStarted(ce);
@@ -635,7 +656,8 @@
       //given
       TxConnectionManager cm = mock(TxConnectionManager.class);
       ManagedConnection mc = mock(ManagedConnection.class);
-      TxConnectionListener listener = new TxConnectionListener(cm, mc, null, null, null);
+      TxConnectionListener listener = new TxConnectionListener(cm, mc, null, null,
+                                                               FlushStrategy.FAILING_CONNECTION_ONLY, null);
       ConnectionEvent ce = mock(ConnectionEvent.class);
       /****** this is the important given *****/
       listener.localTransactionStarted(ce);
@@ -678,7 +700,8 @@
       ConnectionManagerFactory cmf = new ConnectionManagerFactory();
       ConnectionManager connectionManager =
          cmf.createTransactional(TransactionSupportLevel.LocalTransaction, pool,
-                                 null, null, false, null, null, null, ti, null, null, null, null, null);
+                                 null, null, false, null, FlushStrategy.FAILING_CONNECTION_ONLY,
+                                 null, null, ti, null, null, null, null, null);
 
       txConnectionManager = (TxConnectionManager) connectionManager;
    }

Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/NoTxConnectionManagerTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/NoTxConnectionManagerTestCase.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/NoTxConnectionManagerTestCase.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -21,6 +21,7 @@
  */
 package org.jboss.jca.core.connectionmanager.notx;
 
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.core.api.connectionmanager.ConnectionManager;
 import org.jboss.jca.core.api.connectionmanager.pool.PoolConfiguration;
 import org.jboss.jca.core.connectionmanager.ConnectionManagerFactory;
@@ -78,7 +79,9 @@
 
       ConnectionManagerFactory cmf = new ConnectionManagerFactory();
       connectionManager = 
-         cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, pool, null, null, false, null, null, null);
+         cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, pool, null, null, false, null, 
+                                    FlushStrategy.FAILING_CONNECTION_ONLY,
+                                    null, null);
       assertNotNull(connectionManager);
 
       assertTrue(connectionManager instanceof NoTxConnectionManager);

Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/SerializableTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/SerializableTestCase.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/SerializableTestCase.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -21,6 +21,7 @@
  */
 package org.jboss.jca.core.connectionmanager.notx;
 
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.core.api.connectionmanager.ConnectionManager;
 import org.jboss.jca.core.api.connectionmanager.pool.PoolConfiguration;
 import org.jboss.jca.core.connectionmanager.ConnectionManagerFactory;
@@ -65,7 +66,9 @@
       ConnectionManagerFactory cmf = new ConnectionManagerFactory();
 
       ConnectionManager connectionManager = cmf.createNonTransactional(TransactionSupportLevel.NoTransaction,
-                                                                       pool, null, null, false, null, null, null);
+                                                                       pool, null, null, false, null, 
+                                                                       FlushStrategy.FAILING_CONNECTION_ONLY,
+                                                                       null, null);
       assertNotNull(connectionManager);
 
       ByteArrayOutputStream baos = new ByteArrayOutputStream();

Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/pool/PrefillTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/pool/PrefillTestCase.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/pool/PrefillTestCase.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -21,6 +21,7 @@
  */
 package org.jboss.jca.core.connectionmanager.pool;
 
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.core.api.connectionmanager.pool.PoolConfiguration;
 import org.jboss.jca.core.connectionmanager.ConnectionManagerFactory;
 import org.jboss.jca.core.connectionmanager.NoTxConnectionManager;
@@ -70,7 +71,10 @@
       AbstractPrefillPool app = (AbstractPrefillPool)pool;
 
       NoTxConnectionManager noTxConnectionManager = 
-         cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, pool, null, null, false, null, null, null);
+         cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, 
+                                    pool, null, null, false, null, 
+                                    FlushStrategy.FAILING_CONNECTION_ONLY,
+                                    null, null);
 
       app.prefill(null, null, false);
 
@@ -112,7 +116,9 @@
 
       NoTxConnectionManager noTxConnectionManager = 
          cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, pool, 
-                                    null, null, false, null, null, null);
+                                    null, null, false, null, 
+                                    FlushStrategy.FAILING_CONNECTION_ONLY,
+                                    null, null);
 
       app.prefill(null, null, false);
 
@@ -175,7 +181,9 @@
 
       NoTxConnectionManager noTxConnectionManager = 
          cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, app,
-                                    subjectFactory, "domain", false, null, null, null);
+                                    subjectFactory, "domain", false, null, 
+                                    FlushStrategy.FAILING_CONNECTION_ONLY,
+                                    null, null);
 
       app.prefill(subject, null, false);
 
@@ -220,7 +228,9 @@
 
       NoTxConnectionManager noTxConnectionManager = 
          cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, app,
-                                    subjectFactory, "domain", false, null, null, null);
+                                    subjectFactory, "domain", false, null, 
+                                    FlushStrategy.FAILING_CONNECTION_ONLY,
+                                    null, null);
 
       app.prefill(subject, null, false);
 

Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/SerializableTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/SerializableTestCase.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/SerializableTestCase.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -21,6 +21,7 @@
  */
 package org.jboss.jca.core.connectionmanager.tx;
 
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.core.api.connectionmanager.ConnectionManager;
 import org.jboss.jca.core.api.connectionmanager.pool.PoolConfiguration;
 import org.jboss.jca.core.connectionmanager.ConnectionManagerFactory;
@@ -73,7 +74,9 @@
 
       ConnectionManagerFactory cmf = new ConnectionManagerFactory();
       ConnectionManager connectionManager = cmf.createTransactional(TransactionSupportLevel.XATransaction,
-                                                                    pool, null, null, false, null, null, null, ti,
+                                                                    pool, null, null, false, null, 
+                                                                    FlushStrategy.FAILING_CONNECTION_ONLY,
+                                                                    null, null, ti,
                                                                     Boolean.FALSE, null, null, null, null);
       assertNotNull(connectionManager);
 

Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerTestCase.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerTestCase.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -21,6 +21,7 @@
  */
 package org.jboss.jca.core.connectionmanager.tx;
 
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.core.api.connectionmanager.ConnectionManager;
 import org.jboss.jca.core.api.connectionmanager.pool.PoolConfiguration;
 import org.jboss.jca.core.connectionmanager.ConnectionManagerFactory;
@@ -319,7 +320,7 @@
       ConnectionManagerFactory cmf = new ConnectionManagerFactory();
       ConnectionManager connectionManager = 
          cmf.createTransactional(TransactionSupportLevel.LocalTransaction, pool,
-                                 null, null, false, null,
+                                 null, null, false, null, FlushStrategy.FAILING_CONNECTION_ONLY,
                                  null, null, ti, null, null, null, null, null);
 
       txConnectionManager = (TxConnectionManager) connectionManager;

Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/XATxConnectionManagerTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/XATxConnectionManagerTestCase.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/XATxConnectionManagerTestCase.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -21,6 +21,7 @@
  */
 package org.jboss.jca.core.connectionmanager.tx;
 
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.core.api.connectionmanager.pool.PoolConfiguration;
 import org.jboss.jca.core.connectionmanager.ConnectionManagerFactory;
 import org.jboss.jca.core.connectionmanager.TxConnectionManager;
@@ -289,7 +290,8 @@
       ConnectionManagerFactory cmf = new ConnectionManagerFactory();
       ConnectionManager connectionManager =
          cmf.createTransactional(TransactionSupportLevel.XATransaction, pool,
-                                 null, null, false, null, null, null, ti,
+                                 null, null, false, null, FlushStrategy.FAILING_CONNECTION_ONLY,
+                                 null, null, ti,
                                  Boolean.FALSE, null, null, null, null);
       assertNotNull(connectionManager);
 

Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/unit/ConnectionRecordTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/unit/ConnectionRecordTestCase.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/unit/ConnectionRecordTestCase.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -21,6 +21,7 @@
  */
 package org.jboss.jca.core.connectionmanager.unit;
 
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.core.connectionmanager.ConnectionRecord;
 import org.jboss.jca.core.connectionmanager.common.MockConnectionRequestInfo;
 import org.jboss.jca.core.connectionmanager.listener.NoTxConnectionListener;
@@ -66,8 +67,10 @@
    @Test
    public void testConnectionListenerIsNotNull()
    {
-      ConnectionRecord other = new ConnectionRecord(new NoTxConnectionListener(null, null, null, null), 
-            connection, cri);
+      ConnectionRecord other = 
+         new ConnectionRecord(new NoTxConnectionListener(null, null, null, null,
+                                                         FlushStrategy.FAILING_CONNECTION_ONLY), 
+                              connection, cri);
       assertNotNull(other.getConnectionListener());
    }
    
@@ -88,5 +91,4 @@
    {
       assertNotNull(cr.getCri());
    }
-   
 }

Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractDsDeployer.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractDsDeployer.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractDsDeployer.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -25,6 +25,7 @@
 import org.jboss.jca.common.api.metadata.common.CommonTimeOut;
 import org.jboss.jca.common.api.metadata.common.CommonValidation;
 import org.jboss.jca.common.api.metadata.common.Credential;
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.common.api.metadata.common.Recovery;
 import org.jboss.jca.common.api.metadata.ds.CommonDataSource;
 import org.jboss.jca.common.api.metadata.ds.DataSource;
@@ -433,6 +434,11 @@
 
       log.debugf("Adding management datasource: %s", mgtDs);
       getManagementRepository().getDataSources().add(mgtDs);
+
+      // Flush strategy
+      FlushStrategy flushStrategy = FlushStrategy.FAILING_CONNECTION_ONLY;
+      if (ds.getPool() != null)
+         flushStrategy = ds.getPool().getFlushStrategy();
       
       // Select the correct connection manager
       TransactionSupportLevel tsl = TransactionSupportLevel.LocalTransaction;
@@ -440,6 +446,7 @@
       ConnectionManager cm =
          cmf.createTransactional(tsl, pool, getSubjectFactory(securityDomain), securityDomain,
                                  ds.isUseCcm(), ccm,
+                                 flushStrategy,
                                  allocationRetry, allocationRetryWaitMillis,
                                  getTransactionIntegration(),
                                  null, null, null, null, null);
@@ -604,6 +611,11 @@
 
       log.debugf("Adding management datasource: %s", mgtDs);
       getManagementRepository().getDataSources().add(mgtDs);
+
+      // Flush strategy
+      FlushStrategy flushStrategy = FlushStrategy.FAILING_CONNECTION_ONLY;
+      if (ds.getXaPool() != null)
+         flushStrategy = ds.getXaPool().getFlushStrategy();
       
       // Select the correct connection manager
       TransactionSupportLevel tsl = TransactionSupportLevel.XATransaction;
@@ -611,6 +623,7 @@
       ConnectionManager cm =
          cmf.createTransactional(tsl, pool, getSubjectFactory(securityDomain), securityDomain,
                                  ds.isUseCcm(), ccm,
+                                 flushStrategy,
                                  allocationRetry, allocationRetryWaitMillis,
                                  getTransactionIntegration(), interleaving,
                                  xaResourceTimeout, isSameRMOverride, wrapXAResource, padXid);

Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractResourceAdapterDeployer.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractResourceAdapterDeployer.java	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractResourceAdapterDeployer.java	2011-04-15 14:56:48 UTC (rev 111184)
@@ -30,6 +30,7 @@
 import org.jboss.jca.common.api.metadata.common.CommonValidation;
 import org.jboss.jca.common.api.metadata.common.CommonXaPool;
 import org.jboss.jca.common.api.metadata.common.Credential;
+import org.jboss.jca.common.api.metadata.common.FlushStrategy;
 import org.jboss.jca.common.api.metadata.common.Recovery;
 import org.jboss.jca.common.api.metadata.common.TransactionSupportEnum;
 import org.jboss.jca.common.api.metadata.ironjacamar.IronJacamar;
@@ -861,13 +862,21 @@
                      associateResourceAdapter(resourceAdapter, mcf);
                      // Create the pool
                      PoolConfiguration pc = null;
+                     FlushStrategy flushStrategy = FlushStrategy.FAILING_CONNECTION_ONLY;
+
                      if (cdRaXml != null)
                      {
                         pc = createPoolConfiguration(cdRaXml.getPool(), cdRaXml.getTimeOut(), cdRaXml.getValidation());
+
+                        if (cdRaXml.getPool() != null)
+                           flushStrategy = cdRaXml.getPool().getFlushStrategy();
                      }
                      else if (ijCD != null)
                      {
                         pc = createPoolConfiguration(ijCD.getPool(), ijCD.getTimeOut(), ijCD.getValidation());
+
+                        if (ijCD.getPool() != null)
+                           flushStrategy = ijCD.getPool().getFlushStrategy();
                      }
                      else
                      {
@@ -877,6 +886,7 @@
                      PoolFactory pf = new PoolFactory();
 
                      Boolean noTxSeparatePool = Boolean.FALSE;
+
                      if (cdRaXml != null && cdRaXml.getPool() != null && cdRaXml.isXa())
                      {
                         CommonXaPool ijXaPool = (CommonXaPool) cdRaXml.getPool();
@@ -997,6 +1007,7 @@
                         cm = cmf.createNonTransactional(tsl, pool,
                                                         getSubjectFactory(securityDomain), securityDomain,
                                                         useCCM, getCachedConnectionManager(),
+                                                        flushStrategy,
                                                         allocationRetry, allocationRetryWaitMillis);
                      }
                      else
@@ -1039,6 +1050,7 @@
                         cm = cmf.createTransactional(tsl, pool,
                                                      getSubjectFactory(securityDomain), securityDomain,
                                                      useCCM, getCachedConnectionManager(),
+                                                     flushStrategy,
                                                      allocationRetry, allocationRetryWaitMillis,
                                                      getTransactionIntegration(), interleaving,
                                                      xaResourceTimeout, isSameRMOverride,
@@ -1212,17 +1224,26 @@
                                                                                  cdMeta.getConfigProperties()));
                                  beanValidationObjects.add(mcf);
                                  associateResourceAdapter(resourceAdapter, mcf);
+
                                  // Create the pool
                                  PoolConfiguration pc = null;
-                                 if (cdRaXml != null && cdRaXml.getPool() != null)
+                                 FlushStrategy flushStrategy = FlushStrategy.FAILING_CONNECTION_ONLY;
+
+                                 if (cdRaXml != null)
                                  {
                                     pc = createPoolConfiguration(cdRaXml.getPool(), cdRaXml.getTimeOut(),
                                        cdRaXml.getValidation());
+
+                                    if (cdRaXml.getPool() != null)
+                                       flushStrategy = cdRaXml.getPool().getFlushStrategy();
                                  }
                                  else if (ijCD != null)
                                  {
                                     pc = createPoolConfiguration(ijCD.getPool(), ijCD.getTimeOut(),
                                        ijCD.getValidation());
+
+                                    if (ijCD.getPool() != null)
+                                       flushStrategy = ijCD.getPool().getFlushStrategy();
                                  }
                                  else
                                  {
@@ -1353,6 +1374,7 @@
                                                                     getSubjectFactory(securityDomain),
                                                                     securityDomain,
                                                                     useCCM, getCachedConnectionManager(),
+                                                                    flushStrategy,
                                                                     allocationRetry, allocationRetryWaitMillis);
                                  }
                                  else
@@ -1397,6 +1419,7 @@
                                     cm = cmf.createTransactional(tsl, pool,
                                                                  getSubjectFactory(securityDomain), securityDomain,
                                                                  useCCM, getCachedConnectionManager(),
+                                                                 flushStrategy,
                                                                  allocationRetry, allocationRetryWaitMillis,
                                                                  getTransactionIntegration(),
                                                                  interleaving,

Modified: projects/jboss-jca/trunk/doc/userguide/en-US/modules/deployment.xml
===================================================================
--- projects/jboss-jca/trunk/doc/userguide/en-US/modules/deployment.xml	2011-04-15 10:21:58 UTC (rev 111183)
+++ projects/jboss-jca/trunk/doc/userguide/en-US/modules/deployment.xml	2011-04-15 14:56:48 UTC (rev 111184)
@@ -332,6 +332,13 @@
                  Default false
                </entry>
              </row>
+             <row>
+               <entry><code>flush-strategy</code></entry>
+               <entry>
+                 Specifies how the pool should be flush in case of an error.
+                 Valid values are: FailingConnectionOnly (default), IdleConnections, EntirePool 
+               </entry>
+             </row>
            </tbody>
          </tgroup>
        </table>
@@ -379,6 +386,13 @@
                </entry>
              </row>
              <row>
+               <entry><code>flush-strategy</code></entry>
+               <entry>
+                 Specifies how the pool should be flush in case of an error.
+                 Valid values are: FailingConnectionOnly (default), IdleConnections, EntirePool 
+               </entry>
+             </row>
+             <row>
                <entry><code>is-same-rm-override</code></entry>
                <entry>
                  The is-same-rm-override element allows one to unconditionally 
@@ -954,6 +968,13 @@
                   Default false
                 </entry>
               </row>
+              <row>
+                <entry><code>flush-strategy</code></entry>
+                <entry>
+                  Specifies how the pool should be flush in case of an error.
+                  Valid values are: FailingConnectionOnly (default), IdleConnections, EntirePool 
+                </entry>
+              </row>
             </tbody>
           </tgroup>
         </table>
@@ -1001,6 +1022,13 @@
                 </entry>
               </row>
               <row>
+                <entry><code>flush-strategy</code></entry>
+                <entry>
+                  Specifies how the pool should be flush in case of an error.
+                  Valid values are: FailingConnectionOnly (default), IdleConnections, EntirePool 
+                </entry>
+              </row>
+              <row>
                 <entry><code>is-same-rm-override</code></entry>
                 <entry>
                   The is-same-rm-override element allows one to unconditionally 



More information about the jboss-cvs-commits mailing list