Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon ec2 无法捕获活动工作者类中的异常_Amazon Ec2_Amazon Swf - Fatal编程技术网

Amazon ec2 无法捕获活动工作者类中的异常

Amazon ec2 无法捕获活动工作者类中的异常,amazon-ec2,amazon-swf,Amazon Ec2,Amazon Swf,我有一些活动,他们可以抛出一些自定义异常。问题是我无法在Activity Worker类中捕获抛出的异常,并且正在显示堆栈跟踪。我试图捕捉可丢弃的对象,但没有用,因为堆栈跟踪再次显示 活动实施类 public class TestActivitiesImpl implements TestActivities{ @Override public Integer testAct1() { System.out.println("Activity 1 ---->

我有一些活动,他们可以抛出一些自定义异常。问题是我无法在Activity Worker类中捕获抛出的异常,并且正在显示堆栈跟踪。我试图捕捉可丢弃的对象,但没有用,因为堆栈跟踪再次显示

活动实施类

public class TestActivitiesImpl implements TestActivities{

    @Override
    public Integer testAct1() {
        System.out.println("Activity 1 ---->Start");
        int count = 0;
        while(count < 1000){
            count ++;
        }
        return 1;
    }

    @SuppressWarnings("unused")
    @Override
    public Integer testAct2() throws MyException {
        System.out.println("Activity 2 ---->Start");
        if(true){
            throw new MyException("Failed to execute the activity");
        }
        return 1;
    }
}
public class TestActivitiesWorker {
    public static void main(String[] args) {

        try {
            ClientConfiguration config = new ClientConfiguration().withSocketTimeout(70*1000);

            String swfAccessId = "ABCDXYZ";
            String swfSecretKey = "ABCDXYZ";
            AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey);

            AmazonSimpleWorkflow service = new AmazonSimpleWorkflowClient(awsCredentials, config);
            service.setEndpoint("ABCDXYZ");

            String domain = "EC2-TEST";

            ActivityWorker aw = new ActivityWorker(service, domain, "TestList");
            aw.addActivitiesImplementation(new TestActivitiesImpl());
            aw.start();

        }catch (Throwable e) {
            System.out.println("Failed to execute Job");
            System.out.println(e.getMessage());
        }
    }
}
堆栈跟踪

2014年10月18日下午2:02:53

com.amazonaws.services.simpleworkflow.flow.worker.SynchronousActivityTaskPoller execute
    SEVERE: Failure processing activity task with taskId=12, workflowGenerationId=AsyncTest, activity={Name: TestActivities.testAct2,Version: 1.2}, activityInstanceId=2
    com.amazonaws.services.simpleworkflow.flow.ActivityFailureException: Failed to execute the activity : ["com.myapp.test.MyException",{"cause":null,"stackTrace":[{"methodName":"testAct2","fileName":"TestActivitiesImpl.java","lineNumber":20,"className":"com.myapp.test.TestActivitiesImpl","nativeMethod":false},{"methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"sun.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":57,"className":"sun.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"sun.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"methodName":"invoke","fileName":"Method.java","lineNumber":606,"className":"java.lang.reflect.Method","nativeMethod":false},{"methodName":"execute","fileName":"POJOActivityImplementation.java","lineNumber":64,"className":"com.amazonaws.services.simpleworkflow.flow.pojo.POJOActivityImplementation","nativeMethod":false},{"methodName":"execute","fileName":"ActivityImplementationBase.java","lineNumber":46,"className":"com.amazonaws.services.simpleworkflow.flow.generic.ActivityImplementationBase","nativeMethod":false},{"methodName":"execute","fileName":"SynchronousActivityTaskPoller.java","lineNumber":196,"className":"com.amazonaws.services.simpleworkflow.flow.worker.SynchronousActivityTaskPoller","nativeMethod":false},{"methodName":"run","fileName":"ActivityTaskPoller.java","lineNumber":92,"className":"com.amazonaws.services.simpleworkflow.flow.worker.ActivityTaskPoller$2","nativeMethod":false},{"methodName":"runWorker","fileName":"ThreadPoolExecutor.java","lineNumber":1145,"className":"java.util.concurrent.ThreadPoolExecutor","nativeMethod":false},{"methodName":"run","fileName":"ThreadPoolExecutor.java","lineNumber":615,"className":"java.util.concurrent.ThreadPoolExecutor$Worker","nativeMethod":false},{"methodName":"run","fileName":"Thread.java","lineNumber":724,"className":"java.lang.Thread","nativeMethod":false}],"message":"Failed to execute the activity","localizedMessage":"Failed to execute the activity","suppressed":["[Ljava.lang.Throwable;",[]]}]
    at com.amazonaws.services.simpleworkflow.flow.pojo.POJOActivityImplementation.throwActivityFailureException(POJOActivityImplementation.java:110)
    at com.amazonaws.services.simpleworkflow.flow.pojo.POJOActivityImplementation.execute(POJOActivityImplementation.java:67)
    at com.amazonaws.services.simpleworkflow.flow.generic.ActivityImplementationBase.execute(ActivityImplementationBase.java:46)
    at com.amazonaws.services.simpleworkflow.flow.worker.SynchronousActivityTaskPoller.execute(SynchronousActivityTaskPoller.java:196)
    at com.amazonaws.services.simpleworkflow.flow.worker.ActivityTaskPoller$2.run(ActivityTaskPoller.java:92)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)

它的行为符合设计要求。如果活动实现方法引发异常,则活动辅助进程不应失败。抛出的异常被传递到工作流实现,并且必须在那里进行处理。它也可以在的“详细信息”字段中的工作流历史记录中看到。

是否可以显示堆栈跟踪?是的,当然。。我已经发布了堆栈跟踪,如果任何一个活动失败,那么在activity worker的命令提示符中用户不会显示任何堆栈跟踪?我的目标是在任何活动失败时向用户显示自定义消息,而不是在activity worker命令提示符中显示堆栈跟踪。AFAIK它使用Log4J进行日志记录。因此,您可以禁用该类中的错误日志记录。是否有任何方法可以关闭工作流实现类中的所有活动工作人员和工作流工作人员。比如说,在我的所有活动完成后,我想关闭所有工作人员。只需创建一个关闭工作人员的活动,并在工作流结束时调用它。感谢您的响应…通过在类似WorkflowWorker wfw=new WorkflowWorker(服务,域,“列表”)的活动中创建工作人员对象;然后,wfw。关闭并等待。。。行吗?它会让工人停工吗?一段代码片段将非常有用。。先谢谢你