Skip to content

Commit

Permalink
Added JMX management support
Browse files Browse the repository at this point in the history
  • Loading branch information
hqstevenson committed Oct 12, 2018
1 parent f158d0d commit 27b48c1
Show file tree
Hide file tree
Showing 21 changed files with 1,016 additions and 1,197 deletions.
36 changes: 23 additions & 13 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<groupId>com.github.hqstevenson.splunk</groupId>
<artifactId>splunk.jms.activemq</artifactId>
<packaging>bundle</packaging>
<version>1.5.0</version>
<version>2.0.0</version>

<name>Splunk ActiveMQ Support Classes</name>
<description>
Expand Down Expand Up @@ -53,18 +53,30 @@
<developerConnection>scm:git:https://github.com/hqstevenson/splunk-jms-activemq.git</developerConnection>
<url>https://github.com/hqstevenson/splunk-jms-activemq/tree/master</url>
</scm>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>com.github.hqstevenson.splunk</groupId>
<artifactId>splunk.jms</artifactId>
<version>1.5.0</version>
<version>2.0.0</version>
</dependency>

<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-osgi</artifactId>
<version>5.11.4</version>
<scope>provided</scope>
<exclusions>
<!-- This spec has an invalid/unavailable parent, so exclude it -->
<exclusion>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jta_1.0.1B_spec</artifactId>
</exclusion>
</exclusions>
</dependency>

<!-- Test Dependencies -->
Expand Down Expand Up @@ -110,19 +122,17 @@
<version>4.4.6</version>
<scope>test</scope>
</dependency>


</dependencies>

<build>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
Expand Down Expand Up @@ -151,11 +161,11 @@
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
<version>3.0.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
Expand All @@ -167,14 +177,14 @@
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<version>3.1.0</version>
<configuration>
<encoding>UTF-8</encoding>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7</version>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
Expand All @@ -190,14 +200,14 @@
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
<version>2.22.0</version>
</plugin>

<!-- other groupIds -->
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.5.0</version>
<version>4.0.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,9 @@
*/
package com.pronoia.splunk.jms.activemq;

import javax.jms.ConnectionFactory;
import com.pronoia.splunk.jms.SplunkJmsConsumerRunnable;

