java @Asynchronous 方法:不运行异步

2023-12-15

我尝试运行一个异步进程。 基于这个例子:http://tomee.apache.org/examples-trunk/async-methods/README.html

但方法addWorkflow(Workflow workflow)仅当代码在时才会返回run(Workflow workflow)已完全完成。

然后当它返回时result.get();被调用我会得到异常:

引起原因:java.lang.IllegalStateException:对象不代表实际的Future

有什么建议吗?我缺少什么?

@Singleton
public class WorkflowProcessor {

@EJB
private  WorkflowManager workflowManager;

private final static Logger log = Logger.getLogger(WorkflowProcessor.class.getName());



public void runWorkflows(Collection<Workflow> workflows) throws Exception{  
    final long start = System.nanoTime();
    final long numberOfWorkflows = workflows.size();
    Collection<Future<Workflow>> asyncWorkflows = new ArrayList<>();

    for(Workflow workflow : workflows){
        Future<Workflow> w = addWorkflow(workflow);
        asyncWorkflows.add(w);
    }    
    log.log(Level.INFO, "workflow jobs added {0}", new Object[]{numberOfWorkflows});
    for(Future<Workflow> result : asyncWorkflows){
       result.get();
    }

    final long total = TimeUnit.NANOSECONDS.toSeconds(System.nanoTime() - start);
    log.log(Level.INFO, "WorkflowProcessor->runWorkflows {0} workflows completed in:{1}", new Object[]{numberOfWorkflows, total});

}

@Asynchronous
@Lock(LockType.READ)
@AccessTimeout(-1)
private Future<Workflow> addWorkflow(Workflow workflow){

    run(workflow);

    return new AsyncResult<Workflow>(workflow);                
}


private void run(Workflow workflow){
    this.workflowManager.runWorkflow(workflow);
}

因此,正常的方法是在调用者方法的另一个 bean 中使用 @Asynchronous 方法。

@Stateless
public class ComputationProcessor {

 @Asynchronous
 public Future<Data> performComputation {
   return new AsyncResult<Data>(null);
 }
}

@Stateless
public class ComputationService {

 @Inject
 private ComputationProcessor mProcessor;

 public void ...() {
   Future<Data> result = mProcessor.performComputation();
   ...
 }
}

正如您所发现的,如果 @Asynchronous 方法与调用者位于同一个 bean 中,它将不起作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java @Asynchronous 方法:不运行异步 的相关文章

随机推荐

  • Visual Studio 2022 - v.17.6.5 - 在 _Layout.cshtml 中链接安装的 nuget 包 css 文件

    我创建了一个新的 net 6 0 MVC Web project并删除了预装的bootstrap from wwwroot lib因为我想添加它NuGet Package Manager 安装软件包后 文件将显示在我的中作为参考wwwroo
  • 在多个控制器操作中保留值

    在我的控制器中 我有一个数据库中对象的 ID 并且多个操作需要此 ID 来访问该对象 该 ID 是在Index操作并用于填充视图模型 我获取 ID 的方式是通过一个参数 EPiServer CMS 外 将Index行动 所以我无法在其他地方
  • 获取文件夹中的所有音频文件

    如何使用 ManagedQuery 从 Android 中的特定文件夹中获取所有音频文件 表示 ManagedQuery 中的 where 子句应该是什么来过滤 Cursor 结果 Code is String proj MediaStor
  • 使用 PHPmailer 发送多封电子邮件

    编辑 我忘记了我创建了SendMail 函数我自己 这就是为什么解释一开始没有提到它的作用 我在使用 PHPMailer 时遇到了一些问题 https github com PHPMailer PHPMailer 当尝试发送两封电子邮件时
  • 使用 Ruby 在多个操作系统中读取文件名而不会出现编码问题

    我想获取 UTF 8 格式的所有文件名 例如 当我在 Windows 中读取文件名后 我会 filename Iconv iconv UTF 8 Windows 1251 filename 在 Ubuntu 中 我不转换文件名并以 UTF
  • 如何制作类似于 Dropbox 的登录按钮?

    我正在尝试做类似 Dropbox 的登录按钮 有一个线程jQuery 中的 dropbox 登录弹出方法 但我对此无能为力 我希望当我按下登录按钮时将其打开 与 dropbox com 相同 这是示例代码 现在它可以在悬停时运行 但我想要点
  • ASP.NET 自定义控件

    如何创建自定义控件 不是 ASCX 控件 更重要的是 如何在项目中使用它 我不想为它创建一个单独的项目或将其编译为 DLL 服务器控件应编译成 DLL 没有理由害怕在项目中添加额外的程序集 它有助于创建良好的项目组织 ASP NET 服务器
  • jsf2.0 - 如何获取请求范围内其他 jsf 页面 bean 中的值

    我有两个页面 myaccount xhtml 和 selectbank xhtml 在我的帐户页面中 有一个充值帐户选项 当用户按下提交按钮时 用户将在其中输入金额 然后它将使用以下 bean 方法转到选择银行页面 public Strin
  • 更改 mat-list-option 中的文本颜色

    我在用mat selection list组件其中mat list option正在显示一个contact list如下所示 Now the background color当我点击特定时正在改变contact name 例如格雷姆天鹅 和
  • 如何获取 Rplotly 的旭日图中点击切片的 event_data

    当使用plotly R包在Shiny应用程序中创建旭日饼图时 用户可以单击图来动态放大 缩小 我们希望能够下载当前选定 居中片段的一些数据 但是 我们无法从所有可能的 eventdata 选项中找到此信息 有悬停事件 但这还不够 因为用户可
  • Nokogiri 解析 ajax 加载的内容

    nokogiri 是否可以解析通过 ajax 加载的内容 如果不是 我将如何实现这一目标 Nokogiri 无法看到 AJAX 内容 因为它不是 Javascript 解析器 因此无法解释它并执行所需的请求 您想要的是 Watir 或其衍生
  • Bootstrap typeahead 绑定值与淘汰赛 js 不起作用

    我有一个使用淘汰赛创建的 ViewModel 其中包含我的产品的所有信息 它看起来像这样 var ProductViewModelDS function data var self this self ProductSKUID ko obs
  • 根据java中的字母将按字母顺序排序的列表拆分为子列表

    我在java中有一个排序列表 我只想根据列表每个索引的第一个字母将该列表拆分为子列表 例如 列表包含 calculator catch doll elephant 我想要子列表为 calculator catch doll elephant
  • Grails 3 自动重新连接 MS Sql Server

    我正在 Grails 3 2 2 上开发一个 Web 应用程序 使用 spring boot 和 hibernate 以及 MS SQL Server 作为后端数据库 我希望每当 SQL Server 在重新启动或出现任何其他问题后恢复时
  • http.get 被调用两次

    我有这个 http get 请求 但它被触发了两次 它在我的构造函数内 import Component from angular core import NavController LoadingController from ionic
  • 派生接口中的新方法声明

    我最近研究了一些代码 遇到了一个派生接口 它声明new与基本接口具有完全相同的名称和签名的方法 public interface IBase Result Process Settings settings public interface
  • 将 YUV 绕过 RGB 步骤转换为 HSL 或 HSV

    维基百科和大量在线资源为 RGB 之间的各种颜色空间转换提供了详细且丰富的帮助 我需要的是一个直接 YUV gt HSL HSV 转换 事实上我需要的只是Hue 不太关心饱和度或亮度亮度 值 换句话说 我只需要计算给定 YUV 颜色的 颜色
  • 为什么我的 UITableView 不响应 TouchBegan?

    我正在使用这个方法 void tableView UITableView tableView touchesBegan NSSet touches withEvent UIEvent event UITouch touch event al
  • 从本地主机或外部服务器将文件上传到 Google Cloud Storage

    我想通过托管在我的本地主机或外部服务器中的 PHP 或 JavaScript 应用程序将文件上传到 Google Cloud Storage 存储桶 当我尝试时 Google Cloud Storage 专门支持从 Google App E
  • java @Asynchronous 方法:不运行异步

    我尝试运行一个异步进程 基于这个例子 http tomee apache org examples trunk async methods README html 但方法addWorkflow Workflow workflow 仅当代码在