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