org.apache.camel.component.aws.swf.CamelActivityImplementation Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.component.aws.swf;
import java.lang.reflect.InvocationTargetException;
import java.util.concurrent.CancellationException;
import com.amazonaws.services.simpleworkflow.flow.ActivityExecutionContext;
import com.amazonaws.services.simpleworkflow.flow.ActivityExecutionContextProviderImpl;
import com.amazonaws.services.simpleworkflow.flow.ActivityFailureException;
import com.amazonaws.services.simpleworkflow.flow.DataConverter;
import com.amazonaws.services.simpleworkflow.flow.DataConverterException;
import com.amazonaws.services.simpleworkflow.flow.common.WorkflowExecutionUtils;
import com.amazonaws.services.simpleworkflow.flow.generic.ActivityImplementationBase;
import com.amazonaws.services.simpleworkflow.flow.worker.ActivityTypeExecutionOptions;
import com.amazonaws.services.simpleworkflow.flow.worker.ActivityTypeRegistrationOptions;
import com.amazonaws.services.simpleworkflow.flow.worker.CurrentActivityExecutionContext;
public class CamelActivityImplementation extends ActivityImplementationBase {
private final ActivityTypeExecutionOptions executionOptions;
private final ActivityTypeRegistrationOptions registrationOptions;
private final DataConverter converter;
private final SWFActivityConsumer swfWorkflowConsumer;
private final ActivityExecutionContextProviderImpl contextProvider = new ActivityExecutionContextProviderImpl();
public CamelActivityImplementation(SWFActivityConsumer swfWorkflowConsumer,
ActivityTypeRegistrationOptions activityTypeRegistrationOptions,
ActivityTypeExecutionOptions activityTypeExecutionOptions, DataConverter converter) {
this.swfWorkflowConsumer = swfWorkflowConsumer;
this.registrationOptions = activityTypeRegistrationOptions;
this.executionOptions = activityTypeExecutionOptions;
this.converter = converter;
}
@Override
public ActivityTypeRegistrationOptions getRegistrationOptions() {
return registrationOptions;
}
@Override
public ActivityTypeExecutionOptions getExecutionOptions() {
return executionOptions;
}
@Override
protected String execute(String input, ActivityExecutionContext context)
throws ActivityFailureException, CancellationException {
Object[] inputParameters = converter.fromData(input, Object[].class);
CurrentActivityExecutionContext.set(context);
Object result = null;
ActivityExecutionContext executionContext = contextProvider.getActivityExecutionContext();
String taskToken = executionContext.getTaskToken();
try {
result = swfWorkflowConsumer.processActivity(inputParameters, taskToken);
} catch (InvocationTargetException invocationException) {
throwActivityFailureException(invocationException.getTargetException() != null
? invocationException.getTargetException() : invocationException);
} catch (IllegalArgumentException illegalArgumentException) {
throwActivityFailureException(illegalArgumentException);
} catch (IllegalAccessException illegalAccessException) {
throwActivityFailureException(illegalAccessException);
} catch (Exception e) {
throwActivityFailureException(e);
} finally {
CurrentActivityExecutionContext.unset();
}
String resultSerialized = converter.toData(result);
return resultSerialized;
}
void throwActivityFailureException(Throwable exception) throws ActivityFailureException, CancellationException {
if (exception instanceof CancellationException) {
throw (CancellationException) exception;
}
String reason = WorkflowExecutionUtils.truncateReason(exception.getMessage());
String details = null;
try {
details = converter.toData(exception);
} catch (DataConverterException dataConverterException) {
if (dataConverterException.getCause() == null) {
dataConverterException.initCause(exception);
}
throw dataConverterException;
}
throw new ActivityFailureException(reason, details);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy