Package org.joget.workflow.util

Source Code of org.joget.workflow.util.DeadlineThreadManager

package org.joget.workflow.util;

import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import org.joget.commons.util.DynamicDataSourceManager;
import org.joget.commons.util.HostManager;
import org.joget.commons.util.LogUtil;
import org.joget.workflow.model.service.WorkflowManager;
import org.joget.workflow.shark.DeadlineChecker;

public class DeadlineThreadManager {

    public static final long INTERVAL_MINIMUM = 10000; // 10 seconds
    private static Map<String, DeadlineChecker> threadMap = Collections.synchronizedMap(new HashMap<String, DeadlineChecker>());

    public static void initThreads(WorkflowManager workflowManager) {

        // stop and clear all threads
        for (String profile : threadMap.keySet()) {
            stopThread(profile);
        }
        threadMap.clear();

        if (HostManager.isVirtualHostEnabled()) {
            // find all profiles and start threads
            Properties profiles = DynamicDataSourceManager.getProfileProperties();
            Set<String> profileSet = new HashSet(profiles.values());
            for (String profile : profileSet) {
                HostManager.setCurrentProfile(profile);
                workflowManager.internalUpdateDeadlineChecker();
            }
            HostManager.setCurrentProfile(null);
        }
        else {
            // start current profile
            workflowManager.internalUpdateDeadlineChecker();
        }
    }

    public static void startThread(long interval) {
        String profile = DynamicDataSourceManager.getCurrentProfile();
        if (interval <= 0) {
            stopThread(profile);
        } else {
            if (interval < INTERVAL_MINIMUM) {
                interval = INTERVAL_MINIMUM;
            }
            DeadlineChecker thread = getThread(profile);
            if (thread == null) {
                thread = new DeadlineChecker(profile,
                    null,
                    interval,
                    10,
                    10,
                    true);
                threadMap.put(profile, thread);
            }
            else {
                thread.setDelay(interval);
                if (thread.isStopped()) {
                    LogUtil.info(DeadlineThreadManager.class.getName(), "Starting DeadlineChecker for profile " + profile);
                    thread.startChecker();
                }
            }
        }
    }

    protected static DeadlineChecker getThread(String profile) {
        DeadlineChecker thread = (DeadlineChecker)threadMap.get(profile);
        return thread;
    }

    protected static void stopThread(String profile) {
        DeadlineChecker thread = getThread(profile);
        if (thread != null) {
            LogUtil.info(DeadlineThreadManager.class.getName(), "Stopping DeadlineChecker for profile " + profile);
            thread.stopChecker();
            threadMap.remove(profile);
        }
    }

}
TOP

Related Classes of org.joget.workflow.util.DeadlineThreadManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.