问题描述
我正在使用HK2 Operations在包含REST服务器组件的Java SE应用程序中管理自定义范围。 REST部分由Jersey提供。
Jersey允许资源返回(可能是慢速或长时间运行的)StreamingOutput而不是离散实体。据我了解,这提供了一种处理较低层的异步行为的形式。我观察到的是,在流输出运行时,处理初始Jersey请求的线程可以再次自由地接受新泽西请求,这需要它们自己的作用域。
HK2说:
不幸的是,这是它碰撞的地方。当传入请求路由到已经/仍在向其他地方提供StreamingOutput
的同一线程时,无法启动操作:
java.lang.IllegalStateException: The operation OperationHandleImpl(OperationIdentifier(326193,my.TransactionScope),254339200) is active on 62
关于做什么的任何提示?
解决方法
操作是gr8,但必须遵循“一次在一个线程上进行一次操作”的规则
实际上只有两件事要做。
- 向Eclipse请求扩展操作方式的功能
- 可能可以使用操作api本身来检测操作是否正在运行...如果正在运行...而是派生其他线程并在那里继续操作(完全破解,但是...可能会起作用)。