You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ff...@apache.org on 2019/09/04 13:53:42 UTC

[cxf] branch 3.2.x-fixes updated: [CXF-8105]introduce a property for JMS transport client to decide reset JMS connection or not when client timeout

This is an automated email from the ASF dual-hosted git repository.

ffang pushed a commit to branch 3.2.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/3.2.x-fixes by this push:
     new 07742df  [CXF-8105]introduce a property for JMS transport client to decide reset JMS connection or not when client timeout
07742df is described below

commit 07742df5a5743b48935ea7d5e508a00b4a6043d9
Author: Freeman Fang <fr...@gmail.com>
AuthorDate: Tue Sep 3 15:10:14 2019 -0400

    [CXF-8105]introduce a property for JMS transport client to decide reset JMS connection or not when client timeout
    
    (cherry picked from commit e222c38125bb193cd2ea7da000833c99191cfb55)
    (cherry picked from commit 2f762e99c515580e19703ec2f9e8855559c9f94c)
---
 .../src/main/java/org/apache/cxf/transport/jms/JMSConduit.java |  8 +++++++-
 .../java/org/apache/cxf/transport/jms/JMSConfiguration.java    |  9 +++++++++
 .../java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java     |  9 +++++++++
 .../main/java/org/apache/cxf/transport/jms/util/JMSUtil.java   | 10 ++++++++--
 4 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java
index 6a4ae63..eb793b4 100644
--- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java
+++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java
@@ -275,6 +275,7 @@ public class JMSConduit extends AbstractConduit implements JMSExchangeSender, Me
 
             try {
                 if (useSyncReceive) {
+                    exchange.put(JMSUtil.JMS_IGNORE_TIMEOUT, this.jmsConfig.isIgnoreTimeoutException());
                     javax.jms.Message replyMessage = JMSUtil.receive(session, replyDestination,
                                                                      correlationId,
                                                                      jmsConfig.getReceiveTimeout(),
@@ -288,8 +289,13 @@ public class JMSConduit extends AbstractConduit implements JMSExchangeSender, Me
                         throw new JMSException("Interrupted while correlating " +  e.getMessage());
                     }
                     if (!Boolean.TRUE.equals(exchange.get(CORRELATED))) {
-                        throw new JMSException("Timeout receiving message with correlationId "
+                        if (this.jmsConfig.isIgnoreTimeoutException()) {
+                            throw new RuntimeException("Timeout receiving message with correlationId "
+                                + correlationId);
+                        } else {
+                            throw new JMSException("Timeout receiving message with correlationId "
                                                    + correlationId);
+                        }
                     }
 
                 }
diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
index bead3e7..31a53b7 100644
--- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
+++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
@@ -49,6 +49,7 @@ public class JMSConfiguration {
     private boolean pubSubNoLocal;
     private Long clientReceiveTimeout = 60000L;
     private Long serverReceiveTimeout;
+    private boolean ignoreTimeoutException;
     private boolean explicitQosEnabled;
     private int deliveryMode = Message.DEFAULT_DELIVERY_MODE;
     private int priority = Message.DEFAULT_PRIORITY;
@@ -522,4 +523,12 @@ public class JMSConfiguration {
         this.retryInterval = retryInterval;
     }
 
+    public boolean isIgnoreTimeoutException() {
+        return ignoreTimeoutException;
+    }
+
+    public void setIgnoreTimeoutException(boolean ignoreTimeoutException) {
+        this.ignoreTimeoutException = ignoreTimeoutException;
+    }
+
 }
diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java
index 1bf0f66..261e96a 100644
--- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java
+++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java
@@ -89,6 +89,7 @@ public class JMSEndpoint {
     private String messageSelector;
     private int retryInterval = 5000;
     private boolean oneSessionPerConnection;
+    private boolean ignoreTimeoutException;
 
     /**
      * @param uri
@@ -512,4 +513,12 @@ public class JMSEndpoint {
         this.oneSessionPerConnection = oneSessionPerConnection;
     }
 
+    public boolean isIgnoreTimeoutException() {
+        return ignoreTimeoutException;
+    }
+
+    public void setIgnoreTimeoutException(boolean ignoreTimeoutException) {
+        this.ignoreTimeoutException = ignoreTimeoutException;
+    }
+
 }
diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JMSUtil.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JMSUtil.java
index 7dfe529..281605c 100644
--- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JMSUtil.java
+++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JMSUtil.java
@@ -36,7 +36,8 @@ import org.apache.cxf.transport.jms.JMSConstants;
 
 public final class JMSUtil {
     
-    public static final String JMS_MESSAGE_CONSUMER = "jms_message_consumer"; 
+    public static final String JMS_MESSAGE_CONSUMER = "jms_message_consumer";
+    public static final String JMS_IGNORE_TIMEOUT = "jms_ignore_timeout";
     private static final char[] CORRELATTION_ID_PADDING = {
         '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'
     };
@@ -79,8 +80,13 @@ public final class JMSUtil {
             }
             javax.jms.Message replyMessage = consumer.receive(receiveTimeout);
             if (replyMessage == null) {
-                throw new RuntimeException("Timeout receiving message with correlationId "
+                if ((boolean)exchange.get(JMSUtil.JMS_IGNORE_TIMEOUT)) {
+                    throw new RuntimeException("Timeout receiving message with correlationId "
                                            + correlationId);
+                } else {
+                    throw new JMSException("Timeout receiving message with correlationId "
+                        + correlationId);
+                }
             }
             return replyMessage;
         } catch (JMSException e) {