ecological-engine-smart-exe.../src/main/java/org/gcube/dataanalysis/executor/job/management/QueueWorkerWatcher.java

77 lines
2.2 KiB
Java

package org.gcube.dataanalysis.executor.job.management;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import javax.jms.Message;
import org.gcube.contentmanagement.lexicalmatcher.utils.AnalysisLogger;
import org.gcube.dataanalysis.executor.messagequeue.ATTRIBUTE;
import org.gcube.dataanalysis.executor.messagequeue.Producer;
import org.gcube.dataanalysis.executor.messagequeue.QCONSTANTS;
public class QueueWorkerWatcher {
protected int maxwaitingTime = 2*QueueJobManager.queueWatcherMaxwaitingTime;
private long lastTimeClock;
Timer watcher;
Producer producer;
Map<String, Object> message;
public boolean resent=false;
int order;
public QueueWorkerWatcher(Producer producer, Map<String, Object> message, int order) {
this.producer = producer;
this.message = message;
resent=false;
this.order = order;
watcher = new Timer();
watcher.schedule(new Controller(), 0, QCONSTANTS.refreshStatusTime);
resetTime();
}
public synchronized void resetTime() {
lastTimeClock = System.currentTimeMillis();
}
public synchronized void destroy() {
if (watcher != null) {
watcher.cancel();
watcher.purge();
watcher = null;
}
}
public boolean hasResent(){
return resent;
}
private class Controller extends TimerTask {
@Override
public void run() {
try {
long t0 = System.currentTimeMillis();
AnalysisLogger.getLogger().debug("Watcher "+order+" Timing Is "+(t0 - lastTimeClock)+ " max waiting time: "+maxwaitingTime);
if ((t0 - lastTimeClock) > maxwaitingTime) {
AnalysisLogger.getLogger().info("Watcher "+order+" Time Is Over "+(t0 - lastTimeClock));
AnalysisLogger.getLogger().info("Watcher "+order+" Re-Sending Message "+message);
producer.sendMessage(message, QCONSTANTS.timeToLive);
// QueueJobManager.resentMessages[Integer.parseInt(""+message.get(ATTRIBUTE.ORDER.name()))]=QueueJobManager.resentMessages[Integer.parseInt(""+message.get(ATTRIBUTE.ORDER.name()))]+1;
resent = true;
AnalysisLogger.getLogger().info("Watcher "+order+" Destroying watcher");
destroy();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}