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