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

时间:2013-01-21 20:09:41

标签: java rest java-ee ejb jms

实际上,我有以下流程:

  1. 用户点击“巨大操作”按钮;
  2. 它调用RESTful服务;
  3. 其余服务调用HugeOpServiceBean,它是一个EJB;
  4. 此EJB将告诉JMS队列执行HugeOperation;
  5. 这个HugeOperation可以有两个或更多个实现,因此,每个正在监听它的MDBean都会运行(这意味着它可能在另一个.ear中)
  6. 我想听听你们是如何做的或建议我让我能够获得这些MDBeans的“地位”。

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

    提前致谢。

2 个答案:

答案 0 :(得分:6)

RESTful处理方法是:

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

答案 1 :(得分:2)

由于MDB的消费和治疗是成交的,所以全部或全部都是。显示进度将很复杂,并且需要子事务来更新进度。我建议在EJB中对多个JMS消息中的工作进行分析,并监视稍后成功使用的JMS消息的术语进度。见Patterns of Enterprise Integation