java—如何以编程方式添加ejb拦截器?

hc2pp10m  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(351)

我试图在运行时通过cdi扩展以编程方式在ejb中添加拦截器。
这个ejb为远程调用公开了一个远程接口。但是我试图在这个ejb的实现类中添加这个拦截器 @Interceptors 类似于另一个so问题的注解(cdi扩展-在processannotatedtype阶段添加拦截器)
我认为cdi扩展只在ejb注册之后执行,因为从来没有调用过拦截器。
但是,出于测试目的,我已经成功地在一个简单的cdibean中以编程方式注册和执行了一个拦截器。
问题是当我尝试在ejb中注册时。
我错过什么了吗?
编辑:我用的是wildfly 8

piah890a

piah890a1#

我认为这里的关键问题是 @Interceptors (ejb)和 @Interceptor (cdi的)。cdi不管理ejb容器,因此添加ejb注解( @Interceptors )在cdi中,扩展不一定会使ejb逻辑生效——ejb容器可能在那时启动了,并且它不知道注解。此外,cdi扩展还将此注解添加到 AnnotatedType 这是ejb可能不会使用的结构。另一方面,所有这一切实际上都取决于应用服务器,因为它负责cdi/ejb集成,因此作为一种“奖励”,as之间的行为可能有所不同。
cdi扩展允许您连接到cdi引导生命周期,因此您可以使用/启用/添加cdi拦截器。我会试着往那边走。顺便说一句,你提到的那个问题也提到了 beans.xml / @Priority 这意味着它使用cdi拦截器而不是ejb拦截器。
此外,ejbbean应该自动成为cdibean,因此您可以将cdi拦截器附加到它,而不必更改bean本身。

相关问题