【问题标题】:@Asynchronous in a helper class? [SWF]@Asynchronous 在辅助类中? [SWF]
【发布时间】:2015-11-29 22:15:44
【问题描述】:

我有一个由 spring 设置的工作流,其范围为“工作流”。下面的代码将立即显示消息,而不是等待 60 秒。我认为这是因为我构建 Helper 类的方式...如何修复异步方法以在另一个类中工作?

public class MyWorkflowImpl implements MyWorkflowImpl {
    private Helper helper = new Helper();
    @Override
    public do() {
        Promise<Void> timer = getTimer(60); //seconds
        helper.showMessage(timer);
    }
}

public class Helper {
    @Asynchronous
    public showMessage(Promise<Void> timer) {
        // show random message
    }
}

【问题讨论】:

    标签: java spring amazon-swf


    【解决方案1】:

    代码是正确的。 @Asynchronous 应该适用于具有 AspectJ 预处理器的任何类的任何方法,该预处理器应用于所有使用它的类。

    【讨论】:

    • 我理解您所说的由方面处理的内容,但由于某种原因,它并没有推迟执行。有什么解决问题的想法吗?
    • 确保将 AspectJ 配置为处理 Helper 类包。检查 AspectJ 预处理器日志以获取检测类列表。
    • 我设置了一个调试器,发现 AsynchronousAspect 匹配了辅助类中 4 个方法中的 2 个。签名看起来很相似……试图弄清楚为什么其他两个没有绑定。
    • 所以方面需要注解并且需要调用方法。所有 4 个方法都是公共的并且正在被调用,但其中 2 个是从另一个 @Asynchronous 方法中调用的。不工作的 2 导致 IllegalStateException 因为承诺尚未准备好。还在调查..
    • 原来是因为我的 aop.xml 没有编织在我的助手类所在的包中。该切面适用于两个异步方法,因为它们是从编织的类中调用的in 并且加入在调用者的一方。
    猜你喜欢
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多