You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2016/11/18 12:29:11 UTC

svn commit: r1770374 - in /openmeetings/application: branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/ branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/ branches/3.1.x/openmeetings-...

Author: solomax
Date: Fri Nov 18 12:29:11 2016
New Revision: 1770374

URL: http://svn.apache.org/viewvc?rev=1770374&view=rev
Log:
[OPENMEETINGS-1488] basic work on expired recordings reminders

Added:
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
      - copied, changed from r1770373, openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
      - copied, changed from r1770373, openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
      - copied, changed from r1770373, openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
      - copied, changed from r1770373, openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
      - copied, changed from r1770373, openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
      - copied, changed from r1770373, openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java
Removed:
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/SessionClearJob.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/SessionClearJob.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/SessionClearJob.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java
Modified:
    openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
    openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html
    openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml

Modified: openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java?rev=1770374&r1=1770373&r2=1770374&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java Fri Nov 18 12:29:11 2016
@@ -177,12 +177,10 @@ public class RecordingDao {
 	}
 
 	public List<Recording> getExpiring(Long groupId, int reminderDays) {
-		Date startDate = Date.from(Instant.now().minus(Duration.ofDays(reminderDays)));
-		Date endDate = Date.from(Instant.now().minus(Duration.ofMinutes(15)));
+		Instant date = Instant.now().minus(Duration.ofDays(reminderDays));
 		return em.createNamedQuery("getExpiringRecordings", Recording.class)
 				.setParameter("groupId", groupId)
-				.setParameter("startDate", startDate)
-				.setParameter("endDate", endDate)
+				.setParameter("date", Date.from(date))
 				.getResultList();
 	}
 
@@ -195,7 +193,6 @@ public class RecordingDao {
 
 			Recording fId = get(recordingId);
 
-			fId.setProgressPostProcessing(0);
 			fId.setRecordEnd(recordEnd);
 
 			update(fId);
@@ -216,7 +213,10 @@ public class RecordingDao {
 	public Recording update(Recording f) {
 		try {
 			if (f.getId() == null) {
-				f.setInserted(new Date());
+				if (f.getInserted() == null) {
+					//required to preserve date while import
+					f.setInserted(new Date());
+				}
 				em.persist(f);
 			} else {
 				f.setUpdated(new Date());

Modified: openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java?rev=1770374&r1=1770373&r2=1770374&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java Fri Nov 18 12:29:11 2016
@@ -97,10 +97,11 @@ import org.simpleframework.xml.Root;
 			+ "WHERE rec.deleted = false AND rec.roomId = r.id AND rec.insertedBy = u.id "
 			+ "AND (r.externalType = :externalType OR u.externalType = :externalType)")
 	, @NamedQuery(name = "getExpiringRecordings", query = "SELECT DISTINCT rec FROM Recording rec "
-			+ "WHERE rec.deleted = false AND (rec.groupId = : groupId "
+			+ "WHERE rec.deleted = false AND rec.notified = false AND rec.inserted < :date "
+			+ "  AND (rec.groupId = :groupId "
 			+ "    OR rec.ownerId IN (SELECT gu.user.id FROM GroupUser gu WHERE gu.group.id = :groupId)"
-			+ "    OR rec.roomId IN (SELECT rg.room.id FROM RoomGroup rg WHERE rg.group.id = :groupId))"
-			+ "  AND rec.inserted BETWEEN :startDate AND :endDate")
+			+ "    OR rec.roomId IN (SELECT rg.room.id FROM RoomGroup rg WHERE rg.group.id = :groupId)"
+			+ "  ) order by rec.inserted ASC")
 })
 @Table(name = "recording")
 @Root(name = "flvrecording")
@@ -164,10 +165,6 @@ public class Recording extends FileItem
 	@Element(data = true, required = false)
 	private boolean interview;
 
-	@Column(name = "progress_post_processing")
-	@Element(data = true, required = false)
-	private Integer progressPostProcessing;
-
 	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
 	@JoinColumn(name = "recording_id")
 	@ElementList(name = "flvrecordingmetadatas", required = false)
@@ -177,7 +174,11 @@ public class Recording extends FileItem
 	@Enumerated(value = EnumType.STRING)
 	@Element(data = true, required = false)
 	private Status status = Status.NONE;
-	
+
+	@Column(name = "notified", nullable = false)
+	@Element(data = true, required = false)
+	private boolean notified = false;
+
 	// Not Mapped
 	@Transient
 	private List<RecordingLog> log;
@@ -288,14 +289,6 @@ public class Recording extends FileItem
 		this.interview = interview;
 	}
 
-	public Integer getProgressPostProcessing() {
-		return progressPostProcessing;
-	}
-
-	public void setProgressPostProcessing(Integer progressPostProcessing) {
-		this.progressPostProcessing = progressPostProcessing;
-	}
-
 	public Status getStatus() {
 		return status;
 	}
@@ -304,6 +297,14 @@ public class Recording extends FileItem
 		this.status = status;
 	}
 
