【问题标题】:How to access a local interfaces from one project into another within the same ear project如何在同一个耳朵项目中从一个项目访问本地接口到另一个项目
【发布时间】:2012-11-25 09:59:33
【问题描述】:

我有一个包含 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,

我的问题是可以简化吗?好像太长了。

谢谢,
切苏亚

【问题讨论】:

    标签: jsf-2 ejb cdi


    【解决方案1】:

    查看服务器日志。有点像样的 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 开始,您应该能够在 @FacesValidator(和 @FacesConverter)中注入 @EJB

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      相关资源
      最近更新 更多