Skip to content

Commit c7c4d1a

Browse files
committed
Add option for deleting all scheduled messages on startup.
1 parent aa842da commit c7c4d1a

File tree

4 files changed

+33
-1
lines changed

4 files changed

+33
-1
lines changed

activemq-broker/src/main/java/org/apache/activemq/broker/BrokerService.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ public class BrokerService implements Service {
184184
private JmsConnector[] jmsBridgeConnectors; // these are Jms to Jms bridges
185185
// to other jms messaging systems
186186
private boolean deleteAllMessagesOnStartup;
187+
private boolean deleteAllScheduledMessagesOnStartup = false;
187188
private boolean advisorySupport = true;
188189
private boolean anonymousProducerAdvisorySupport = false;
189190
private URI vmConnectorURI;
@@ -1630,6 +1631,18 @@ public void setDeleteAllMessagesOnStartup(boolean deletePersistentMessagesOnStar
16301631
this.deleteAllMessagesOnStartup = deletePersistentMessagesOnStartup;
16311632
}
16321633

1634+
/**
1635+
* Sets whether all scheduled messages are deleted on startup
1636+
* @org.apache.xbean.Property propertyEditor="org.apache.activemq.util.BooleanEditor"
1637+
*/
1638+
public void setDeleteAllScheduledMessagesOnStartup(boolean deleteAllScheduledMessagesOnStartup) {
1639+
this.deleteAllScheduledMessagesOnStartup = deleteAllScheduledMessagesOnStartup;
1640+
}
1641+
1642+
public boolean isDeleteAllScheduledMessagesOnStartup() {
1643+
return deleteAllScheduledMessagesOnStartup;
1644+
}
1645+
16331646
public URI getVmConnectorURI() {
16341647
if (vmConnectorURI == null) {
16351648
try {
@@ -2440,6 +2453,7 @@ protected Broker addInterceptors(Broker broker) throws Exception {
24402453
if (isSchedulerSupport()) {
24412454
SchedulerBroker sb = new SchedulerBroker(this, broker, getJobSchedulerStore());
24422455
sb.setMaxRepeatAllowed(maxSchedulerRepeatAllowed);
2456+
sb.setDeleteAllScheduledMessagesOnStartup(deleteAllScheduledMessagesOnStartup);
24432457
if (isUseJmx()) {
24442458
JobSchedulerViewMBean view = new JobSchedulerView(sb.getJobScheduler());
24452459
try {

activemq-broker/src/main/java/org/apache/activemq/broker/scheduler/SchedulerBroker.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public class SchedulerBroker extends BrokerFilter implements JobListener {
7272
private final JobSchedulerStore store;
7373
private JobScheduler scheduler;
7474
private int maxRepeatAllowed = MAX_REPEAT_ALLOWED;
75+
private boolean deleteAllScheduledMessagesOnStartup;
7576

7677
public SchedulerBroker(BrokerService brokerService, Broker next, JobSchedulerStore store) throws Exception {
7778
super(next);
@@ -212,6 +213,9 @@ public synchronized JobScheduler getJobScheduler() throws Exception {
212213
public void start() throws Exception {
213214
this.started.set(true);
214215
getInternalScheduler();
216+
if (deleteAllScheduledMessagesOnStartup) {
217+
deleteAllScheduledMessages();
218+
}
215219
super.start();
216220
}
217221

@@ -364,6 +368,11 @@ private void doSchedule(Message messageSend, Object cronValue, Object periodValu
364368
new ByteSequence(packet.data, packet.offset, packet.length), cronEntry, delay, period, repeat);
365369
}
366370

371+
private void deleteAllScheduledMessages() throws Exception {
372+
LOG.info("Deleting all scheduled messages on startup because deleteAllScheduledMessagesOnStartup configuration has been provided");
373+
getInternalScheduler().removeAllJobs();
374+
}
375+
367376
@Override
368377
public void scheduledJob(String id, ByteSequence job) {
369378
org.apache.activemq.util.ByteSequence packet = new org.apache.activemq.util.ByteSequence(job.getData(), job.getOffset(), job.getLength());
@@ -487,4 +496,12 @@ public int getMaxRepeatAllowed() {
487496
public void setMaxRepeatAllowed(int maxRepeatAllowed) {
488497
this.maxRepeatAllowed = maxRepeatAllowed;
489498
}
499+
500+
public boolean getDeleteAllScheduledMessagesOnStartup() {
501+
return deleteAllScheduledMessagesOnStartup;
502+
}
503+
504+
public void setDeleteAllScheduledMessagesOnStartup(boolean deleteAllSchedulerdMessagesOnStartup) {
505+
this.deleteAllScheduledMessagesOnStartup = deleteAllSchedulerdMessagesOnStartup;
506+
}
490507
}

activemq-unit-tests/src/test/java/org/apache/activemq/config/ConfigTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ public void testBrokerConfig() throws Exception {
170170
assertEquals("Broker Config Error (persistent)", false, broker.isPersistent());
171171
assertEquals("Broker Config Error (useShutdownHook)", false, broker.isUseShutdownHook());
172172
assertEquals("Broker Config Error (deleteAllMessagesOnStartup)", true, broker.isDeleteAllMessagesOnStartup());
173+
assertEquals("Broker Config Error (deleteAllScheduledMessagesOnStartup)", true, broker.isDeleteAllScheduledMessagesOnStartup());
173174
LOG.info("Success");
174175

175176
// Check specific vm transport

activemq-unit-tests/src/test/resources/org/apache/activemq/config/example.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
<amq:broker brokerName="brokerConfigTest" populateJMSXUserID="false"
2727
useLoggingForShutdownErrors="true" useJmx="true"
2828
persistent="false" vmConnectorURI="vm://javacoola"
29-
useShutdownHook="false" deleteAllMessagesOnStartup="true">
29+
useShutdownHook="false" deleteAllMessagesOnStartup="true" deleteAllScheduledMessagesOnStartup="true">
3030

3131
<!--
3232
|| NOTE this config file is used for unit testing the configuration mechanism

0 commit comments

Comments
 (0)