All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.marschall.jfr.jmstemplate.JfrJmsOperations Maven / Gradle / Ivy

The newest version!
package com.github.marschall.jfr.jmstemplate;

import java.util.Objects;

import jakarta.jms.Destination;
import jakarta.jms.JMSException;
import jakarta.jms.Message;
import jakarta.jms.Queue;
import jakarta.jms.Topic;

import org.springframework.jms.core.BrowserCallback;
import org.springframework.jms.core.JmsOperations;
import org.springframework.jms.core.MessageCreator;
import org.springframework.jms.core.MessagePostProcessor;
import org.springframework.jms.core.ProducerCallback;
import org.springframework.jms.core.SessionCallback;

import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Event;
import jdk.jfr.Label;
/**
 * An implementation of {@link JmsOperations} that generates JFR events.
 * The events are generated in the "Spring JMS" category.
 */
public final class JfrJmsOperations implements JmsOperations {

  private final JmsOperations delegate;


  /**
   * Constructs a new {@link JfrJmsOperations}.
   *
   * @param delegate the actual {@link JmsOperations} implementation, not {@code null}
   */
  public JfrJmsOperations(JmsOperations delegate) {
    Objects.requireNonNull(delegate, "delegate");
    this.delegate = delegate;
  }

  @Override
  public  T execute(SessionCallback action) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("execute");
    event.begin();
    try {
      return this.delegate.execute(action);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public  T execute(ProducerCallback action) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("execute");
    event.begin();
    try {
      return this.delegate.execute(action);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public  T execute(Destination destination, ProducerCallback action) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("execute");
    event.setDestinationName(getDestinationName(destination));
    event.begin();
    try {
      return this.delegate.execute(destination, action);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public  T execute(String destinationName, ProducerCallback action) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("execute");
    event.setDestinationName(destinationName);
    event.begin();
    try {
      return this.delegate.execute(destinationName, action);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public void send(MessageCreator messageCreator) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("send");
    event.begin();
    try {
      this.delegate.send(messageCreator);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public void send(Destination destination, MessageCreator messageCreator) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("send");
    event.setDestinationName(getDestinationName(destination));
    event.begin();
    try {
      this.delegate.send(destination, messageCreator);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public void send(String destinationName, MessageCreator messageCreator) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("send");
    event.setDestinationName(destinationName);
    event.begin();
    try {
      this.delegate.send(destinationName, messageCreator);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public void convertAndSend(Object message) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("convertAndSend");
    event.begin();
    try {
      this.delegate.convertAndSend(message);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public void convertAndSend(Destination destination, Object message) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("convertAndSend");
    event.setDestinationName(getDestinationName(destination));
    event.begin();
    try {
      this.delegate.convertAndSend(destination, message);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public void convertAndSend(String destinationName, Object message) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("convertAndSend");
    event.setDestinationName(destinationName);
    event.begin();
    try {
      this.delegate.convertAndSend(destinationName, message);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public void convertAndSend(Object message, MessagePostProcessor postProcessor) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("convertAndSend");
    event.begin();
    try {
      this.delegate.convertAndSend(message, postProcessor);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public void convertAndSend(Destination destination, Object message, MessagePostProcessor postProcessor)
      {
    JmsEvent event = new JmsEvent();
    event.setOperationName("convertAndSend");
    event.setDestinationName(getDestinationName(destination));
    event.begin();
    try {
      this.delegate.convertAndSend(destination, message, postProcessor);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public void convertAndSend(String destinationName, Object message, MessagePostProcessor postProcessor)
      {
    JmsEvent event = new JmsEvent();
    event.setOperationName("convertAndSend");
    event.setDestinationName(destinationName);
    event.begin();
    try {
      this.delegate.convertAndSend(destinationName, message, postProcessor);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Message receive() {
    JmsEvent event = new JmsEvent();
    event.setOperationName("receive");
    event.begin();
    try {
      return this.delegate.receive();
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Message receive(Destination destination) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("receive");
    event.setDestinationName(getDestinationName(destination));
    event.begin();
    try {
      return this.delegate.receive(destination);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Message receive(String destinationName) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("receive");
    event.setDestinationName(destinationName);
    event.begin();
    try {
      return this.delegate.receive(destinationName);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Message receiveSelected(String messageSelector) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("receiveSelected");
    event.setMessageSelector(messageSelector);
    event.begin();
    try {
      return this.delegate.receiveSelected(messageSelector);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Message receiveSelected(Destination destination, String messageSelector) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("receiveSelected");
    event.setDestinationName(getDestinationName(destination));
    event.setMessageSelector(messageSelector);
    event.begin();
    try {
      return this.delegate.receiveSelected(destination, messageSelector);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Message receiveSelected(String destinationName, String messageSelector) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("receiveSelected");
    event.setDestinationName(destinationName);
    event.setMessageSelector(messageSelector);
    event.begin();
    try {
      return this.delegate.receiveSelected(destinationName, messageSelector);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Object receiveAndConvert() {
    JmsEvent event = new JmsEvent();
    event.setOperationName("receiveSelectedAndConvert");
    event.begin();
    try {
      return this.delegate.receiveAndConvert();
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Object receiveAndConvert(Destination destination) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("receiveSelectedAndConvert");
    event.setDestinationName(getDestinationName(destination));
    event.begin();
    try {
      return this.delegate.receiveAndConvert(destination);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Object receiveAndConvert(String destinationName) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("receiveSelectedAndConvert");
    event.setDestinationName(destinationName);
    event.begin();
    try {
      return this.delegate.receiveAndConvert(destinationName);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Object receiveSelectedAndConvert(String messageSelector) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("receiveSelectedAndConvert");
    event.setMessageSelector(messageSelector);
    event.begin();
    try {
      return this.delegate.receiveSelectedAndConvert(messageSelector);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Object receiveSelectedAndConvert(Destination destination, String messageSelector) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("receiveSelectedAndConvert");
    event.setDestinationName(getDestinationName(destination));
    event.setMessageSelector(messageSelector);
    event.begin();
    try {
      return this.delegate.receiveSelectedAndConvert(destination, messageSelector);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Object receiveSelectedAndConvert(String destinationName, String messageSelector) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("receiveSelectedAndConvert");
    event.setDestinationName(destinationName);
    event.setMessageSelector(messageSelector);
    event.begin();
    try {
      return this.delegate.receiveSelectedAndConvert(destinationName, messageSelector);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Message sendAndReceive(MessageCreator messageCreator) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("sendAndReceive");
    event.begin();
    try {
      return this.delegate.sendAndReceive(messageCreator);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Message sendAndReceive(Destination destination, MessageCreator messageCreator) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("sendAndReceive");
    event.setDestinationName(getDestinationName(destination));
    event.begin();
    try {
      return this.delegate.sendAndReceive(destination, messageCreator);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public Message sendAndReceive(String destinationName, MessageCreator messageCreator) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("sendAndReceive");
    event.setDestinationName(destinationName);
    event.begin();
    try {
      return this.delegate.sendAndReceive(destinationName, messageCreator);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public  T browse(BrowserCallback action) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("browse");
    event.begin();
    try {
      return this.delegate.browse(action);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public  T browse(Queue queue, BrowserCallback action) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("browse");
    event.setDestinationName(getDestinationName(queue));
    event.begin();
    try {
      return this.delegate.browse(queue, action);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public  T browse(String queueName, BrowserCallback action) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("browse");
    event.setDestinationName(queueName);
    event.begin();
    try {
      return this.delegate.browse(queueName, action);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public  T browseSelected(String messageSelector, BrowserCallback action) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("browseSelected");
    event.setMessageSelector(messageSelector);
    event.begin();
    try {
      return this.delegate.browseSelected(messageSelector, action);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public  T browseSelected(Queue queue, String messageSelector, BrowserCallback action) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("browseSelected");
    event.setDestinationName(getDestinationName(queue));
    event.setMessageSelector(messageSelector);
    event.begin();
    try {
      return this.delegate.browseSelected(queue, messageSelector, action);
    } finally {
      event.end();
      event.commit();
    }
  }

  @Override
  public  T browseSelected(String queueName, String messageSelector, BrowserCallback action) {
    JmsEvent event = new JmsEvent();
    event.setOperationName("browseSelected");
    event.setDestinationName(queueName);
    event.setMessageSelector(messageSelector);
    event.begin();
    try {
      return this.delegate.browseSelected(queueName, messageSelector, action);
    } finally {
      event.end();
      event.commit();
    }
  }

  private static String getDestinationName(Destination destination) {
    try {
      if (destination instanceof Queue) {
        return ((Queue) destination).getQueueName();
      } else if (destination instanceof Topic) {
        return ((Topic) destination).getTopicName();
      }
    } catch (JMSException e) {
      return "";
    }
    return null;
  }

  @Label("Operation")
  @Description("A JMS Operation")
  @Category("Spring JMS")
  static class JmsEvent extends Event {

    @Label("Operation Name")
    @Description("The name of the JMS operation")
    private String operationName;

    @Label("Destination Name")
    @Description("The name of the Queue or Topic")
    private String destinationName;

    @Label("Message Selector")
    @Description("The message selector")
    private String messageSelector;

    String getOperationName() {
      return this.operationName;
    }

    void setOperationName(String operationName) {
      this.operationName = operationName;
    }

    String getDestinationName() {
      return this.destinationName;
    }

    void setDestinationName(String destinationName) {
      this.destinationName = destinationName;
    }

    String getMessageSelector() {
      return this.messageSelector;
    }

    void setMessageSelector(String messageSelector) {
      this.messageSelector = messageSelector;
    }

  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy