如何在同一个ear项目中从一个项目访问本地接口到另一个项目

时间:2012-11-25 09:59:34

标签: jsf-2 ejb cdi

我有一个具有FacesValidator的Web项目,此验证程序需要访问EJB服务以验证是否存在记录。不幸的是,我无法注入我的企业bean,因为验证器不是托管bean,所以我试图通过InitialContext访问它。我尝试了http://docs.oracle.com/javaee/6/tutorial/doc/gipjf.html的不同组合,但失败了。

这种格式有用:

java:global/myProject-ear-1.0.0/myProject/MyService!com.czetsuya.myProject.service.membership.MyService,

我的问题是它可以简化吗?似乎太长了。

谢谢,
czetsuya

1 个答案:

答案 0 :(得分:4)

查看服务器日志。有点像样的EJB容器(至少,Glassfish 3和JBoss 6/7),在EJB部署步骤中记录EJB的所有可用JNDI名称。如果验证器已正确放入WAR并且EJB具有@Local接口,那么最短的JNDI名称将是java:app名称,在您的情况下应为java:app/myProject/MyService

完全不同的替代方法是将验证器改为JSF或CDI托管bean,这样您就可以使用@EJB注释。

@ManagedBean // Or @Named.
@ApplicationScoped // Provided that the instance doesn't have any state.
public class MyValidator implements Validator {

    @EJB
    private MyService myService;

    // ...
}

并通过binding而不是validatorId引用它:

<f:validator binding="#{myValidator}" />

请注意,从JSF 2.2开始,您应该能够在@EJB(和@FacesValidator)中注入@FacesConverter

另见: