[jboss-cvs] JBoss Messaging SVN: r8238 - in branches/Branch_1_4: integration/AS5/etc/xmdesc and 8 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sat Mar 19 02:20:14 EDT 2011


Author: gaohoward
Date: 2011-03-19 02:20:12 -0400 (Sat, 19 Mar 2011)
New Revision: 8238

Modified:
   branches/Branch_1_4/docs/userguide/en/modules/configuration.xml
   branches/Branch_1_4/integration/AS5/etc/xmdesc/ConnectionFactory-xmbean.xml
   branches/Branch_1_4/integration/EAP4/etc/xmdesc/ConnectionFactory-xmbean.xml
   branches/Branch_1_4/integration/EAP5/etc/xmdesc/ConnectionFactory-xmbean.xml
   branches/Branch_1_4/src/main/org/jboss/jms/client/container/ClientConsumer.java
   branches/Branch_1_4/src/main/org/jboss/jms/client/container/ConsumerAspect.java
   branches/Branch_1_4/src/main/org/jboss/jms/client/container/StateCreationAspect.java
   branches/Branch_1_4/src/main/org/jboss/jms/client/delegate/ClientConnectionDelegate.java
   branches/Branch_1_4/src/main/org/jboss/jms/client/delegate/ClientConnectionFactoryDelegate.java
   branches/Branch_1_4/src/main/org/jboss/jms/client/state/ConnectionState.java
   branches/Branch_1_4/src/main/org/jboss/jms/client/state/ConsumerState.java
   branches/Branch_1_4/src/main/org/jboss/jms/client/state/SessionState.java
   branches/Branch_1_4/src/main/org/jboss/jms/server/ConnectionFactoryManager.java
   branches/Branch_1_4/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactory.java
   branches/Branch_1_4/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactoryJNDIMapper.java
   branches/Branch_1_4/tests/src/org/jboss/test/messaging/jms/ConnectionFactoryTest.java
Log:
JBMESSAGING-1851


Modified: branches/Branch_1_4/docs/userguide/en/modules/configuration.xml
===================================================================
--- branches/Branch_1_4/docs/userguide/en/modules/configuration.xml	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/docs/userguide/en/modules/configuration.xml	2011-03-19 06:20:12 UTC (rev 8238)
@@ -2520,6 +2520,29 @@
         <para>This attribute takes effect only if the EnableOrderingGroup attribute is true.</para>
       </section>
 
+      <section id="conf.connectionfactory.attributes.maxretrychangerate">
+        <title>MaxRetryChangeRate</title>
+
+        <para>Maximum attempts to retry sending change rate message for a consumer. Default is zero (no retry).</para>
+
+        <para>This attribute is useful when there is some random network disturbance between a client and the JBM server. A JMS client
+        can inform the JMS server to deliver more messages to it when there is no more messages in the client buffer, by sending a changeRate message
+        to the server. If the changeRate message failed to reach the server due to a temporary network disturbance, the server won't start delivering messages
+        to the client and the client receives no more messages even the messages at the server keep building up. With this parameter, the client can retry sending
+        of the changeRate messages in case of failure so this issue can be greatly alleviated .</para>
+        
+        <para>The valid values for this attribute are zero (default, no retry), -1 (retry forever), and any positive long type number. It is used together with 
+        attribute RetryChangeRateInterval.</para>
+      </section>
+
+      <section id="conf.connectionfactory.attributes.retrychangerateinterval">
+        <title>RetryChangeRateInterval</title>
+
+        <para>Interval (milliseconds) between two attempts of retrying to send change rate message. Default is 5000.</para>
+
+        <para>This attribute takes effect only if the MaxRetryChangeRate attribute is not zero.</para>
+      </section>
+
     <!-- End conf.connectionfactory.attributes -->
   </section>
 

Modified: branches/Branch_1_4/integration/AS5/etc/xmdesc/ConnectionFactory-xmbean.xml
===================================================================
--- branches/Branch_1_4/integration/AS5/etc/xmdesc/ConnectionFactory-xmbean.xml	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/integration/AS5/etc/xmdesc/ConnectionFactory-xmbean.xml	2011-03-19 06:20:12 UTC (rev 8238)
@@ -147,6 +147,18 @@
       <name>DefaultOrderingGroupName</name>
       <type>java.lang.String</type>
    </attribute>
