相关疑难解决方法(0)

449
推荐指数
8
解决办法
32万
查看次数

使用JAX-RS的REST - 处理长时间运行的操作

我有一个用JAX-RS实现的REST服务.有些操作需要很长时间才能完成,可能需要15-30分钟.对于这些情况,我倾向于派遣后台线程来处理长时间运行的操作,然后立即响应HTTP状态202 ACCEPTED.响应将包含一个带有URL的位置标头,客户端可以使用该标头来轮询进度.

这种方法需要创建线程来处理长时间运行的操作,这样就可以立即返回202 ACCEPTED.我也知道在Java EE容器中创建自己的线程通常是不好的做法!

我的问题如下:

  1. 人们都同意这是一种正确的方法吗?
  2. 假设它是正确的,人们可以推荐一个"良好实践"解决方案,使我能够在后台调度长时间运行并立即返回吗?

另外,为了避免管理我自己的线程,我查看了JAX-RS异步服务器api.不幸的是,虽然这提高了服务器吞吐量,但它不允许我立即响应ACCEPTED.

泽西州声明如下:

Note that the use of server-side asynchronous processing model will not improve the 
request processing time perceived by the client. It will however increase the
throughput of the server, by releasing the initial request processing thread back to
the I/O container while the request may still be waiting in a queue for processing or    
the processing may still be running on another dedicated thread. The released I/O  
container thread can …
Run Code Online (Sandbox Code Playgroud)

java rest multithreading jax-rs jersey

14
推荐指数
2
解决办法
7831
查看次数

无状态会话bean中的多线程?

EJB 3.0规范不允许无状态会话bean的业务方法创建新线程.这是为什么?创建仅执行原始计算并且从不调用应用程序服务器的其他工作线程有什么问题?

比如说,我的会话bean实现了一个允许用户上传图像的服务,而业务方法对这些图像进行了cpu密集型图像处理.那么即使机器有8个或更多核心,它也只能使用一个cpu核心来完成这项工作?如果我利用第三方图像处理库,在内部创建工作线程,我也会违反EJB规范,即使该库和这些线程根本不与EJB容器有关.这似乎不对.

如果我忽略EJB规则并仍然创建一些工作线程来进行cpu密集处理会发生什么?当然这些线程永远不会触及任何app服务器对象,bean线程会在返回之前加入它们.还能发生什么不好的事吗?

java multithreading ejb java-ee ejb-3.0

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×3

multithreading ×2

ejb ×1

ejb-3.0 ×1

java-ee ×1

jax-rs ×1

jersey ×1

rest ×1

static-class ×1