gpt4 book ai didi

注入(inject) Jersey RS 服务(资源)的 CDI 拦截器不起作用?

转载 作者:行者123 更新时间:2023-12-04 13:45:57 25 4
gpt4 key购买 nike

所以,我有一个在大多数情况下运行良好的 tomcat 8 + jersey 2.5.1 + Weld CDI 应用程序。它失败的地方是我无法使用 CDI 拦截器拦截 Jersey 资源方法调用。这是有道理的,因为 jersey 资源类不是 CDI bean。那么,有什么办法可以让 CDI 拦截器在 Jersey 上工作呢?提出这个问题的另一种方式:CDI bean 可以用作 Jersey 资源吗?

谢谢!

编辑:
在我使用 Jersey 编写我的 RESTful 资源之前,我有 CDI 拦截器,用于开始和提交数据库事务。我真的需要遵循相同或相似的模式在我的 RESTful jersey 资源中实现这种横切事务注入(inject)。这就是问这个问题的主要原因。

再次感谢!

最佳答案

Can a CDI bean be used as a Jersey resource?



是的,但由于 Jersey 的 DI 是基于 hk2而不是 CDI,你需要一座桥梁。

在 glassfish 中,这样的桥是由模块 jersey-gf-cdi 实现的。 :
<dependency>
<groupId>org.glassfish.jersey.containers.glassfish</groupId>
<artifactId>jersey-gf-cdi</artifactId>
<version>2.6</version>
</dependency>

该模块自动注册并在 Tomcat 上完美运行(假设您已正确引导 Jersey 和 Weld)。

不幸的是,2.6 之前的版本仅依赖于 JNDI,在 Tomcat 不允许的“java:comp/BeanManager”下搜索提供程序。

此行为的修复可用于 2.6(我前段时间提出的拉取请求),并回退到 CDI.current().getBeanManager() .

我在 Tomcat 7 上对其进行了测试并且工作正常,应该也可以在 Tomcat 8 上工作。

关于注入(inject) Jersey RS 服务(资源)的 CDI 拦截器不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21295589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com