【发布时间】:2018-04-13 05:39:21
【问题描述】:
我正在迁移一个遗留服务框架,该框架使用 java 序列化/反射来注册服务并将它们作为远程端点(通过 http 的 javabin)或无缝调用本地调用。 我已将远程调用替换为球衣端点。还使用了基于 hk2 aop 的拦截器来重新创建当前框架的一些拦截能力。当远程客户端调用端点时它工作正常。 现在我需要对服务方法的本地调用做同样的事情,并且能够使用与远程服务方法调用相同的拦截逻辑。
(实现了 org.glassfish.hk2.api.InterceptionService - 基于这篇文章 - https://blog.dejavu.sk/2015/01/21/intercepting-jersey-resource-method-calls/)
我相信如果我能够从 hk2 注册表/定位器中获取服务(jax-rs 资源)类的实例,那么方法调用将调用相同的注册拦截器。如何实现?
【问题讨论】:
-
像其他服务一样注入它
@Inject ServiceLocator locator -
谢谢,注入作品,注册的实例可以找回了。 jvm-local 调用也会调用拦截器。
service=locator.getAllServiceHandles(<Restservice>.class, new Annotation[0]);service.callInterceptedMethod(); -
一个相关提示 - 在没有球衣的原始 HttpServer 中使用 hk2 ServiceLocator 时 - 在单例范围内注册了绑定的服务,但在实现服务时出现以下错误 -
“服务需要任一方法或构造函数拦截,但代理不可用”
原因是Utilities.proxiesAvailable返回false,因为javassist jar不在类路径中。如果你想用它做任何有用的事情,javassist 是 hk2 的强制依赖项。
标签: jersey interceptor hk2