• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

CJSCommonPlatform / artemis-manager / 127

pending completion
127

Pull #17

travis-ci

web-flow
Resolve Sonar violations and increase test coverage
Pull Request #17: Refactor to permit passing in URLs from command line

154 of 154 new or added lines in 17 files covered. (100.0%)

274 of 339 relevant lines covered (80.83%)

0.85 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

65.79
/src/main/java/uk/gov/justice/artemis/manager/connector/CombinedJmsAndJmxArtemisConnector.java
1
package uk.gov.justice.artemis.manager.connector;
2

3
import static java.util.Collections.emptyMap;
4
import static java.util.stream.Collectors.groupingBy;
5
import static java.util.stream.Collectors.summingLong;
6
import static java.util.stream.Collectors.toList;
7
import static pl.touk.throwing.ThrowingFunction.unchecked;
8

9
import uk.gov.justice.artemis.manager.connector.jms.JmsManagement;
10
import uk.gov.justice.artemis.manager.connector.jms.JmsProcessor;
11
import uk.gov.justice.artemis.manager.connector.jmx.JmxManagement;
12
import uk.gov.justice.artemis.manager.connector.jmx.JmxProcessor;
13
import uk.gov.justice.output.ConsolePrinter;
14

15
import java.util.Arrays;
16
import java.util.Collection;
17
import java.util.HashMap;
18
import java.util.Iterator;
19
import java.util.List;
20
import java.util.Map;
21
import java.util.Map.Entry;
22

23
import javax.management.remote.JMXConnector;
24
import javax.management.remote.JMXServiceURL;
25

26
import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder;
27
import org.apache.activemq.artemis.api.jms.management.DestinationControl;
28
import org.apache.activemq.artemis.api.jms.management.JMSServerControl;
29
import org.apache.activemq.artemis.jms.client.ActiveMQJMSConnectionFactory;
30

31
/**
32
 * reprocess, remove and messagesOf were re-implemented in JMS due to issues with large messages
33
 * over JMX.
34
 */
35
public class CombinedJmsAndJmxArtemisConnector implements ArtemisConnector {
2✔
36

37
    private final JmxProcessor jmxProcessor = new JmxProcessor();
2✔
38
    private final JmxManagement jmxManagement = new JmxManagement(new ConsolePrinter());
2✔
39
    private final JmsProcessor jmsProcessor = new JmsProcessor();
2✔
40
    private final JmsManagement jmsManagement = new JmsManagement();
2✔
41

42
    private List<JMXServiceURL> jmxServiceUrls;
43
    private Map<String,String[]> jmxEnvironment;
44
    private ObjectNameBuilder objectNameBuilder;
45

46
    private ActiveMQJMSConnectionFactory jmsFactory;
47

48
    @Override
49
    public void setParameters(final List<String> jmxUrls,
50
                    final String brokerName,
51
                    final String jmxUsername,
52
                    final String jmxPassword,
53
                    final String jmsUrl,
54
                    final String jmsUsername,
55
                    final String jmsPassword) {
56
        this.jmxServiceUrls = jmxProcessor.processJmxUrls(jmxUrls);
1✔
57
        this.objectNameBuilder = jmxProcessor.getObjectNameBuilder(brokerName);
1✔
58

59
        if ((jmxUsername != null) && (jmxPassword != null)) {
1✔
60
            this.jmxEnvironment = new HashMap<>();
×
61
            this.jmxEnvironment.put(JMXConnector.CREDENTIALS, new String[]{ jmxUsername, jmxPassword });
×
62
        } else {
63
            this.jmxEnvironment = emptyMap();
1✔
64
        }
65

66
        if ((jmsUsername != null) && (jmsPassword != null)) {
1✔
67
            this.jmsFactory = new ActiveMQJMSConnectionFactory(jmsUrl, jmsUsername, jmsPassword);
×
68
        } else {
69
            this.jmsFactory = new ActiveMQJMSConnectionFactory(jmsUrl);
1✔
70
        }
71
    }
1✔
72

73
    @Override
74
    public List<MessageData> messagesOf(final String destinationName) {
75
        return jmsProcessor.process(this.jmsFactory, destinationName, jmsManagement.browseMessages());
1✔
76
    }
77

78
    @Override
79
    public long remove(final String destinationName, final Iterator<String> msgIds) {
80
        return jmxProcessor.processQueueControl(this.jmxServiceUrls,
1✔
81
                this.jmxEnvironment,
82
                this.objectNameBuilder,
83
                destinationName,
84
                jmxManagement.removeMessages(msgIds)).mapToLong(Long::longValue).sum();
1✔
85
    }
86

87
    @Override
88
    public long reprocess(final String destinationName, final Iterator<String> msgIds) {
89
        return jmxProcessor.processQueueControl(
1✔
90
                this.jmxServiceUrls,
91
                this.jmxEnvironment,
92
                this.objectNameBuilder,
93
                destinationName,
94
                jmxManagement.reprocessMessages(msgIds)).mapToLong(Long::longValue).sum();
1✔
95
    }
96

97
    @Override
98
    public List<String> queueNames() {
99
        return jmxProcessor.processServerControl(
1✔
100
            this.jmxServiceUrls,
101
            this.jmxEnvironment,
102
            this.objectNameBuilder,
103
            JMSServerControl::getQueueNames).flatMap(
1✔
104
                Arrays::stream).sorted().
1✔
105
                distinct().collect(toList());
1✔
106
    }
107

108

109
    @Override
110
    public Map<String, Long> queueMessageCount(final Collection<String> queueNames) {
111
        return jmxProcessor.processQueues(this.jmxServiceUrls,
×
112
            this.jmxEnvironment,
113
            this.objectNameBuilder, 
114
            queueNames,
115
            unchecked(DestinationControl::getMessageCount)).flatMap(
×
116
                m -> m.entrySet().stream()).collect(
×
117
                    groupingBy(Entry::getKey,
×
118
                    summingLong(Entry::getValue)));
×
119
    }
120

121
    @Override
122
    public List<String> topicNames() {
123
        return jmxProcessor.processServerControl(this.jmxServiceUrls,
1✔
124
            this.jmxEnvironment,
125
            this.objectNameBuilder,
126
            JMSServerControl::getTopicNames).flatMap(
1✔
127
                Arrays::stream).sorted().
1✔
128
                    distinct().collect(toList());
1✔
129
    }
130

131
    @Override
132
    public Map<String, Long> topicMessageCount(final Collection<String> topicNames) {
133
        return jmxProcessor.processTopics(this.jmxServiceUrls,
×
134
            this.jmxEnvironment,
135
            this.objectNameBuilder, 
136
            topicNames,
137
            unchecked(DestinationControl::getMessageCount)).flatMap(
×
138
                m -> m.entrySet().stream()).collect(
×
139
                    groupingBy(Entry::getKey,
×
140
                    summingLong(Entry::getValue)));
×
141
    }
142
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc