首页 > 解决方案 > 工作流任务失败.com.uber.cadence.internal.worker.WorkflowExecutionException: java.lang.IllegalAccessException

问题描述

我正在尝试执行https://cadenceworkflow.io/docs/06_javaclient/01_quick_start中提供的 Cadence java 客户端示例,并在使用 CLI 启动工作流程时出现以下异常

09:45:02.123 [Workflow Executor taskList="HelloWorldTaskList", domain="test-domain": 1] ERROR  c.u.c.i.r.ReplayDecisionTaskHandler - Workflow task failure. startedEventId=3, WorkflowID=34e36721-641b-40fc-bbf7-37e9ae7afd92, RunID=845af22f-d982-4794-b5f2-ba6821755a04. If see continuously the workflow might be stuck.
java.lang.Error: com.uber.cadence.internal.worker.WorkflowExecutionException: java.lang.IllegalAccessException
    at com.uber.cadence.internal.sync.POJOWorkflowImplementationFactory$POJOWorkflowImplementation.execute(POJOWorkflowImplementationFactory.java:239) ~[cadence-client-2.6.3.jar:na]
    at com.uber.cadence.internal.sync.WorkflowRunnable.run(WorkflowRunnable.java:46) ~[cadence-client-2.6.3.jar:na]
    at com.uber.cadence.internal.sync.CancellationScopeImpl.run(CancellationScopeImpl.java:102) ~[cadence-client-2.6.3.jar:na]
    at com.uber.cadence.internal.sync.WorkflowThreadImpl$RunnableWrapper.run(WorkflowThreadImpl.java:85) ~[cadence-client-2.6.3.jar:na]
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[na:na]
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: com.uber.cadence.internal.worker.WorkflowExecutionException: java.lang.IllegalAccessException
    at com.uber.cadence.internal.sync.POJOWorkflowImplementationFactory.mapToWorkflowExecutionException(POJOWorkflowImplementationFactory.java:356) ~[cadence-client-2.6.3.jar:na]
    ... 9 common frames omitted
9:49

谁能让我知道如何解决它?

标签: cadence-workflow

解决方案


我刚刚遇到了同样的问题。

第一段示例代码在接口上缺少public访问修饰符。HelloWorld将接口设置为公共后,我可以毫无问题地运行该示例。

代码应如下所示:

import com.uber.cadence.workflow.Workflow;
import com.uber.cadence.workflow.WorkflowMethod;
import org.slf4j.Logger;

public class GettingStarted {

    private static Logger logger = Workflow.getLogger(GettingStarted.class);

    public interface HelloWorld {
        @WorkflowMethod
        void sayHello(String name);
    }

}

推荐阅读