// Path: jms-base/src/main/java/me/chanjar/jms/base/sender/JmsMessageSender.java
// public interface JmsMessageSender {
// 
//   /**
//    * 发送Jms消息
//    *
//    * @param payload 消息主体
//    * @throws JMSException
//    */
//   void sendMessage(MessageDto payload) throws JMSException;
// 
// }
// 
// Path: jms-base/src/main/java/me/chanjar/jms/base/utils/ArtemisMessageDtoDupMessageDetectStrategy.java
// public class ArtemisMessageDtoDupMessageDetectStrategy implements DupMessageDetectStrategy {
// 
//   private static final String HDR_DUPLICATE_DETECTION_ID =
//       org.apache.activemq.artemis.api.core.Message.HDR_DUPLICATE_DETECTION_ID.toString();
// 
//   @Override
//   public void setId(Message message, Object payload) throws JMSException {
//     message.setStringProperty(HDR_DUPLICATE_DETECTION_ID, ((MessageDto) payload).getId());
//   }
// 
// }
// 
// Path: jms-base/src/main/java/me/chanjar/jms/base/msg/MessageDto.java
// public abstract class MessageDto implements Serializable {
// 
//   private static final long serialVersionUID = 9003442515985424079L;
//   /**
//    * 应该保证全局唯一, 用uuid
//    */
//   protected final String id;
// 
//   public MessageDto() {
//     this.id = StrongUuidGenerator.getNextId();
//   }
// 
//   public String getId() {
//     return id;
//   }
// 
// }
// 
// Path: jms-base/src/main/java/me/chanjar/jms/base/utils/DupMessageDetectStrategy.java
// public interface DupMessageDetectStrategy {
// 
//   void setId(Message message, Object payload) throws JMSException;
// }
// 
// Path: jms-base/src/main/java/me/chanjar/jms/base/utils/MessageConvertUtils.java
// public abstract class MessageConvertUtils {
// 
//   private MessageConvertUtils() {
//     // singleton
//   }
// 
//   /**
//    * 把对象转换成{@link Message}
//    *
//    * @param jmsTemplate
//    * @param session
//    * @param payload
//    * @return
//    * @throws JMSException
//    */
//   public static Message toMessage(JmsTemplate jmsTemplate, Session session, Object payload) throws JMSException {
//     return toMessage(jmsTemplate.getMessageConverter(), session, payload);
//   }
// 
//   /**
//    * 把对象转换成{@link Message}
//    *
//    * @param messageConverter
//    * @param session
//    * @param payload
//    * @return
//    * @throws JMSException
//    */
//   public static Message toMessage(MessageConverter messageConverter, Session session, Object payload)
//       throws JMSException {
//     return messageConverter.toMessage(payload, session);
//   }
// 
//   /**
//    * 把{@link Message}转换成对象
//    *
//    * @param jmsTemplate
//    * @param message
//    * @param <T>
//    * @return
//    * @throws JMSException
//    */
//   public static <T> T fromMessage(JmsTemplate jmsTemplate, Message message) throws JMSException {
//     return fromMessage(jmsTemplate.getMessageConverter(), message);
//   }
// 
//   /**
//    * 把{@link Message}转换成对象
//    *
//    * @param messageConverter
//    * @param message
//    * @param <T>
//    * @return
//    * @throws JMSException
//    */
//   public static <T> T fromMessage(MessageConverter messageConverter, Message message) throws JMSException {
//     return (T) messageConverter.fromMessage(message);
//   }
// 
// }


import me.chanjar.jms.base.sender.JmsMessageSender;
import me.chanjar.jms.base.utils.ArtemisMessageDtoDupMessageDetectStrategy;
import me.chanjar.jms.base.msg.MessageDto;
import me.chanjar.jms.base.utils.DupMessageDetectStrategy;
import me.chanjar.jms.base.utils.MessageConvertUtils;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.jms.support.converter.SimpleMessageConverter;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;
package me.chanjar.jms.base.sender.simple;



public class SimpleJmsMessageSender implements JmsMessageSender {

  private Session session;

  private MessageProducer messageProducer;

  private MessageConverter messageConverter = new SimpleMessageConverter();

  private DupMessageDetectStrategy dupMessageDetectStrategy = new ArtemisMessageDtoDupMessageDetectStrategy();

  @Override
  public void sendMessage(MessageDto payload) throws JMSException {

    Message message = MessageConvertUtils.toMessage(messageConverter, session, payload);
    dupMessageDetectStrategy.setId(message, payload);
    messageProducer.send(message);

  }

  public void setSession(Session session) {
    this.session = session;
  }

