Index: lams_common/src/java/org/lamsfoundation/lams/commonContext.xml
===================================================================
RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/commonContext.xml,v
diff -u -r1.100.2.8 -r1.100.2.9
--- lams_common/src/java/org/lamsfoundation/lams/commonContext.xml 21 Oct 2014 12:24:13 -0000 1.100.2.8
+++ lams_common/src/java/org/lamsfoundation/lams/commonContext.xml 21 Oct 2014 21:25:09 -0000 1.100.2.9
@@ -234,17 +234,25 @@
lams_qtz_
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
@@ -261,11 +269,28 @@
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
+ PROPAGATION_REQUIRED
PROPAGATION_SUPPORTS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: lams_common/src/java/org/lamsfoundation/lams/events/EventNotificationService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/events/EventNotificationService.java,v
diff -u -r1.7.2.1 -r1.7.2.2
--- lams_common/src/java/org/lamsfoundation/lams/events/EventNotificationService.java 15 Oct 2014 20:49:48 -0000 1.7.2.1
+++ lams_common/src/java/org/lamsfoundation/lams/events/EventNotificationService.java 21 Oct 2014 21:25:09 -0000 1.7.2.2
@@ -19,11 +19,6 @@
import org.lamsfoundation.lams.util.Configuration;
import org.lamsfoundation.lams.util.ConfigurationKeys;
import org.lamsfoundation.lams.util.MessageService;
-import org.quartz.JobDetail;
-import org.quartz.Scheduler;
-import org.quartz.SchedulerException;
-import org.quartz.SimpleTrigger;
-import org.quartz.Trigger;
/**
* Provides tools for managing events and notifing users.
@@ -50,17 +45,6 @@
protected static final Logger log = Logger.getLogger(EventNotificationService.class);
/**
- * How often the attempts to resend messages should be taken (in miliseconds). Currently - every hour.
- */
- private static final long RESEND_FREQUENCY = 60 * 60 * 1000;
-
- /**
- * When the first resend is to be triggered (starting from class instantiation time).
- */
- private static final long FIRST_RESEND_TIME = System.currentTimeMillis() + 120000;
-
-
- /**
* Interface to contact the database.
*/
protected EventDAO eventDAO;
@@ -77,47 +61,14 @@
protected ILamsToolService toolService;
/**
- * Quartz scheduler used for resending messages.
- */
- private Scheduler scheduler;
- /**
- * Name of the Quartz job that resends messages.
- */
- private final static String RESEND_MESSAGES_JOB_NAME = "Resend Messages Job";
- /**
- * Name of the Quartz trigger that resends messages.
- */
- private final static String RESEND_MESSAGES_TRIGGER_NAME = "Resend Messages Job trigger";
-
- /**
* Default constructor. Should be called only once, since this class in a singleton.
- *
- * @param scheduler
- * scheduler injected by Spring
*/
- public EventNotificationService(Scheduler scheduler) {
+ public EventNotificationService() {
if (EventNotificationService.instance == null) {
EventNotificationService.instance = this;
- this.scheduler = scheduler;
EventNotificationService.availableDeliveryMethods.add(IEventNotificationService.DELIVERY_METHOD_MAIL);
- try {
- JobDetail resendMessagesJobDetail = getScheduler().getJobDetail(
- EventNotificationService.RESEND_MESSAGES_JOB_NAME, Scheduler.DEFAULT_GROUP);
- if (resendMessagesJobDetail == null) {
- resendMessagesJobDetail = new JobDetail(EventNotificationService.RESEND_MESSAGES_JOB_NAME,
- Scheduler.DEFAULT_GROUP, ResendMessagesJob.class);
- resendMessagesJobDetail.setDescription("");
- Trigger resendMessageTrigger = new SimpleTrigger(
- EventNotificationService.RESEND_MESSAGES_TRIGGER_NAME, Scheduler.DEFAULT_GROUP, new Date(FIRST_RESEND_TIME), null,
- SimpleTrigger.REPEAT_INDEFINITELY, EventNotificationService.RESEND_FREQUENCY);
- getScheduler().scheduleJob(resendMessagesJobDetail, resendMessageTrigger);
- }
- getScheduler().start();
- } catch (SchedulerException e) {
- EventNotificationService.log.error(e.getMessage());
- }
- }
}
+ }
/**
* Gets the only existing instance of the class.
@@ -603,7 +554,8 @@
* @param event
* event to be saved
*/
- protected void saveEvent(Event event) {
+ @Override
+ public void saveEvent(Event event) {
event.referenceCounter--;
if (event.referenceCounter <= 0) {
EventNotificationService.eventPool.remove(event);
@@ -631,10 +583,6 @@
this.userManagementService = userManagementService;
}
- private Scheduler getScheduler() {
- return scheduler;
- }
-
public void setMessageService(MessageService messageService) {
this.messageService = messageService;
}
@@ -658,4 +606,8 @@
protected ILamsToolService getToolService() {
return toolService;
}
+
+ public List getEventsToResend() {
+ return eventDAO.getEventsToResend();
+ }
}
\ No newline at end of file
Index: lams_common/src/java/org/lamsfoundation/lams/events/IEventNotificationService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/events/IEventNotificationService.java,v
diff -u -r1.4 -r1.4.2.1
--- lams_common/src/java/org/lamsfoundation/lams/events/IEventNotificationService.java 10 Mar 2014 22:39:30 -0000 1.4
+++ lams_common/src/java/org/lamsfoundation/lams/events/IEventNotificationService.java 21 Oct 2014 21:25:09 -0000 1.4.2.1
@@ -1,6 +1,7 @@
package org.lamsfoundation.lams.events;
import java.security.InvalidParameterException;
+import java.util.List;
import java.util.Set;
/**
@@ -71,6 +72,12 @@
String defaultMessage, boolean isHtmlFormat) throws InvalidParameterException;
/**
+ * Saves an event into the database.
+ */
+ void saveEvent(Event event);
+
+
+ /**
* Deletes an event.
*
* @param scope
@@ -102,7 +109,15 @@
abstract boolean eventExists(String scope, String name, Long eventSessionId)
throws InvalidParameterException;
+
/**
+ * Returns Event that are to be resend by QuartzJob
+ * @return events to resend
+ */
+ List getEventsToResend();
+
+
+ /**
* Gets the available delivery methods that can be used when subscribing an user to an event.
*
* @return set of available delivery methods in the system
@@ -356,4 +371,5 @@
*/
abstract boolean unsubscribe(String scope, String name, Long eventSessionId, Integer userId,
AbstractDeliveryMethod deliveryMethod) throws InvalidParameterException;
+
}
\ No newline at end of file
Index: lams_common/src/java/org/lamsfoundation/lams/events/ResendMessagesJob.java
===================================================================
RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/events/ResendMessagesJob.java,v
diff -u -r1.4 -r1.4.2.1
--- lams_common/src/java/org/lamsfoundation/lams/events/ResendMessagesJob.java 2 Jul 2014 17:10:59 -0000 1.4
+++ lams_common/src/java/org/lamsfoundation/lams/events/ResendMessagesJob.java 21 Oct 2014 21:25:09 -0000 1.4.2.1
@@ -4,10 +4,13 @@
import org.apache.log4j.Logger;
import org.lamsfoundation.lams.usermanagement.User;
+import org.lamsfoundation.lams.usermanagement.service.IUserManagementService;
import org.lamsfoundation.lams.util.MessageService;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
+import org.springframework.web.context.support.SpringBeanAutowiringSupport;
/**
* Quartz job for resending messages. This job is scheduled from the start-up and periodically attempts to resend failed
@@ -20,60 +23,97 @@
protected static final Logger log = Logger.getLogger(ResendMessagesJob.class);
/**
- * Period after which the thread gives up on attempting to resend messages. Currently - 2 days.
- */
- private static final long RESEND_TIME_LIMIT = 2 * 24 * 60 * 60 * 1000;
+ * Period after which the thread gives up on attempting to resend messages.
+ * Currently - 2 days.
+ */
+ private static final long RESEND_TIME_LIMIT = 2 * 24 * 60 * 60 * 1000;
- private static final EventNotificationService notificationService = EventNotificationService.getInstance();
+ @Autowired
+ private IEventNotificationService eventNotificationService;
- private static final MessageService messageService = ResendMessagesJob.notificationService.getMessageService();
-
+ @Autowired
+ private MessageService commonMessageService;
+
+ @Autowired
+ private IUserManagementService userManagementService;
+
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
- try {
- EventNotificationService.log.debug("Event notification service is running a resend messages thread...");
- List events = ResendMessagesJob.notificationService.getEventDAO().getEventsToResend();
- for (Event event : events) {
- event.referenceCounter++;
- if (event.getFailTime() != null) {
- event.trigger(event.getSubject(), event.getMessage());
- event.notificationThread.join();
- if (event.getSubscriptions().isEmpty()) {
- event.deleted = true;
- } else if (System.currentTimeMillis() - event.getFailTime().getTime() >= ResendMessagesJob.RESEND_TIME_LIMIT) {
- event.deleted = true;
- StringBuilder body = new StringBuilder(
- ResendMessagesJob.messageService.getMessage("mail.resend.abandon.body1")).append(
- event.getDefaultMessage()).append(
- ResendMessagesJob.messageService.getMessage("mail.resend.abandon.body2"));
- for (Subscription subscription : event.getSubscriptions()) {
- User user = (User) EventNotificationService.getInstance().getUserManagementService()
- .findById(User.class, subscription.getUserId());
- body.append(user.getLogin()).append('\n');
+ //First recover context of the job since it is created by Quartz, not Spring
+ SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
+ resendMessages();
+ }
+
+ private void resendMessages() throws JobExecutionException {
+ try {
+ EventNotificationService.log.debug("Event notification service is running a resend messages thread...");
+ List events = eventNotificationService.getEventsToResend();
+ for (Event event : events) {
+ event.referenceCounter++;
+ if (event.getFailTime() != null) {
+ event.trigger(event.getSubject(), event.getMessage());
+ event.notificationThread.join();
+ if (event.getSubscriptions().isEmpty()) {
+ event.deleted = true;
+ } else if (System.currentTimeMillis() - event.getFailTime().getTime() >= ResendMessagesJob.RESEND_TIME_LIMIT) {
+ event.deleted = true;
+ StringBuilder body = new StringBuilder(
+ commonMessageService.getMessage("mail.resend.abandon.body1")).append(
+ event.getDefaultMessage()).append(
+ commonMessageService.getMessage("mail.resend.abandon.body2"));
+ for (Subscription subscription : event.getSubscriptions()) {
+ User user = (User) userManagementService.findById(User.class, subscription.getUserId());
+ body.append(user.getLogin()).append('\n');
+ }
+ ((DeliveryMethodMail) IEventNotificationService.DELIVERY_METHOD_MAIL).notifyAdmin(
+ commonMessageService.getMessage("mail.resend.abandon.subject"),
+ body.toString(), event.isHtmlFormat());
+ }
+ } else {
+ for (Subscription subscription : event.getSubscriptions()) {
+ if ((subscription.getLastOperationTime() != null)
+ && (System.currentTimeMillis() - subscription.getLastOperationTime().getTime() > subscription
+ .getPeriodicity())) {
+ String subject = event.getSubject() == null ? event.getDefaultSubject() : event
+ .getSubject();
+ String message = event.getMessage() == null ? event.getDefaultMessage() : event
+ .getMessage();
+ boolean isHtmlFormat = event.isHtmlFormat();
+ subscription.notifyUser(subject, message, isHtmlFormat);
+ }
+ }
}
- ((DeliveryMethodMail) IEventNotificationService.DELIVERY_METHOD_MAIL).notifyAdmin(
- ResendMessagesJob.messageService.getMessage("mail.resend.abandon.subject"),
- body.toString(), event.isHtmlFormat());
+ eventNotificationService.saveEvent(event);
}
- } else {
- for (Subscription subscription : event.getSubscriptions()) {
- if ((subscription.getLastOperationTime() != null)
- && (System.currentTimeMillis() - subscription.getLastOperationTime().getTime() > subscription
- .getPeriodicity())) {
- String subject = event.getSubject() == null ? event.getDefaultSubject() : event
- .getSubject();
- String message = event.getMessage() == null ? event.getDefaultMessage() : event
- .getMessage();
- boolean isHtmlFormat = event.isHtmlFormat();
- subscription.notifyUser(subject, message, isHtmlFormat);
- }
- }
+ } catch (Exception e) {
+ log.error("Error while resending messages", e);
+ throw new JobExecutionException("Error while resending messages");
}
- ResendMessagesJob.notificationService.saveEvent(event);
- }
- } catch (Exception e) {
- log.error("Error while resending messages", e);
- throw new JobExecutionException("Error while resending messages");
}
- }
+
+ public IEventNotificationService getEventNotificationService() {
+ return eventNotificationService;
+ }
+
+
+ public void setEventNotificationService(IEventNotificationService eventNotificationService) {
+ this.eventNotificationService = eventNotificationService;
+ }
+
+ public MessageService getCommonMessageService() {
+ return commonMessageService;
+ }
+
+ public void setCommonMessageService(MessageService commonMessageService) {
+ this.commonMessageService = commonMessageService;
+ }
+
+ public IUserManagementService getUserManagementService() {
+ return userManagementService;
+ }
+
+ public void setUserManagementService(IUserManagementService userManagementService) {
+ this.userManagementService = userManagementService;
+ }
+
}
\ No newline at end of file