dnet-applications/libs/dnet-wf-service/src/main/java/eu/dnetlib/manager/wf/nodes/AbstractJobNode.java

54 lines
1.3 KiB
Java

package eu.dnetlib.manager.wf.nodes;
import java.util.concurrent.Executors;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import eu.dnetlib.manager.wf.workflows.procs.Token;
import eu.dnetlib.manager.wf.workflows.util.NodeCallback;
public abstract class AbstractJobNode extends ProcessNode {
private static final Log log = LogFactory.getLog(AbstractJobNode.class);
private final boolean async;
public AbstractJobNode(final boolean async) {
this.async = async;
}
@Override
public final void execute(final Token token, final NodeCallback callback) {
try {
log.debug("START NODE: " + getBeanName());
token.setProgressMessage(getNodeName());
if (isAsync()) {
Executors.newSingleThreadExecutor().execute(() -> doExecute(token, callback));
} else {
doExecute(token, callback);
}
log.debug("END NODE (SUCCESS): " + getBeanName());
} catch (final Throwable e) {
log.error("got exception while executing workflow node", e);
log.debug("END NODE (FAILED): " + getBeanName());
callback.onFail(token);
}
}
private final void doExecute(final Token token, final NodeCallback callback) {
execute();
callback.onComplete(token);
}
protected abstract void execute();
public final boolean isAsync() {
return async;
}
}