+   
+   <attribute access="read-write" getMethod="getMaxRetryChangeRate" setMethod="setMaxRetryChangeRate">
+      <description>Maximum attempts to retry sending change rate message for a consumer. Default is zero (no retry).</description>
+      <name>MaxRetryChangeRate</name>
+      <type>long</type>
+   </attribute>
+   
+   <attribute access="read-write" getMethod="getRetryChangeRateInterval" setMethod="setRetryChangeRateInterval">
+      <description>Interval (milliseconds) between two attempts of retrying to send change rate message. Default is 5000.</description>
+      <name>RetryChangeRateInterval</name>
+      <type>long</type>
+   </attribute>
 
    <!-- Managed operations -->
 
@@ -170,4 +182,4 @@
       <name>destroy</name>
    </operation>
 
-</mbean>
\ No newline at end of file
+</mbean>

Modified: branches/Branch_1_4/integration/EAP4/etc/xmdesc/ConnectionFactory-xmbean.xml
===================================================================
--- branches/Branch_1_4/integration/EAP4/etc/xmdesc/ConnectionFactory-xmbean.xml	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/integration/EAP4/etc/xmdesc/ConnectionFactory-xmbean.xml	2011-03-19 06:20:12 UTC (rev 8238)
@@ -147,6 +147,18 @@
       <name>DefaultOrderingGroupName</name>
       <type>java.lang.String</type>
    </attribute>
+   
+   <attribute access="read-write" getMethod="getMaxRetryChangeRate" setMethod="setMaxRetryChangeRate">
+      <description>Maximum attempts to retry sending change rate message for a consumer. Default is zero (no retry).</description>
+      <name>MaxRetryChangeRate</name>
+      <type>long</type>
+   </attribute>
+   
+   <attribute access="read-write" getMethod="getRetryChangeRateInterval" setMethod="setRetryChangeRateInterval">
+      <description>Interval (milliseconds) between two attempts of retrying to send change rate message. Default is 5000.</description>
+      <name>RetryChangeRateInterval</name>
+      <type>long</type>
+   </attribute>
 
    <!-- Managed operations -->
 

Modified: branches/Branch_1_4/integration/EAP5/etc/xmdesc/ConnectionFactory-xmbean.xml
===================================================================
--- branches/Branch_1_4/integration/EAP5/etc/xmdesc/ConnectionFactory-xmbean.xml	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/integration/EAP5/etc/xmdesc/ConnectionFactory-xmbean.xml	2011-03-19 06:20:12 UTC (rev 8238)
@@ -147,6 +147,18 @@
       <name>DefaultOrderingGroupName</name>
       <type>java.lang.String</type>
    </attribute>
+   
+   <attribute access="read-write" getMethod="getMaxRetryChangeRate" setMethod="setMaxRetryChangeRate">
+      <description>Maximum attempts to retry sending change rate message for a consumer. Default is zero (no retry).</description>
+      <name>MaxRetryChangeRate</name>
+      <type>long</type>
+   </attribute>
+   
+   <attribute access="read-write" getMethod="getRetryChangeRateInterval" setMethod="setRetryChangeRateInterval">
+      <description>Interval (milliseconds) between two attempts of retrying to send change rate message. Default is 5000.</description>
+      <name>RetryChangeRateInterval</name>
+      <type>long</type>
+   </attribute>
 
    <!-- Managed operations -->
 
@@ -170,4 +182,4 @@
       <name>destroy</name>
    </operation>
 
-</mbean>
\ No newline at end of file
+</mbean>

Modified: branches/Branch_1_4/src/main/org/jboss/jms/client/container/ClientConsumer.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/jms/client/container/ClientConsumer.java	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/src/main/org/jboss/jms/client/container/ClientConsumer.java	2011-03-19 06:20:12 UTC (rev 8238)
@@ -296,6 +296,8 @@
    private boolean firstTime = true;
    private volatile Thread onMessageThread;
    private ExecutorService pool = Executors.newFixedThreadPool(1);
+   private long maxRetryChangeRate;
+   private long retryChangeRateInterval;
 
    public int getBufferSize()
    {
@@ -309,7 +311,9 @@
                          String queueName,
                          int bufferSize, Executor sessionExecutor,
                          int maxDeliveries, boolean shouldAck,
-                         long redeliveryDelay)
+                         long redeliveryDelay,
+                         long maxRetryChangeRate,
+                         long retryChangeRateInterval)
    {
       if (bufferSize < 1)
       {
@@ -329,6 +333,8 @@
       this.maxDeliveries = maxDeliveries;
       this.shouldAck = shouldAck;
       this.redeliveryDelay = redeliveryDelay;
+      this.maxRetryChangeRate = maxRetryChangeRate;
+      this.retryChangeRateInterval = retryChangeRateInterval;
    }
         
    // Public ---------------------------------------------------------------------------------------
@@ -807,7 +813,7 @@
       }
    }
    
-   private void sendChangeRateMessage(float newRate) 
+   public void sendChangeRateMessage(float newRate) 
    {
       try
       {
@@ -817,10 +823,52 @@
       }
       catch (JMSException e)
       {
-         log.error("Failed to send changeRate message", e);
+         if (maxRetryChangeRate == 0)
+         {
+            log.error("Failed to send changeRate message", e);
+         }
+         else
+         {
+            log.warn("Failed to send changeRate message, will retry with maxRetryChangeRate " + maxRetryChangeRate 
+                     + ", retryChangeRateInterval " + retryChangeRateInterval + ", newRate " + newRate);
+            retrySendChangeRateMessage(newRate);
+         }
       }
    }
    
+   private void retrySendChangeRateMessage(float newRate)
+   {
+      int numRetry = 0;
+      while (true)
+      {
+         try
+         {
+            numRetry++;
+            if (trace) { log.trace("Retrying sending changeRate, numRetry " + numRetry); }
+            
+            consumerDelegate.changeRate(newRate);
+            log.info("Successfully sent changeRate. Retry number: " + numRetry);
+            break;
+         }
+         catch (JMSException ee)
+         {
+            if ((maxRetryChangeRate > 0) && (numRetry >= maxRetryChangeRate))
+            {
+               log.warn("Failed to send changeRate message after retry number " + numRetry, ee);
+               break;
+            }
+            try
+            {
+               Thread.sleep(retryChangeRateInterval);
+            }
+            catch (InterruptedException ex)
+            {
+               //ignore
+            }
+         }
+      }
+   }
+   
    private void waitForOnMessageToComplete()
    {
       // Wait for any onMessage() executions to complete

Modified: branches/Branch_1_4/src/main/org/jboss/jms/client/container/ConsumerAspect.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/jms/client/container/ConsumerAspect.java	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/src/main/org/jboss/jms/client/container/ConsumerAspect.java	2011-03-19 06:20:12 UTC (rev 8238)
@@ -113,7 +113,8 @@
          new ClientConsumer(isCC, sessionState.getAcknowledgeMode(),
                             sessionDelegate, consumerDelegate, consumerID, queueName,
                             prefetchSize, executor, maxDeliveries, consumerState.isShouldAck(),
-                            redeliveryDelay);
+                            redeliveryDelay, consumerState.getMaxRetryChangeRate(), 
+                            consumerState.getRetryChangeRateInterval());
       
       sessionState.addCallbackHandler(messageHandler);
       
@@ -126,7 +127,8 @@
       {
 	      //Now we have finished creating the client consumer, we can tell the SCD
 	      //we are ready
-	      consumerDelegate.changeRate(1);
+	      //consumerDelegate.changeRate(1);
+	      messageHandler.sendChangeRateMessage(1);
       }
 
       return consumerDelegate;

Modified: branches/Branch_1_4/src/main/org/jboss/jms/client/container/StateCreationAspect.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/jms/client/container/StateCreationAspect.java	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/src/main/org/jboss/jms/client/container/StateCreationAspect.java	2011-03-19 06:20:12 UTC (rev 8238)
@@ -99,7 +99,8 @@
          ConnectionState connectionState =
             new ConnectionState(serverID, connectionDelegate,
                                 remotingConnection, versionToUse, 
-                                connectionDelegate.isEnableOrderingGroup(), connectionDelegate.getDefaultOrderingGroupName());
+                                connectionDelegate.isEnableOrderingGroup(), connectionDelegate.getDefaultOrderingGroupName(),
+                                connectionDelegate.getMaxRetryChangeRate(), connectionDelegate.getRetryChangeRateInterval());
 
          remotingConnection.getConnectionListener().setConnectionState(connectionState);
          remotingConnection.getConnectionListener().start();

Modified: branches/Branch_1_4/src/main/org/jboss/jms/client/delegate/ClientConnectionDelegate.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/jms/client/delegate/ClientConnectionDelegate.java	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/src/main/org/jboss/jms/client/delegate/ClientConnectionDelegate.java	2011-03-19 06:20:12 UTC (rev 8238)
@@ -86,6 +86,10 @@
    private boolean enableOrderingGroup;
    
    private String defaultOrderingGroupName;
+   
+   private long maxRetryChangeRate;
+   
+   private long retryChangeRateInterval;
 
    // Static ---------------------------------------------------------------------------------------
 
@@ -373,8 +377,29 @@
       return defaultOrderingGroupName;
    }
 
+   public long getRetryChangeRateInterval()
+   {
+      return retryChangeRateInterval;
+   }
+
+   public long getMaxRetryChangeRate()
+   {
+      return maxRetryChangeRate;
+   }
+
+   public void setMaxRetryChangeRate(long maxRetryChangeRate)
+   {
+      this.maxRetryChangeRate = maxRetryChangeRate;
+   }
+
+   public void setRetryChangeRateInterval(long retryChangeRateInterval)
+   {
+      this.retryChangeRateInterval = retryChangeRateInterval;
+   }
+   
    // Package Private ------------------------------------------------------------------------------
 
+
    // Private --------------------------------------------------------------------------------------
 
    // Inner Classes --------------------------------------------------------------------------------

Modified: branches/Branch_1_4/src/main/org/jboss/jms/client/delegate/ClientConnectionFactoryDelegate.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/jms/client/delegate/ClientConnectionFactoryDelegate.java	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/src/main/org/jboss/jms/client/delegate/ClientConnectionFactoryDelegate.java	2011-03-19 06:20:12 UTC (rev 8238)
@@ -84,6 +84,10 @@
    
    private String defaultOrderingGroupName;
    
