You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ta...@apache.org on 2019/06/17 20:17:16 UTC

[qpid-jms] 01/01: QPIDJMS-461 Optimize the default message ID builder

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

tabish pushed a commit to branch QPIDJMS-461
in repository https://gitbox.apache.org/repos/asf/qpid-jms.git

commit b2300cbfbcd00eb990c82e5be1735df9f6ba89c5
Author: Timothy Bish <ta...@gmail.com>
AuthorDate: Mon Jun 17 16:15:22 2019 -0400

    QPIDJMS-461 Optimize the default message ID builder
    
    Change the builtin Message ID builder to create a builder
    per producer and optimize the string handling used to create
    the Message ID from the producer id and sequence number.
---
 .../qpid/jms/message/JmsMessageIDBuilder.java      | 26 ++++++++++++++++++----
 .../qpid/jms/policy/JmsDefaultMessageIDPolicy.java | 16 ++++++++-----
 2 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsMessageIDBuilder.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsMessageIDBuilder.java
index 319506b..f8a32cb 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsMessageIDBuilder.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsMessageIDBuilder.java
@@ -30,15 +30,19 @@ public interface JmsMessageIDBuilder {
         DEFAULT {
             @Override
             public JmsMessageIDBuilder createBuilder() {
+
                 return new JmsMessageIDBuilder() {
 
+                    private final StringBuilder builder = new StringBuilder();
+
                     @Override
                     public Object createMessageID(String producerId, long messageSequence) {
-                        String messageId = producerId + "-" + messageSequence;
-                        if (!AmqpMessageIdHelper.hasMessageIdPrefix(messageId)) {
-                            messageId = AmqpMessageIdHelper.JMS_ID_PREFIX + messageId;
+                        builder.setLength(0);
+                        if (!AmqpMessageIdHelper.hasMessageIdPrefix(producerId)) {
+                            builder.append(AmqpMessageIdHelper.JMS_ID_PREFIX);
                         }
-                        return messageId;
+                        builder.append(producerId).append("-").append(messageSequence);
+                        return builder.toString();
                     }
 
                     @Override
@@ -115,6 +119,20 @@ public interface JmsMessageIDBuilder {
         public static JmsMessageIDBuilder create(String value) {
             return valueOf(value.toUpperCase(Locale.ENGLISH)).createBuilder();
         }
+
+        /**
+         * Validates the value given maps to the built in message ID builders and
+         * return the builder enumeration that it maps to which can later be used
+         * to create builders of that type.
+         *
+         * @param value
+         * 		The name of one of the built in message ID builders.
+         *
+         * @return the enumeration value that maps to the built in builder.
+         */
+        public static BUILTIN validate(String value) {
+            return valueOf(value.toUpperCase(Locale.ENGLISH));
+        }
     }
 
     /**
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/policy/JmsDefaultMessageIDPolicy.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/policy/JmsDefaultMessageIDPolicy.java
index 2051561..870de3d 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/policy/JmsDefaultMessageIDPolicy.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/policy/JmsDefaultMessageIDPolicy.java
@@ -26,7 +26,8 @@ import org.apache.qpid.jms.message.JmsMessageIDBuilder;
  */
 public class JmsDefaultMessageIDPolicy implements JmsMessageIDPolicy {
 
-    private JmsMessageIDBuilder messageIDBuilder = JmsMessageIDBuilder.BUILTIN.DEFAULT.createBuilder();
+    private JmsMessageIDBuilder messageIDBuilder = null;
+    private JmsMessageIDBuilder.BUILTIN messageIDBuilderType = JmsMessageIDBuilder.BUILTIN.DEFAULT;
 
     /**
      * Initialize default Message ID builder policy
@@ -42,6 +43,7 @@ public class JmsDefaultMessageIDPolicy implements JmsMessageIDPolicy {
      */
     public JmsDefaultMessageIDPolicy(JmsDefaultMessageIDPolicy source) {
         this.messageIDBuilder = source.messageIDBuilder;
+        this.messageIDBuilderType = source.messageIDBuilderType;
     }
 
     @Override
@@ -51,7 +53,7 @@ public class JmsDefaultMessageIDPolicy implements JmsMessageIDPolicy {
 
     @Override
     public JmsMessageIDBuilder getMessageIDBuilder(JmsSession session, JmsDestination destination) {
-        return messageIDBuilder;
+        return getMessageIDBuilder();
     }
 
     /**
@@ -61,18 +63,22 @@ public class JmsDefaultMessageIDPolicy implements JmsMessageIDPolicy {
      *      The name of the Message type to use when sending a message.
      */
     public void setMessageIDType(String type) {
-        this.messageIDBuilder = JmsMessageIDBuilder.BUILTIN.create(type);
+        this.messageIDBuilderType = JmsMessageIDBuilder.BUILTIN.validate(type);
     }
 
     /**
      * @return the type name of the configured JmsMessageIDBuilder.
      */
     public String getMessageIDType() {
-        return this.messageIDBuilder.toString();
+        return getMessageIDBuilder().toString();
     }
 
     public JmsMessageIDBuilder getMessageIDBuilder() {
-        return messageIDBuilder;
+        JmsMessageIDBuilder builder = this.messageIDBuilder;
+        if (builder == null) {
+            builder = messageIDBuilderType.createBuilder();
+        }
+        return builder;
     }
 
     public void setMessageIDBuilder(JmsMessageIDBuilder messageIDBuilder) {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org