首页 > 解决方案 > HK2 操作独立于线程 ID

问题描述

我正在使用 HK2 Operations来管理包含 REST 服务器组件的 Java SE 应用程序中的自定义范围。REST 部分由 Jersey 提供。

Jersey 允许资源返回(可能是缓慢或长时间运行的)StreamingOutput,而不是离散实体。据我了解,这提供了一种处理较低层的异步行为形式。我观察到的是,当流输出正在运行时,处理初始 Jersey 请求的线程可以再次自由地接受新的 Jersey 请求,这些请求需要它们自己的范围。

HK2 说:

HK2 Operations 提供了一组方便的工具来构建范围/上下文对,遵循“一次一个线程上的一个操作”的一般规则。</p>

不幸的是,这就是它发生冲突的地方。当传入请求被路由到已经/仍在为StreamingOutput其他地方提供服务的同一线程时,操作无法启动:

java.lang.IllegalStateException: The operation OperationHandleImpl(OperationIdentifier(326193,my.TransactionScope),254339200) is active on 62

关于做什么的任何提示?

标签: javajerseycdihk2

解决方案


操作是 gr8,但必须遵循“一次操作一个线程”的规则

真的只有两件事要做。

  1. 向 Eclipse 寻求扩展操作工作方式的功能
  2. 可以使用操作 api 本身来检测操作是否正在运行......如果它正在运行......而不是分叉一个不同的线程并在那里继续你的操作(完全破解但......可能会工作)。

推荐阅读