+   private long maxRetryChangeRate;
+   
+   private long retryChangeRateInterval;
+   
    // Static ---------------------------------------------------------------------------------------
    
    /*
@@ -114,7 +118,8 @@
 
    public ClientConnectionFactoryDelegate(String uniqueName, String objectID, int serverID, String serverLocatorURI,
                                           Version serverVersion, boolean clientPing, boolean strictTck,
-                                          boolean sendAcksAsync, boolean enableOrderingGroup, String defaultOrderingGroupName)
+                                          boolean sendAcksAsync, boolean enableOrderingGroup, String defaultOrderingGroupName,
+                                          long maxRetryChangeRate, long retryChangeRateInterval)
    {
       super(objectID);
 
@@ -127,6 +132,8 @@
       this.sendAcksAsync = sendAcksAsync;
       this.setEnableOrderingGroup(enableOrderingGroup);
       this.setDefaultOrderingGroupName(defaultOrderingGroupName);
+      this.maxRetryChangeRate = maxRetryChangeRate;
+      this.retryChangeRateInterval = retryChangeRateInterval;
    }
    
    public ClientConnectionFactoryDelegate()
@@ -209,6 +216,10 @@
          connectionDelegate.setEnableOrderingGroup(this.enableOrderingGroup);
          
          connectionDelegate.setDefaultOrderingGroup(this.defaultOrderingGroupName);
+         
+         connectionDelegate.setMaxRetryChangeRate(this.maxRetryChangeRate);
+         
+         connectionDelegate.setRetryChangeRateInterval(this.retryChangeRateInterval);
       }
       else
       {

Modified: branches/Branch_1_4/src/main/org/jboss/jms/client/state/ConnectionState.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/jms/client/state/ConnectionState.java	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/src/main/org/jboss/jms/client/state/ConnectionState.java	2011-03-19 06:20:12 UTC (rev 8238)
@@ -91,12 +91,17 @@
    private boolean enableOrderingGroup;
    
    private String defaultOrderingGroupName;
+   
+   private long maxRetryChangeRate;
+   
+   private long retryChangeRateInterval;
 
    // Constructors ---------------------------------------------------------------------------------
 
    public ConnectionState(int serverID, ConnectionDelegate delegate,
                           JMSRemotingConnection remotingConnection,
-                          Version versionToUse, boolean enableOrderingGroup, String defaultOrderingGroupName)
+                          Version versionToUse, boolean enableOrderingGroup, String defaultOrderingGroupName,
+                          long maxRetryChangeRate, long retryChangeRateInterval)
       throws Exception
    {
       super(null, (DelegateSupport)delegate);
@@ -118,6 +123,10 @@
       this.setEnableOrderingGroup(enableOrderingGroup);
       
       this.setDefaultOrderingGroupName(defaultOrderingGroupName);
+      
+      this.maxRetryChangeRate = maxRetryChangeRate;
+      
+      this.retryChangeRateInterval = retryChangeRateInterval;
    }
 
    // HierarchicalState implementation -------------------------------------------------------------
@@ -306,6 +315,16 @@
       return defaultOrderingGroupName;
    }
 
+   public long getMaxRetryChangeRate()
+   {
+      return maxRetryChangeRate;
+   }
+
+   public long getRetryChangeRateInterval()
+   {
+      return retryChangeRateInterval;
+   }
+
    // Package protected ----------------------------------------------------------------------------
 
    // Protected ------------------------------------------------------------------------------------

Modified: branches/Branch_1_4/src/main/org/jboss/jms/client/state/ConsumerState.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/jms/client/state/ConsumerState.java	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/src/main/org/jboss/jms/client/state/ConsumerState.java	2011-03-19 06:20:12 UTC (rev 8238)
@@ -66,6 +66,9 @@
    private SessionState parent;
    private ConsumerDelegate delegate;
    
+   private long maxRetryChangeRate;
+   private long retryChangeRateInterval;
+   
    // Constructors ---------------------------------------------------------------------------------
 
    public ConsumerState(SessionState parent, ConsumerDelegate delegate, JBossDestination dest,
@@ -83,6 +86,8 @@
       this.subscriptionName=subscriptionName;
       this.maxDeliveries = maxDeliveries;
       this.redeliveryDelay = redeliveryDelay;
+      this.maxRetryChangeRate = parent.getMaxRetryChangeRate();
+      this.retryChangeRateInterval = parent.getRetryChangeRateInterval();
     
       //We don't store deliveries if this a non durable subscriber
       
@@ -221,6 +226,16 @@
    	return redeliveryDelay;
    }
 
+   public long getMaxRetryChangeRate()
+   {
+      return maxRetryChangeRate;
+   }
+
+   public long getRetryChangeRateInterval()
+   {
+      return this.retryChangeRateInterval;
+   }
+
    // Package protected ----------------------------------------------------------------------------
 
    // Protected ------------------------------------------------------------------------------------

Modified: branches/Branch_1_4/src/main/org/jboss/jms/client/state/SessionState.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/jms/client/state/SessionState.java	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/src/main/org/jboss/jms/client/state/SessionState.java	2011-03-19 06:20:12 UTC (rev 8238)
@@ -570,5 +570,15 @@
       }
    }
 
+   public long getMaxRetryChangeRate()
+   {
+      return parent.getMaxRetryChangeRate();
+   }
+
+   public long getRetryChangeRateInterval()
+   {
+      return parent.getRetryChangeRateInterval();
+   }
+
 }
 

Modified: branches/Branch_1_4/src/main/org/jboss/jms/server/ConnectionFactoryManager.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/jms/server/ConnectionFactoryManager.java	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/src/main/org/jboss/jms/server/ConnectionFactoryManager.java	2011-03-19 06:20:12 UTC (rev 8238)
@@ -53,7 +53,9 @@
                                  boolean strictTck,
                                  boolean sendAcksAsync,
                                  boolean enableOrderingGroup,
-                                 String defaultOrderingGroupName) throws Exception;
+                                 String defaultOrderingGroupName,
+                                 long maxRetryChangeRate,
+                                 long retryChangeRateInterval) throws Exception;
 
    void unregisterConnectionFactory(String uniqueName, boolean supportsFailover, boolean supportsLoadBalancing) throws Exception;
 }

Modified: branches/Branch_1_4/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactory.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactory.java	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactory.java	2011-03-19 06:20:12 UTC (rev 8238)
@@ -88,6 +88,10 @@
    private boolean enableOrderingGroup;
    
    private String defaultOrderingGroupName;
+   
+   private long maxRetryChangeRate = 0;
+   
+   private long retryChangeRateInterval = 5000;
 
    // Constructors ---------------------------------------------------------------------------------
 
@@ -208,7 +212,8 @@
                                       locatorURI, enablePing, prefetchSize, slowConsumers,
                                       defaultTempQueueFullSize, defaultTempQueuePageSize,                                      
                                       defaultTempQueueDownCacheSize, dupsOKBatchSize, supportsFailover, supportsLoadBalancing,
-                                      loadBalancingFactory, strictTck, sendAcksAsync, enableOrderingGroup, defaultOrderingGroupName);               
+                                      loadBalancingFactory, strictTck, sendAcksAsync, enableOrderingGroup, defaultOrderingGroupName,
+                                      maxRetryChangeRate, retryChangeRateInterval);               
          
          String info = "Connector " + locator.getProtocol() + "://" +
             locator.getHost() + ":" + locator.getPort();
@@ -488,6 +493,27 @@
    {
       return defaultOrderingGroupName;
    }
+   
+   public long getMaxRetryChangeRate()
+   {
+      return maxRetryChangeRate;
+   }
+   
+   public void setMaxRetryChangeRate(long maxRetryChangeRate)
+   {
+      this.maxRetryChangeRate = maxRetryChangeRate;
+   }
+   
+   public long getRetryChangeRateInterval()
+   {
+      return retryChangeRateInterval;
+   }
+   
+   public void setRetryChangeRateInterval(long retryChangeRateInterval)
+   {
+      this.retryChangeRateInterval = retryChangeRateInterval;
+   }
+   
    // JMX managed operations -----------------------------------------------------------------------
 
    // Public ---------------------------------------------------------------------------------------

Modified: branches/Branch_1_4/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactoryJNDIMapper.java
===================================================================
--- branches/Branch_1_4/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactoryJNDIMapper.java	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/src/main/org/jboss/jms/server/connectionfactory/ConnectionFactoryJNDIMapper.java	2011-03-19 06:20:12 UTC (rev 8238)
@@ -131,7 +131,9 @@
                                                       boolean strictTck,
                                                       boolean sendAcksAsync,
                                                       boolean enableOrderingGroup,
-                                                      String defaultOrderingGroupName)
+                                                      String defaultOrderingGroupName,
+                                                      long maxRetryChangeRate,
+                                                      long retryChangeRateInterval)
       throws Exception
    {
       log.debug(this + " registering connection factory '" + uniqueName + "', bindings: " + jndiBindings);
@@ -186,7 +188,8 @@
       ClientConnectionFactoryDelegate localDelegate =
          new ClientConnectionFactoryDelegate(uniqueName, id, serverPeer.getServerPeerID(),
                                              locatorURI, version, clientPing, useStrict,
-                                             sendAcksAsync, enableOrderingGroup, defaultOrderingGroupName);
+                                             sendAcksAsync, enableOrderingGroup, defaultOrderingGroupName,
+                                             maxRetryChangeRate, retryChangeRateInterval);
 
       log.debug(this + " created local delegate " + localDelegate);
 

Modified: branches/Branch_1_4/tests/src/org/jboss/test/messaging/jms/ConnectionFactoryTest.java
===================================================================
--- branches/Branch_1_4/tests/src/org/jboss/test/messaging/jms/ConnectionFactoryTest.java	2011-03-15 03:45:18 UTC (rev 8237)
+++ branches/Branch_1_4/tests/src/org/jboss/test/messaging/jms/ConnectionFactoryTest.java	2011-03-19 06:20:12 UTC (rev 8238)
@@ -37,9 +37,12 @@
 import javax.jms.TopicConnectionFactory;
 import javax.management.ObjectName;
 
+import org.jboss.jms.client.JBossConnection;
 import org.jboss.jms.client.JBossConnectionFactory;
 import org.jboss.jms.client.JBossMessageProducer;
+import org.jboss.jms.client.delegate.ClientConnectionDelegate;
 import org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate;
+import org.jboss.jms.client.state.ConnectionState;
 import org.jboss.jms.message.JBossMessage;
 import org.jboss.test.messaging.tools.ServerManagement;
 import org.jboss.test.messaging.tools.container.ServiceContainer;
@@ -854,6 +857,118 @@
       }
    }
 
+   //https://issues.jboss.org/browse/JBMESSAGING-1851
+   public void testChangeRateConfigSettings() throws Exception
+   {
+      Connection c = null;
+
+      try
+      {
+         String mbeanConfig = "<mbean code=\"org.jboss.jms.server.connectionfactory.ConnectionFactory\"\n" + "       name=\"jboss.messaging.connectionfactory:service=TestChangeRateConfigSettingsFactory\"\n"
+                              + "       xmbean-dd=\"xmdesc/ConnectionFactory-xmbean.xml\">\n"
+                              + "       <depends optional-attribute-name=\"ServerPeer\">jboss.messaging:service=ServerPeer</depends>\n"
+                              + "       <depends optional-attribute-name=\"Connector\">jboss.messaging:service=Connector,transport=bisocket</depends>\n"
+                              + "       <attribute name=\"JNDIBindings\">\n"
+                              + "          <bindings>\n"
+                              + "            <binding>/TestChangeRateConfigSettingsFactory</binding>\n"
+                              + "          </bindings>\n"
+                              + "       </attribute>\n"
+                              + "       <attribute name=\"MaxRetryChangeRate\">10</attribute>\n"
+                              + "       <attribute name=\"RetryChangeRateInterval\">2345</attribute>\n"
+                              + " </mbean>";
+
+         ObjectName on = ServerManagement.deploy(mbeanConfig);
+         ServerManagement.invoke(on, "create", new Object[0], new String[0]);
+         ServerManagement.invoke(on, "start", new Object[0], new String[0]);
+
+         ConnectionFactory cf = (ConnectionFactory)ic.lookup("/TestChangeRateConfigSettingsFactory");
+         c = cf.createConnection();
+         
+         ClientConnectionDelegate del1 = (ClientConnectionDelegate)((JBossConnection)c).getDelegate();
+         
+         ConnectionState state1 = (ConnectionState)del1.getState();
+         
+         long maxRetry = state1.getMaxRetryChangeRate();
+         
+         assertEquals(10, maxRetry);
+         
+         long retryInterval = state1.getRetryChangeRateInterval();
+         
+         assertEquals(2345, retryInterval);
+      }
+      finally
+      {
+         try
+         {
+            if (c != null)
+            {
+               log.info("Closing connection");
+               c.close();
+               log.info("Closed connection");
+            }
+         }
+         catch (Exception e)
+         {
+            log.warn(e.toString(), e);
+         }
+      }
+   }
+
+   //https://issues.jboss.org/browse/JBMESSAGING-1851
+   public void testChangeRateConfigDefaults() throws Exception
+   {
+      Connection c = null;
+
+      try
+      {
+         String mbeanConfig = "<mbean code=\"org.jboss.jms.server.connectionfactory.ConnectionFactory\"\n" + "       name=\"jboss.messaging.connectionfactory:service=TestChangeRateConfigDefaultsFactory\"\n"
+                              + "       xmbean-dd=\"xmdesc/ConnectionFactory-xmbean.xml\">\n"
+                              + "       <depends optional-attribute-name=\"ServerPeer\">jboss.messaging:service=ServerPeer</depends>\n"
+                              + "       <depends optional-attribute-name=\"Connector\">jboss.messaging:service=Connector,transport=bisocket</depends>\n"
+                              + "       <attribute name=\"JNDIBindings\">\n"
+                              + "          <bindings>\n"
+                              + "            <binding>/TestChangeRateConfigDefaultsFactory</binding>\n"
+                              + "          </bindings>\n"
+                              + "       </attribute>\n"
+                              + " </mbean>";
+
+         ObjectName on = ServerManagement.deploy(mbeanConfig);
+         ServerManagement.invoke(on, "create", new Object[0], new String[0]);
+         ServerManagement.invoke(on, "start", new Object[0], new String[0]);
+
+         ConnectionFactory cf = (ConnectionFactory)ic.lookup("/TestChangeRateConfigDefaultsFactory");
+         c = cf.createConnection();
+         
+         ClientConnectionDelegate del1 = (ClientConnectionDelegate)((JBossConnection)c).getDelegate();
+         
+         ConnectionState state1 = (ConnectionState)del1.getState();
+         
+         long maxRetry = state1.getMaxRetryChangeRate();
+         
+         assertEquals(0, maxRetry);
+         
+         long retryInterval = state1.getRetryChangeRateInterval();
+         
+         assertEquals(5000, retryInterval);
+      }
+      finally
+      {
+         try
+         {
+            if (c != null)
+            {
+               log.info("Closing connection");
+               c.close();
+               log.info("Closed connection");
+            }
+         }
+         catch (Exception e)
+         {
+            log.warn(e.toString(), e);
+         }
+      }
+   }
+
    // Package protected ---------------------------------------------
 
    // Protected -----------------------------------------------------



More information about the jboss-cvs-commits mailing list