HK2操作独立于线程ID

问题描述

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

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

HK2说:

HK2操作提供了一组方便的工具来构建作用域/上下文对,这些工具遵循“一次在一个线程上执行一个操作”的一般规则。

不幸的是,这是它碰撞的地方。当传入请求路由到已经/仍在向其他地方提供StreamingOutput的同一线程时,无法启动操作:

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

关于做什么的任何提示

解决方法

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

实际上只有两件事要做。

  1. 向Eclipse请求扩展操作方式的功能
  2. 可能可以使用操作api本身来检测操作是否正在运行...如果正在运行...而是派生其他线程并在那里继续操作(完全破解,但是...可能会起作用)。