+	public boolean isNotified() {
+		return notified;
+	}
+
+	public void setNotified(boolean notified) {
+		this.notified = notified;
+	}
+
 	@Override
 	public File internalGetFile(String ext) {
 		File f = null;

Copied: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java (from r1770373, openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java)
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java?p2=openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java&p1=openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java&r1=1770373&r2=1770374&rev=1770374&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java Fri Nov 18 12:29:11 2016
@@ -18,21 +18,27 @@
  */
 package org.apache.openmeetings.service.quartz.scheduler;
 
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import java.io.File;
 import java.io.FileFilter;
 
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
 import org.apache.openmeetings.util.InitializationContainer;
 import org.apache.openmeetings.util.OmFileHelper;
-import org.apache.openmeetings.util.OpenmeetingsVariables;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
 
-public class TestSetupCleanupJob {
-	private static Logger log = Red5LoggerFactory.getLogger(TestSetupCleanupJob.class, OpenmeetingsVariables.webAppRootKey);
-	private long expirationInterval = 60 * 60 * 1000; // 1 hour
+public class CleanupJob {
+	private static Logger log = Red5LoggerFactory.getLogger(CleanupJob.class, webAppRootKey);
+	private long sessionTimeout = 30 * 60 * 1000L;
+	private long testSetupTimeout = 60 * 60 * 1000L; // 1 hour
 
-	public void doIt() {
-		log.debug("TestSetupClearJob.execute");
+	@Autowired
+	private SessiondataDao sessiondataDao;
+
+	public void cleanTestSetup() {
+		log.debug("CleanupJob.execute");
 		if (!InitializationContainer.initComplete) {
 			return;
 		}
@@ -51,7 +57,7 @@ public class TestSetupCleanupJob {
 						//TODO need to rework this and remove hardcodings
 						if (files != null) {
 							for (File file : files) {
-								if (file.isFile() && file.lastModified() + expirationInterval < System.currentTimeMillis()) {
+								if (file.isFile() && file.lastModified() + testSetupTimeout < System.currentTimeMillis()) {
 									log.debug("expired TEST SETUP found: " + file.getCanonicalPath());
 									file.delete();
 								}
@@ -64,4 +70,33 @@ public class TestSetupCleanupJob {
 			log.error("Unexpected exception while processing tests setup videous.", e);
 		}
 	}
+
+	public void cleanSessions() {
+		log.trace("SessionClearJob.execute");
+		if (!InitializationContainer.initComplete) {
+			return;
+		}
+		try {
+			// TODO Generate report
+			sessiondataDao.clearSessionTable(sessionTimeout);
+		} catch (Exception err){
+			log.error("execute",err);
+		}
+	}
+
+	public long getSessionTimeout() {
+		return sessionTimeout;
+	}
+
+	public void setSessionTimeout(long sessionTimeout) {
+		this.sessionTimeout = sessionTimeout;
+	}
+
+	public long getTestSetupTimeout() {
+		return testSetupTimeout;
+	}
+
+	public void setTestSetupTimeout(long testSetupTimeout) {
+		this.testSetupTimeout = testSetupTimeout;
+	}
 }

Copied: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java (from r1770373, openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java)
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java?p2=openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java&p1=openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java&r1=1770373&r2=1770374&rev=1770374&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java Fri Nov 18 12:29:11 2016
@@ -30,8 +30,8 @@ import org.red5.logging.Red5LoggerFactor
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class MeetingReminderJob {
-	private static Logger log = Red5LoggerFactory.getLogger(MeetingReminderJob.class, webAppRootKey);
+public class ReminderJob {
+	private static Logger log = Red5LoggerFactory.getLogger(ReminderJob.class, webAppRootKey);
 	@Autowired
 	private AppointmentLogic appointmentLogic;
 	@Autowired
@@ -39,8 +39,8 @@ public class MeetingReminderJob {
 	@Autowired
 	private GroupDao groupDao;
 
-	public void remindIt() {
-		log.debug("MeetingReminderJob.remindIt");
+	public void remindMeetings() {
+		log.debug("ReminderJob.remindMeetings");
 		if (!InitializationContainer.initComplete) {
 			return;
 		}
@@ -51,14 +51,14 @@ public class MeetingReminderJob {
 		}
 	}
 
-	public void remindExpiring() {
-		log.debug("MeetingReminderJob.remindExpiring");
+	public void remindExpiringRecordings() {
+		log.debug("ReminderJob.remindExpiringRecordings");
 		if (!InitializationContainer.initComplete) {
 			return;
 		}
 		for (Group g : groupDao.getLimited()) {
 			for (Recording rec : recordingDao.getExpiring(g.getId(), g.getReminderDays())) {
-				
+				int i = 1;
 			}
 		}
 	}

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html?rev=1770374&r1=1770373&r2=1770374&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html Fri Nov 18 12:29:11 2016
@@ -86,7 +86,7 @@
 								<label><wicket:message key="admin.group.form.recordingTtl" /></label><input type="number" wicket:id="recordingTtl" /><wicket:message key="admin.group.form.days"/>
 							</div>
 							<div class="formelement">
-								<label><wicket:message key="admin.group.form.maxFilesSize" /></label><input type="number" wicket:id="reminderDays" /><wicket:message key="admin.group.form.days"/>
+								<label><wicket:message key="admin.group.form.reminderDays" /></label><input type="number" wicket:id="reminderDays" /><wicket:message key="admin.group.form.days"/>
 							</div>
 						</fieldset>
 					</div>

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml?rev=1770374&r1=1770373&r2=1770374&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml Fri Nov 18 12:29:11 2016
@@ -9,7 +9,7 @@
   with the License.  You may obtain a copy of the License at
   
       http://www.apache.org/licenses/LICENSE-2.0
-    	  
+  
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -95,84 +95,72 @@
 	<bean id="openmeetings.RecordingConverter" class="org.apache.openmeetings.core.converter.RecordingConverter" />
 	<bean id="openmeetings.SlaveHTTPConnectionManager" class="org.apache.openmeetings.webservice.cluster.SlaveHTTPConnectionManager" />
 
-	<bean id="openmeetings.SessionClearJob" class="org.apache.openmeetings.service.quartz.scheduler.SessionClearJob">
-		<property name="timeout" value="1800000"/><!-- 30 minutes -->
-	</bean>
-	<bean id="sessionClearJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="openmeetings.SessionClearJob" />
-		</property>
-		<property name="targetMethod" value="doIt" />
+	<bean id="cleanupJob" class="org.apache.openmeetings.service.quartz.scheduler.CleanupJob">
+		<property name="sessionTimeout" value="1800000"/><!-- 30 minutes -->
+		<property name="testSetupTimeout" value="3600000"/><!-- 1 hour -->
+	</bean>
+	<bean id="cleanSessionsJobDetails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject" ref="cleanupJob" />
+		<property name="targetMethod" value="cleanSessions" />
 		<property name="concurrent" value="false" />
 	</bean>
-	<bean id="triggerSessionClear" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<!-- see the example of method invoking job above -->
-			<ref bean="sessionClearJob" />
-		</property>
+	<bean id="triggerCleanSessions" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail" ref="cleanSessionsJobDetails" />
 		<property name="startDelay" value="5000"/><!-- 5 seconds -->
 		<property name="repeatInterval" value="300000" /><!-- repeat every 300 seconds == 5 minutes -->
 	</bean>
+	<bean id="cleanTestSetupJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject" ref="cleanupJob" />
+		<property name="targetMethod" value="cleanTestSetup"/>
+		<property name="concurrent" value="false" />
+	</bean>
+	<bean id="triggerCleanTestSetup" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail" ref="cleanTestSetupJobDetail" />
+		<property name="startDelay" value="1800000"/><!-- 30 minutes --> 
+		<property name="repeatInterval" value="1800000"/> <!-- 30 minutes -->
+	</bean>
 
-	<bean id="meetingReminderJob" class="org.apache.openmeetings.service.quartz.scheduler.MeetingReminderJob" />
-	<bean id="meetingReminderClear" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="meetingReminderJob" />
-		</property>
-		<property name="targetMethod" value="remindIt"/>
+	<bean id="reminderJob" class="org.apache.openmeetings.service.quartz.scheduler.ReminderJob"/>
+	<bean id="meetingReminderJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject" ref="reminderJob" />
+		<property name="targetMethod" value="remindMeetings"/>
 		<property name="concurrent" value="false" />
 	</bean>
 	<bean id="triggerMeetingReminder" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<!-- see the example of method invoking job above -->
-			<ref bean="meetingReminderClear" />
-		</property>
+		<property name="jobDetail" ref="meetingReminderJobDetail" />
 		<property name="startDelay" value="5000"/><!-- 5 seconds -->
 		<property name="repeatInterval" value="100000"/><!-- repeat every 100 seconds -->
 	</bean>
-	<bean id="testSetupCleanupJob" class="org.apache.openmeetings.service.quartz.scheduler.TestSetupCleanupJob" />
-	<bean id="testSetupCleanup" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="testSetupCleanupJob" />
-		</property>
-		<property name="targetMethod" value="doIt"/>
+	<bean id="expiringRecordingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject" ref="reminderJob" />
+		<property name="targetMethod" value="remindExpiringRecordings"/>
 		<property name="concurrent" value="false" />
 	</bean>
-	<bean id="triggerTestSetupCleanup" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<ref bean="testSetupCleanup" />
-		</property>
-		<property name="startDelay" value="1800000"/><!-- 30 minutes --> 
-		<property name="repeatInterval" value="1800000"/> <!-- 30 minutes -->
+	<bean id="triggerExpiringRecording" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail" ref="expiringRecordingJobDetail" />
+		<property name="startDelay" value="5000"/><!-- 5 seconds -->
+		<property name="repeatInterval" value="3600000"/><!-- repeat every 1 hour -->
 	</bean>
 
 	<!-- Mail related jobs -->
 	<bean id="mailHandler" class="org.apache.openmeetings.core.mail.MailHandler" />
 	<bean id="resetSendingMailStatus" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="mailHandler" />
-		</property>
+		<property name="targetObject" ref="mailHandler" />
 		<property name="targetMethod" value="resetSendingStatus"/>
 		<property name="concurrent" value="false" />
 	</bean>
 	<bean id="triggerResetSendingMailStatus" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<ref bean="resetSendingMailStatus" />
-		</property>
+		<property name="jobDetail" ref="resetSendingMailStatus" />
 		<property name="startDelay" value="60000"/> <!-- 1 minute -->
 		<property name="repeatInterval" value="900000"/> <!-- 15 minutes -->
 	</bean>
 	<bean id="sendMails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="mailHandler" />
-		</property>
+		<property name="targetObject" ref="mailHandler" />
 		<property name="targetMethod" value="sendMails"/>
 		<property name="concurrent" value="false" />
 	</bean>
 	<bean id="triggerSendMails" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<ref bean="sendMails" />
-		</property>
+		<property name="jobDetail" ref="sendMails" />
 		<property name="startDelay" value="60000"/> <!-- 1 minute -->
 		<property name="repeatInterval" value="60000"/> <!-- 1 minute -->
 	</bean>
@@ -180,9 +168,10 @@
 	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
 		<property name="triggers">
 			<list>
-				<ref bean="triggerSessionClear" />
+				<ref bean="triggerCleanSessions" />
+				<ref bean="triggerCleanTestSetup" />
 				<ref bean="triggerMeetingReminder" />
-				<ref bean="triggerTestSetupCleanup" />
+				<ref bean="triggerExpiringRecording" />
 				<ref bean="triggerResetSendingMailStatus" />
 				<ref bean="triggerSendMails" />
 			</list>

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java?rev=1770374&r1=1770373&r2=1770374&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java Fri Nov 18 12:29:11 2016
@@ -177,12 +177,10 @@ public class RecordingDao {
 	}
 
 	public List<Recording> getExpiring(Long groupId, int reminderDays) {
-		Date startDate = Date.from(Instant.now().minus(Duration.ofDays(reminderDays)));
-		Date endDate = Date.from(Instant.now().minus(Duration.ofMinutes(15)));
+		Instant date = Instant.now().minus(Duration.ofDays(reminderDays));
 		return em.createNamedQuery("getExpiringRecordings", Recording.class)
 				.setParameter("groupId", groupId)
-				.setParameter("startDate", startDate)
-				.setParameter("endDate", endDate)
+				.setParameter("date", Date.from(date))
 				.getResultList();
 	}
 
@@ -195,7 +193,6 @@ public class RecordingDao {
 
 			Recording fId = get(recordingId);
 
-			fId.setProgressPostProcessing(0);
 			fId.setRecordEnd(recordEnd);
 
 			update(fId);
@@ -216,7 +213,10 @@ public class RecordingDao {
 	public Recording update(Recording f) {
 		try {
 			if (f.getId() == null) {
-				f.setInserted(new Date());
+				if (f.getInserted() == null) {
+					//required to preserve date while import
+					f.setInserted(new Date());
+				}
 				em.persist(f);
 			} else {
 				f.setUpdated(new Date());

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java?rev=1770374&r1=1770373&r2=1770374&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java Fri Nov 18 12:29:11 2016
@@ -91,10 +91,11 @@ import org.simpleframework.xml.Root;
 			+ "WHERE rec.deleted = false AND rec.roomId = r.id AND rec.insertedBy = u.id "
 			+ "AND (r.externalType = :externalType OR u.externalType = :externalType)")
 	, @NamedQuery(name = "getExpiringRecordings", query = "SELECT DISTINCT rec FROM Recording rec "
-			+ "WHERE rec.deleted = false AND (rec.groupId = : groupId "
+			+ "WHERE rec.deleted = false AND rec.notified = false AND rec.inserted < :date "
+			+ "  AND (rec.groupId = :groupId "
 			+ "    OR rec.ownerId IN (SELECT gu.user.id FROM GroupUser gu WHERE gu.group.id = :groupId)"
-			+ "    OR rec.roomId IN (SELECT rg.room.id FROM RoomGroup rg WHERE rg.group.id = :groupId))"
-			+ "  AND rec.inserted BETWEEN :startDate AND :endDate")
+			+ "    OR rec.roomId IN (SELECT rg.room.id FROM RoomGroup rg WHERE rg.group.id = :groupId)"
+			+ "  ) order by rec.inserted ASC")
 })
 @Table(name = "recording")
 @Root(name = "flvrecording")
@@ -154,10 +155,6 @@ public class Recording extends FileItem
 	@Element(data = true, required = false)
 	private boolean interview;
 
-	@Column(name = "progress_post_processing")
-	@Element(data = true, required = false)
-	private Integer progressPostProcessing;
-
 	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
 	@JoinColumn(name = "recording_id")
 	@ElementList(name = "flvrecordingmetadatas", required = false)
@@ -167,7 +164,11 @@ public class Recording extends FileItem
 	@Enumerated(value = EnumType.STRING)
 	@Element(data = true, required = false)
 	private Status status = Status.NONE;
-	
+
+	@Column(name = "notified", nullable = false)
+	@Element(data = true, required = false)
+	private boolean notified = false;
+
 	@Override
 	public Long getId() {
 		return id;
@@ -258,14 +259,6 @@ public class Recording extends FileItem
 		this.interview = interview;
 	}
 
-	public Integer getProgressPostProcessing() {
-		return progressPostProcessing;
-	}
-
-	public void setProgressPostProcessing(Integer progressPostProcessing) {
-		this.progressPostProcessing = progressPostProcessing;
-	}
-
 	public Status getStatus() {
 		return status;
 	}
@@ -274,6 +267,14 @@ public class Recording extends FileItem
 		this.status = status;
 	}
 
+	public boolean isNotified() {
+		return notified;
+	}
+
+	public void setNotified(boolean notified) {
+		this.notified = notified;
+	}
+
 	@Override
 	public String getFileName(String ext) {
 		return String.format("%s%s.%s", recordingFileName, id, ext == null ? EXTENSION_MP4 : ext);

Copied: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java (from r1770373, openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java)
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java?p2=openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java&p1=openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java&r1=1770373&r2=1770374&rev=1770374&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java Fri Nov 18 12:29:11 2016
@@ -18,21 +18,27 @@
  */
 package org.apache.openmeetings.service.quartz.scheduler;
 
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import java.io.File;
 import java.io.FileFilter;
 
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
 import org.apache.openmeetings.util.InitializationContainer;
 import org.apache.openmeetings.util.OmFileHelper;
-import org.apache.openmeetings.util.OpenmeetingsVariables;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
 
-public class TestSetupCleanupJob {
-	private static Logger log = Red5LoggerFactory.getLogger(TestSetupCleanupJob.class, OpenmeetingsVariables.webAppRootKey);
-	private long expirationInterval = 60 * 60 * 1000; // 1 hour
+public class CleanupJob {
+	private static Logger log = Red5LoggerFactory.getLogger(CleanupJob.class, webAppRootKey);
+	private long sessionTimeout = 30 * 60 * 1000L;
+	private long testSetupTimeout = 60 * 60 * 1000L; // 1 hour
 
-	public void doIt() {
-		log.debug("TestSetupClearJob.execute");
+	@Autowired
+	private SessiondataDao sessiondataDao;
+
+	public void cleanTestSetup() {
+		log.debug("CleanupJob.execute");
 		if (!InitializationContainer.initComplete) {
 			return;
 		}
@@ -51,7 +57,7 @@ public class TestSetupCleanupJob {
 						//TODO need to rework this and remove hardcodings
 						if (files != null) {
 							for (File file : files) {
-								if (file.isFile() && file.lastModified() + expirationInterval < System.currentTimeMillis()) {
+								if (file.isFile() && file.lastModified() + testSetupTimeout < System.currentTimeMillis()) {
 									log.debug("expired TEST SETUP found: " + file.getCanonicalPath());
 									file.delete();
 								}
@@ -64,4 +70,33 @@ public class TestSetupCleanupJob {
 			log.error("Unexpected exception while processing tests setup videous.", e);
 		}
 	}
+
+	public void cleanSessions() {
+		log.trace("SessionClearJob.execute");
+		if (!InitializationContainer.initComplete) {
+			return;
+		}
+		try {
+			// TODO Generate report
+			sessiondataDao.clearSessionTable(sessionTimeout);
+		} catch (Exception err){
+			log.error("execute",err);
+		}
+	}
+
+	public long getSessionTimeout() {
+		return sessionTimeout;
+	}
+
+	public void setSessionTimeout(long sessionTimeout) {
+		this.sessionTimeout = sessionTimeout;
+	}
+
+	public long getTestSetupTimeout() {
+		return testSetupTimeout;
+	}
+
+	public void setTestSetupTimeout(long testSetupTimeout) {
+		this.testSetupTimeout = testSetupTimeout;
+	}
 }

Copied: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java (from r1770373, openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java)
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java?p2=openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java&p1=openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java&r1=1770373&r2=1770374&rev=1770374&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java Fri Nov 18 12:29:11 2016
@@ -30,8 +30,8 @@ import org.red5.logging.Red5LoggerFactor
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class MeetingReminderJob {
-	private static Logger log = Red5LoggerFactory.getLogger(MeetingReminderJob.class, webAppRootKey);
+public class ReminderJob {
+	private static Logger log = Red5LoggerFactory.getLogger(ReminderJob.class, webAppRootKey);
 	@Autowired
 	private AppointmentLogic appointmentLogic;
 	@Autowired
@@ -39,8 +39,8 @@ public class MeetingReminderJob {
 	@Autowired
 	private GroupDao groupDao;
 
-	public void remindIt() {
-		log.debug("MeetingReminderJob.remindIt");
+	public void remindMeetings() {
+		log.debug("ReminderJob.remindMeetings");
 		if (!InitializationContainer.initComplete) {
 			return;
 		}
@@ -51,14 +51,14 @@ public class MeetingReminderJob {
 		}
 	}
 
-	public void remindExpiring() {
-		log.debug("MeetingReminderJob.remindExpiring");
+	public void remindExpiringRecordings() {
+		log.debug("ReminderJob.remindExpiringRecordings");
 		if (!InitializationContainer.initComplete) {
 			return;
 		}
 		for (Group g : groupDao.getLimited()) {
 			for (Recording rec : recordingDao.getExpiring(g.getId(), g.getReminderDays())) {
-				
+				int i = 1;
 			}
 		}
 	}

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html?rev=1770374&r1=1770373&r2=1770374&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html Fri Nov 18 12:29:11 2016
@@ -86,7 +86,7 @@
 								<label><wicket:message key="admin.group.form.recordingTtl" /></label><input type="number" wicket:id="recordingTtl" /><wicket:message key="admin.group.form.days"/>
 							</div>
 							<div class="formelement">
-								<label><wicket:message key="admin.group.form.maxFilesSize" /></label><input type="number" wicket:id="reminderDays" /><wicket:message key="admin.group.form.days"/>
+								<label><wicket:message key="admin.group.form.reminderDays" /></label><input type="number" wicket:id="reminderDays" /><wicket:message key="admin.group.form.days"/>
 							</div>
 						</fieldset>
 					</div>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml?rev=1770374&r1=1770373&r2=1770374&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml Fri Nov 18 12:29:11 2016
@@ -9,7 +9,7 @@
   with the License.  You may obtain a copy of the License at
   
       http://www.apache.org/licenses/LICENSE-2.0
-    	  
+  
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -91,84 +91,72 @@
 	<bean id="openmeetings.RecordingConverter" class="org.apache.openmeetings.core.converter.RecordingConverter" />
 	<bean id="openmeetings.SlaveHTTPConnectionManager" class="org.apache.openmeetings.webservice.cluster.SlaveHTTPConnectionManager" />
 
-	<bean id="openmeetings.SessionClearJob" class="org.apache.openmeetings.service.quartz.scheduler.SessionClearJob">
-		<property name="timeout" value="1800000"/><!-- 30 minutes -->
-	</bean>
-	<bean id="sessionClearJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="openmeetings.SessionClearJob" />
-		</property>
-		<property name="targetMethod" value="doIt" />
+	<bean id="cleanupJob" class="org.apache.openmeetings.service.quartz.scheduler.CleanupJob">
+		<property name="sessionTimeout" value="1800000"/><!-- 30 minutes -->
+		<property name="testSetupTimeout" value="3600000"/><!-- 1 hour -->
+	</bean>
+	<bean id="cleanSessionsJobDetails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject" ref="cleanupJob" />
+		<property name="targetMethod" value="cleanSessions" />
 		<property name="concurrent" value="false" />
 	</bean>
-	<bean id="triggerSessionClear" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<!-- see the example of method invoking job above -->
-			<ref bean="sessionClearJob" />
-		</property>
+	<bean id="triggerCleanSessions" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail" ref="cleanSessionsJobDetails" />
 		<property name="startDelay" value="5000"/><!-- 5 seconds -->
 		<property name="repeatInterval" value="300000" /><!-- repeat every 300 seconds == 5 minutes -->
 	</bean>
+	<bean id="cleanTestSetupJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject" ref="cleanupJob" />
+		<property name="targetMethod" value="cleanTestSetup"/>
+		<property name="concurrent" value="false" />
+	</bean>
+	<bean id="triggerCleanTestSetup" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail" ref="cleanTestSetupJobDetail" />
+		<property name="startDelay" value="1800000"/><!-- 30 minutes --> 
+		<property name="repeatInterval" value="1800000"/> <!-- 30 minutes -->
+	</bean>
 
-	<bean id="meetingReminderJob" class="org.apache.openmeetings.service.quartz.scheduler.MeetingReminderJob" />
-	<bean id="meetingReminderClear" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="meetingReminderJob" />
-		</property>
-		<property name="targetMethod" value="remindIt"/>
+	<bean id="reminderJob" class="org.apache.openmeetings.service.quartz.scheduler.ReminderJob"/>
+	<bean id="meetingReminderJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject" ref="reminderJob" />
+		<property name="targetMethod" value="remindMeetings"/>
 		<property name="concurrent" value="false" />
 	</bean>
 	<bean id="triggerMeetingReminder" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<!-- see the example of method invoking job above -->
-			<ref bean="meetingReminderClear" />
-		</property>
+		<property name="jobDetail" ref="meetingReminderJobDetail" />
 		<property name="startDelay" value="5000"/><!-- 5 seconds -->
 		<property name="repeatInterval" value="100000"/><!-- repeat every 100 seconds -->
 	</bean>
-	<bean id="testSetupCleanupJob" class="org.apache.openmeetings.service.quartz.scheduler.TestSetupCleanupJob" />
-	<bean id="testSetupCleanup" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="testSetupCleanupJob" />
-		</property>
-		<property name="targetMethod" value="doIt"/>
+	<bean id="expiringRecordingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject" ref="reminderJob" />
+		<property name="targetMethod" value="remindExpiringRecordings"/>
 		<property name="concurrent" value="false" />
 	</bean>
-	<bean id="triggerTestSetupCleanup" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<ref bean="testSetupCleanup" />
-		</property>
-		<property name="startDelay" value="1800000"/><!-- 30 minutes --> 
-		<property name="repeatInterval" value="1800000"/> <!-- 30 minutes -->
+	<bean id="triggerExpiringRecording" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail" ref="expiringRecordingJobDetail" />
+		<property name="startDelay" value="5000"/><!-- 5 seconds -->
+		<property name="repeatInterval" value="3600000"/><!-- repeat every 1 hour -->
 	</bean>
 
 	<!-- Mail related jobs -->
 	<bean id="mailHandler" class="org.apache.openmeetings.core.mail.MailHandler" />
 	<bean id="resetSendingMailStatus" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="mailHandler" />
-		</property>
+		<property name="targetObject" ref="mailHandler" />
 		<property name="targetMethod" value="resetSendingStatus"/>
 		<property name="concurrent" value="false" />
 	</bean>
 	<bean id="triggerResetSendingMailStatus" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<ref bean="resetSendingMailStatus" />
-		</property>
+		<property name="jobDetail" ref="resetSendingMailStatus" />
 		<property name="startDelay" value="60000"/> <!-- 1 minute -->
 		<property name="repeatInterval" value="900000"/> <!-- 15 minutes -->
 	</bean>
 	<bean id="sendMails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="mailHandler" />
-		</property>
+		<property name="targetObject" ref="mailHandler" />
 		<property name="targetMethod" value="sendMails"/>
 		<property name="concurrent" value="false" />
 	</bean>
 	<bean id="triggerSendMails" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<ref bean="sendMails" />
-		</property>
+		<property name="jobDetail" ref="sendMails" />
 		<property name="startDelay" value="60000"/> <!-- 1 minute -->
 		<property name="repeatInterval" value="60000"/> <!-- 1 minute -->
 	</bean>
@@ -176,9 +164,10 @@
 	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
 		<property name="triggers">
 			<list>
-				<ref bean="triggerSessionClear" />
+				<ref bean="triggerCleanSessions" />
+				<ref bean="triggerCleanTestSetup" />
 				<ref bean="triggerMeetingReminder" />
-				<ref bean="triggerTestSetupCleanup" />
+				<ref bean="triggerExpiringRecording" />
 				<ref bean="triggerResetSendingMailStatus" />
 				<ref bean="triggerSendMails" />
 			</list>

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java?rev=1770374&r1=1770373&r2=1770374&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java Fri Nov 18 12:29:11 2016
@@ -177,12 +177,10 @@ public class RecordingDao {
 	}
 
 	public List<Recording> getExpiring(Long groupId, int reminderDays) {
-		Date startDate = Date.from(Instant.now().minus(Duration.ofDays(reminderDays)));
-		Date endDate = Date.from(Instant.now().minus(Duration.ofMinutes(15)));
+		Instant date = Instant.now().minus(Duration.ofDays(reminderDays));
 		return em.createNamedQuery("getExpiringRecordings", Recording.class)
 				.setParameter("groupId", groupId)
-				.setParameter("startDate", startDate)
-				.setParameter("endDate", endDate)
+				.setParameter("date", Date.from(date))
 				.getResultList();
 	}
 
@@ -195,7 +193,6 @@ public class RecordingDao {
 
 			Recording fId = get(recordingId);
 
-			fId.setProgressPostProcessing(0);
 			fId.setRecordEnd(recordEnd);
 
 			update(fId);
@@ -216,7 +213,10 @@ public class RecordingDao {
 	public Recording update(Recording f) {
 		try {
 			if (f.getId() == null) {
-				f.setInserted(new Date());
+				if (f.getInserted() == null) {
+					//required to preserve date while import
+					f.setInserted(new Date());
+				}
 				em.persist(f);
 			} else {
 				f.setUpdated(new Date());

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java?rev=1770374&r1=1770373&r2=1770374&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java Fri Nov 18 12:29:11 2016
@@ -91,10 +91,11 @@ import org.simpleframework.xml.Root;
 			+ "WHERE rec.deleted = false AND rec.roomId = r.id AND rec.insertedBy = u.id "
 			+ "AND (r.externalType = :externalType OR u.externalType = :externalType)")
 	, @NamedQuery(name = "getExpiringRecordings", query = "SELECT DISTINCT rec FROM Recording rec "
-			+ "WHERE rec.deleted = false AND (rec.groupId = : groupId "
+			+ "WHERE rec.deleted = false AND rec.notified = false AND rec.inserted < :date "
+			+ "  AND (rec.groupId = :groupId "
 			+ "    OR rec.ownerId IN (SELECT gu.user.id FROM GroupUser gu WHERE gu.group.id = :groupId)"
-			+ "    OR rec.roomId IN (SELECT rg.room.id FROM RoomGroup rg WHERE rg.group.id = :groupId))"
-			+ "  AND rec.inserted BETWEEN :startDate AND :endDate")
+			+ "    OR rec.roomId IN (SELECT rg.room.id FROM RoomGroup rg WHERE rg.group.id = :groupId)"
+			+ "  ) order by rec.inserted ASC")
 })
 @Table(name = "recording")
 @Root(name = "flvrecording")
@@ -154,10 +155,6 @@ public class Recording extends FileItem
 	@Element(data = true, required = false)
 	private boolean interview;
 
-	@Column(name = "progress_post_processing")
-	@Element(data = true, required = false)
-	private Integer progressPostProcessing;
-
 	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
 	@JoinColumn(name = "recording_id")
 	@ElementList(name = "flvrecordingmetadatas", required = false)
@@ -167,7 +164,11 @@ public class Recording extends FileItem
 	@Enumerated(value = EnumType.STRING)
 	@Element(data = true, required = false)
 	private Status status = Status.NONE;
-	
+
+	@Column(name = "notified", nullable = false)
+	@Element(data = true, required = false)
+	private boolean notified = false;
+
 	@Override
 	public Long getId() {
 		return id;
@@ -258,14 +259,6 @@ public class Recording extends FileItem
 		this.interview = interview;
 	}
 
-	public Integer getProgressPostProcessing() {
-		return progressPostProcessing;
-	}
-
-	public void setProgressPostProcessing(Integer progressPostProcessing) {
-		this.progressPostProcessing = progressPostProcessing;
-	}
-
 	public Status getStatus() {
 		return status;
 	}
@@ -274,6 +267,14 @@ public class Recording extends FileItem
 		this.status = status;
 	}
 
+	public boolean isNotified() {
+		return notified;
+	}
+
+	public void setNotified(boolean notified) {
+		this.notified = notified;
+	}
+
 	@Override
 	public String getFileName(String ext) {
 		return String.format("%s%s.%s", recordingFileName, id, ext == null ? EXTENSION_MP4 : ext);

Copied: openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java (from r1770373, openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java)
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java?p2=openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java&p1=openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java&r1=1770373&r2=1770374&rev=1770374&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/TestSetupCleanupJob.java (original)
+++ openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java Fri Nov 18 12:29:11 2016
@@ -18,21 +18,27 @@
  */
 package org.apache.openmeetings.service.quartz.scheduler;
 
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import java.io.File;
 import java.io.FileFilter;
 
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
 import org.apache.openmeetings.util.InitializationContainer;
 import org.apache.openmeetings.util.OmFileHelper;
-import org.apache.openmeetings.util.OpenmeetingsVariables;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
 
-public class TestSetupCleanupJob {
-	private static Logger log = Red5LoggerFactory.getLogger(TestSetupCleanupJob.class, OpenmeetingsVariables.webAppRootKey);
-	private long expirationInterval = 60 * 60 * 1000; // 1 hour
+public class CleanupJob {
+	private static Logger log = Red5LoggerFactory.getLogger(CleanupJob.class, webAppRootKey);
+	private long sessionTimeout = 30 * 60 * 1000L;
+	private long testSetupTimeout = 60 * 60 * 1000L; // 1 hour
 
-	public void doIt() {
-		log.debug("TestSetupClearJob.execute");
+	@Autowired
+	private SessiondataDao sessiondataDao;
+
+	public void cleanTestSetup() {
+		log.debug("CleanupJob.execute");
 		if (!InitializationContainer.initComplete) {
 			return;
 		}
@@ -51,7 +57,7 @@ public class TestSetupCleanupJob {
 						//TODO need to rework this and remove hardcodings
 						if (files != null) {
 							for (File file : files) {
-								if (file.isFile() && file.lastModified() + expirationInterval < System.currentTimeMillis()) {
+								if (file.isFile() && file.lastModified() + testSetupTimeout < System.currentTimeMillis()) {
 									log.debug("expired TEST SETUP found: " + file.getCanonicalPath());
 									file.delete();
 								}
@@ -64,4 +70,33 @@ public class TestSetupCleanupJob {
 			log.error("Unexpected exception while processing tests setup videous.", e);
 		}
 	}
+
+	public void cleanSessions() {
+		log.trace("SessionClearJob.execute");
+		if (!InitializationContainer.initComplete) {
+			return;
+		}
+		try {
+			// TODO Generate report
+			sessiondataDao.clearSessionTable(sessionTimeout);
+		} catch (Exception err){
+			log.error("execute",err);
+		}
+	}
+
+	public long getSessionTimeout() {
+		return sessionTimeout;
+	}
+
+	public void setSessionTimeout(long sessionTimeout) {
+		this.sessionTimeout = sessionTimeout;
+	}
+
+	public long getTestSetupTimeout() {
+		return testSetupTimeout;
+	}
+
+	public void setTestSetupTimeout(long testSetupTimeout) {
+		this.testSetupTimeout = testSetupTimeout;
+	}
 }

Copied: openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java (from r1770373, openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java)
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java?p2=openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java&p1=openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java&r1=1770373&r2=1770374&rev=1770374&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/MeetingReminderJob.java (original)
+++ openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java Fri Nov 18 12:29:11 2016
@@ -30,8 +30,8 @@ import org.red5.logging.Red5LoggerFactor
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class MeetingReminderJob {
-	private static Logger log = Red5LoggerFactory.getLogger(MeetingReminderJob.class, webAppRootKey);
+public class ReminderJob {
+	private static Logger log = Red5LoggerFactory.getLogger(ReminderJob.class, webAppRootKey);
 	@Autowired
 	private AppointmentLogic appointmentLogic;
 	@Autowired
@@ -39,8 +39,8 @@ public class MeetingReminderJob {
 	@Autowired
 	private GroupDao groupDao;
 
-	public void remindIt() {
-		log.debug("MeetingReminderJob.remindIt");
+	public void remindMeetings() {
+		log.debug("ReminderJob.remindMeetings");
 		if (!InitializationContainer.initComplete) {
 			return;
 		}
@@ -51,14 +51,14 @@ public class MeetingReminderJob {
 		}
 	}
 
-	public void remindExpiring() {
-		log.debug("MeetingReminderJob.remindExpiring");
+	public void remindExpiringRecordings() {
+		log.debug("ReminderJob.remindExpiringRecordings");
 		if (!InitializationContainer.initComplete) {
 			return;
 		}
 		for (Group g : groupDao.getLimited()) {
 			for (Recording rec : recordingDao.getExpiring(g.getId(), g.getReminderDays())) {
-				
+				int i = 1;
 			}
 		}
 	}

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html?rev=1770374&r1=1770373&r2=1770374&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html Fri Nov 18 12:29:11 2016
@@ -86,7 +86,7 @@
 								<label><wicket:message key="admin.group.form.recordingTtl" /></label><input type="number" wicket:id="recordingTtl" /><wicket:message key="admin.group.form.days"/>
 							</div>
 							<div class="formelement">
-								<label><wicket:message key="admin.group.form.maxFilesSize" /></label><input type="number" wicket:id="reminderDays" /><wicket:message key="admin.group.form.days"/>
+								<label><wicket:message key="admin.group.form.reminderDays" /></label><input type="number" wicket:id="reminderDays" /><wicket:message key="admin.group.form.days"/>
 							</div>
 						</fieldset>
 					</div>

Modified: openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml?rev=1770374&r1=1770373&r2=1770374&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml Fri Nov 18 12:29:11 2016
@@ -9,7 +9,7 @@
   with the License.  You may obtain a copy of the License at
   
       http://www.apache.org/licenses/LICENSE-2.0
-    	  
+  
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -89,84 +89,72 @@
 	<bean id="openmeetings.RecordingConverter" class="org.apache.openmeetings.core.converter.RecordingConverter" />
 	<bean id="openmeetings.SlaveHTTPConnectionManager" class="org.apache.openmeetings.webservice.cluster.SlaveHTTPConnectionManager" />
 
-	<bean id="openmeetings.SessionClearJob" class="org.apache.openmeetings.service.quartz.scheduler.SessionClearJob">
-		<property name="timeout" value="1800000"/><!-- 30 minutes -->
-	</bean>
-	<bean id="sessionClearJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="openmeetings.SessionClearJob" />
-		</property>
-		<property name="targetMethod" value="doIt" />
+	<bean id="cleanupJob" class="org.apache.openmeetings.service.quartz.scheduler.CleanupJob">
+		<property name="sessionTimeout" value="1800000"/><!-- 30 minutes -->
+		<property name="testSetupTimeout" value="3600000"/><!-- 1 hour -->
+	</bean>
+	<bean id="cleanSessionsJobDetails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject" ref="cleanupJob" />
+		<property name="targetMethod" value="cleanSessions" />
 		<property name="concurrent" value="false" />
 	</bean>
-	<bean id="triggerSessionClear" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<!-- see the example of method invoking job above -->
-			<ref bean="sessionClearJob" />
-		</property>
+	<bean id="triggerCleanSessions" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail" ref="cleanSessionsJobDetails" />
 		<property name="startDelay" value="5000"/><!-- 5 seconds -->
 		<property name="repeatInterval" value="300000" /><!-- repeat every 300 seconds == 5 minutes -->
 	</bean>
+	<bean id="cleanTestSetupJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject" ref="cleanupJob" />
+		<property name="targetMethod" value="cleanTestSetup"/>
+		<property name="concurrent" value="false" />
+	</bean>
+	<bean id="triggerCleanTestSetup" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail" ref="cleanTestSetupJobDetail" />
+		<property name="startDelay" value="1800000"/><!-- 30 minutes --> 
+		<property name="repeatInterval" value="1800000"/> <!-- 30 minutes -->
+	</bean>
 
-	<bean id="meetingReminderJob" class="org.apache.openmeetings.service.quartz.scheduler.MeetingReminderJob" />
-	<bean id="meetingReminderClear" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="meetingReminderJob" />
-		</property>
-		<property name="targetMethod" value="remindIt"/>
+	<bean id="reminderJob" class="org.apache.openmeetings.service.quartz.scheduler.ReminderJob"/>
+	<bean id="meetingReminderJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject" ref="reminderJob" />
+		<property name="targetMethod" value="remindMeetings"/>
 		<property name="concurrent" value="false" />
 	</bean>
 	<bean id="triggerMeetingReminder" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<!-- see the example of method invoking job above -->
-			<ref bean="meetingReminderClear" />
-		</property>
+		<property name="jobDetail" ref="meetingReminderJobDetail" />
 		<property name="startDelay" value="5000"/><!-- 5 seconds -->
 		<property name="repeatInterval" value="100000"/><!-- repeat every 100 seconds -->
 	</bean>
-	<bean id="testSetupCleanupJob" class="org.apache.openmeetings.service.quartz.scheduler.TestSetupCleanupJob" />
-	<bean id="testSetupCleanup" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="testSetupCleanupJob" />
-		</property>
-		<property name="targetMethod" value="doIt"/>
+	<bean id="expiringRecordingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject" ref="reminderJob" />
+		<property name="targetMethod" value="remindExpiringRecordings"/>
 		<property name="concurrent" value="false" />
 	</bean>
-	<bean id="triggerTestSetupCleanup" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<ref bean="testSetupCleanup" />
-		</property>
-		<property name="startDelay" value="1800000"/><!-- 30 minutes --> 
-		<property name="repeatInterval" value="1800000"/> <!-- 30 minutes -->
+	<bean id="triggerExpiringRecording" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail" ref="expiringRecordingJobDetail" />
+		<property name="startDelay" value="5000"/><!-- 5 seconds -->
+		<property name="repeatInterval" value="3600000"/><!-- repeat every 1 hour -->
 	</bean>
 
 	<!-- Mail related jobs -->
 	<bean id="mailHandler" class="org.apache.openmeetings.core.mail.MailHandler" />
 	<bean id="resetSendingMailStatus" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="mailHandler" />
-		</property>
+		<property name="targetObject" ref="mailHandler" />
 		<property name="targetMethod" value="resetSendingStatus"/>
 		<property name="concurrent" value="false" />
 	</bean>
 	<bean id="triggerResetSendingMailStatus" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<ref bean="resetSendingMailStatus" />
-		</property>
+		<property name="jobDetail" ref="resetSendingMailStatus" />
 		<property name="startDelay" value="60000"/> <!-- 1 minute -->
 		<property name="repeatInterval" value="900000"/> <!-- 15 minutes -->
 	</bean>
 	<bean id="sendMails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-		<property name="targetObject">
-			<ref bean="mailHandler" />
-		</property>
+		<property name="targetObject" ref="mailHandler" />
 		<property name="targetMethod" value="sendMails"/>
 		<property name="concurrent" value="false" />
 	</bean>
 	<bean id="triggerSendMails" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
-		<property name="jobDetail">
-			<ref bean="sendMails" />
-		</property>
+		<property name="jobDetail" ref="sendMails" />
 		<property name="startDelay" value="60000"/> <!-- 1 minute -->
 		<property name="repeatInterval" value="60000"/> <!-- 1 minute -->
 	</bean>
@@ -174,9 +162,10 @@
 	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
 		<property name="triggers">
 			<list>
-				<ref bean="triggerSessionClear" />
+				<ref bean="triggerCleanSessions" />
+				<ref bean="triggerCleanTestSetup" />
 				<ref bean="triggerMeetingReminder" />
-				<ref bean="triggerTestSetupCleanup" />
+				<ref bean="triggerExpiringRecording" />
 				<ref bean="triggerResetSendingMailStatus" />
 				<ref bean="triggerSendMails" />
 			</list>