import com.pronoia.splunk.jms.SplunkJmsMessageConsumer;
import com.pronoia.splunk.jms.activemq.internal.ActiveMqBrokerUtils;
import javax.jms.ConnectionFactory;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.RedeliveryPolicy;
Expand All @@ -28,39 +27,30 @@
/**
* Splunk JMS Message consumer specifically for ActiveMQ.
*/
public class SplunkActiveMqMessageConsumer extends SplunkJmsMessageConsumer {
String brokerURL;
public abstract class AbstractSplunkActiveMqConsumerRunnable extends SplunkJmsConsumerRunnable {
String userName;
String password;

boolean useRedelivery = true;

Boolean useExponentialBackOff = true;
Double backoffMultiplier = 2.0;
long redeliveryDelay = 1000L;

Long initialRedeliveryDelay = 1000L;
Long maximumRedeliveryDelay = 60000L;
Integer maximumRedeliveries = -1;
boolean useExponentialBackOff = true;
double backoffMultiplier = 2.0;

public SplunkActiveMqMessageConsumer(String destinationName) {
long initialRedeliveryDelay = 1000L;
long maximumRedeliveryDelay = 60000L;
int maximumRedeliveries = -1;

public AbstractSplunkActiveMqConsumerRunnable(String destinationName) {
super(destinationName);
}

public SplunkActiveMqMessageConsumer(String destinationName, boolean useTopic) {
public AbstractSplunkActiveMqConsumerRunnable(String destinationName, boolean useTopic) {
super(destinationName, useTopic);
}

public boolean hasBrokerURL() {
return brokerURL != null && !brokerURL.isEmpty();
}

public String getBrokerURL() {
return brokerURL;
}

public void setBrokerURL(String brokerURL) {
this.brokerURL = brokerURL;
}

public boolean hasUserName() {
return userName != null && !userName.isEmpty();
Expand Down Expand Up @@ -90,122 +80,121 @@ public boolean isUseRedelivery() {
return useRedelivery;
}

public void setUseRedelivery(String useRedelivery) {
this.useRedelivery = Boolean.valueOf(useRedelivery);
}

public void setUseRedelivery(boolean useRedelivery) {
this.useRedelivery = useRedelivery;
}

public boolean hasUseExponentialBackOff() {
return useExponentialBackOff != null;
public long getRedeliveryDelay() {
return redeliveryDelay;
}

public void setRedeliveryDelay(String redeliveryDelay) {
this.redeliveryDelay = Long.valueOf(redeliveryDelay);
}

public void setRedeliveryDelay(long redeliveryDelay) {
this.redeliveryDelay = redeliveryDelay;
}

public Boolean getUseExponentialBackOff() {
public boolean isUseExponentialBackOff() {
return useExponentialBackOff;
}

public void setUseExponentialBackOff(Boolean useExponentialBackOff) {
this.useExponentialBackOff = useExponentialBackOff;
public void setUseExponentialBackOff(String useExponentialBackOff) {
this.useExponentialBackOff = Boolean.valueOf(useExponentialBackOff);
}

public boolean hasBackoffMultiplier() {
return backoffMultiplier != null && backoffMultiplier > 1;
public void setUseExponentialBackOff(boolean useExponentialBackOff) {
this.useExponentialBackOff = useExponentialBackOff;
}

public Double getBackoffMultiplier() {
return backoffMultiplier;
}

public void setBackoffMultiplier(Double backoffMultiplier) {
this.backoffMultiplier = backoffMultiplier;
public void setBackoffMultiplier(String backoffMultiplier) {
this.backoffMultiplier = Double.valueOf(backoffMultiplier);
}

public boolean hasInitialRedeliveryDelay() {
return initialRedeliveryDelay != null && initialRedeliveryDelay > 0;

public void setBackoffMultiplier(double backoffMultiplier) {
this.backoffMultiplier = backoffMultiplier;
}

public Long getInitialRedeliveryDelay() {
return initialRedeliveryDelay;
}

public void setInitialRedeliveryDelay(Long initialRedeliveryDelay) {
this.initialRedeliveryDelay = initialRedeliveryDelay;
public void setInitialRedeliveryDelay(String initialRedeliveryDelay) {
this.initialRedeliveryDelay = Long.valueOf(initialRedeliveryDelay);
}

public boolean hasMaximumRedeliveryDelay() {
return maximumRedeliveryDelay != null && maximumRedeliveryDelay > 0;
public void setInitialRedeliveryDelay(long initialRedeliveryDelay) {
this.initialRedeliveryDelay = initialRedeliveryDelay;
}

public Long getMaximumRedeliveryDelay() {
return maximumRedeliveryDelay;
}

public void setMaximumRedeliveryDelay(Long maximumRedeliveryDelay) {
this.maximumRedeliveryDelay = maximumRedeliveryDelay;
public void setMaximumRedeliveryDelay(String maximumRedeliveryDelay) {
this.maximumRedeliveryDelay = Long.valueOf(maximumRedeliveryDelay);
}

public boolean hasMaximumRedeliveries() {
return maximumRedeliveries != null;
public void setMaximumRedeliveryDelay(long maximumRedeliveryDelay) {
this.maximumRedeliveryDelay = maximumRedeliveryDelay;
}

public Integer getMaximumRedeliveries() {
public int getMaximumRedeliveries() {
return maximumRedeliveries;
}

public void setMaximumRedeliveries(String maximumRedeliveries) {
this.maximumRedeliveries = Integer.valueOf(maximumRedeliveries);
}

public void setMaximumRedeliveries(Integer maximumRedeliveries) {
this.maximumRedeliveries = maximumRedeliveries;
}

@Override
public ConnectionFactory getConnectionFactory() {
return super.hasConnectionFactory() ? super.getConnectionFactory() : createConnectionFactory();
}

@Override
public void setConnectionFactory(ConnectionFactory connectionFactory) {
if (useRedelivery && connectionFactory instanceof ActiveMQConnectionFactory) {
ActiveMQConnectionFactory activeMQConnectionFactory = (ActiveMQConnectionFactory) connectionFactory;
RedeliveryPolicy redeliveryPolicy = activeMQConnectionFactory.getRedeliveryPolicy();
configureRedelivery(activeMQConnectionFactory);
}
super.setConnectionFactory(connectionFactory);
}

protected void configureRedelivery(ActiveMQConnectionFactory connectionFactory) {
if (useRedelivery) {
RedeliveryPolicy redeliveryPolicy = connectionFactory.getRedeliveryPolicy();
if (redeliveryPolicy == null) {
redeliveryPolicy = new RedeliveryPolicy();
activeMQConnectionFactory.setRedeliveryPolicy(redeliveryPolicy);
}
if (hasInitialRedeliveryDelay()) {
redeliveryPolicy.setUseExponentialBackOff(useExponentialBackOff);
connectionFactory.setRedeliveryPolicy(redeliveryPolicy);
}

if (hasBackoffMultiplier()) {
redeliveryPolicy.setMaximumRedeliveries(maximumRedeliveries);
if (useExponentialBackOff) {
redeliveryPolicy.setUseExponentialBackOff(true);
redeliveryPolicy.setBackOffMultiplier(backoffMultiplier);
}

if (hasInitialRedeliveryDelay()) {
redeliveryPolicy.setInitialRedeliveryDelay(initialRedeliveryDelay);
}

if (hasMaximumRedeliveryDelay()) {
redeliveryPolicy.setMaximumRedeliveryDelay(maximumRedeliveryDelay);
}

if (hasMaximumRedeliveries()) {
redeliveryPolicy.setMaximumRedeliveries(maximumRedeliveries);
} else {
redeliveryPolicy.setUseExponentialBackOff(false);
redeliveryPolicy.setRedeliveryDelay(redeliveryDelay);
}
}
super.setConnectionFactory(connectionFactory);
}

@Override
public void verifyConfiguration() {
if (!hasBrokerURL()) {
throw new IllegalStateException("ActiveMQ Broker URL must be specified");
}

super.verifyConfiguration();
}

@Override
public void start() {
createConnectionFactory();

super.start();
}

protected void createConnectionFactory() {
if (!hasConnectionFactory()) {
this.setConnectionFactory(ActiveMqBrokerUtils.createConnectionFactory(log, brokerURL, userName, password));
}
}
protected abstract ConnectionFactory createConnectionFactory();

}
Loading

0 comments on commit 27b48c1

Please sign in to comment.