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 方法:不运行异步 的相关文章

  • “java.io.IOException:连接超时”和“SocketTimeoutException:读取超时”之间有什么区别

    如果我设置一个套接字 SoTimeout 并从中读取 当读取时间超过超时限制时 我会收到 SocketTimeoutException 读取超时 这是我的例子中的堆栈 java net SocketTimeoutException Read
  • Guice 忽略注入构造函数参数上的 @Nullable

    我正在使用 Guice v 3 0 并且有一个值被注入到构造函数中 该值可以为 null 因此我在构造函数中使用 Nullable 来自 javax annotations 注释了该参数 public MyClass Parameter1
  • Android 中的列表(特别是 RecyclerView 和 CardView)如何工作

    请原谅我问这个问题 但我是 Android 开发新手 尽管我正在尝试了解developer android com 网站上的基础知识 但大多数示例 即使他们说它们是为 Android Studio 构建的 尚未设置为使用 Gradle 因此
  • 如何使用 JAVA 代码以编程方式捕获线程转储?

    我想通过 java 代码生成线程转储 我尝试使用 ThreadMXBean 为此 但我没有以正确的格式获得线程转储 因为我们正在使用jstack命令 请任何人提供一些帮助 他们是否有其他方式获取线程转储 使用任何其他 API 我想要的线程转
  • (Java) App Engine 中的静态文件无法访问

    The 示例文档 http code google com appengine docs java gettingstarted staticfiles html表示您只需将文件放在 war 或子目录 中 并且应该可以从主机访问它们 只要它
  • 将SQL数据引入jquery availabletag

    我正在尝试制作自动完成文本框 但如何将 SQL 数据包含到 jquery 可用标记并循环它 我无法根据以下代码执行该功能 任何帮助 将不胜感激 谢谢 这是我的预期输出 预期结果演示 http jsfiddle net VvETA 71 jq
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • Java中的断点和逐步调试?

    抱歉我的问题名称很奇怪 我不知道如何寻找这个 因为我不知道这些东西是如何称呼的 Visual Studio 中至少有一个功能 您可以单击代码左侧并设置一个大红点的起点 然后运行程序 您可以通过按 f8 或 f5 实际上是不同的 f 来跟踪步
  • 从直方图计算平均值和百分位数?

    我编写了一个计时器 可以测量任何多线程应用程序中特定代码的性能 在下面的计时器中 它还会在地图中填充花费了 x 毫秒的调用次数 我将使用这张图作为我的直方图的一部分来进行进一步的分析 例如调用花费了这么多毫秒的百分比等等 public st
  • 从休眠乐观锁定异常中恢复

    我有一个这样的方法 Transactional propagation Propagation REQUIRES NEW public void doSomeWork Entity entity dao loadEntity do some
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • Lombok @Builder 不创建不可变对象?

    在很多网站上 我看到 lombok Builder 可以用来创建不可变的对象 https www baeldung com lombok builder singular https www baeldung com lombok buil
  • 如何从 Ant 启动聚合 jetty-server JAR?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • JMS 中的 MessageListener 和 Consumer 有什么区别?

    我是新来的JMS 据我了解Consumers能够从队列 主题中挑选消息 那么为什么你需要一个MessageListener因为Consumers会知道他们什么时候收到消息吗 这样的实际用途是什么MessageListener 编辑 来自Me
  • HttpClient请求设置属性问题

    我使用这个 HttpClient 库玩了一段时间 几周 我想以某种方式将属性设置为请求 不是参数而是属性 在我的 servlet 中 我想使用 Integer inte Integer request getAttribute obj 我不
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向
  • 如何使用通配符模拟泛型方法的行为

    我正在使用 EasyMock 3 2 我想基于 Spring Security 为我的部分安全系统编写一个测试 我想嘲笑Authentication http docs spring io autorepo docs spring secu

随机推荐

  • 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 仅当代码在