  public void setMessageProducer(MessageProducer messageProducer) {
// Path: jms-base/src/main/java/me/chanjar/jms/base/sender/JmsMessageSender.java
// public interface JmsMessageSender {
// 
//   /**
//    * 发送Jms消息
//    *
//    * @param payload 消息主体
//    * @throws JMSException
//    */
//   void sendMessage(MessageDto payload) throws JMSException;
// 
// }
// 
// Path: jms-base/src/main/java/me/chanjar/jms/base/utils/ArtemisMessageDtoDupMessageDetectStrategy.java
// public class ArtemisMessageDtoDupMessageDetectStrategy implements DupMessageDetectStrategy {
// 
//   private static final String HDR_DUPLICATE_DETECTION_ID =
//       org.apache.activemq.artemis.api.core.Message.HDR_DUPLICATE_DETECTION_ID.toString();
// 
//   @Override
//   public void setId(Message message, Object payload) throws JMSException {
//     message.setStringProperty(HDR_DUPLICATE_DETECTION_ID, ((MessageDto) payload).getId());
//   }
// 
// }
// 
// Path: jms-base/src/main/java/me/chanjar/jms/base/msg/MessageDto.java
// public abstract class MessageDto implements Serializable {
// 
//   private static final long serialVersionUID = 9003442515985424079L;
//   /**
//    * 应该保证全局唯一, 用uuid
//    */
//   protected final String id;
// 
//   public MessageDto() {
//     this.id = StrongUuidGenerator.getNextId();
//   }
// 
//   public String getId() {
//     return id;
//   }
// 
// }
// 
// Path: jms-base/src/main/java/me/chanjar/jms/base/utils/DupMessageDetectStrategy.java
// public interface DupMessageDetectStrategy {
// 
//   void setId(Message message, Object payload) throws JMSException;
// }
// 
// Path: jms-base/src/main/java/me/chanjar/jms/base/utils/MessageConvertUtils.java
// public abstract class MessageConvertUtils {
// 
//   private MessageConvertUtils() {
//     // singleton
//   }
// 
//   /**
//    * 把对象转换成{@link Message}
//    *
//    * @param jmsTemplate
//    * @param session
//    * @param payload
//    * @return
//    * @throws JMSException
//    */
//   public static Message toMessage(JmsTemplate jmsTemplate, Session session, Object payload) throws JMSException {
//     return toMessage(jmsTemplate.getMessageConverter(), session, payload);
//   }
// 
//   /**
//    * 把对象转换成{@link Message}
//    *
//    * @param messageConverter
//    * @param session
//    * @param payload
//    * @return
//    * @throws JMSException
//    */
//   public static Message toMessage(MessageConverter messageConverter, Session session, Object payload)
//       throws JMSException {
//     return messageConverter.toMessage(payload, session);
//   }
// 
//   /**
//    * 把{@link Message}转换成对象
//    *
//    * @param jmsTemplate
//    * @param message
//    * @param <T>
//    * @return
//    * @throws JMSException
//    */
//   public static <T> T fromMessage(JmsTemplate jmsTemplate, Message message) throws JMSException {
//     return fromMessage(jmsTemplate.getMessageConverter(), message);
//   }
// 
//   /**
//    * 把{@link Message}转换成对象
//    *
//    * @param messageConverter
//    * @param message
//    * @param <T>
//    * @return
//    * @throws JMSException
//    */
//   public static <T> T fromMessage(MessageConverter messageConverter, Message message) throws JMSException {
//     return (T) messageConverter.fromMessage(message);
//   }
// 
// }


// Path: jms-base/src/main/java/me/chanjar/jms/base/sender/simple/SimpleJmsMessageSender.java
import me.chanjar.jms.base.sender.JmsMessageSender;
import me.chanjar.jms.base.utils.ArtemisMessageDtoDupMessageDetectStrategy;
import me.chanjar.jms.base.msg.MessageDto;
import me.chanjar.jms.base.utils.DupMessageDetectStrategy;
import me.chanjar.jms.base.utils.MessageConvertUtils;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.jms.support.converter.SimpleMessageConverter;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;

package me.chanjar.jms.base.sender.simple;



public class SimpleJmsMessageSender implements JmsMessageSender {

  private Session session;

  private MessageProducer messageProducer;

  private MessageConverter messageConverter = new SimpleMessageConverter();

  private DupMessageDetectStrategy dupMessageDetectStrategy = new ArtemisMessageDtoDupMessageDetectStrategy();

  @Override
  public void sendMessage(MessageDto payload) throws JMSException {

    Message message = MessageConvertUtils.toMessage(messageConverter, session, payload);
    dupMessageDetectStrategy.setId(message, payload);
    messageProducer.send(message);

  }

  public void setSession(Session session) {
    this.session = session;
  }

  public void setMessageProducer(MessageProducer messageProducer) {
    this.messageProducer = messageProducer;