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" />