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 2017/02/20 15:43:50 UTC
svn commit: r1783779 - in /openmeetings/application:
branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/
branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/
branches/3.2.x/openmeetings-...
Author: solomax
Date: Mon Feb 20 15:43:49 2017
New Revision: 1783779
URL: http://svn.apache.org/viewvc?rev=1783779&view=rev
Log:
[OPENMEETINGS-1570] room video conversion should be fixed, room clean-up is added
Modified:
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
Modified: openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java Mon Feb 20 15:43:49 2017
@@ -60,14 +60,14 @@ public class FileProcessor {
//FIXME TODO this method need to be refactored to throw exceptions
public ConverterProcessResultList processFile(Long userId, FileExplorerItem f, InputStream is) throws Exception {
ConverterProcessResultList returnError = new ConverterProcessResultList();
-
+
// Generate a random string to prevent any problems with
// foreign characters and duplicates
String hash = UUID.randomUUID().toString();
String ext = getFileExt(f.getName());
log.debug("file extension: " + ext);
- StoredFile storedFile = new StoredFile(hash, ext);
+ StoredFile storedFile = new StoredFile(hash, ext);
// Check variable to see if this file is a presentation
// check if this is a a file that can be converted by
@@ -109,7 +109,7 @@ public class FileProcessor {
}
FileUtils.copyInputStreamToFile(is, file);
-
+
log.debug("canBeConverted: " + canBeConverted);
if (canBeConverted || isPdf) {
// convert to pdf, thumbs, swf and xml-description
@@ -125,18 +125,18 @@ public class FileProcessor {
returnError.addItem("processThumb", processThumb);
} else if (isVideo) {
List<ConverterProcessResult> returnList = flvExplorerConverter.convertToMP4(f, ext);
-
+
int i = 0;
for (ConverterProcessResult returnMap : returnList) {
- returnError.addItem("processFLV " + i, returnMap);
+ returnError.addItem("processVideo " + i++, returnMap);
}
}
-
+
// has to happen at the end, otherwise it will be overwritten
//cause the variable is new initialized
returnError.setCompleteName(file.getName());
returnError.setFileItemId(f.getId());
-
+
return returnError;
}
}
Modified: openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java Mon Feb 20 15:43:49 2017
@@ -56,9 +56,9 @@ import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
/**
- *
+ *
* @author swagner
- *
+ *
*/
public class ConferenceLibrary implements IPendingServiceCallback {
private static final Logger log = Red5LoggerFactory.getLogger(ConferenceLibrary.class, webAppRootKey);
@@ -102,9 +102,9 @@ public class ConferenceLibrary implement
}
/**
- *
+ *
* Save an Object to the library and returns the file-explorer Id
- *
+ *
* @param sid
* @param roomId
* @param fileName
@@ -140,7 +140,7 @@ public class ConferenceLibrary implement
/**
* Loads a Object from the library into the whiteboard of all participant of
* the current room
- *
+ *
* @param uid - uid of the client performing operation
* @param wbId - id of whiteboard
* @param fi - FileItem of the Wml being loaded
@@ -185,9 +185,9 @@ public class ConferenceLibrary implement
}
/**
- *
+ *
* Loads a chart object
- *
+ *
* @param sid
* @param room_id
* @param fileName
@@ -229,7 +229,7 @@ public class ConferenceLibrary implement
File target = new File(targetFolder, mp4.getName());
if (mp4.exists() && !target.exists()) {
- FileUtils.copyFile(mp4, target);
+ FileUtils.copyFile(mp4, target, false);
}
return 1L;
}
Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.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?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java Mon Feb 20 15:43:49 2017
@@ -19,14 +19,22 @@
package org.apache.openmeetings.service.quartz.scheduler;
import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
+import static org.apache.openmeetings.util.OmFileHelper.TEST_SETUP_PREFIX;
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsDir;
import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
import java.io.File;
import java.io.FileFilter;
+import java.util.Map;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.apache.openmeetings.core.data.whiteboard.WhiteBoardObjectListManagerById;
+import org.apache.openmeetings.core.session.SessionManager;
import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dto.room.WhiteboardObject;
+import org.apache.openmeetings.db.dto.room.WhiteboardObjectList;
import org.apache.openmeetings.util.InitializationContainer;
-import org.apache.openmeetings.util.OmFileHelper;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@@ -35,9 +43,14 @@ public class CleanupJob extends Abstract
private static Logger log = Red5LoggerFactory.getLogger(CleanupJob.class, webAppRootKey);
private long sessionTimeout = 30 * 60 * 1000L;
private long testSetupTimeout = 60 * 60 * 1000L; // 1 hour
+ private long roomFilesTtl = 60 * 60 * 1000L; // 1 hour
@Autowired
- private SessiondataDao sessiondataDao;
+ private SessiondataDao sessionDao;
+ @Autowired
+ private SessionManager sessionManager;
+ @Autowired
+ private WhiteBoardObjectListManagerById wbManager;
public long getSessionTimeout() {
return sessionTimeout;
@@ -55,24 +68,31 @@ public class CleanupJob extends Abstract
this.testSetupTimeout = testSetupTimeout;
}
+ public long getRoomFilesTtl() {
+ return roomFilesTtl;
+ }
+
+ public void setRoomFilesTtl(long roomFilesTtl) {
+ this.roomFilesTtl = roomFilesTtl;
+ }
+
public void cleanTestSetup() {
- log.debug("CleanupJob.execute");
+ log.debug("CleanupJob.cleanTestSetup");
if (!InitializationContainer.initComplete) {
return;
}
try {
//FIXME need to move all these staff to helper
- File[] folders = OmFileHelper.getStreamsDir().listFiles();
+ File[] folders = getStreamsDir().listFiles();
if (folders != null) {
for (File folder : folders) {
if (folder.isDirectory()) {
File[] files = folder.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
- return file.getName().startsWith("TEST_SETUP_");
+ return file.getName().startsWith(TEST_SETUP_PREFIX);
}
});
- //TODO need to rework this and remove hardcodings
if (files != null) {
for (File file : files) {
if (file.isFile() && file.lastModified() + testSetupTimeout < System.currentTimeMillis()) {
@@ -89,6 +109,47 @@ public class CleanupJob extends Abstract
}
}
+ public void cleanRoomFiles() {
+ log.debug("CleanupJob.cleanRoomFiles");
+ if (!InitializationContainer.initComplete) {
+ return;
+ }
+ try {
+ //FIXME need to move all these staff to helper
+ File[] folders = getStreamsDir().listFiles();
+ if (folders != null) {
+ for (File folder : folders) {
+ Long roomId = null;
+ if (NumberUtils.isCreatable(folder.getName())) {
+ roomId = Long.valueOf(folder.getName());
+ WhiteboardObjectList wbList = wbManager.getWhiteBoardObjectListByRoomId(roomId);
+ for (Map.Entry<Long, WhiteboardObject> e : wbList.getWhiteboardObjects().entrySet()) {
+ if (!e.getValue().getRoomItems().isEmpty()) {
+ roomId = null;
+ break;
+ }
+ }
+ }
+ if (folder.isDirectory() && roomId != null && sessionManager.getClientListByRoom(roomId).isEmpty()) {
+ File[] files = folder.listFiles();
+ //TODO need to rework this and remove hardcodings
+ if (files != null) {
+ for (File file : files) {
+ if (file.isFile() && file.lastModified() + roomFilesTtl < System.currentTimeMillis()) {
+ log.debug("Room files are too old and no users in the room: " + roomId);
+ FileUtils.deleteDirectory(folder);
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ log.error("Unexpected exception while processing tests setup videous.", e);
+ }
+ }
+
public void cleanSessions() {
log.trace("CleanupJob.cleanSessions");
if (!InitializationContainer.initComplete) {
@@ -96,7 +157,7 @@ public class CleanupJob extends Abstract
}
try {
// TODO Generate report
- sessiondataDao.clearSessionTable(sessionTimeout);
+ sessionDao.clearSessionTable(sessionTimeout);
} catch (Exception err){
log.error("execute",err);
}
Modified: openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java Mon Feb 20 15:43:49 2017
@@ -59,6 +59,7 @@ public class OmFileHelper {
public static final String recordingFileName = "flvRecording_";
public static final String profileImagePrefix = "_profile_";
public static final String thumbImagePrefix = "_thumb_";
+ public static final String TEST_SETUP_PREFIX = "TEST_SETUP_";
public static final String dashboardFile = "dashboard.xml";
public static final String EXTENSION_WML = "wml";
public static final String EXTENSION_FLV = "flv";
@@ -175,7 +176,7 @@ public class OmFileHelper {
}
public static File getStreamsSubDir(Long id) {
- return getDir(getStreamsDir(), id.toString());
+ return getStreamsSubDir("" + id);
}
public static File getStreamsSubDir(String name) {
Modified: openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java Mon Feb 20 15:43:49 2017
@@ -28,11 +28,11 @@ import java.util.Map.Entry;
import org.slf4j.Logger;
/**
- *
+ *
* Collects all results of conversion jobs
- *
+ *
* @author sebawagner
- *
+ *
*/
public class ConverterProcessResultList {
private static final Logger log = getLogger(ConverterProcessResultList.class, webAppRootKey);
@@ -60,7 +60,7 @@ public class ConverterProcessResultList
public ConverterProcessResult addItem(String name, ConverterProcessResult processResult) {
if (jobs.containsKey(name)) {
- log.error("Duplicate key in jobslist");
+ log.error("Duplicate key in jobslist:: " + name);
return null;
}
return jobs.put(name, processResult);
@@ -68,7 +68,7 @@ public class ConverterProcessResultList
/**
* returns true if there was an job with exitValue "-1"
- *
+ *
* @return
*/
public boolean hasError() {
@@ -82,7 +82,7 @@ public class ConverterProcessResultList
/**
* converts all job results into a human readable format
- *
+ *
* @return
*/
public String getLogMessage() {
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=1783779&r1=1783778&r2=1783779&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 Mon Feb 20 15:43:49 2017
@@ -24,6 +24,7 @@
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:jaxws="http://cxf.apache.org/jaxws"
+ xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
@@ -91,91 +92,58 @@
<bean id="openmeetings.RecordingConverter" class="org.apache.openmeetings.core.converter.RecordingConverter" />
<bean id="openmeetings.SlaveHTTPConnectionManager" class="org.apache.openmeetings.webservice.cluster.SlaveHTTPConnectionManager" />
- <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="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="cleanExpiredRecJobDetails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <property name="targetObject" ref="cleanupJob" />
- <property name="targetMethod" value="cleanExpiredRecordings" />
- <property name="concurrent" value="false" />
- </bean>
- <bean id="triggerCleanExpiredRec" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
- <property name="jobDetail" ref="cleanExpiredRecJobDetails" />
- <property name="startDelay" value="5000"/><!-- 5 seconds -->
- <property name="repeatInterval" value="3600000" /><!-- 1 hour -->
- </bean>
+ <!-- 1800000 == 30 min
+ 3600000 == 1 hour
+ 5000 == 5 sec
+ 300000 == 5 min
+ 900000 == 15 min
+ -->
+ <bean id="cleanupJob" class="org.apache.openmeetings.service.quartz.scheduler.CleanupJob"
+ p:sessionTimeout="1800000" p:testSetupTimeout="3600000" p:roomFilesTtl="3600000" />
+ <bean id="cleanSessionsJobDetails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="cleanupJob" p:targetMethod="cleanSessions" p:concurrent="false" />
+ <bean id="triggerCleanSessions" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="cleanSessionsJobDetails" p:startDelay="5000" p:repeatInterval="300000" />
+ <bean id="cleanTestSetupJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="cleanupJob" p:targetMethod="cleanTestSetup" p:concurrent="false" />
+ <bean id="triggerCleanTestSetup" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="cleanTestSetupJobDetail" p:startDelay="1800000" p:repeatInterval="1800000" />
+ <bean id="cleanRoomFilesJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="cleanupJob" p:targetMethod="cleanRoomFiles" p:concurrent="false" />
+ <bean id="triggerCleanRoomFiles" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="cleanRoomFilesJobDetail" p:startDelay="10000" p:repeatInterval="1800000" /> <!-- p:startDelay="1800000" -->
+ <bean id="cleanExpiredRecJobDetails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="cleanupJob" p:targetMethod="cleanExpiredRecordings" p:concurrent="false" />
+ <bean id="triggerCleanExpiredRec" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="cleanExpiredRecJobDetails" p:startDelay="5000" p:repeatInterval="3600000" />
<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" ref="meetingReminderJobDetail" />
- <property name="startDelay" value="5000"/><!-- 5 seconds -->
- <property name="repeatInterval" value="100000"/><!-- repeat every 100 seconds -->
- </bean>
- <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="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>
+ <bean id="meetingReminderJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="reminderJob" p:targetMethod="remindMeetings" p:concurrent="false" />
+ <bean id="triggerMeetingReminder" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="meetingReminderJobDetail" p:startDelay="5000" p:repeatInterval="100000"/>
+ <bean id="expiringRecordingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="reminderJob" p:targetMethod="remindExpiringRecordings" p:concurrent="false" />
+ <bean id="triggerExpiringRecording" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="expiringRecordingJobDetail" p:startDelay="5000" p:repeatInterval="3600000"/>
<!-- 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="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="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="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="sendMails" />
- <property name="startDelay" value="60000"/> <!-- 1 minute -->
- <property name="repeatInterval" value="60000"/> <!-- 1 minute -->
- </bean>
+ <bean id="resetSendingMailStatus" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="mailHandler" p:targetMethod="resetSendingStatus" p:concurrent="false" />
+ <bean id="triggerResetSendingMailStatus" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="resetSendingMailStatus" p:startDelay="60000" p:repeatInterval="900000" />
+ <bean id="sendMails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="mailHandler" p:targetMethod="sendMails" p:concurrent="false" />
+ <bean id="triggerSendMails" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="sendMails" p:startDelay="60000" p:repeatInterval="60000" />
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="triggerCleanSessions" />
<ref bean="triggerCleanTestSetup" />
+ <ref bean="triggerCleanRoomFiles" />
<ref bean="triggerCleanExpiredRec" />
<ref bean="triggerMeetingReminder" />
<ref bean="triggerExpiringRecording" />
Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java Mon Feb 20 15:43:49 2017
@@ -60,14 +60,14 @@ public class FileProcessor {
//FIXME TODO this method need to be refactored to throw exceptions
public ConverterProcessResultList processFile(Long userId, FileExplorerItem f, InputStream is) throws Exception {
ConverterProcessResultList returnError = new ConverterProcessResultList();
-
+
// Generate a random string to prevent any problems with
// foreign characters and duplicates
String hash = UUID.randomUUID().toString();
String ext = getFileExt(f.getName());
log.debug("file extension: " + ext);
- StoredFile storedFile = new StoredFile(hash, ext);
+ StoredFile storedFile = new StoredFile(hash, ext);
// Check variable to see if this file is a presentation
// check if this is a a file that can be converted by
@@ -109,7 +109,7 @@ public class FileProcessor {
}
FileUtils.copyInputStreamToFile(is, file);
-
+
log.debug("canBeConverted: " + canBeConverted);
if (canBeConverted || isPdf) {
// convert to pdf, thumbs, swf and xml-description
@@ -125,18 +125,18 @@ public class FileProcessor {
returnError.addItem("processThumb", processThumb);
} else if (isVideo) {
List<ConverterProcessResult> returnList = flvExplorerConverter.convertToMP4(f, ext);
-
+
int i = 0;
for (ConverterProcessResult returnMap : returnList) {
- returnError.addItem("processFLV " + i, returnMap);
+ returnError.addItem("processVideo " + i++, returnMap);
}
}
-
+
// has to happen at the end, otherwise it will be overwritten
//cause the variable is new initialized
returnError.setCompleteName(file.getName());
returnError.setFileItemId(f.getId());
-
+
return returnError;
}
}
Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceLibrary.java Mon Feb 20 15:43:49 2017
@@ -56,9 +56,9 @@ import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
/**
- *
+ *
* @author swagner
- *
+ *
*/
public class ConferenceLibrary implements IPendingServiceCallback {
private static final Logger log = Red5LoggerFactory.getLogger(ConferenceLibrary.class, webAppRootKey);
@@ -102,9 +102,9 @@ public class ConferenceLibrary implement
}
/**
- *
+ *
* Save an Object to the library and returns the file-explorer Id
- *
+ *
* @param sid
* @param roomId
* @param fileName
@@ -140,7 +140,7 @@ public class ConferenceLibrary implement
/**
* Loads a Object from the library into the whiteboard of all participant of
* the current room
- *
+ *
* @param uid - uid of the client performing operation
* @param wbId - id of whiteboard
* @param fi - FileItem of the Wml being loaded
@@ -185,9 +185,9 @@ public class ConferenceLibrary implement
}
/**
- *
+ *
* Loads a chart object
- *
+ *
* @param sid
* @param room_id
* @param fileName
@@ -229,7 +229,7 @@ public class ConferenceLibrary implement
File target = new File(targetFolder, mp4.getName());
if (mp4.exists() && !target.exists()) {
- FileUtils.copyFile(mp4, target);
+ FileUtils.copyFile(mp4, target, false);
}
return 1L;
}
Modified: openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java (original)
+++ openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java Mon Feb 20 15:43:49 2017
@@ -19,14 +19,22 @@
package org.apache.openmeetings.service.quartz.scheduler;
import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
+import static org.apache.openmeetings.util.OmFileHelper.TEST_SETUP_PREFIX;
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsDir;
import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
import java.io.File;
import java.io.FileFilter;
+import java.util.Map;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.apache.openmeetings.core.data.whiteboard.WhiteBoardObjectListManagerById;
+import org.apache.openmeetings.core.session.SessionManager;
import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dto.room.WhiteboardObject;
+import org.apache.openmeetings.db.dto.room.WhiteboardObjectList;
import org.apache.openmeetings.util.InitializationContainer;
-import org.apache.openmeetings.util.OmFileHelper;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@@ -35,9 +43,14 @@ public class CleanupJob extends Abstract
private static Logger log = Red5LoggerFactory.getLogger(CleanupJob.class, webAppRootKey);
private long sessionTimeout = 30 * 60 * 1000L;
private long testSetupTimeout = 60 * 60 * 1000L; // 1 hour
+ private long roomFilesTtl = 60 * 60 * 1000L; // 1 hour
@Autowired
- private SessiondataDao sessiondataDao;
+ private SessiondataDao sessionDao;
+ @Autowired
+ private SessionManager sessionManager;
+ @Autowired
+ private WhiteBoardObjectListManagerById wbManager;
public long getSessionTimeout() {
return sessionTimeout;
@@ -55,24 +68,31 @@ public class CleanupJob extends Abstract
this.testSetupTimeout = testSetupTimeout;
}
+ public long getRoomFilesTtl() {
+ return roomFilesTtl;
+ }
+
+ public void setRoomFilesTtl(long roomFilesTtl) {
+ this.roomFilesTtl = roomFilesTtl;
+ }
+
public void cleanTestSetup() {
- log.debug("CleanupJob.execute");
+ log.debug("CleanupJob.cleanTestSetup");
if (!InitializationContainer.initComplete) {
return;
}
try {
//FIXME need to move all these staff to helper
- File[] folders = OmFileHelper.getStreamsDir().listFiles();
+ File[] folders = getStreamsDir().listFiles();
if (folders != null) {
for (File folder : folders) {
if (folder.isDirectory()) {
File[] files = folder.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
- return file.getName().startsWith("TEST_SETUP_");
+ return file.getName().startsWith(TEST_SETUP_PREFIX);
}
});
- //TODO need to rework this and remove hardcodings
if (files != null) {
for (File file : files) {
if (file.isFile() && file.lastModified() + testSetupTimeout < System.currentTimeMillis()) {
@@ -89,6 +109,47 @@ public class CleanupJob extends Abstract
}
}
+ public void cleanRoomFiles() {
+ log.debug("CleanupJob.cleanRoomFiles");
+ if (!InitializationContainer.initComplete) {
+ return;
+ }
+ try {
+ //FIXME need to move all these staff to helper
+ File[] folders = getStreamsDir().listFiles();
+ if (folders != null) {
+ for (File folder : folders) {
+ Long roomId = null;
+ if (NumberUtils.isCreatable(folder.getName())) {
+ roomId = Long.valueOf(folder.getName());
+ WhiteboardObjectList wbList = wbManager.getWhiteBoardObjectListByRoomId(roomId);
+ for (Map.Entry<Long, WhiteboardObject> e : wbList.getWhiteboardObjects().entrySet()) {
+ if (!e.getValue().getRoomItems().isEmpty()) {
+ roomId = null;
+ break;
+ }
+ }
+ }
+ if (folder.isDirectory() && roomId != null && sessionManager.getClientListByRoom(roomId).isEmpty()) {
+ File[] files = folder.listFiles();
+ //TODO need to rework this and remove hardcodings
+ if (files != null) {
+ for (File file : files) {
+ if (file.isFile() && file.lastModified() + roomFilesTtl < System.currentTimeMillis()) {
+ log.debug("Room files are too old and no users in the room: " + roomId);
+ FileUtils.deleteDirectory(folder);
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ log.error("Unexpected exception while processing tests setup videous.", e);
+ }
+ }
+
public void cleanSessions() {
log.trace("CleanupJob.cleanSessions");
if (!InitializationContainer.initComplete) {
@@ -96,7 +157,7 @@ public class CleanupJob extends Abstract
}
try {
// TODO Generate report
- sessiondataDao.clearSessionTable(sessionTimeout);
+ sessionDao.clearSessionTable(sessionTimeout);
} catch (Exception err){
log.error("execute",err);
}
Modified: openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java (original)
+++ openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java Mon Feb 20 15:43:49 2017
@@ -59,6 +59,7 @@ public class OmFileHelper {
public static final String recordingFileName = "flvRecording_";
public static final String profileImagePrefix = "_profile_";
public static final String thumbImagePrefix = "_thumb_";
+ public static final String TEST_SETUP_PREFIX = "TEST_SETUP_";
public static final String dashboardFile = "dashboard.xml";
public static final String EXTENSION_WML = "wml";
public static final String EXTENSION_FLV = "flv";
@@ -175,7 +176,7 @@ public class OmFileHelper {
}
public static File getStreamsSubDir(Long id) {
- return getDir(getStreamsDir(), id.toString());
+ return getStreamsSubDir("" + id);
}
public static File getStreamsSubDir(String name) {
Modified: openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java?rev=1783779&r1=1783778&r2=1783779&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java (original)
+++ openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java Mon Feb 20 15:43:49 2017
@@ -28,11 +28,11 @@ import java.util.Map.Entry;
import org.slf4j.Logger;
/**
- *
+ *
* Collects all results of conversion jobs
- *
+ *
* @author sebawagner
- *
+ *
*/
public class ConverterProcessResultList {
private static final Logger log = getLogger(ConverterProcessResultList.class, webAppRootKey);
@@ -60,7 +60,7 @@ public class ConverterProcessResultList
public ConverterProcessResult addItem(String name, ConverterProcessResult processResult) {
if (jobs.containsKey(name)) {
- log.error("Duplicate key in jobslist");
+ log.error("Duplicate key in jobslist:: " + name);
return null;
}
return jobs.put(name, processResult);
@@ -68,7 +68,7 @@ public class ConverterProcessResultList
/**
* returns true if there was an job with exitValue "-1"
- *
+ *
* @return
*/
public boolean hasError() {
@@ -82,7 +82,7 @@ public class ConverterProcessResultList
/**
* converts all job results into a human readable format
- *
+ *
* @return
*/
public String getLogMessage() {
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=1783779&r1=1783778&r2=1783779&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 Mon Feb 20 15:43:49 2017
@@ -24,6 +24,7 @@
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:jaxws="http://cxf.apache.org/jaxws"
+ xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
@@ -89,91 +90,58 @@
<bean id="openmeetings.RecordingConverter" class="org.apache.openmeetings.core.converter.RecordingConverter" />
<bean id="openmeetings.SlaveHTTPConnectionManager" class="org.apache.openmeetings.webservice.cluster.SlaveHTTPConnectionManager" />
- <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="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="cleanExpiredRecJobDetails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <property name="targetObject" ref="cleanupJob" />
- <property name="targetMethod" value="cleanExpiredRecordings" />
- <property name="concurrent" value="false" />
- </bean>
- <bean id="triggerCleanExpiredRec" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
- <property name="jobDetail" ref="cleanExpiredRecJobDetails" />
- <property name="startDelay" value="5000"/><!-- 5 seconds -->
- <property name="repeatInterval" value="3600000" /><!-- 1 hour -->
- </bean>
+ <!-- 1800000 == 30 min
+ 3600000 == 1 hour
+ 5000 == 5 sec
+ 300000 == 5 min
+ 900000 == 15 min
+ -->
+ <bean id="cleanupJob" class="org.apache.openmeetings.service.quartz.scheduler.CleanupJob"
+ p:sessionTimeout="1800000" p:testSetupTimeout="3600000" p:roomFilesTtl="3600000" />
+ <bean id="cleanSessionsJobDetails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="cleanupJob" p:targetMethod="cleanSessions" p:concurrent="false" />
+ <bean id="triggerCleanSessions" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="cleanSessionsJobDetails" p:startDelay="5000" p:repeatInterval="300000" />
+ <bean id="cleanTestSetupJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="cleanupJob" p:targetMethod="cleanTestSetup" p:concurrent="false" />
+ <bean id="triggerCleanTestSetup" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="cleanTestSetupJobDetail" p:startDelay="1800000" p:repeatInterval="1800000" />
+ <bean id="cleanRoomFilesJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="cleanupJob" p:targetMethod="cleanRoomFiles" p:concurrent="false" />
+ <bean id="triggerCleanRoomFiles" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="cleanRoomFilesJobDetail" p:startDelay="10000" p:repeatInterval="1800000" /> <!-- p:startDelay="1800000" -->
+ <bean id="cleanExpiredRecJobDetails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="cleanupJob" p:targetMethod="cleanExpiredRecordings" p:concurrent="false" />
+ <bean id="triggerCleanExpiredRec" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="cleanExpiredRecJobDetails" p:startDelay="5000" p:repeatInterval="3600000" />
<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" ref="meetingReminderJobDetail" />
- <property name="startDelay" value="5000"/><!-- 5 seconds -->
- <property name="repeatInterval" value="100000"/><!-- repeat every 100 seconds -->
- </bean>
- <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="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>
+ <bean id="meetingReminderJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="reminderJob" p:targetMethod="remindMeetings" p:concurrent="false" />
+ <bean id="triggerMeetingReminder" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="meetingReminderJobDetail" p:startDelay="5000" p:repeatInterval="100000"/>
+ <bean id="expiringRecordingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="reminderJob" p:targetMethod="remindExpiringRecordings" p:concurrent="false" />
+ <bean id="triggerExpiringRecording" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="expiringRecordingJobDetail" p:startDelay="5000" p:repeatInterval="3600000"/>
<!-- 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="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="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="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="sendMails" />
- <property name="startDelay" value="60000"/> <!-- 1 minute -->
- <property name="repeatInterval" value="60000"/> <!-- 1 minute -->
- </bean>
+ <bean id="resetSendingMailStatus" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="mailHandler" p:targetMethod="resetSendingStatus" p:concurrent="false" />
+ <bean id="triggerResetSendingMailStatus" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="resetSendingMailStatus" p:startDelay="60000" p:repeatInterval="900000" />
+ <bean id="sendMails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+ p:targetObject-ref="mailHandler" p:targetMethod="sendMails" p:concurrent="false" />
+ <bean id="triggerSendMails" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+ p:jobDetail-ref="sendMails" p:startDelay="60000" p:repeatInterval="60000" />
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="triggerCleanSessions" />
<ref bean="triggerCleanTestSetup" />
+ <ref bean="triggerCleanRoomFiles" />
<ref bean="triggerCleanExpiredRec" />
<ref bean="triggerMeetingReminder" />
<ref bean="triggerExpiringRecording" />