/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.execution.internal; import org.apache.commons.logging.Log; import de.rcenvironment.core.component.api.ComponentConstants; import de.rcenvironment.core.component.execution.api.ComponentExecutionContext; import de.rcenvironment.core.component.model.configuration.api.ConfigurationDefinition; import de.rcenvironment.core.utils.common.StringUtils; /** * Utility methods for component execution. * * @author Doreen Seider */ public final class ComponentExecutionUtils { protected static final int WAIT_UNIL_RETRY_MSEC = 10000; protected static final int MAX_RETRIES = 5; // non final for test purposes protected static int waitUntilRetryMsec = WAIT_UNIL_RETRY_MSEC; private static final int THOUSAND = 1000; private ComponentExecutionUtils() {} protected static boolean isVerificationRequired(ConfigurationDefinition configDef) { return Boolean .valueOf(configDef.getReadOnlyConfiguration().getValue(ComponentConstants.COMPONENT_CONFIG_KEY_REQUIRES_OUTPUT_APPROVAL)); } protected static void logCallbackSuccessAfterFailure(Log log, String logMessage, int failureCount) { if (failureCount > 0) { log.debug(StringUtils.format(logMessage + " succeeded after %d retries", failureCount)); } } protected static void waitForRetryAfterCallbackFailure(Log log, int failureCount, String logMessage, String cause) { int waitInterval = waitUntilRetryMsec * failureCount; String message = StringUtils.format(logMessage + ", retrying in %ds", waitInterval / THOUSAND); log.warn(StringUtils.format("%s; failure count is %d (threshold: %d); cause: %s", message, failureCount, MAX_RETRIES, cause)); try { Thread.sleep(waitInterval); } catch (InterruptedException e1) { log.error(StringUtils.format("Waiting for retry (%s) was interrupted: %s", logMessage, e1.toString())); } } protected static void logCallbackFailureAfterRetriesExceeded(Log log, String logMessage, Exception e) { log.error(logMessage + "; maximum number of failures (" + MAX_RETRIES + ") exceeded; last cause: " + e.toString()); } protected static String getStringWithInfoAboutComponentAndWorkflowUpperCase(ComponentExecutionContext compExeCtx) { return StringUtils.format("Component '%s' (%s) of workflow '%s' (%s)", compExeCtx.getInstanceName(), compExeCtx.getExecutionIdentifier(), compExeCtx.getWorkflowInstanceName(), compExeCtx.getWorkflowExecutionIdentifier()); } protected static String getStringWithInfoAboutComponentAndWorkflowLowerCase(ComponentExecutionContext compExeCtx) { return StringUtils.format("component '%s' (%s) of workflow '%s' (%s)", compExeCtx.getInstanceName(), compExeCtx.getExecutionIdentifier(), compExeCtx.getWorkflowInstanceName(), compExeCtx.getWorkflowExecutionIdentifier()); } }