【问题标题】:EJB injection fails when interceptor is present存在拦截器时 EJB 注入失败
【发布时间】:2011-05-21 21:09:04
【问题描述】:

在 JSF 应用程序中使用 DI 和拦截器时遇到问题。

我有一个支持 bean,它观察 JSF 事件并执行一些初始数据查找。在 JSF 页面中,bean 被注册为事件监听器,如下所示:

<f:event type="preRenderView" listener="#{myBean.loadData}"/>

bean 非常前卫,看起来基本上是这样的:

@Named
@RequestScoped
public class MyBean {

    @EJB
    private SomeDao dao;

    public void loadData() { ... }

    public void performSomeStuff() { ... }

}

dao 被正确注入,直到这里一切都很好。现在我想执行一些在拦截器中完成的延迟加载(特定代码无关紧要,因为当拦截器仅在调用上下文上继续时会出现相同的行为)。因此,在调用 performSomeStuff() 之前,我想确保所有数据都已加载:

    @Interceptors(MyInterceptor.class)
    public void performSomeStuff() { ... }

此时 EJB 不再被注入(NPE 出现...) - 对此有何想法?

设置:

  • GlassFish 3.0.1
  • WELD-000900 1.0.1 (SP3)
  • Mojarra 2.0.2 (FCS b10)

提前致谢!

问候, 亚历克斯

【问题讨论】:

  • 您是否尝试过注入另一个组件(非 ejb)?有用吗?
  • 尝试了其他一些组件和另外一个 ejb,到目前为止的结果:所有带注释的 @Inject 都被注入了,所有带注释的 @EJB 都没有...
  • 这似乎是 Glassfish 实现的问题。我最初向 JBoss Jira 提交了一个错误:issues.jboss.org/browse/WELD-783,但由于它似乎在 JBossAS 6 中工作,我也将它提交给 Glassfish Jira:java.net/jira/browse/GLASSFISH-15528

标签: java jsf proxy interceptor cdi


【解决方案1】:

如果您想取得进步,您可以尝试使用基于 299 的拦截器并与拦截器绑定绑定,而不是使用 EJB 样式。如果该区域有错误,让你的拦截器稍后运行可能会提供一些缓解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 2012-08-13
    • 2012-02-09
    相关资源
    最近更新 更多