Support delivery mode with PERSISTENT and only guarantee 'at-least-once', and add some tests
Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/commit/fb50854e Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/tree/fb50854e Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/diff/fb50854e Branch: refs/heads/jms-dev-1.1.0 Commit: fb50854e29dd27fc43c918720f3f085663ce30ba Parents: e0802f0 Author: zhangke <[email protected]> Authored: Mon Feb 27 23:22:59 2017 +0800 Committer: zhangke <[email protected]> Committed: Mon Feb 27 23:22:59 2017 +0800 ---------------------------------------------------------------------- .../rocketmq/jms/DeliverMessageService.java | 4 +- .../rocketmq/jms/RocketMQConnectionFactory.java | 6 +- .../apache/rocketmq/jms/RocketMQProducer.java | 27 ++- .../UnsupportDeliveryModelException.java | 27 +++ .../rocketmq/jms/hook/SendMessageHook.java | 24 ++ .../rocketmq/jms/msg/AbstractJMSMessage.java | 32 +-- .../rocketmq/jms/msg/JMSBytesMessage.java | 13 +- .../apache/rocketmq/jms/msg/JMSMapMessage.java | 40 ++-- .../jms/support/DirectTypeConverter.java | 75 ------- .../apache/rocketmq/jms/support/JmsHelper.java | 61 ----- .../apache/rocketmq/jms/support/JmsUtils.java | 52 +++++ .../rocketmq/jms/support/ObjectTypeCast.java | 75 +++++++ .../rocketmq/jms/support/PrimitiveTypeCast.java | 220 +++++++++++++++++++ .../jms/support/PrimitiveTypeConverter.java | 194 ---------------- .../rocketmq/jms/hook/SendMessageHookTest.java | 94 ++++++++ .../rocketmq/jms/msg/JMSBytesMessageTest.java | 1 - .../jms/support/DirectTypeConverterTest.java | 12 +- .../jms/support/PrimitiveTypeConvertTest.java | 90 ++++---- 18 files changed, 618 insertions(+), 429 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/main/java/org/apache/rocketmq/jms/DeliverMessageService.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/rocketmq/jms/DeliverMessageService.java b/core/src/main/java/org/apache/rocketmq/jms/DeliverMessageService.java index bcfc680..0ff5c73 100644 --- a/core/src/main/java/org/apache/rocketmq/jms/DeliverMessageService.java +++ b/core/src/main/java/org/apache/rocketmq/jms/DeliverMessageService.java @@ -39,7 +39,7 @@ import org.apache.rocketmq.common.ServiceThread; import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.common.message.MessageQueue; import org.apache.rocketmq.jms.msg.convert.RMQ2JMSMessageConvert; -import org.apache.rocketmq.jms.support.JmsHelper; +import org.apache.rocketmq.jms.support.JmsUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -81,7 +81,7 @@ public class DeliverMessageService extends ServiceThread { this.destination = destination; this.consumerGroup = consumerGroup; - this.topicName = JmsHelper.getTopicName(destination); + this.topicName = JmsUtils.getTopicName(destination); createAndStartRocketMQPullConsumer(); http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/main/java/org/apache/rocketmq/jms/RocketMQConnectionFactory.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/rocketmq/jms/RocketMQConnectionFactory.java b/core/src/main/java/org/apache/rocketmq/jms/RocketMQConnectionFactory.java index c00338c..501a37d 100644 --- a/core/src/main/java/org/apache/rocketmq/jms/RocketMQConnectionFactory.java +++ b/core/src/main/java/org/apache/rocketmq/jms/RocketMQConnectionFactory.java @@ -22,7 +22,7 @@ import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSContext; import javax.jms.JMSException; -import org.apache.rocketmq.jms.support.JmsHelper; +import org.apache.rocketmq.jms.support.JmsUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -51,7 +51,7 @@ public class RocketMQConnectionFactory implements ConnectionFactory { public RocketMQConnectionFactory(String nameServerAddress) { this.nameServerAddress = nameServerAddress; - this.clientId = JmsHelper.uuid(); + this.clientId = JmsUtils.uuid(); } public RocketMQConnectionFactory(String nameServerAddress, String clientId) { @@ -79,7 +79,7 @@ public class RocketMQConnectionFactory implements ConnectionFactory { } private Connection createRocketMQConnection(String userName, String password) throws JMSException { - final String instanceName = JmsHelper.uuid(); + final String instanceName = JmsUtils.uuid(); RocketMQConnection connection = new RocketMQConnection(this.nameServerAddress, this.clientId, instanceName); log.info("Create a connection successfully[instanceName:{},clientIdentifier:{},userName:{}", instanceName, clientId, userName); http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/main/java/org/apache/rocketmq/jms/RocketMQProducer.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/rocketmq/jms/RocketMQProducer.java b/core/src/main/java/org/apache/rocketmq/jms/RocketMQProducer.java index 64f7438..83b760a 100644 --- a/core/src/main/java/org/apache/rocketmq/jms/RocketMQProducer.java +++ b/core/src/main/java/org/apache/rocketmq/jms/RocketMQProducer.java @@ -30,6 +30,7 @@ import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.client.producer.SendResult; import org.apache.rocketmq.client.producer.SendStatus; import org.apache.rocketmq.common.message.MessageExt; +import org.apache.rocketmq.jms.exception.UnsupportDeliveryModelException; import org.apache.rocketmq.jms.hook.SendMessageHook; import org.apache.rocketmq.jms.msg.AbstractJMSMessage; import org.apache.rocketmq.jms.msg.convert.JMS2RMQMessageConvert; @@ -42,13 +43,13 @@ import static org.apache.rocketmq.jms.msg.enums.JMSHeaderEnum.JMS_DELIVERY_MODE_ import static org.apache.rocketmq.jms.msg.enums.JMSHeaderEnum.JMS_DELIVERY_TIME_DEFAULT_VALUE; import static org.apache.rocketmq.jms.msg.enums.JMSHeaderEnum.JMS_PRIORITY_DEFAULT_VALUE; import static org.apache.rocketmq.jms.msg.enums.JMSHeaderEnum.JMS_TIME_TO_LIVE_DEFAULT_VALUE; -import static org.apache.rocketmq.jms.support.DirectTypeConverter.convert2Object; +import static org.apache.rocketmq.jms.support.ObjectTypeCast.cast2Object; public class RocketMQProducer implements MessageProducer { private static final Logger log = LoggerFactory.getLogger(RocketMQProducer.class); private RocketMQSession session; - private final DefaultMQProducer rocketMQProducer; + private DefaultMQProducer rocketMQProducer; private Destination destination; private boolean disableMessageID; @@ -60,6 +61,9 @@ public class RocketMQProducer implements MessageProducer { private SendMessageHook sendMessageHook; + public RocketMQProducer() { + } + public RocketMQProducer(RocketMQSession session, Destination destination) { this.session = session; this.destination = destination; @@ -100,7 +104,7 @@ public class RocketMQProducer implements MessageProducer { @Override public void setDeliveryMode(int deliveryMode) throws JMSException { - this.deliveryMode = deliveryMode; + throw new UnsupportDeliveryModelException(); } @Override @@ -202,7 +206,7 @@ public class RocketMQProducer implements MessageProducer { } private MessageExt createRocketMQMessage(Message jmsMsg) throws JMSException { - AbstractJMSMessage abstractJMSMessage = convert2Object(jmsMsg, AbstractJMSMessage.class); + AbstractJMSMessage abstractJMSMessage = cast2Object(jmsMsg, AbstractJMSMessage.class); try { return JMS2RMQMessageConvert.convert(abstractJMSMessage); } @@ -239,4 +243,19 @@ public class RocketMQProducer implements MessageProducer { sendAsync(rmqMsg, completionListener); } + public void setSession(RocketMQSession session) { + this.session = session; + } + + public void setRocketMQProducer(DefaultMQProducer rocketMQProducer) { + this.rocketMQProducer = rocketMQProducer; + } + + public void setDestination(Destination destination) { + this.destination = destination; + } + + public void setSendMessageHook(SendMessageHook sendMessageHook) { + this.sendMessageHook = sendMessageHook; + } } http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/main/java/org/apache/rocketmq/jms/exception/UnsupportDeliveryModelException.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/rocketmq/jms/exception/UnsupportDeliveryModelException.java b/core/src/main/java/org/apache/rocketmq/jms/exception/UnsupportDeliveryModelException.java new file mode 100644 index 0000000..903b75f --- /dev/null +++ b/core/src/main/java/org/apache/rocketmq/jms/exception/UnsupportDeliveryModelException.java @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.rocketmq.jms.exception; + +import javax.jms.JMSRuntimeException; + +public class UnsupportDeliveryModelException extends JMSRuntimeException { + + public UnsupportDeliveryModelException() { + super("Only support PERSISTENT model, and guarantee at-least-once"); + } +} http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/main/java/org/apache/rocketmq/jms/hook/SendMessageHook.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/rocketmq/jms/hook/SendMessageHook.java b/core/src/main/java/org/apache/rocketmq/jms/hook/SendMessageHook.java index e11c9fb..fcd0579 100644 --- a/core/src/main/java/org/apache/rocketmq/jms/hook/SendMessageHook.java +++ b/core/src/main/java/org/apache/rocketmq/jms/hook/SendMessageHook.java @@ -22,6 +22,8 @@ import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import org.apache.rocketmq.jms.RocketMQProducer; +import org.apache.rocketmq.jms.exception.UnsupportDeliveryModelException; +import org.apache.rocketmq.jms.msg.enums.JMSHeaderEnum; import static org.apache.rocketmq.jms.Constant.MESSAGE_ID_PREFIX; @@ -32,12 +34,24 @@ public class SendMessageHook { private RocketMQProducer producer; + public SendMessageHook() { + } + public SendMessageHook(RocketMQProducer producer) { this.producer = producer; } public void before(Message message, Destination destination, int deliveryMode, int priority, long timeToLive) throws JMSException { + + validate(deliveryMode); + + setHeader(message, destination, deliveryMode, priority, timeToLive); + + } + + private void setHeader(Message message, Destination destination, int deliveryMode, int priority, + long timeToLive) throws JMSException { // destination message.setJMSDestination(destination); @@ -68,4 +82,14 @@ public class SendMessageHook { message.setJMSTimestamp(System.currentTimeMillis()); } } + + private void validate(int deliveryMode) { + if (deliveryMode != JMSHeaderEnum.JMS_DELIVERY_MODE_DEFAULT_VALUE) { + throw new UnsupportDeliveryModelException(); + } + } + + public void setProducer(RocketMQProducer producer) { + this.producer = producer; + } } http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/main/java/org/apache/rocketmq/jms/msg/AbstractJMSMessage.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/rocketmq/jms/msg/AbstractJMSMessage.java b/core/src/main/java/org/apache/rocketmq/jms/msg/AbstractJMSMessage.java index 226c51b..fecff14 100644 --- a/core/src/main/java/org/apache/rocketmq/jms/msg/AbstractJMSMessage.java +++ b/core/src/main/java/org/apache/rocketmq/jms/msg/AbstractJMSMessage.java @@ -45,11 +45,11 @@ import static org.apache.rocketmq.jms.msg.enums.JMSHeaderEnum.JMS_EXPIRATION_DEF import static org.apache.rocketmq.jms.msg.enums.JMSHeaderEnum.JMS_PRIORITY_DEFAULT_VALUE; import static org.apache.rocketmq.jms.msg.enums.JMSHeaderEnum.JMS_REDELIVERED_DEFAULT_VALUE; import static org.apache.rocketmq.jms.msg.enums.JMSHeaderEnum.JMS_TIMESTAMP_DEFAULT_VALUE; -import static org.apache.rocketmq.jms.support.DirectTypeConverter.convert2Boolean; -import static org.apache.rocketmq.jms.support.DirectTypeConverter.convert2Integer; -import static org.apache.rocketmq.jms.support.DirectTypeConverter.convert2Long; -import static org.apache.rocketmq.jms.support.DirectTypeConverter.convert2Object; -import static org.apache.rocketmq.jms.support.DirectTypeConverter.convert2String; +import static org.apache.rocketmq.jms.support.ObjectTypeCast.cast2Boolean; +import static org.apache.rocketmq.jms.support.ObjectTypeCast.cast2Integer; +import static org.apache.rocketmq.jms.support.ObjectTypeCast.cast2Long; +import static org.apache.rocketmq.jms.support.ObjectTypeCast.cast2Object; +import static org.apache.rocketmq.jms.support.ObjectTypeCast.cast2String; public abstract class AbstractJMSMessage implements javax.jms.Message { @@ -60,7 +60,7 @@ public abstract class AbstractJMSMessage implements javax.jms.Message { @Override public String getJMSMessageID() { - return convert2String(headers.get(JMSMessageID)); + return cast2String(headers.get(JMSMessageID)); } @Override @@ -71,7 +71,7 @@ public abstract class AbstractJMSMessage implements javax.jms.Message { @Override public long getJMSTimestamp() { if (headers.containsKey(JMSTimestamp)) { - return convert2Long(headers.get(JMSTimestamp)); + return cast2Long(headers.get(JMSTimestamp)); } return JMS_TIMESTAMP_DEFAULT_VALUE; } @@ -103,7 +103,7 @@ public abstract class AbstractJMSMessage implements javax.jms.Message { @Override public String getJMSCorrelationID() { - return convert2String(headers.get(JMSCorrelationID)); + return cast2String(headers.get(JMSCorrelationID)); } @Override @@ -113,7 +113,7 @@ public abstract class AbstractJMSMessage implements javax.jms.Message { @Override public Destination getJMSReplyTo() { - return convert2Object(headers.get(JMSReplyTo), Destination.class); + return cast2Object(headers.get(JMSReplyTo), Destination.class); } @Override @@ -128,7 +128,7 @@ public abstract class AbstractJMSMessage implements javax.jms.Message { @Override public Destination getJMSDestination() { - return convert2Object(headers.get(JMSDestination), Destination.class); + return cast2Object(headers.get(JMSDestination), Destination.class); } @Override @@ -144,7 +144,7 @@ public abstract class AbstractJMSMessage implements javax.jms.Message { @Override public int getJMSDeliveryMode() { if (headers.containsKey(JMSDeliveryMode)) { - return convert2Integer(headers.get(JMSDeliveryMode)); + return cast2Integer(headers.get(JMSDeliveryMode)); } return JMS_DELIVERY_MODE_DEFAULT_VALUE; } @@ -157,7 +157,7 @@ public abstract class AbstractJMSMessage implements javax.jms.Message { @Override public boolean getJMSRedelivered() { if (headers.containsKey(JMSRedelivered)) { - return convert2Boolean(headers.get(JMSRedelivered)); + return cast2Boolean(headers.get(JMSRedelivered)); } return JMS_REDELIVERED_DEFAULT_VALUE; } @@ -169,7 +169,7 @@ public abstract class AbstractJMSMessage implements javax.jms.Message { @Override public String getJMSType() { - return convert2String(headers.get(JMSType)); + return cast2String(headers.get(JMSType)); } @Override @@ -184,7 +184,7 @@ public abstract class AbstractJMSMessage implements javax.jms.Message { @Override public long getJMSExpiration() { if (headers.containsKey(JMSExpiration)) { - return convert2Long(headers.get(JMSExpiration)); + return cast2Long(headers.get(JMSExpiration)); } return JMS_EXPIRATION_DEFAULT_VALUE; } @@ -197,7 +197,7 @@ public abstract class AbstractJMSMessage implements javax.jms.Message { @Override public int getJMSPriority() { if (headers.containsKey(JMSPriority)) { - return convert2Integer(headers.get(JMSPriority)); + return cast2Integer(headers.get(JMSPriority)); } return JMS_PRIORITY_DEFAULT_VALUE; } @@ -210,7 +210,7 @@ public abstract class AbstractJMSMessage implements javax.jms.Message { @Override public long getJMSDeliveryTime() throws JMSException { if (headers.containsKey(JMSDeliveryTime)) { - return convert2Long(headers.get(JMSDeliveryTime)); + return cast2Long(headers.get(JMSDeliveryTime)); } return JMS_DELIVERY_TIME_DEFAULT_VALUE; } http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/main/java/org/apache/rocketmq/jms/msg/JMSBytesMessage.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/rocketmq/jms/msg/JMSBytesMessage.java b/core/src/main/java/org/apache/rocketmq/jms/msg/JMSBytesMessage.java index 169088c..a409118 100644 --- a/core/src/main/java/org/apache/rocketmq/jms/msg/JMSBytesMessage.java +++ b/core/src/main/java/org/apache/rocketmq/jms/msg/JMSBytesMessage.java @@ -30,7 +30,7 @@ import javax.jms.MessageEOFException; import javax.jms.MessageFormatException; import javax.jms.MessageNotReadableException; import javax.jms.MessageNotWriteableException; -import org.apache.rocketmq.jms.support.JmsHelper; +import org.apache.rocketmq.jms.support.PrimitiveTypeCast; import static java.lang.String.format; @@ -429,7 +429,16 @@ public class JMSBytesMessage extends AbstractJMSMessage implements javax.jms.Byt checkIsWriteOnly(); initializeWriteIfNecessary(); - JmsHelper.handleUnSupportedException(); + if (!PrimitiveTypeCast.isPrimitiveType(value)) { + throw new JMSException("Object must be primitive type"); + } + + try { + dataAsOutput.writeBytes(String.valueOf(value)); + } + catch (IOException e) { + throw handleOutputException(e); + } } public void reset() throws JMSException { http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/main/java/org/apache/rocketmq/jms/msg/JMSMapMessage.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/rocketmq/jms/msg/JMSMapMessage.java b/core/src/main/java/org/apache/rocketmq/jms/msg/JMSMapMessage.java index d10247f..dddfb58 100644 --- a/core/src/main/java/org/apache/rocketmq/jms/msg/JMSMapMessage.java +++ b/core/src/main/java/org/apache/rocketmq/jms/msg/JMSMapMessage.java @@ -29,16 +29,16 @@ import org.apache.commons.lang.StringUtils; import org.apache.rocketmq.jms.msg.serialize.MapSerialize; import static java.lang.String.format; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Boolean; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Byte; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2ByteArray; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Char; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Double; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Float; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Int; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Long; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Short; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2String; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Boolean; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Byte; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2ByteArray; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Char; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Double; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Float; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Int; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Long; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Short; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2String; /** * Message can only be accessed by a thread at a time. @@ -76,7 +76,7 @@ public class JMSMapMessage extends AbstractJMSMessage implements MapMessage { @Override public boolean getBoolean(String name) throws JMSException { checkName(name); - return convert2Boolean(map.get(name)); + return cast2Boolean(map.get(name)); } private void checkName(String name) throws JMSException { @@ -88,55 +88,55 @@ public class JMSMapMessage extends AbstractJMSMessage implements MapMessage { @Override public byte getByte(String name) throws JMSException { checkName(name); - return convert2Byte(map.get(name)); + return cast2Byte(map.get(name)); } @Override public short getShort(String name) throws JMSException { checkName(name); - return convert2Short(map.get(name)); + return cast2Short(map.get(name)); } @Override public char getChar(String name) throws JMSException { checkName(name); - return convert2Char(map.get(name)); + return cast2Char(map.get(name)); } @Override public int getInt(String name) throws JMSException { checkName(name); - return convert2Int(map.get(name)); + return cast2Int(map.get(name)); } @Override public long getLong(String name) throws JMSException { checkName(name); - return convert2Long(map.get(name)); + return cast2Long(map.get(name)); } @Override public float getFloat(String name) throws JMSException { checkName(name); - return convert2Float(map.get(name)); + return cast2Float(map.get(name)); } @Override public double getDouble(String name) throws JMSException { checkName(name); - return convert2Double(map.get(name)); + return cast2Double(map.get(name)); } @Override public String getString(String name) throws JMSException { checkName(name); - return convert2String(map.get(name)); + return cast2String(map.get(name)); } @Override public byte[] getBytes(String name) throws JMSException { checkName(name); - return convert2ByteArray(map.get(name)); + return cast2ByteArray(map.get(name)); } @Override public Object getObject(String name) throws JMSException { http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/main/java/org/apache/rocketmq/jms/support/DirectTypeConverter.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/rocketmq/jms/support/DirectTypeConverter.java b/core/src/main/java/org/apache/rocketmq/jms/support/DirectTypeConverter.java deleted file mode 100644 index eb4c967..0000000 --- a/core/src/main/java/org/apache/rocketmq/jms/support/DirectTypeConverter.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.rocketmq.jms.support; - -/** - * Converter that convert object directly, which means Integer can only be - * converted to Integer,rather than Integer and Long. - */ -public class DirectTypeConverter { - - public static String convert2String(Object obj) { - if (obj == null) { - return null; - } - if (String.class.isInstance(obj)) { - return (String) obj; - } - throw new ClassCastException("To converted object is " + obj.getClass() + ", not String.class"); - } - - public static Long convert2Long(Object obj) { - if (obj == null) { - return null; - } - if (Long.class.isInstance(obj)) { - return (Long) obj; - } - throw new ClassCastException("To converted object is " + obj.getClass() + ", not Long.class"); - } - - public static Integer convert2Integer(Object obj) { - if (obj == null) { - return null; - } - if (Integer.class.isInstance(obj)) { - return (Integer) obj; - } - throw new ClassCastException("To converted object is " + obj.getClass() + ", not Integer.class"); - } - - public static Boolean convert2Boolean(Object obj) { - if (obj == null) { - return null; - } - if (Boolean.class.isInstance(obj)) { - return (Boolean) obj; - } - throw new ClassCastException("To converted object is " + obj.getClass() + ", not Boolean.class"); - } - - public static <T> T convert2Object(Object obj, Class<T> target) { - if (obj == null) { - return null; - } - if (target.isInstance(obj)) { - return (T) obj; - } - throw new ClassCastException("To converted object is " + obj.getClass() + ", not " + target.getSimpleName() + ".class"); - } -} http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/main/java/org/apache/rocketmq/jms/support/JmsHelper.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/rocketmq/jms/support/JmsHelper.java b/core/src/main/java/org/apache/rocketmq/jms/support/JmsHelper.java deleted file mode 100644 index 4648eb0..0000000 --- a/core/src/main/java/org/apache/rocketmq/jms/support/JmsHelper.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.rocketmq.jms.support; - -import java.util.UUID; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.JMSRuntimeException; -import javax.jms.Queue; -import javax.jms.Topic; - -public class JmsHelper { - - public static final boolean SKIP_SET_EXCEPTION - = Boolean.parseBoolean(System.getProperty("skip.set.exception", "false")); - - public static String getTopicName(Destination destination) { - try { - String topicName; - if (destination instanceof Topic) { - topicName = ((Topic) destination).getTopicName(); - } - else if (destination instanceof Queue) { - topicName = ((Queue) destination).getQueueName(); - } - else { - throw new JMSException(String.format("Unsupported Destination type:", destination.getClass())); - } - return topicName; - } - catch (JMSException e) { - throw new JMSRuntimeException(e.getMessage()); - } - } - - public static void handleUnSupportedException() { - if (!SKIP_SET_EXCEPTION) { - throw new UnsupportedOperationException("Operation unsupported! If you want to skip this Exception," + - " use '-Dskip.set.exception=true' in JVM options."); - } - } - - public static String uuid() { - return UUID.randomUUID().toString(); - } -} http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/main/java/org/apache/rocketmq/jms/support/JmsUtils.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/rocketmq/jms/support/JmsUtils.java b/core/src/main/java/org/apache/rocketmq/jms/support/JmsUtils.java new file mode 100644 index 0000000..af56544 --- /dev/null +++ b/core/src/main/java/org/apache/rocketmq/jms/support/JmsUtils.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.rocketmq.jms.support; + +import java.util.UUID; +import javax.jms.Destination; +import javax.jms.JMSException; +import javax.jms.JMSRuntimeException; +import javax.jms.Queue; +import javax.jms.Topic; + +public class JmsUtils { + + public static String getTopicName(Destination destination) { + try { + String topicName; + if (destination instanceof Topic) { + topicName = ((Topic) destination).getTopicName(); + } + else if (destination instanceof Queue) { + topicName = ((Queue) destination).getQueueName(); + } + else { + throw new JMSException(String.format("Unsupported Destination type:", destination.getClass())); + } + return topicName; + } + catch (JMSException e) { + throw new JMSRuntimeException(e.getMessage()); + } + } + + + public static String uuid() { + return UUID.randomUUID().toString(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/main/java/org/apache/rocketmq/jms/support/ObjectTypeCast.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/rocketmq/jms/support/ObjectTypeCast.java b/core/src/main/java/org/apache/rocketmq/jms/support/ObjectTypeCast.java new file mode 100644 index 0000000..15d3190 --- /dev/null +++ b/core/src/main/java/org/apache/rocketmq/jms/support/ObjectTypeCast.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.rocketmq.jms.support; + +/** + * Converter that convert object directly, which means Integer can only be + * converted to Integer,rather than Integer and Long. + */ +public class ObjectTypeCast { + + public static String cast2String(Object obj) { + if (obj == null) { + return null; + } + if (String.class.isInstance(obj)) { + return (String) obj; + } + throw new ClassCastException("To converted object is " + obj.getClass() + ", not String.class"); + } + + public static Long cast2Long(Object obj) { + if (obj == null) { + return null; + } + if (Long.class.isInstance(obj)) { + return (Long) obj; + } + throw new ClassCastException("To converted object is " + obj.getClass() + ", not Long.class"); + } + + public static Integer cast2Integer(Object obj) { + if (obj == null) { + return null; + } + if (Integer.class.isInstance(obj)) { + return (Integer) obj; + } + throw new ClassCastException("To converted object is " + obj.getClass() + ", not Integer.class"); + } + + public static Boolean cast2Boolean(Object obj) { + if (obj == null) { + return null; + } + if (Boolean.class.isInstance(obj)) { + return (Boolean) obj; + } + throw new ClassCastException("To converted object is " + obj.getClass() + ", not Boolean.class"); + } + + public static <T> T cast2Object(Object obj, Class<T> target) { + if (obj == null) { + return null; + } + if (target.isInstance(obj)) { + return (T) obj; + } + throw new ClassCastException("To converted object is " + obj.getClass() + ", not " + target.getSimpleName() + ".class"); + } +} http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/main/java/org/apache/rocketmq/jms/support/PrimitiveTypeCast.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/rocketmq/jms/support/PrimitiveTypeCast.java b/core/src/main/java/org/apache/rocketmq/jms/support/PrimitiveTypeCast.java new file mode 100644 index 0000000..c6cda19 --- /dev/null +++ b/core/src/main/java/org/apache/rocketmq/jms/support/PrimitiveTypeCast.java @@ -0,0 +1,220 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.rocketmq.jms.support; + +import javax.jms.JMSException; +import javax.jms.MapMessage; + +/** + * Primitive type converter, according to the conversion table in {@link MapMessage}. + */ +public class PrimitiveTypeCast { + + /** + * Indicate if the parameter obj is primitive type. + * + * @param obj that to be check + * @return true if the obj is primitive type, otherwise return false + */ + public static boolean isPrimitiveType(Object obj) { + if (obj == null) { + return false; + } + if (Boolean.class.isInstance(obj) + || Byte.class.isInstance(obj) + || Short.class.isInstance(obj) + || Character.class.isInstance(obj) + || Integer.class.isInstance(obj) + || Long.class.isInstance(obj) + || Float.class.isInstance(obj) + || Double.class.isInstance(obj) + || String.class.isInstance(obj) + || byte[].class.isInstance(obj)) { + return true; + } + + return false; + } + + public static boolean cast2Boolean(Object obj) throws JMSException { + if (obj == null) { + return Boolean.valueOf(null); + } + + if (Boolean.class.isInstance(obj)) { + return (Boolean) obj; + } + if (String.class.isInstance(obj)) { + return Boolean.valueOf((String) obj); + } + + throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); + } + + public static byte cast2Byte(Object obj) throws JMSException { + if (obj == null) { + return Byte.valueOf(null); + } + + if (Byte.class.isInstance(obj)) { + return (Byte) obj; + } + if (String.class.isInstance(obj)) { + return Byte.valueOf((String) obj); + } + + throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); + } + + public static short cast2Short(Object obj) throws JMSException { + if (obj == null) { + return Short.valueOf(null); + } + + if (Byte.class.isInstance(obj)) { + return ((Byte) obj).shortValue(); + } + if (Short.class.isInstance(obj)) { + return (Short) obj; + } + if (String.class.isInstance(obj)) { + return Short.valueOf((String) obj); + } + + throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); + } + + public static char cast2Char(Object obj) throws JMSException { + if (obj == null) { + throw new NullPointerException("Obj is required"); + } + + if (Character.class.isInstance(obj)) { + return (Character) obj; + } + + throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); + } + + public static int cast2Int(Object obj) throws JMSException { + if (obj == null) { + return Integer.valueOf(null); + } + + if (Byte.class.isInstance(obj)) { + return ((Byte) obj).intValue(); + } + if (Short.class.isInstance(obj)) { + return ((Short) obj).intValue(); + } + if (Integer.class.isInstance(obj)) { + return (Integer) obj; + } + if (String.class.isInstance(obj)) { + return Integer.parseInt((String) obj); + } + + throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); + } + + public static long cast2Long(Object obj) throws JMSException { + if (obj == null) { + return Long.valueOf(null); + } + + if (Byte.class.isInstance(obj)) { + return ((Byte) obj).longValue(); + } + if (Short.class.isInstance(obj)) { + return ((Short) obj).longValue(); + } + if (Integer.class.isInstance(obj)) { + return ((Integer) obj).longValue(); + } + if (Long.class.isInstance(obj)) { + return (Long) obj; + } + if (String.class.isInstance(obj)) { + return Long.parseLong((String) obj); + } + + throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); + } + + public static float cast2Float(Object obj) throws JMSException { + if (obj == null) { + return Float.valueOf(null); + } + + if (Float.class.isInstance(obj)) { + return (Float) obj; + } + if (String.class.isInstance(obj)) { + return Float.parseFloat((String) obj); + } + + throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); + } + + public static double cast2Double(Object obj) throws JMSException { + if (obj == null) { + return Double.valueOf(null); + } + + if (Float.class.isInstance(obj)) { + return ((Float) obj).doubleValue(); + } + if (Double.class.isInstance(obj)) { + return (Double) obj; + } + if (String.class.isInstance(obj)) { + return Double.parseDouble((String) obj); + } + + throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); + } + + public static String cast2String(Object obj) throws JMSException { + if (obj == null) { + return String.valueOf(null); + } + + if (Boolean.class.isInstance(obj) + || Byte.class.isInstance(obj) + || Short.class.isInstance(obj) + || Character.class.isInstance(obj) + || Integer.class.isInstance(obj) + || Long.class.isInstance(obj) + || Float.class.isInstance(obj) + || Double.class.isInstance(obj) + || String.class.isInstance(obj) + ) { + return obj.toString(); + } + + throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); + } + + public static byte[] cast2ByteArray(Object obj) throws JMSException { + if (obj instanceof byte[]) { + return (byte[]) obj; + } + + throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); + } +} http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/main/java/org/apache/rocketmq/jms/support/PrimitiveTypeConverter.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/rocketmq/jms/support/PrimitiveTypeConverter.java b/core/src/main/java/org/apache/rocketmq/jms/support/PrimitiveTypeConverter.java deleted file mode 100644 index 6d51eee..0000000 --- a/core/src/main/java/org/apache/rocketmq/jms/support/PrimitiveTypeConverter.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.rocketmq.jms.support; - -import javax.jms.JMSException; -import javax.jms.MapMessage; - -/** - * Primitive type converter, according to the conversion table in {@link MapMessage}. - */ -public class PrimitiveTypeConverter { - - public static boolean convert2Boolean(Object obj) throws JMSException { - if (obj == null) { - return Boolean.valueOf(null); - } - - if (Boolean.class.isInstance(obj)) { - return (Boolean) obj; - } - if (String.class.isInstance(obj)) { - return Boolean.valueOf((String) obj); - } - - throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); - } - - public static byte convert2Byte(Object obj) throws JMSException { - if (obj == null) { - return Byte.valueOf(null); - } - - if (Byte.class.isInstance(obj)) { - return (Byte) obj; - } - if (String.class.isInstance(obj)) { - return Byte.valueOf((String) obj); - } - - throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); - } - - public static short convert2Short(Object obj) throws JMSException { - if (obj == null) { - return Short.valueOf(null); - } - - if (Byte.class.isInstance(obj)) { - return ((Byte) obj).shortValue(); - } - if (Short.class.isInstance(obj)) { - return (Short) obj; - } - if (String.class.isInstance(obj)) { - return Short.valueOf((String) obj); - } - - throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); - } - - public static char convert2Char(Object obj) throws JMSException { - if (obj == null) { - throw new NullPointerException("Obj is required"); - } - - if (Character.class.isInstance(obj)) { - return (Character) obj; - } - - throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); - } - - public static int convert2Int(Object obj) throws JMSException { - if (obj == null) { - return Integer.valueOf(null); - } - - if (Byte.class.isInstance(obj)) { - return ((Byte) obj).intValue(); - } - if (Short.class.isInstance(obj)) { - return ((Short) obj).intValue(); - } - if (Integer.class.isInstance(obj)) { - return (Integer) obj; - } - if (String.class.isInstance(obj)) { - return Integer.parseInt((String) obj); - } - - throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); - } - - public static long convert2Long(Object obj) throws JMSException { - if (obj == null) { - return Long.valueOf(null); - } - - if (Byte.class.isInstance(obj)) { - return ((Byte) obj).longValue(); - } - if (Short.class.isInstance(obj)) { - return ((Short) obj).longValue(); - } - if (Integer.class.isInstance(obj)) { - return ((Integer) obj).longValue(); - } - if (Long.class.isInstance(obj)) { - return (Long) obj; - } - if (String.class.isInstance(obj)) { - return Long.parseLong((String) obj); - } - - throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); - } - - public static float convert2Float(Object obj) throws JMSException { - if (obj == null) { - return Float.valueOf(null); - } - - if (Float.class.isInstance(obj)) { - return (Float) obj; - } - if (String.class.isInstance(obj)) { - return Float.parseFloat((String) obj); - } - - throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); - } - - public static double convert2Double(Object obj) throws JMSException { - if (obj == null) { - return Double.valueOf(null); - } - - if (Float.class.isInstance(obj)) { - return ((Float) obj).doubleValue(); - } - if (Double.class.isInstance(obj)) { - return (Double) obj; - } - if (String.class.isInstance(obj)) { - return Double.parseDouble((String) obj); - } - - throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); - } - - public static String convert2String(Object obj) throws JMSException { - if (obj == null) { - return String.valueOf(null); - } - - if (Boolean.class.isInstance(obj) - || Byte.class.isInstance(obj) - || Short.class.isInstance(obj) - || Character.class.isInstance(obj) - || Integer.class.isInstance(obj) - || Long.class.isInstance(obj) - || Float.class.isInstance(obj) - || Double.class.isInstance(obj) - || String.class.isInstance(obj) - ) { - return obj.toString(); - } - - throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); - } - - public static byte[] convert2ByteArray(Object obj) throws JMSException { - if (obj instanceof byte[]) { - return (byte[]) obj; - } - - throw new JMSException("Incorrect type[" + obj.getClass() + "] to convert"); - } -} http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/test/java/org/apache/rocketmq/jms/hook/SendMessageHookTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/rocketmq/jms/hook/SendMessageHookTest.java b/core/src/test/java/org/apache/rocketmq/jms/hook/SendMessageHookTest.java new file mode 100644 index 0000000..2d1afcc --- /dev/null +++ b/core/src/test/java/org/apache/rocketmq/jms/hook/SendMessageHookTest.java @@ -0,0 +1,94 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.rocketmq.jms.hook; + +import javax.jms.DeliveryMode; +import javax.jms.Destination; +import org.apache.rocketmq.jms.RocketMQProducer; +import org.apache.rocketmq.jms.RocketMQTopic; +import org.apache.rocketmq.jms.exception.UnsupportDeliveryModelException; +import org.apache.rocketmq.jms.msg.JMSTextMessage; +import org.apache.rocketmq.jms.msg.enums.JMSHeaderEnum; +import org.junit.Test; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; +import static org.hamcrest.core.IsNot.not; +import static org.hamcrest.core.IsNull.notNullValue; +import static org.hamcrest.core.IsNull.nullValue; + +public class SendMessageHookTest { + + @Test(expected = UnsupportDeliveryModelException.class) + public void testValidate() throws Exception { + final JMSTextMessage message = new JMSTextMessage("text"); + final RocketMQTopic destination = new RocketMQTopic("destination"); + final int deliveryMode = DeliveryMode.NON_PERSISTENT; + final int priority = 4; + final long timeToLive = 1000 * 100L; + + SendMessageHook hook = new SendMessageHook(); + hook.before(message, destination, deliveryMode, priority, timeToLive); + } + + @Test + public void testSetHeader() throws Exception { + RocketMQProducer producer = new RocketMQProducer(); + producer.setDeliveryDelay(0L); + + final JMSTextMessage message = new JMSTextMessage("text"); + final Destination destination = new RocketMQTopic("destination"); + final int deliveryMode = DeliveryMode.PERSISTENT; + final int priority = 5; + long timeToLive = JMSHeaderEnum.JMS_TIME_TO_LIVE_DEFAULT_VALUE; + SendMessageHook hook = new SendMessageHook(producer); + hook.before(message, destination, deliveryMode, priority, timeToLive); + + assertThat(message.getJMSDestination(), is(destination)); + assertThat(message.getJMSDeliveryMode(), is(JMSHeaderEnum.JMS_DELIVERY_MODE_DEFAULT_VALUE)); + assertThat(message.getJMSExpiration(), is(0L)); + assertThat(message.getJMSDeliveryTime(), notNullValue()); + assertThat(message.getJMSPriority(), is(5)); + assertThat(message.getJMSMessageID(), notNullValue()); + assertThat(message.getJMSTimestamp(), notNullValue()); + } + + /** + * Disable ID,timestamp, and set expired time + * + * @throws Exception + */ + @Test + public void testSetHeader2() throws Exception { + RocketMQProducer producer = new RocketMQProducer(); + producer.setDisableMessageID(true); + producer.setDisableMessageTimestamp(true); + + final JMSTextMessage message = new JMSTextMessage("text"); + final Destination destination = new RocketMQTopic("destination"); + final int deliveryMode = DeliveryMode.PERSISTENT; + final int priority = 5; + final long timeToLive = 1000 * 100L; + SendMessageHook hook = new SendMessageHook(producer); + hook.before(message, destination, deliveryMode, priority, timeToLive); + + assertThat(message.getJMSMessageID(), nullValue()); + assertThat(message.getJMSTimestamp(), is(0L)); + assertThat(message.getJMSExpiration(), not(is(0L))); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/test/java/org/apache/rocketmq/jms/msg/JMSBytesMessageTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/rocketmq/jms/msg/JMSBytesMessageTest.java b/core/src/test/java/org/apache/rocketmq/jms/msg/JMSBytesMessageTest.java index a56602c..20520f6 100644 --- a/core/src/test/java/org/apache/rocketmq/jms/msg/JMSBytesMessageTest.java +++ b/core/src/test/java/org/apache/rocketmq/jms/msg/JMSBytesMessageTest.java @@ -51,7 +51,6 @@ public class JMSBytesMessageTest { byte[] receiveValue = new byte[receiveData.length]; msg.readBytes(receiveValue); assertThat(new String(receiveValue), is(new String(receiveData))); - } @Test http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/test/java/org/apache/rocketmq/jms/support/DirectTypeConverterTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/rocketmq/jms/support/DirectTypeConverterTest.java b/core/src/test/java/org/apache/rocketmq/jms/support/DirectTypeConverterTest.java index 93b0d03..2ea70f0 100644 --- a/core/src/test/java/org/apache/rocketmq/jms/support/DirectTypeConverterTest.java +++ b/core/src/test/java/org/apache/rocketmq/jms/support/DirectTypeConverterTest.java @@ -26,27 +26,27 @@ public class DirectTypeConverterTest { @Test public void testConvert2String() throws Exception { - assertThat(DirectTypeConverter.convert2String("name"), is("name")); + assertThat(ObjectTypeCast.cast2String("name"), is("name")); } @Test public void testConvert2Long() throws Exception { - assertThat(DirectTypeConverter.convert2Long(100l), is(100l)); + assertThat(ObjectTypeCast.cast2Long(100l), is(100l)); } @Test public void testConvert2Integer() throws Exception { - assertThat(DirectTypeConverter.convert2Integer(100), is(100)); + assertThat(ObjectTypeCast.cast2Integer(100), is(100)); } @Test public void testConvert2Boolean() throws Exception { - assertThat(DirectTypeConverter.convert2Boolean(true), is(true)); + assertThat(ObjectTypeCast.cast2Boolean(true), is(true)); } @Test public void testConvert2Object() throws Exception { - final DirectTypeConverter obj = new DirectTypeConverter(); - assertThat(DirectTypeConverter.convert2Object(obj, DirectTypeConverter.class), is(obj)); + final ObjectTypeCast obj = new ObjectTypeCast(); + assertThat(ObjectTypeCast.cast2Object(obj, ObjectTypeCast.class), is(obj)); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-externals/blob/fb50854e/core/src/test/java/org/apache/rocketmq/jms/support/PrimitiveTypeConvertTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/rocketmq/jms/support/PrimitiveTypeConvertTest.java b/core/src/test/java/org/apache/rocketmq/jms/support/PrimitiveTypeConvertTest.java index c6a3aad..e297b46 100644 --- a/core/src/test/java/org/apache/rocketmq/jms/support/PrimitiveTypeConvertTest.java +++ b/core/src/test/java/org/apache/rocketmq/jms/support/PrimitiveTypeConvertTest.java @@ -21,16 +21,16 @@ import java.util.Date; import javax.jms.JMSException; import org.junit.Test; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Boolean; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Byte; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2ByteArray; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Char; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Double; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Float; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Int; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Long; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2Short; -import static org.apache.rocketmq.jms.support.PrimitiveTypeConverter.convert2String; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Boolean; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Byte; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2ByteArray; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Char; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Double; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Float; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Int; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Long; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2Short; +import static org.apache.rocketmq.jms.support.PrimitiveTypeCast.cast2String; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -39,14 +39,14 @@ public class PrimitiveTypeConvertTest { @Test public void testConvert2Boolean() throws Exception { - assertThat(convert2Boolean(new Boolean(true)), is(true)); - assertThat(convert2Boolean(null), is(false)); + assertThat(cast2Boolean(new Boolean(true)), is(true)); + assertThat(cast2Boolean(null), is(false)); - assertThat(convert2Boolean("true"), is(true)); - assertThat(convert2Boolean("hello"), is(false)); + assertThat(cast2Boolean("true"), is(true)); + assertThat(cast2Boolean("hello"), is(false)); try { - convert2Boolean(new Date()); + cast2Boolean(new Date()); assertTrue(false); } catch (JMSException e) { @@ -57,11 +57,11 @@ public class PrimitiveTypeConvertTest { @Test public void testConvert2Byte() throws Exception { final byte b = Byte.parseByte("101", 2); - assertThat(convert2Byte(b), is(b)); + assertThat(cast2Byte(b), is(b)); - assertThat(convert2Byte(new String("5")), is(b)); + assertThat(cast2Byte(new String("5")), is(b)); try { - assertThat(convert2Byte(null), is(b)); + assertThat(cast2Byte(null), is(b)); assertTrue(false); } catch (RuntimeException e) { @@ -69,7 +69,7 @@ public class PrimitiveTypeConvertTest { } try { - convert2Byte("abc"); + cast2Byte("abc"); assertTrue(false); } catch (RuntimeException e) { @@ -77,7 +77,7 @@ public class PrimitiveTypeConvertTest { } try { - convert2Byte(new Date()); + cast2Byte(new Date()); assertTrue(false); } catch (JMSException e) { @@ -88,12 +88,12 @@ public class PrimitiveTypeConvertTest { @Test public void testConvert2Short() throws Exception { final Short s = new Short("12"); - assertThat(convert2Short(s), is(s)); + assertThat(cast2Short(s), is(s)); - assertThat(convert2Short("3"), is(new Short("3"))); + assertThat(cast2Short("3"), is(new Short("3"))); try { - convert2Short(new Date()); + cast2Short(new Date()); assertTrue(false); } catch (JMSException e) { @@ -104,10 +104,10 @@ public class PrimitiveTypeConvertTest { @Test public void testConvert2Char() throws Exception { final char c = 'a'; - assertThat(convert2Char(c), is(c)); + assertThat(cast2Char(c), is(c)); try { - convert2Char("a"); + cast2Char("a"); assertTrue(false); } catch (JMSException e) { @@ -117,13 +117,13 @@ public class PrimitiveTypeConvertTest { @Test public void testConvert2Int() throws Exception { - assertThat(convert2Int(12), is(12)); + assertThat(cast2Int(12), is(12)); - assertThat(convert2Int("12"), is(12)); - assertThat(convert2Int(Byte.parseByte("11", 2)), is(3)); + assertThat(cast2Int("12"), is(12)); + assertThat(cast2Int(Byte.parseByte("11", 2)), is(3)); try { - convert2Int(new Date()); + cast2Int(new Date()); assertTrue(false); } catch (JMSException e) { @@ -133,12 +133,12 @@ public class PrimitiveTypeConvertTest { @Test public void testConvert2Long() throws Exception { - assertThat(convert2Long(12), is(12l)); + assertThat(cast2Long(12), is(12l)); - assertThat(convert2Long("12"), is(12l)); + assertThat(cast2Long("12"), is(12l)); try { - convert2Int(new Date()); + cast2Int(new Date()); assertTrue(false); } catch (JMSException e) { @@ -148,12 +148,12 @@ public class PrimitiveTypeConvertTest { @Test public void testConvert2Float() throws Exception { - assertThat(convert2Float(12.00f), is(12f)); + assertThat(cast2Float(12.00f), is(12f)); - assertThat(convert2Float("12.00"), is(12f)); + assertThat(cast2Float("12.00"), is(12f)); try { - convert2Float(12); + cast2Float(12); assertTrue(false); } catch (JMSException e) { @@ -163,13 +163,13 @@ public class PrimitiveTypeConvertTest { @Test public void testConvert2Double() throws Exception { - assertThat(convert2Double(12.00d), is(12d)); + assertThat(cast2Double(12.00d), is(12d)); - assertThat(convert2Double("12.00"), is(12d)); - assertThat(convert2Double(12.00f), is(12d)); + assertThat(cast2Double("12.00"), is(12d)); + assertThat(cast2Double(12.00f), is(12d)); try { - convert2Double(12); + cast2Double(12); assertTrue(false); } catch (JMSException e) { @@ -179,13 +179,13 @@ public class PrimitiveTypeConvertTest { @Test public void testConvert2String() throws Exception { - assertThat(convert2String(12.00d), is("12.0")); + assertThat(cast2String(12.00d), is("12.0")); - assertThat(convert2String("12.00"), is("12.00")); - assertThat(convert2String(true), is("true")); + assertThat(cast2String("12.00"), is("12.00")); + assertThat(cast2String(true), is("true")); try { - convert2String(new Date()); + cast2String(new Date()); assertTrue(false); } catch (JMSException e) { @@ -197,10 +197,10 @@ public class PrimitiveTypeConvertTest { public void testConvert2ByteArray() throws Exception { byte[] arr = new byte[] {Byte.parseByte("11", 2), Byte.parseByte("101", 2)}; - assertThat(convert2ByteArray(arr), is(arr)); + assertThat(cast2ByteArray(arr), is(arr)); try { - convert2ByteArray("10"); + cast2ByteArray("10"); assertTrue(false); } catch (JMSException e) {
