Jsf 如何在PhaseListener中调用EJB

Jsf 如何在PhaseListener中调用EJB,jsf,ejb,Jsf,Ejb,我使用JSF2和EJB3.1,它们都部署在GlassFish3.1上 当我设置一个名为MyInterceptor的类(该类是由PhaseListener实现的)时,我不能撤销其中的远程EJB接口 它注意到“NullPointerException…” 当我调用authorizationService.dosomestuff()时,它会引发错误NullPointerException 我怎样才能把它修好 提前感谢在JSF2.1和更早版本中,不幸的是,PhaseListener没有注入目标(这意味着

我使用JSF2和EJB3.1,它们都部署在GlassFish3.1上

当我设置一个名为MyInterceptor的类(该类是由PhaseListener实现的)时,我不能撤销其中的远程EJB接口

它注意到“NullPointerException…”

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

我怎样才能把它修好


提前感谢

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

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


与您的问题无关,但我不确定通过在注释中指定
beainterface
,您想要实现什么。很可能您也不需要
name
属性,如果您的bean是本地bean,那么在JSF 2.1和更早版本中,您也不需要
mappedName

,不幸的是,phaseListener没有注入目标(这意味着您不能在其中使用注入)。不过,您可以通过JNDI以编程方式进行查找

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


与您的问题无关,但我不确定通过在注释中指定
beainterface
,您想要实现什么。很可能您也不需要
name
属性,如果您的bean是本地bean,您也不需要
mappedName

使用JSF阶段侦听器来进行授权。您可以在
@WebFilter
中插入
@EJB
,使用一个而不是JSF阶段侦听器来进行授权。您可以在
@WebFilter
中插入
@EJB
。是的,在web过滤器中,您可以使用普通的@EJB。如果有两个bean实现相同的AuthorizationService接口,则需要添加beanName的最大值。

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

对于常规查找,您可以执行以下操作:

AuthorizationService.class.cast(new InitialContext().lookup("corbaname:iiop:localhost:3700#ejb/AuthorizationEJB")).dosomestuff();

在try catch javax.naming.NamingException中

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

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

对于常规查找,您可以执行以下操作:

AuthorizationService.class.cast(new InitialContext().lookup("corbaname:iiop:localhost:3700#ejb/AuthorizationEJB")).dosomestuff();

在try catch javax.naming.NamingException中,我使用我的解决方案调用了一个可以调用EJB的托管Bean。再次感谢您的帮助。我是通过调用一个可以调用EJB的托管Bean来使用我的解决方案做到这一点的。再次感谢你的帮助。