/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.execution.api; import de.rcenvironment.core.component.model.endpoint.api.EndpointDatum; import de.rcenvironment.core.utils.common.rpc.RemotableService; import de.rcenvironment.core.utils.common.rpc.RemoteOperationException; /** * Remote-accessible methods for component execution control. * * @author Doreen Seider */ @RemotableService public interface RemotableComponentExecutionControllerService extends RemotableExecutionControllerService { /** * Creates a new {@link ComponentExecutionController} for the component represented be {@link ComponentExecutionContext}. * * @param executionContext {@link ComponentExecutionContext} of the component to execute * @param executionAuthToken the auth token which authorizes the execution * @param referenceTimestamp current timestamp on workflow node * @return execution identifier of the component instance * @throws ComponentExecutionException if instantiating component failed * @throws RemoteOperationException if called from remote and remote method call failed (cannot occur if controller and components run * locally) */ String createExecutionController(ComponentExecutionContext executionContext, String executionAuthToken, Long referenceTimestamp) throws ComponentExecutionException, RemoteOperationException; /** * @param executionId execution identifier of the component instance (provided by {@link ComponentExecutionInformation}) * @return {@link ComponentState} of the component * @throws RemoteOperationException if called from remote and remote method call failed (cannot occur if controller and components run * locally) * @throws ExecutionControllerException if {@link ExecutionController} is not available (anymore) */ ComponentState getComponentState(String executionId) throws ExecutionControllerException, RemoteOperationException; /** * Prepares a component. * * @param executionId execution identifier of the component instance * @throws RemoteOperationException if called from remote and remote method call failed (cannot occur if controller and components run * locally) * @throws ExecutionControllerException if {@link ExecutionController} is not available (anymore) */ void performPrepare(String executionId) throws ExecutionControllerException, RemoteOperationException; /** * Add a new execution auth token. * * @param authToken new auth token, which authorizes for execution * @throws RemoteOperationException if called from remote and remote method call failed (cannot occur if controller and components run * locally) */ void addComponentExecutionAuthToken(String authToken) throws RemoteOperationException; /** * @param verificationToken verification token used to verify results of a certain component run * @return {@link ComponentExecutionInformation} of the component related to the verification token or <code>null</code> if no one * related was found * @throws RemoteOperationException if called from remote and remote method call failed (cannot occur if controller and components run * locally) */ ComponentExecutionInformation getComponentExecutionInformation(String verificationToken) throws RemoteOperationException; /** * Verifies the results of the last component run if verification was requested. * * @param executionId execution identifier of the related component * @param verificationToken verification token used to verify results of a certain component run * @param verified <code>true</code> if results are verified otherwise <code>false</code> * @return <code>true</code> if verification result could be applied successfully, otherwise <code>false</code> (most likely reason: * invalid verification token or component not in state {@link ComponentState#WAITING_FOR_APPROVAL} (anymore)) * @throws RemoteOperationException if called from remote and remote method call failed * @throws ExecutionControllerException if {@link ExecutionController} is not available (anymore) */ Boolean performVerifyResults(String executionId, String verificationToken, Boolean verified) throws ExecutionControllerException, RemoteOperationException; /** * Called if asynchronous sending of an {@link EndpointDatum} failed. * * @param executionId execution identifier of the component that requested sending the {@link EndpointDatum} * @param serializedEndpointDatum affected {@link EndpointDatum} given as serialized string (see {@link EndpointDatumSerializer}) * @param e {@link RemoteOperationException} thrown * @throws RemoteOperationException if called from remote and remote method call failed (cannot occur if controller and components run * locally) * @throws ExecutionControllerException if {@link ExecutionController} is not available (anymore) */ void onSendingEndointDatumFailed(String executionId, String serializedEndpointDatum, RemoteOperationException e) throws ExecutionControllerException, RemoteOperationException; }