首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PhaseListener中调用EJB

如何在PhaseListener中调用EJB
EN

Stack Overflow用户
提问于 2012-04-08 16:01:40
回答 3查看 1.1K关注 0票数 0

我使用的是JSF2和EJB3.1,它们都部署在Glassfish 3.1上。

当我设置一个用PhaseListener实现的名为MyInterceptor的类时,我不能撤销它内部的远程EJB接口。

它会注意到"NullPointerException ...“

代码语言:javascript
复制
public class MyInterceptor implements PhaseListener {

@EJB(name="AuthorizationEJB", 
            beanInterface=AuthorizationService.class,
            mappedName="corbaname:iiop:localhost:3700#ejb/AuthorizationEJB")
public AuthorizationService authorizationService;

....

} 

当我调用authorizationService.dosomestuff()时,它会引发错误NullPointerException

我怎么做才能修复它呢?

提前感谢

EN

回答 3

Stack Overflow用户

发布于 2012-04-09 05:37:41

不幸的是,在JSF2.1及更早版本中,PhaseListeners不是注入目标(这意味着您不能在其中使用注入)。不过,您可以通过JNDI以编程方式进行查找。

在JSF2.2中,所有JSF工件(包括PhaseListeners)都将是注入目标,但现在这可能对您没有帮助。

与您的问题无关,但是我不确定您试图通过在注释中指定beanInterface来实现什么。最有可能的情况是,您也不需要name属性,如果您的bean是本地bean,那么您也不需要mappedName__。

票数 3
EN

Stack Overflow用户

发布于 2012-04-10 20:36:31

使用servlet filter而不是JSF阶段侦听器进行授权。您可以在@WebFilter中注入@EJB

票数 2
EN

Stack Overflow用户

发布于 2012-04-14 20:10:18

是的,在web filter中,你可以只使用简单的@EJB。如果有两个bean实现相同的AuthorizationService接口,则需要添加beanName的最大值。

Servlet过滤器是针对每个请求的,我不认为您需要在JSF生命周期的某个阶段(这是一个比整个http请求更细粒度的级别)进行安全性工作。

对于普通查找,您可以执行以下操作:

代码语言:javascript
复制
AuthorizationService.class.cast(new InitialContext().lookup("corbaname:iiop:localhost:3700#ejb/AuthorizationEJB")).dosomestuff();

在try catch javax.naming.NamingException

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10061342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档