@@ -17,7 +17,8 @@ public class MQSubscriberManager {
17
17
private static final Logger logger = LogManager .getLogger (MQSubscriberManager .class );
18
18
private Hashtable <String , Object > connectionProperties ;
19
19
private String queueManagerName ;
20
- private ArrayList <Thread > subscribers ;
20
+ private ArrayList <MQSubscriber > subscribers ;
21
+ private ScheduledExecutorService executor ;
21
22
22
23
/**
23
24
* Constructor sets params for connecting to target queue manager.
@@ -56,7 +57,7 @@ public void runSubscribers(List<PCFElement> elements, List<MQObject> objects, bo
56
57
addPCFSubscribers (objects , interval );
57
58
}
58
59
}
59
- for (Thread subscriber : subscribers ) {
60
+ for (MQSubscriber subscriber : subscribers ) {
60
61
subscriber .start ();
61
62
}
62
63
if (!subscribers .isEmpty ()) {
@@ -68,6 +69,15 @@ public void runSubscribers(List<PCFElement> elements, List<MQObject> objects, bo
68
69
69
70
}
70
71
72
+ public void stopSubscribers () {
73
+ if (executor != null ) {
74
+ executor .shutdown ();
75
+ }
76
+ for (MQSubscriber subscriber : subscribers ) {
77
+ subscriber .stopProcessing ();
78
+ }
79
+ }
80
+
71
81
/**
72
82
* Add topic subscribers for each MQ object being monitored.
73
83
*
@@ -97,7 +107,7 @@ private void addTopicSubscriber(MQObject object, PCFElement element) {
97
107
PCFElement objElement = new PCFElement (element .getTopicString (), element .getRows ());
98
108
objElement .formatTopicString (object .getName ());
99
109
try {
100
- subscribers .add (new Thread ( new MQTopicSubscriber (objElement , queueManagerName , connectionProperties , queueManagerName , object .getName () )));
110
+ subscribers .add (new MQTopicSubscriber (objElement , queueManagerName , connectionProperties , queueManagerName , object .getName ()));
101
111
} catch (MQException e ) {
102
112
logger .error ("Error during creating topic subscriber: " , e );
103
113
}
@@ -111,7 +121,7 @@ private void addTopicSubscriber(MQObject object, PCFElement element) {
111
121
*/
112
122
private void addTopicSubscriber (PCFElement element ) {
113
123
try {
114
- subscribers .add (new Thread ( new MQTopicSubscriber (element , queueManagerName , connectionProperties , queueManagerName ) ));
124
+ subscribers .add (new MQTopicSubscriber (element , queueManagerName , connectionProperties , queueManagerName ));
115
125
} catch (MQException e ) {
116
126
logger .error ("Error during creating topic subscriber: " , e );
117
127
}
@@ -125,11 +135,11 @@ private void addTopicSubscriber(PCFElement element) {
125
135
*/
126
136
private void addPCFSubscribers (Map <MQObject .MQType , ArrayList <MQObject >> objects , int interval ) {
127
137
int corePoolSize = MQObject .MQType .values ().length ;
128
- ScheduledExecutorService executor = Executors .newScheduledThreadPool (corePoolSize );
138
+ executor = Executors .newScheduledThreadPool (corePoolSize );
129
139
for (Map .Entry <MQObject .MQType , ArrayList <MQObject >> entry : objects .entrySet ()) {
130
140
if (!entry .getValue ().isEmpty ()) {
131
141
MQPCFSubscriber subscriber = new MQPCFSubscriber (queueManagerName , connectionProperties , entry .getValue ());
132
- subscribers .add (new Thread ( subscriber ) );
142
+ subscribers .add (subscriber );
133
143
logger .debug ("Starting subscriber for sending direct PCF commands to retrieve statistics about object with type {} and name {}." , entry .getKey ().name ());
134
144
executor .scheduleAtFixedRate (subscriber , 0 , interval , TimeUnit .SECONDS );
135
145
logger .debug ("Subscriber for sending direct PCF commands for objects with type {} successfully started." , entry .getKey ().name ());
@@ -148,7 +158,7 @@ private void addPCFSubscribers(List<MQObject> objects, int interval) {
148
158
ScheduledExecutorService executor = Executors .newScheduledThreadPool (corePoolSize );
149
159
for (MQObject object : objects ) {
150
160
MQPCFSubscriber subscriber = new MQPCFSubscriber (queueManagerName , connectionProperties , object );
151
- subscribers .add (new Thread ( subscriber ) );
161
+ subscribers .add (subscriber );
152
162
logger .debug ("Starting subscriber for sending direct PCF commands to retrieve statistics about object with type {} and name {}." , object .getType ().name (), object .getName ());
153
163
executor .scheduleAtFixedRate (subscriber , 0 , interval , TimeUnit .SECONDS );
154
164
logger .debug ("Subscriber for sending direct PCF commands to retrieve statistics about object with type {} and name {} successfully started." , object .getType ().name (), object .getName ());
0 commit comments