使用Java管理很长时间的操作

caa*_*os0 7 java rest ejb jms java-ee

实际上,我有以下流程:

  1. 用户点击"巨大操作"按钮;
  2. 它称为RESTful服务;
  3. 其余服务调用HugeOpServiceBean,它是一个EJB;
  4. 这个EJB会告诉JMS队列执行HugeOperation;
  5. 这个HugeOperation可以有两个或更多个实现,因此,每个正在监听它的MDBean都会运行(这意味着它可能在另一个.ear中)

我想听听你们是怎么做的,或者建议我让我能够获得这些MDBeans的"地位".

基本上,每个MDBean都会在某个对象类型的列表中运行一些方法,因此,计算完成的百分比应该很容易,我只是不知道如何以及哪些是我可以做出的最佳架构决策,以便在某些RESTful中可以访问它服务.

提前致谢.

Per*_*ion 6

RESTful处理方法是:

  1. 在第一次调用之后,将HTTP 202状态代码"Accepted"返回给客户端,以指示请求成功,但需要进一步处理.您还可以提供带有响应的URI,客户端可以使用该响应来查询"作业"的状态
  2. 实现客户端可以调用的端点以查询作业的状态.
  3. 当操作完成时,上述2)的端点将发出永久重定向到操作创建的主实体的实际URI.


ewe*_*nli 2

由于 MDB 的消费和处理是通过交易进行的,要么全有要么全无。显示进度会很复杂,并且需要子事务来更新进度。我建议将工作分块到 EJB 中的多个 JMS 消息中,并监控稍后成功使用的 JMS 消息的进度。查看企业集成模式